]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: function to get local nl_pid used by netlink event socket
authorLaine Stump <laine@laine.org>
Fri, 4 May 2012 17:19:51 +0000 (13:19 -0400)
committerCole Robinson <crobinso@redhat.com>
Thu, 14 Jun 2012 15:31:33 +0000 (11:31 -0400)
This value will be needed to set the src_pid when sending netlink
messages to lldpad. It is part of the solution to:

  https://bugzilla.redhat.com/show_bug.cgi?id=816465

Note that libnl's port generation algorithm guarantees that the
nl_socket_get_local_port() will always be > 0 (since it is "getpid() +
(n << 22>" where n is always < 1024), so it is okay to cast the
uint32_t to int (thus allowing us to use -1 as an error sentinel).
(cherry picked from commit c99e93758d44e7c6d62dbd3d064b6df61d1fefb2)

src/libvirt_private.syms
src/util/virnetlink.c
src/util/virnetlink.h

index 6fcdd874a9f2488f99c3275528dd10cfc26462c9..90a7fac534d8bf23124b75cede593ba9ccf69380 100644 (file)
@@ -1325,6 +1325,7 @@ virNetlinkCommand;
 virNetlinkEventAddClient;
 virNetlinkEventRemoveClient;
 virNetlinkEventServiceIsRunning;
+virNetlinkEventServiceLocalPid;
 virNetlinkEventServiceStop;
 virNetlinkEventServiceStart;
 virNetlinkShutdown;
index 9bf5a76b027c625501d709c39040dd488f47a529..badf111e62dc9c0c28f8c39a05d431c552260c0b 100644 (file)
@@ -368,6 +368,24 @@ virNetlinkEventServiceIsRunning(void)
     return server != NULL;
 }
 
+/**
+ * virNetlinkEventServiceLocalPid:
+ *
+ * Returns the nl_pid value that was used to bind() the netlink socket
+ * used by the netlink event service, or -1 on error (netlink
+ * guarantees that this value will always be > 0).
+ */
+int virNetlinkEventServiceLocalPid(void)
+{
+    if (!(server && server->netlinknh)) {
+        netlinkError(VIR_ERR_INTERNAL_ERROR, "%s",
+                     _("netlink event service not running"));
+        return -1;
+    }
+    return (int)nl_socket_get_local_port(server->netlinknh);
+}
+
+
 /**
  * virNetlinkEventServiceStart:
  *
index c57be821ffdfdd3908cd1a4eacbe9f20a900afb7..bafe8caf83e11391181ab485c36788ab9b212c10 100644 (file)
@@ -61,6 +61,11 @@ int virNetlinkEventServiceStart(void);
  */
 bool virNetlinkEventServiceIsRunning(void);
 
+/**
+ * virNetlinkEventServiceLocalPid: returns nl_pid used to bind() netlink socket
+ */
+int virNetlinkEventServiceLocalPid(void);
+
 /**
  * virNetlinkEventAddClient: register a callback for handling of netlink messages
  */