Thanks, Ben.  That you've even considered this approach makes me feel
better about implementing it in my baseline for now.

I'll ponder a longer-term solution, too...  From an Openflow perspective,
the pinch point seems to be that the netdev name is treated as equivalent
to the Openflow port name.  Since I only really care that the Openflow port
names be repeatable across ofprotos, I considered having the datapath
assign the Openflow name when it assigns the port number.  That would let
the netdev use a longer/uglier name, independent of the Openflow namespace.
 That change has bigger ripples, though, and I really didn't want to
disturb the ofproto provider API.

Casey




On Thu Mar 08 11:20:40 GMT-800 2012, Ben Pfaff <b...@nicira.com> wrote:

> On Thu, Mar 08, 2012 at 11:12:58AM -0800, Casey Barker wrote:
> > 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<https://www.google.com/url?sa=D&q=http://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.)
>
> Around here, we've been talking about support for Linux kernel network
> namespaces, where a single ovs-vswitchd would be able to manage
> devices in multiple namespaces. This has the same issue, in that each
> network namespace has, um, a separate namespace, so that you can have
> "eth0" in multiple network namespaces. So I think that a clean
> solution to the problem would help in both cases.
>
> I've thought of a few different solutions (but I haven't implemented
> anything yet). One idea is the same as your solution. Another is to
> do the qualification in the "name" part, not the type. For example,
> eth0 in the xyzzy namespace would be something like "xyzzy:eth0". I
> haven't worked the details in either case.
>
> If you work out something clean, then posting it here as a proposal
> might be helpful for mainline after all.
>
> The netdev code always seems to have a bigger ripple effect than I
> expect. I think that the API must still be badly designed, even after
> the number of rewrites we've done after the years. I hope we can
> figure out the Right Way(tm) someday.
>
> Thanks,
>
> Ben.
>
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to