Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Route replacement/update via smcroutectl #115

Closed
kylex2 opened this issue Mar 1, 2019 · 10 comments
Closed

Route replacement/update via smcroutectl #115

kylex2 opened this issue Mar 1, 2019 · 10 comments
Milestone

Comments

@kylex2
Copy link
Contributor

kylex2 commented Mar 1, 2019

The code currently supports changing the inbound interface for a route via 'smcroutectl add'. If you want to change the outbound interfaces it says the route already exists. For example if one would like to add an interface as outbound the route has to be removed first. Is there any reason for this? Can there be any side effects if smcroute allowed this? Compare this behavior to if you update the config file and send a SIGHUP then the new route would be in place.

Thanks

@troglobit
Copy link
Owner

The only reason is that of the limits of the current implementation. When you reload a .conf file with SIGHUP all old routes are first removed. There's a separate issue reported for that.

(For (*,G) routes you can use flush first, just FYI)

I think it would be great if you could append an interface to the list of current outbound interfaces for the route without disturbing established flows/routes.

@kylex2
Copy link
Contributor Author

kylex2 commented Mar 6, 2019

When you say without disturbing established flows you mean other flows than the one to be updated?

For static routes I imagined a behavior where smcroute would do the same as what it does today when changing input interface.

For dynamic routes I imagined that smcroute flushed the old matching routes and, deleted current from list, then add the new updated route.

@troglobit
Copy link
Owner

troglobit commented Mar 7, 2019

I actually mean all established flows, including the one being updated. There's a bit of work involved to do that, but that's my overall goal.

A static route to me is a (S,G) route, whereas (*,G) is a dynamic one since it only acts as a template and is only set in the kernel once you receive an upcall from the kernel about a new sender. This would apply to either being set via .conf file or using smcroutectl. Sorry for being unclear about this!

EDIT: However, any fix to the current behavior where we cannot change the outbound interfaces without first removing a route will be accepted.

@troglobit troglobit added this to the v2.5 milestone Mar 17, 2019
@troglobit
Copy link
Owner

@kylex2 Did you continue looking into this?

@kylex2
Copy link
Contributor Author

kylex2 commented Mar 18, 2019

Unfortunately I haven't gotten time to do this properly but I am still interested in this.

@troglobit
Copy link
Owner

@kylex2 Alright, that's awesome! I've laid out a rough plan for the v2.5 release in the milestone planner, and this one is included. Let me know if you need any help; limiting scope, testing, or just someone to bouncing ideas off 😃👍

@mrevjd
Copy link

mrevjd commented May 28, 2019

This is great app.
I'm also interested in this fix/enhancement.
I've found that the dynamically added routes can be a pain to remove and don't often flush completely.

Thanks

@schwartazi
Copy link

I would also like to be able to refresh the available interfaces list without flushing the old configuration, lets say I add new GRE tunnel and would like to configure it, ill need to reset the service for that.
Is there any forecast for the 2.5 version?

Thanks

@troglobit
Copy link
Owner

@schwartazi Since I'm the single maintainer, like most other Open Source projects, I cannot give any dates or forecasts. All work on SMCRoute has mostly been done on my spare time. I'd very much like to get back to completing this issue, but it's a lot of work to do still.

@troglobit
Copy link
Owner

Updating existing routes with smcroutectl add/rem is now possible as of 2490331. Note, only add/rem outbound interfaces is supported, anything else still needs be done either by updating the .conf file or removing an existing route.

@schwartazi To meet your usecase, you have to update your .conf file, by adding a new phyint for your GRE interface, and add it to a route, followed by SIGHUP or reload. Existing flows to other outbound interfaces for that same route should now no longer be interrupted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants