datapath: Use unicast Netlink sockets for upcalls.
authorJesse Gross <jesse@nicira.com>
Wed, 14 Sep 2011 20:05:09 +0000 (13:05 -0700)
committerJesse Gross <jesse@nicira.com>
Fri, 23 Sep 2011 22:27:48 +0000 (15:27 -0700)
commitb063d9f06e6bb005193a219bcb9f0a74dfdf7882
tree01e3bc1f20ecc68adb717ebd18f83b89269424b6
parent50802adb0e00bbf381c31b9e32a7a6a3e920e7ac
datapath: Use unicast Netlink sockets for upcalls.

Currently we publish several multicast groups for upcalls and let
userspace sockets subscribe to them.  The benefit of this is mostly
that userspace is the one doing the subscription - the actual
multicast capability is not currently used and probably wouldn't be
even if we moved to a multiprocess model.  Despite the convenience,
multicast sockets have a number of disadvantages, primarily that
we only have a limited number of them so there could be collisions.
In addition, unicast sockets give additional flexibility to userspace
by allowing every object to potentially have a different socket
chosen by userspace for upcalls.  Finally, any future optimizations
for upcalls to reduce copying will likely not be compatible with
multicast anyways so disallowing it potentially simplifies things.

We also never unregistered the multicast groups registered for upcalls
and leaked them on module unload.  As a side effect, this solves that
problem.

Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
datapath/datapath.c
datapath/datapath.h
datapath/flow.h
datapath/vport.c
datapath/vport.h
include/openvswitch/datapath-protocol.h
lib/dpif-linux.c
lib/dpif-linux.h