diff -ur a/configure.ac b/configure.ac
--- a/configure.ac	2012-05-09 01:58:29.818367078 -0500
+++ b/configure.ac	2012-05-09 01:58:50.261366310 -0500
@@ -2601,18 +2601,31 @@
 
 dnl netlink library
 
+LIBNL_ROUTE3_CFLAGS=""
+LIBNL_ROUTE3_LIBS=""
 LIBNL_CFLAGS=""
 LIBNL_LIBS=""
 have_libnl=no
 
 if test "$with_linux" = "yes"; then
-    PKG_CHECK_MODULES([LIBNL], [libnl-1 >= $LIBNL_REQUIRED], [
+    PKG_CHECK_MODULES([LIBNL], [libnl-3.0], [
         have_libnl=yes
-        AC_DEFINE_UNQUOTED([HAVE_LIBNL], 1, [whether the netlink library is available])
-    ], [
-        if test "$with_macvtap" = "yes"; then
-            AC_MSG_ERROR([libnl-devel >= $LIBNL_REQUIRED is required for macvtap support])
-        fi
+        AC_DEFINE([HAVE_LIBNL3], [1], [Use libnl-3.0])
+        AC_DEFINE([HAVE_LIBNL], [1], [whether the netlink library is available])
+        PKG_CHECK_MODULES([LIBNL_ROUTE3], [libnl-route-3.0])
+        LIBNL_CFLAGS="$LIBNL_CFLAGS $LIBNL_ROUTE3_CFLAGS"
+        LIBNL_LIBS="$LIBNL_LIBS $LIBNL_ROUTE3_LIBS"
+    ], [PKG_CHECK_MODULES([LIBNL], [libnl-1 >= $LIBNL_REQUIRED], [
+            have_libnl=yes
+            AC_DEFINE_UNQUOTED([HAVE_LIBNL], [1],
+             [whether the netlink library is available])
+            AC_DEFINE_UNQUOTED([HAVE_LIBNL1], [1],
+             [whether the netlink v1 library is available])
+        ], [
+            if test "$with_macvtap" = "yes"; then
+                AC_MSG_ERROR([libnl-devel >= $LIBNL_REQUIRED is required for macvtap support])
+            fi
+        ])
     ])
 fi
 AM_CONDITIONAL([HAVE_LIBNL], [test "$have_libnl" = "yes"])
Only in b: configure.ac.orig
diff -ur a/daemon/Makefile.am b/daemon/Makefile.am
--- a/daemon/Makefile.am	2012-05-09 01:58:29.846367078 -0500
+++ b/daemon/Makefile.am	2012-05-09 02:11:09.930338530 -0500
@@ -96,6 +96,7 @@
 	$(XDR_CFLAGS) $(POLKIT_CFLAGS) \
 	$(WARN_CFLAGS) \
 	$(COVERAGE_CFLAGS) \
+	$(LIBNL_CFLAGS) \
 	-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
 	-DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\""
 
diff -ur a/src/Makefile.am b/src/Makefile.am
--- a/src/Makefile.am	2012-05-09 01:58:29.836367078 -0500
+++ b/src/Makefile.am	2012-05-09 02:00:30.320362552 -0500
@@ -807,12 +807,14 @@
 libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS) \
                                 $(GNUTLS_CFLAGS) \
                                 $(LIBXML_CFLAGS) \
+                                $(LIBNL_CFLAGS) \
 		-I$(top_srcdir)/src/conf $(AM_CFLAGS)
 libvirt_driver_qemu_la_LDFLAGS = $(AM_LDFLAGS)
 libvirt_driver_qemu_la_LIBADD = $(NUMACTL_LIBS) \
 				$(CAPNG_LIBS) \
                                 $(GNUTLS_LIBS) \
-                                $(LIBXML_LIBS)
+                                $(LIBXML_LIBS) \
+				$(LIBNL_LIBS)
 if WITH_DRIVER_MODULES
 libvirt_driver_qemu_la_LIBADD += ../gnulib/lib/libgnu.la
 libvirt_driver_qemu_la_LDFLAGS += -module -avoid-version
@@ -838,8 +840,9 @@
 #libvirt_la_BUILT_LIBADD += libvirt_driver_lxc.la
 endif
 libvirt_driver_lxc_la_CFLAGS = \
+		$(LIBNL_CFLAGS) \
 		-I$(top_srcdir)/src/conf $(AM_CFLAGS)
-libvirt_driver_lxc_la_LIBADD = $(CAPNG_LIBS)
+libvirt_driver_lxc_la_LIBADD = $(CAPNG_LIBS) $(LIBNL_LIBS)
 if WITH_SECDRIVER_SELINUX
 libvirt_driver_lxc_la_LIBADD += $(SELINUX_LIBS)
 endif
@@ -939,9 +942,10 @@
 #libvirt_la_BUILT_LIBADD += libvirt_driver_network.la
 endif
 libvirt_driver_network_la_CFLAGS = \
+		$(LIBNL_CFLAGS) \
 		-I$(top_srcdir)/src/conf $(AM_CFLAGS)
 if WITH_DRIVER_MODULES
-libvirt_driver_network_la_LIBADD = ../gnulib/lib/libgnu.la
+libvirt_driver_network_la_LIBADD = ../gnulib/lib/libgnu.la $(LIBNL_LIBS)
 libvirt_driver_network_la_LDFLAGS = -module -avoid-version $(AM_LDFLAGS)
 endif
 libvirt_driver_network_la_SOURCES = $(NETWORK_DRIVER_SOURCES)
@@ -1084,9 +1088,9 @@
 noinst_LTLIBRARIES += libvirt_driver_nwfilter.la
 endif
 libvirt_driver_nwfilter_la_CFLAGS = $(LIBPCAP_CFLAGS) \
-		-I$(top_srcdir)/src/conf $(AM_CFLAGS)
+		-I$(top_srcdir)/src/conf $(LIBNL_CFLAGS) $(AM_CFLAGS)
 libvirt_driver_nwfilter_la_LDFLAGS = $(LD_AMFLAGS)
-libvirt_driver_nwfilter_la_LIBADD = $(LIBPCAP_LIBS)
+libvirt_driver_nwfilter_la_LIBADD = $(LIBPCAP_LIBS) $(LIBNL_LIBS)
 if WITH_DRIVER_MODULES
 libvirt_driver_nwfilter_la_LIBADD += ../gnulib/lib/libgnu.la
 libvirt_driver_nwfilter_la_LDFLAGS += -module -avoid-version
@@ -1541,6 +1545,7 @@
 		$(CAPNG_CFLAGS)			\
 		$(YAJL_CFLAGS)			\
 		$(AUDIT_CFLAGS)			\
+		$(LIBNL_CFLAGS)			\
 		-I$(top_srcdir)/src/conf	\
 		$(AM_CFLAGS)
 if HAVE_LIBBLKID
Only in b/src: Makefile.am.orig
Only in b/src: Makefile.am.rej
diff -ur a/src/util/virnetlink.c b/src/util/virnetlink.c
--- a/src/util/virnetlink.c	2012-05-09 01:58:29.825367080 -0500
+++ b/src/util/virnetlink.c	2012-05-09 01:58:50.267366311 -0500
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2011 Red Hat, Inc.
+ * Copyright (C) 2010-2012 Red Hat, Inc.
  * Copyright (C) 2010-2012 IBM Corporation
  *
  * This library is free software; you can redistribute it and/or
@@ -60,6 +60,16 @@
     int deleted;
 };
 
+# ifdef HAVE_LIBNL1
+#  define virNetlinkAlloc nl_handle_alloc
+#  define virNetlinkFree nl_handle_destroy
+typedef struct nl_handle virNetlinkHandle;
+# else
+#  define virNetlinkAlloc nl_socket_alloc
+#  define virNetlinkFree nl_socket_free
+typedef struct nl_sock virNetlinkHandle;
+# endif
+
 typedef struct _virNetlinkEventSrvPrivate virNetlinkEventSrvPrivate;
 typedef virNetlinkEventSrvPrivate *virNetlinkEventSrvPrivatePtr;
 struct _virNetlinkEventSrvPrivate {
@@ -67,7 +77,7 @@
     virMutex lock;
     int eventwatch;
     int netlinkfd;
-    struct nl_handle *netlinknh;
+    virNetlinkHandle *netlinknh;
     /*Events*/
     int handled;
     size_t handlesCount;
@@ -121,7 +131,7 @@
     int fd;
     int n;
     struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
-    struct nl_handle *nlhandle = nl_handle_alloc();
+    virNetlinkHandle *nlhandle = virNetlinkAlloc();
 
     if (!nlhandle) {
         virReportSystemError(errno,
@@ -178,7 +188,7 @@
         *respbuflen = 0;
     }
 
-    nl_handle_destroy(nlhandle);
+    virNetlinkFree(nlhandle);
     return rc;
 }
 
@@ -285,7 +295,7 @@
 
     virNetlinkEventServerLock(srv);
     nl_close(srv->netlinknh);
-    nl_handle_destroy(srv->netlinknh);
+    virNetlinkFree(srv->netlinknh);
     virEventRemoveHandle(srv->eventwatch);
 
     /* free any remaining clients on the list */
@@ -346,7 +356,7 @@
     virNetlinkEventServerLock(srv);
 
     /* Allocate a new socket and get fd */
-    srv->netlinknh = nl_handle_alloc();
+    srv->netlinknh = virNetlinkAlloc();
 
     if (!srv->netlinknh) {
         virReportSystemError(errno,
@@ -392,7 +402,7 @@
 error_server:
     if (ret < 0) {
         nl_close(srv->netlinknh);
-        nl_handle_destroy(srv->netlinknh);
+        virNetlinkFree(srv->netlinknh);
     }
 error_locked:
     virNetlinkEventServerUnlock(srv);
