netlink: Use nl_pid 0 to play nice with others. 42/10942/2
authorJon Loeliger <jdl@netgate.com>
Fri, 2 Mar 2018 19:05:12 +0000 (13:05 -0600)
committerDamjan Marion <dmarion.lists@gmail.com>
Sat, 3 Mar 2018 10:16:39 +0000 (10:16 +0000)
While the netlink field is named nl_pid, and typically
contains a process id, setting it to a pid value directly
prevents other modules from also using a netlink socket.
On the other hand, setting it to 0 allows multiple modules
to use a netlink socket by letting the kernel assign the
nl_pid a value.

This allows the verito tap code to interact nicely with
the router plugin's librtnl after, say, tap-inject has
been enabled.

Change-Id: I9771929f34d15497a5f7b8c5fd78dac28e31383b
Signed-off-by: Jon Loeliger <jdl@netgate.com>
src/vnet/devices/netlink.c

index 8346b1c..1d44f28 100644 (file)
@@ -76,7 +76,7 @@ vnet_netlink_msg_send (vnet_netlink_msg_t * m)
     return clib_error_return_unix (0, "socket(AF_NETLINK)");
 
   ra.nl_family = AF_NETLINK;
-  ra.nl_pid = getpid ();
+  ra.nl_pid = 0;
 
   if ((bind (sock, (struct sockaddr *) &ra, sizeof (ra))) == -1)
     {