[libvirt] [PATCH 1/1] Support libnl-3 as well as libnl-1

Stefan Berger stefanb at linux.vnet.ibm.com
Tue May 1 19:35:38 UTC 2012


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




More information about the libvir-list mailing list