I'm experimenting with running multiple ofproto instances from within a
single process, where Open vSwitch is linked as a library, and the
datapaths operate outside the kernel.  These ofproto instances are
completely independent of each other, each representing a separate logical
switching entity.  (The reasons for putting them in the same process are...
complex.)

Since they're independent, there's now a desire to use some common port
names on every switching entity -- including those ofprotos that happen to
be managed by the same process.  That's fine for the ofprotos, but netdev.c
tracks all created devices in a static 'netdev_dev_shash,' keyed only by
netdev_dev.name.  That means all netdevs across all ofprotos in a process
share a global namespace (as is customary for sane use of netdevs).

My proposed departure from sanity is to assign the ports an
ofproto-specific netdev provider 'type' to differentiate the devs from each
other, similar to how type/name works for datapaths.   Does anyone see any
issues with keying the netdev_dev_shash by the concatenation of netdev_dev
type + name?  It causes some minor ripples in the netdev API, but nothing
insurmountable.

I imagine this isn't a desirable change for the mainline code, so I intend
to keep this hack to myself.  I'm more looking for any issues that I'm not
seeing, or that could crop up in future iterations.  (However, I did notice
that netdev_open() doesn't compare the 'type' before re-opening an existing
dev.  Might be worth adding a sanity check as is done for args.)

Casey Barker
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to