On 04/30/2012 06:59 PM, Serge Hallyn wrote:
configure.ac:
Check for libnl-3. If found, find libnl-route-3. If not found,
do the original check to look for libnl-1.
[...]
--- a/src/util/virnetlink.c
+++ b/src/util/virnetlink.c
@@ -67,7 +67,11 @@ struct _virNetlinkEventSrvPrivate {
virMutex lock;
int eventwatch;
int netlinkfd;
+#ifdef HAVE_LIBNL1
struct nl_handle *netlinknh;
+#else
+ struct nl_sock *netlinksock;
+#endif
Since the two members are treated similarly, could you give these
structure members the same name and with that we could get rid of a
couple of the #ifdef's below. I suppose the major change between v1 and
v3 that we are touching upon here is that of nl_handle to nl_sock.
/*Events*/
int handled;
size_t handlesCount;
@@ -121,15 +125,31 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
int fd;
int n;
struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
+#ifdef HAVE_LIBNL1
struct nl_handle *nlhandle = nl_handle_alloc();
+#else
+ struct nl_sock *nlsock = nl_socket_alloc();
+#endif
Also same name here.
+#ifdef HAVE_LIBNL1
if (!nlhandle) {
+#else
+ if (!nlsock) {
+#endif
This could then be just one test.
virReportSystemError(errno,
+#ifdef HAVE_LIBNL1
"%s", _("cannot allocate nlhandle for
netlink"));
+#else
+ "%s", _("cannot allocate nlsock for
netlink"));
+#endif
return -1;
}
+#ifdef HAVE_LIBNL1
if (nl_connect(nlhandle, NETLINK_ROUTE)< 0) {
+#else
+ if (nl_connect(nlsock, NETLINK_ROUTE)< 0) {
+#endif
... this one also ...
virReportSystemError(errno,
"%s", _("cannot connect to netlink
socket"));
rc = -1;
@@ -140,7 +160,11 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
nlmsg->nlmsg_pid = getpid();
+#ifdef HAVE_LIBNL1
nbytes = nl_send_auto_complete(nlhandle, nl_msg);
+#else
+ nbytes = nl_send_auto_complete(nlsock, nl_msg);
+#endif
as well as this function call and from what I can see pretty much all of
the rest too except for the destroy/free calls.
Regards,
Stefan