-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
add support for the IVS virtual switch #159
Conversation
IVS is an open source virtual switch available for download at https://github.com/floodlight/ivs. It uses the openvswitch kernel module.
This is interesting - IVS is under my radar, although perhaps it was part of the Switch Light announcement? Could you explain what the advantage of IVS is over OVS? One thing I like about OVS is that there are Ubuntu packages for it - are there ubuntu packages for IVS? All of the other switch classes in Mininet proper also include support to install the switch in install.sh. One other thing which isn't obvious to me: should Mininet include support for all extant OF software switches (including OVS, Stanford 1.0 switch, CPqD switch, LINC, pyswitch, etc.) or should they be separate features which people can download and install? One of the GSoC projects involves creating a repository for user-contributed enhancements, topologies, switch classes, apps, etc. for Mininet, and perhaps full system examples as well. |
One nice feature of IVS is the ability to spread processing of kernel flowtable misses across multiple threads. The IVS repository can build Debian packages but they are not yet included in any distributions. I'll add support to install.sh to clone the IVS repo and install it. I'll let you know when I've pushed this and the dpctl support to this pull request. I'm not sure I see a benefit in moving switch classes out of the mininet repository. You'd need to carefully manage the Switch interface (and any core mininet APIs switch classes use) to ensure that it stays compatible with switch classes in other repositories. Given how little code a switch class is it seems better to keep them with the rest of mininet. I wouldn't mind if each switch class were moved to its own file, though. |
dpctl is not included with IVS. The user will need to obtain it from the OpenFlow reference repository.
I've pushed a couple of commits adding support for dpctl and installing IVS from install.sh. I tested the install script on the mininet VM. One note on dpctl - we don't have our own version, so users will need to take it from the OpenFlow reference repository. |
I recommend using |
Ok, I changed the dpctl call to use ovs-ofctl. |
IVS works fine using --innamespace.
Good to merge? |
What is the easiest way to verify that it passes the tests (or at least |
My tests seem to fail when OVS is running - what can we do to allow IVS and OVS to peacefully coexist? |
I also notice that |
The installation of IVS doesn't seem to install any man pages, notably a man page for for |
This could happen if OVS was installed but not running.
I pushed a couple of commits fixing For I think the only thing we can do to make IVS and OVS coexist is to run them in separate namespaces. Otherwise OVS will delete IVS's kernel datapaths as soon as they're created. After looking at it more I don't think The man pages are currently part of the debian packaging, so won't be included in a manual install. We're going to fix that in the future as we package for more distros. |
|
Each switch gets its own class so that the test results are listed separately.
|
I think we should be able to get switch namespaces to work. If IVS works in a namespace, then OVS can work in the root namespace. It may also be possible to get OVS to work in a namespace. It looks like things are somewhat better now; I was able to run
successfully. (Note that there is currently a race condition since the pingall test doesn't wait for all switches to connect.) |
For
|
IVS needs to be sent SIGTERM so it has a chance to clean up the kernel datapath.
This change uses the `Node.cmd` method instead of `Popen`. The `cmd` method sends the input to a shell which may be in another namespace (if --innamespace is in use), while `Popen` would always run in the root namespace.
I added a commit to support running IVS with --innamespace. Here's the output from ivs-ctl showing that each switch node only sees one datapath:
The root namespace sees no datapaths. |
I'm out of town at the moment and also rather sick unfortunately, but that sounds good - I will take a look at it when I get back next week. |
Reopening to fix commit history. ;-p |
IVS is an open source virtual switch available for download at
https://github.com/floodlight/ivs. It uses the openvswitch
kernel module.
I also modified test_hifi slightly to let me run those tests against IVS.