From 5a148ce846a9d68af28fec1ebbc0e3bb6a38d81c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 19 Jun 2019 15:19:23 +0100 Subject: [PATCH] remote: delete the avahi mDNS support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Libvirtd has long had integration with avahi for advertising libvirtd using mDNS when TCP/TLS listening is enabled. For a long time the virt-manager application had support for auto-detecting libvirtds on the local network using mDNS, but this was removed last year commit fc8f8d5d7e3ba80a0771df19cf20e84a05ed2422 Author: Cole Robinson Date: Sat Oct 6 20:55:31 2018 -0400 connect: Drop avahi support Libvirtd can advertise itself over avahi. The feature is disabled by default though and in practice I hear of no one actually using it and frankly I don't think it's all that useful The 'Open Connection' wizard has a disproportionate amount of code devoted to this feature, but I don't think it's useful or worth maintaining, so let's drop it I've never heard of any other applications having support for using mDNS to detect libvirtd instances. Though it is theoretically possible something exists out there, it is clearly going to be a niche use case in the virt ecosystem as a whole. By removing avahi integration we can cut down the dependency chain for the basic libvirtd install and reduce our code maint burden. Reviewed-by: Ján Tomko Signed-off-by: Daniel P. Berrangé --- cfg.mk | 3 - configure.ac | 3 - docs/internals/rpc.html.in | 7 - docs/remote.html.in | 17 - docs/windows.html.in | 1 - libvirt.spec.in | 3 - m4/virt-avahi.m4 | 30 - mingw-libvirt.spec.in | 1 - po/POTFILES | 1 - src/libvirt_remote.syms | 14 - src/locking/lock_daemon.c | 6 +- src/logging/log_daemon.c | 6 +- src/lxc/lxc_controller.c | 3 +- src/remote/libvirtd.aug | 2 - src/remote/libvirtd.conf | 17 - src/remote/remote_daemon.c | 18 +- src/remote/remote_daemon_config.c | 29 - src/remote/remote_daemon_config.h | 3 - src/remote/test_libvirtd.aug.in | 2 - src/rpc/Makefile.inc.am | 4 - src/rpc/virnetdaemon.c | 14 - src/rpc/virnetserver.c | 64 +- src/rpc/virnetserver.h | 6 +- src/rpc/virnetservermdns.c | 682 ------------------ src/rpc/virnetservermdns.h | 104 --- tests/virconfdata/libvirtd.conf | 17 - tests/virconfdata/libvirtd.out | 14 - ...dmin-nomdns.json => input-data-admin.json} | 0 .../input-data-initial-nomdns.json | 63 -- .../virnetdaemondata/input-data-initial.json | 1 - ...min-nomdns.json => output-data-admin.json} | 0 .../output-data-initial-nomdns.json | 72 -- .../virnetdaemondata/output-data-initial.json | 1 - tests/virnetdaemontest.c | 17 +- 34 files changed, 16 insertions(+), 1209 deletions(-) delete mode 100644 m4/virt-avahi.m4 delete mode 100644 src/rpc/virnetservermdns.c delete mode 100644 src/rpc/virnetservermdns.h rename tests/virnetdaemondata/{input-data-admin-nomdns.json => input-data-admin.json} (100%) delete mode 100644 tests/virnetdaemondata/input-data-initial-nomdns.json rename tests/virnetdaemondata/{output-data-admin-nomdns.json => output-data-admin.json} (100%) delete mode 100644 tests/virnetdaemondata/output-data-initial-nomdns.json diff --git a/cfg.mk b/cfg.mk index f59cfd6e29..694ce2076f 100644 --- a/cfg.mk +++ b/cfg.mk @@ -146,9 +146,6 @@ useless_free_options = \ --name=virJSONValueFree \ --name=virLastErrFreeData \ --name=virNetMessageFree \ - --name=virNetServerMDNSFree \ - --name=virNetServerMDNSEntryFree \ - --name=virNetServerMDNSGroupFree \ --name=virNWFilterDefFree \ --name=virNWFilterEntryFree \ --name=virNWFilterHashTableFree \ diff --git a/configure.ac b/configure.ac index 1f05055d6f..3489a5725e 100644 --- a/configure.ac +++ b/configure.ac @@ -245,7 +245,6 @@ LIBVIRT_LINKER_NO_UNDEFINED LIBVIRT_ARG_APPARMOR LIBVIRT_ARG_ATTR LIBVIRT_ARG_AUDIT -LIBVIRT_ARG_AVAHI LIBVIRT_ARG_BASH_COMPLETION LIBVIRT_ARG_BLKID LIBVIRT_ARG_CAPNG @@ -284,7 +283,6 @@ LIBVIRT_CHECK_APPARMOR LIBVIRT_CHECK_ATOMIC LIBVIRT_CHECK_ATTR LIBVIRT_CHECK_AUDIT -LIBVIRT_CHECK_AVAHI LIBVIRT_CHECK_BASH_COMPLETION LIBVIRT_CHECK_BLKID LIBVIRT_CHECK_CAPNG @@ -970,7 +968,6 @@ LIBVIRT_RESULT_ACL LIBVIRT_RESULT_APPARMOR LIBVIRT_RESULT_ATTR LIBVIRT_RESULT_AUDIT -LIBVIRT_RESULT_AVAHI LIBVIRT_RESULT_BASH_COMPLETION LIBVIRT_RESULT_BLKID LIBVIRT_RESULT_CAPNG diff --git a/docs/internals/rpc.html.in b/docs/internals/rpc.html.in index 048192f818..40d844f31c 100644 --- a/docs/internals/rpc.html.in +++ b/docs/internals/rpc.html.in @@ -539,13 +539,6 @@ C <-- |32| 8 | 1 | 3 | 1 | 1 | 0 | .o.oOo | <-- S (reply) be part of the underlying server. -
virNetServerMDNSPtr (virnetservermdns.h)
-
The virNetServerMDNS APIs are used to advertise a server - across the local network, enabling clients to automatically - detect the existence of remote services. This is done by - interfacing with the Avahi mDNS advertisement service. -
-
virNetServerClientPtr (virnetserverclient.h)
The virNetServerClient APIs are used to manage I/O related to a single client network connection. It handles initial diff --git a/docs/remote.html.in b/docs/remote.html.in index de09975039..fbcc8bf01c 100644 --- a/docs/remote.html.in +++ b/docs/remote.html.in @@ -821,23 +821,6 @@ Blank lines and comments beginning with # are ignored. "16509" The port number or service name to listen on for unencrypted TCP connections. - - - - mdns_adv [0|1] - 0 (advertise with mDNS) - - If set to 1 then the virtualization service will be advertised over - mDNS to hosts on the local LAN segment. - - - - mdns_name "name" - "Virtualization Host HOSTNAME" - - The name to advertise for this host with Avahi mDNS. The default - includes the machine's short hostname. This must be unique to the - local LAN segment. diff --git a/docs/windows.html.in b/docs/windows.html.in index 57abf8fde5..096d118bf7 100644 --- a/docs/windows.html.in +++ b/docs/windows.html.in @@ -182,7 +182,6 @@
 ./configure \
   --without-sasl \
-  --without-avahi \
   --without-polkit \
   --without-python \
   --without-libxl \
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 3b5b4925fd..d54f58f1d4 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -297,7 +297,6 @@ BuildRequires: sanlock-devel >= 2.4
 %endif
 BuildRequires: libpcap-devel
 BuildRequires: libnl3-devel
-BuildRequires: avahi-devel
 BuildRequires: libselinux-devel
 BuildRequires: dnsmasq >= 2.41
 BuildRequires: iptables
@@ -436,7 +435,6 @@ Requires: iproute
 Requires: iproute-tc
 %endif
 
-Requires: avahi-libs
 Requires: polkit >= 0.112
 %ifarch %{ix86} x86_64 ia64
 # For virConnectGetSysinfo
@@ -1163,7 +1161,6 @@ rm -f po/stamp-po
            %{?arg_vbox} \
            %{?arg_libxl} \
            --with-sasl \
-           --with-avahi \
            --with-polkit \
            --with-libvirtd \
            %{?arg_phyp} \
diff --git a/m4/virt-avahi.m4 b/m4/virt-avahi.m4
deleted file mode 100644
index d4b3fc6131..0000000000
--- a/m4/virt-avahi.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl The libavahi.so library
-dnl
-dnl Copyright (C) 2012-2013 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl .
-dnl
-
-AC_DEFUN([LIBVIRT_ARG_AVAHI],[
-  LIBVIRT_ARG_WITH_FEATURE([AVAHI], [avahi-client], [check], [0.6.0])
-])
-
-AC_DEFUN([LIBVIRT_CHECK_AVAHI],[
-  LIBVIRT_CHECK_PKG([AVAHI], [avahi-client], [0.6.0])
-])
-
-AC_DEFUN([LIBVIRT_RESULT_AVAHI],[
-  LIBVIRT_RESULT_LIB([AVAHI])
-])
diff --git a/mingw-libvirt.spec.in b/mingw-libvirt.spec.in
index 9add033669..280db4d1aa 100644
--- a/mingw-libvirt.spec.in
+++ b/mingw-libvirt.spec.in
@@ -167,7 +167,6 @@ autoreconf -if
   --without-vbox \
   %{?_without_xenapi} \
   --without-sasl \
-  --without-avahi \
   --without-polkit \
   --without-libvirtd \
   %{?_without_phyp} \
diff --git a/po/POTFILES b/po/POTFILES
index ccfc873a89..8017712ff4 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -160,7 +160,6 @@ src/rpc/virnetmessage.c
 src/rpc/virnetsaslcontext.c
 src/rpc/virnetserver.c
 src/rpc/virnetserverclient.c
-src/rpc/virnetservermdns.c
 src/rpc/virnetserverprogram.c
 src/rpc/virnetserverservice.c
 src/rpc/virnetsocket.c
diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms
index 3d68f6ce0a..b63eac123f 100644
--- a/src/libvirt_remote.syms
+++ b/src/libvirt_remote.syms
@@ -133,7 +133,6 @@ virNetServerSetClientAuthenticated;
 virNetServerSetClientLimits;
 virNetServerSetThreadPoolParameters;
 virNetServerSetTLSContext;
-virNetServerStart;
 virNetServerUpdateServices;
 
 
@@ -182,19 +181,6 @@ virNetServerClientStartKeepAlive;
 virNetServerClientWantCloseLocked;
 
 
-# rpc/virnetservermdns.h
-virNetServerMDNSAddEntry;
-virNetServerMDNSAddGroup;
-virNetServerMDNSEntryFree;
-virNetServerMDNSFree;
-virNetServerMDNSGroupFree;
-virNetServerMDNSNew;
-virNetServerMDNSRemoveEntry;
-virNetServerMDNSRemoveGroup;
-virNetServerMDNSStart;
-virNetServerMDNSStop;
-
-
 # rpc/virnetserverprogram.h
 virNetServerProgramDispatch;
 virNetServerProgramGetID;
diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
index d714ddd2dd..bc2fb4a7fb 100644
--- a/src/locking/lock_daemon.c
+++ b/src/locking/lock_daemon.c
@@ -167,7 +167,6 @@ virLockDaemonNew(virLockDaemonConfigPtr config, bool privileged)
     if (!(srv = virNetServerNew("virtlockd", 1,
                                 0, 0, 0, config->max_clients,
                                 config->max_clients, -1, 0,
-                                NULL,
                                 virLockDaemonClientNew,
                                 virLockDaemonClientPreExecRestart,
                                 virLockDaemonClientFree,
@@ -182,7 +181,6 @@ virLockDaemonNew(virLockDaemonConfigPtr config, bool privileged)
     if (!(srv = virNetServerNew("admin", 1,
                                 0, 0, 0, config->admin_max_clients,
                                 config->admin_max_clients, -1, 0,
-                                NULL,
                                 remoteAdmClientNew,
                                 remoteAdmClientPreExecRestart,
                                 remoteAdmClientFree,
@@ -623,7 +621,7 @@ virLockDaemonSetupNetworkingSystemD(virNetServerPtr lockSrv, virNetServerPtr adm
                                              false, 0, 1)))
             return -1;
 
-        if (virNetServerAddService(srv, svc, NULL) < 0) {
+        if (virNetServerAddService(srv, svc) < 0) {
             virObjectUnref(svc);
             return -1;
         }
@@ -644,7 +642,7 @@ virLockDaemonSetupNetworkingNative(virNetServerPtr srv, const char *sock_path)
                                            false, 0, 1)))
         return -1;
 
-    if (virNetServerAddService(srv, svc, NULL) < 0) {
+    if (virNetServerAddService(srv, svc) < 0) {
         virObjectUnref(svc);
         return -1;
     }
diff --git a/src/logging/log_daemon.c b/src/logging/log_daemon.c
index 3469d87caa..014596b280 100644
--- a/src/logging/log_daemon.c
+++ b/src/logging/log_daemon.c
@@ -162,7 +162,6 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
     if (!(srv = virNetServerNew("virtlogd", 1,
                                 0, 0, 0, config->max_clients,
                                 config->max_clients, -1, 0,
-                                NULL,
                                 virLogDaemonClientNew,
                                 virLogDaemonClientPreExecRestart,
                                 virLogDaemonClientFree,
@@ -177,7 +176,6 @@ virLogDaemonNew(virLogDaemonConfigPtr config, bool privileged)
     if (!(srv = virNetServerNew("admin", 1,
                                 0, 0, 0, config->admin_max_clients,
                                 config->admin_max_clients, -1, 0,
-                                NULL,
                                 remoteAdmClientNew,
                                 remoteAdmClientPreExecRestart,
                                 remoteAdmClientFree,
@@ -558,7 +556,7 @@ virLogDaemonSetupNetworkingSystemD(virNetServerPtr logSrv, virNetServerPtr admin
                                              false, 0, 1)))
             return -1;
 
-        if (virNetServerAddService(srv, svc, NULL) < 0) {
+        if (virNetServerAddService(srv, svc) < 0) {
             virObjectUnref(svc);
             return -1;
         }
@@ -579,7 +577,7 @@ virLogDaemonSetupNetworkingNative(virNetServerPtr srv, const char *sock_path)
                                            false, 0, 1)))
         return -1;
 
-    if (virNetServerAddService(srv, svc, NULL) < 0) {
+    if (virNetServerAddService(srv, svc) < 0) {
         virObjectUnref(svc);
         return -1;
     }
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index cd842f2980..c677eb8f6d 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -953,7 +953,6 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl)
     if (!(srv = virNetServerNew("LXC", 1,
                                 0, 0, 0, 1,
                                 0, -1, 0,
-                                NULL,
                                 virLXCControllerClientPrivateNew,
                                 NULL,
                                 virLXCControllerClientPrivateFree,
@@ -976,7 +975,7 @@ static int virLXCControllerSetupServer(virLXCControllerPtr ctrl)
     if (virSecurityManagerClearSocketLabel(ctrl->securityManager, ctrl->def) < 0)
         goto error;
 
-    if (virNetServerAddService(srv, svc, NULL) < 0)
+    if (virNetServerAddService(srv, svc) < 0)
         goto error;
     virObjectUnref(svc);
     svc = NULL;
diff --git a/src/remote/libvirtd.aug b/src/remote/libvirtd.aug
index 13333448a4..0188c23dd7 100644
--- a/src/remote/libvirtd.aug
+++ b/src/remote/libvirtd.aug
@@ -29,8 +29,6 @@ module Libvirtd =
                      | str_entry "tls_port"
                      | str_entry "tcp_port"
                      | str_entry "listen_addr"
-                     | bool_entry "mdns_adv"
-                     | str_entry "mdns_name"
 
    let sock_acl_entry = str_entry "unix_sock_group"
                       | str_entry "unix_sock_ro_perms"
diff --git a/src/remote/libvirtd.conf b/src/remote/libvirtd.conf
index 233c127156..bbeb053495 100644
--- a/src/remote/libvirtd.conf
+++ b/src/remote/libvirtd.conf
@@ -50,23 +50,6 @@
 #listen_addr = "192.168.0.1"
 
 
-# Flag toggling mDNS advertizement of the libvirt service.
-#
-# Alternatively can disable for all services on a host by
-# stopping the Avahi daemon
-#
-# This is disabled by default, uncomment this to enable it
-#mdns_adv = 1
-
-# Override the default mDNS advertizement name. This must be
-# unique on the immediate broadcast network.
-#
-# The default is "Virtualization Host HOSTNAME", where HOSTNAME
-# is substituted for the short hostname of the machine (without domain)
-#
-#mdns_name = "Virtualization Host Joe Demo"
-
-
 #################################################################
 #
 # UNIX socket access controls
diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c
index c1544ba914..fdc9e4333a 100644
--- a/src/remote/remote_daemon.c
+++ b/src/remote/remote_daemon.c
@@ -429,14 +429,11 @@ daemonSetupNetworking(virNetServerPtr srv,
             goto cleanup;
     }
 
-    if (virNetServerAddService(srv, svc,
-                               config->mdns_adv && !ipsock ?
-                               "_libvirt._tcp" :
-                               NULL) < 0)
+    if (virNetServerAddService(srv, svc) < 0)
         goto cleanup;
 
     if (svcRO &&
-        virNetServerAddService(srv, svcRO, NULL) < 0)
+        virNetServerAddService(srv, svcRO) < 0)
         goto cleanup;
 
     if (sock_path_adm) {
@@ -451,7 +448,7 @@ daemonSetupNetworking(virNetServerPtr srv,
                                                   config->admin_max_client_requests)))
             goto cleanup;
 
-        if (virNetServerAddService(srvAdm, svcAdm, NULL) < 0)
+        if (virNetServerAddService(srvAdm, svcAdm) < 0)
             goto cleanup;
     }
 
@@ -469,8 +466,7 @@ daemonSetupNetworking(virNetServerPtr srv,
                                                      config->max_client_requests)))
                 goto cleanup;
 
-            if (virNetServerAddService(srv, svcTCP,
-                                       config->mdns_adv ? "_libvirt._tcp" : NULL) < 0)
+            if (virNetServerAddService(srv, svcTCP) < 0)
                 goto cleanup;
         }
 
@@ -530,9 +526,7 @@ daemonSetupNetworking(virNetServerPtr srv,
                 virObjectUnref(ctxt);
                 goto cleanup;
             }
-            if (virNetServerAddService(srv, svcTLS,
-                                       config->mdns_adv &&
-                                       !config->listen_tcp ? "_libvirt._tcp" : NULL) < 0)
+            if (virNetServerAddService(srv, svcTLS) < 0)
                 goto cleanup;
 
             virObjectUnref(ctxt);
@@ -1197,7 +1191,6 @@ int main(int argc, char **argv) {
                                 config->max_anonymous_clients,
                                 config->keepalive_interval,
                                 config->keepalive_count,
-                                config->mdns_adv ? config->mdns_name : NULL,
                                 remoteClientNew,
                                 NULL,
                                 remoteClientFree,
@@ -1265,7 +1258,6 @@ int main(int argc, char **argv) {
                                    0,
                                    config->admin_keepalive_interval,
                                    config->admin_keepalive_count,
-                                   NULL,
                                    remoteAdmClientNew,
                                    NULL,
                                    remoteAdmClientFree,
diff --git a/src/remote/remote_daemon_config.c b/src/remote/remote_daemon_config.c
index a56aa9065a..537b90a855 100644
--- a/src/remote/remote_daemon_config.c
+++ b/src/remote/remote_daemon_config.c
@@ -102,8 +102,6 @@ struct daemonConfig*
 daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
 {
     struct daemonConfig *data;
-    char *localhost;
-    int ret;
 
     if (VIR_ALLOC(data) < 0)
         return NULL;
@@ -141,8 +139,6 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
 #endif
     data->auth_tls = REMOTE_AUTH_NONE;
 
-    data->mdns_adv = 0;
-
     data->min_workers = 5;
     data->max_workers = 20;
     data->max_clients = 5000;
@@ -170,25 +166,6 @@ daemonConfigNew(bool privileged ATTRIBUTE_UNUSED)
 
     data->ovs_timeout = VIR_NETDEV_OVS_DEFAULT_TIMEOUT;
 
-    localhost = virGetHostname();
-    if (localhost == NULL) {
-        /* we couldn't resolve the hostname; assume that we are
-         * running in disconnected operation, and report a less
-         * useful Avahi string
-         */
-        ret = VIR_STRDUP(data->mdns_name, "Virtualization Host");
-    } else {
-        char *tmp;
-        /* Extract the host part of the potentially FQDN */
-        if ((tmp = strchr(localhost, '.')))
-            *tmp = '\0';
-        ret = virAsprintf(&data->mdns_name, "Virtualization Host %s",
-                          localhost);
-    }
-    VIR_FREE(localhost);
-    if (ret < 0)
-        goto error;
-
     return data;
 
  error:
@@ -219,7 +196,6 @@ daemonConfigFree(struct daemonConfig *data)
     VIR_FREE(data->unix_sock_rw_perms);
     VIR_FREE(data->unix_sock_group);
     VIR_FREE(data->unix_sock_dir);
-    VIR_FREE(data->mdns_name);
 
     tmp = data->tls_allowed_dn_list;
     while (tmp && *tmp) {
@@ -300,11 +276,6 @@ daemonConfigLoadOptions(struct daemonConfig *data,
     if (virConfGetValueString(conf, "unix_sock_dir", &data->unix_sock_dir) < 0)
         goto error;
 
-    if (virConfGetValueBool(conf, "mdns_adv", &data->mdns_adv) < 0)
-        goto error;
-    if (virConfGetValueString(conf, "mdns_name", &data->mdns_name) < 0)
-        goto error;
-
     if (virConfGetValueBool(conf, "tls_no_sanity_certificate", &data->tls_no_sanity_certificate) < 0)
         goto error;
     if (virConfGetValueBool(conf, "tls_no_verify_certificate", &data->tls_no_verify_certificate) < 0)
diff --git a/src/remote/remote_daemon_config.h b/src/remote/remote_daemon_config.h
index 533fc7bbd3..d580e7d49c 100644
--- a/src/remote/remote_daemon_config.h
+++ b/src/remote/remote_daemon_config.h
@@ -46,9 +46,6 @@ struct daemonConfig {
 
     char **access_drivers;
 
-    bool mdns_adv;
-    char *mdns_name;
-
     bool tls_no_verify_certificate;
     bool tls_no_sanity_certificate;
     char **tls_allowed_dn_list;
diff --git a/src/remote/test_libvirtd.aug.in b/src/remote/test_libvirtd.aug.in
index 527e3d7d0d..ad6450a569 100644
--- a/src/remote/test_libvirtd.aug.in
+++ b/src/remote/test_libvirtd.aug.in
@@ -7,8 +7,6 @@ module Test_libvirtd =
         { "tls_port" = "16514" }
         { "tcp_port" = "16509" }
         { "listen_addr" = "192.168.0.1" }
-        { "mdns_adv" = "1" }
-        { "mdns_name" = "Virtualization Host Joe Demo" }
         { "unix_sock_group" = "libvirt" }
         { "unix_sock_ro_perms" = "0777" }
         { "unix_sock_rw_perms" = "0770" }
diff --git a/src/rpc/Makefile.inc.am b/src/rpc/Makefile.inc.am
index 68a4945198..e5b830605a 100644
--- a/src/rpc/Makefile.inc.am
+++ b/src/rpc/Makefile.inc.am
@@ -103,22 +103,18 @@ libvirt_net_rpc_server_la_SOURCES = \
 	rpc/virnetserverservice.c \
 	rpc/virnetserverclient.h \
 	rpc/virnetserverclient.c \
-	rpc/virnetservermdns.h \
-	rpc/virnetservermdns.c \
 	rpc/virnetdaemon.h \
 	rpc/virnetdaemon.c \
 	rpc/virnetserver.h \
 	rpc/virnetserver.c \
 	$(NULL)
 libvirt_net_rpc_server_la_CFLAGS = \
-	$(AVAHI_CFLAGS) \
 	$(DBUS_CFLAGS) \
 	$(XDR_CFLAGS) \
 	$(AM_CFLAGS) \
 	$(NULL)
 libvirt_net_rpc_server_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
-	$(AVAHI_LIBS) \
 	$(DBUS_LIBS) \
 	$(NULL)
 libvirt_net_rpc_server_la_LIBADD = $(CYGWIN_EXTRA_LIBADD)
diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index 0ca61c5a9a..d098cf4ae9 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -32,7 +32,6 @@
 #include "virutil.h"
 #include "virfile.h"
 #include "virnetserver.h"
-#include "virnetservermdns.h"
 #include "virdbus.h"
 #include "virhash.h"
 #include "virstring.h"
@@ -767,16 +766,6 @@ virNetDaemonUpdateServices(virNetDaemonPtr dmn,
     virObjectUnlock(dmn);
 }
 
-static int
-daemonServerRun(void *payload,
-                const void *key ATTRIBUTE_UNUSED,
-                void *opaque ATTRIBUTE_UNUSED)
-{
-    virNetServerPtr srv = payload;
-
-    return virNetServerStart(srv);
-};
-
 static int
 daemonServerProcessClients(void *payload,
                            const void *key ATTRIBUTE_UNUSED,
@@ -802,9 +791,6 @@ virNetDaemonRun(virNetDaemonPtr dmn)
         goto cleanup;
     }
 
-    if (virHashForEach(dmn->servers, daemonServerRun, NULL) < 0)
-        goto cleanup;
-
     dmn->quit = false;
 
     if (dmn->autoShutdownTimeout &&
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 4934dba967..0f3fa63fbb 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -27,7 +27,6 @@
 #include "virerror.h"
 #include "virthread.h"
 #include "virthreadpool.h"
-#include "virnetservermdns.h"
 #include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_RPC
@@ -52,10 +51,6 @@ struct _virNetServer {
     /* Immutable pointer, self-locking APIs */
     virThreadPoolPtr workers;
 
-    char *mdnsGroupName;
-    virNetServerMDNSPtr mdns;
-    virNetServerMDNSGroupPtr mdnsGroup;
-
     size_t nservices;
     virNetServerServicePtr *services;
 
@@ -351,7 +346,6 @@ virNetServerPtr virNetServerNew(const char *name,
                                 size_t max_anonymous_clients,
                                 int keepaliveInterval,
                                 unsigned int keepaliveCount,
-                                const char *mdnsGroupName,
                                 virNetServerClientPrivNew clientPrivNew,
                                 virNetServerClientPrivPreExecRestart clientPrivPreExecRestart,
                                 virFreeCallback clientPrivFree,
@@ -384,16 +378,6 @@ virNetServerPtr virNetServerNew(const char *name,
     srv->clientPrivFree = clientPrivFree;
     srv->clientPrivOpaque = clientPrivOpaque;
 
-    if (VIR_STRDUP(srv->mdnsGroupName, mdnsGroupName) < 0)
-        goto error;
-    if (srv->mdnsGroupName) {
-        if (!(srv->mdns = virNetServerMDNSNew()))
-            goto error;
-        if (!(srv->mdnsGroup = virNetServerMDNSAddGroup(srv->mdns,
-                                                        srv->mdnsGroupName)))
-            goto error;
-    }
-
     return srv;
  error:
     virObjectUnref(srv);
@@ -421,7 +405,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
     unsigned int keepaliveInterval;
     unsigned int keepaliveCount;
     unsigned long long next_client_id;
-    const char *mdnsGroupName = NULL;
 
     if (virJSONValueObjectGetNumberUint(object, "min_workers", &min_workers) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -464,13 +447,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
         goto error;
     }
 
-    if (virJSONValueObjectHasKey(object, "mdnsGroupName") &&
-        (!(mdnsGroupName = virJSONValueObjectGetString(object, "mdnsGroupName")))) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Malformed mdnsGroupName data in JSON document"));
-        goto error;
-    }
-
     if (virJSONValueObjectGetNumberUlong(object, "next_client_id",
                                          &next_client_id) < 0) {
         VIR_WARN("Missing next_client_id data in JSON document");
@@ -482,7 +458,6 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
                                 priority_workers, max_clients,
                                 max_anonymous_clients,
                                 keepaliveInterval, keepaliveCount,
-                                mdnsGroupName,
                                 clientPrivNew, clientPrivPreExecRestart,
                                 clientPrivFree, clientPrivOpaque)))
         goto error;
@@ -511,8 +486,7 @@ virNetServerPtr virNetServerNewPostExecRestart(virJSONValuePtr object,
         if (!(service = virNetServerServiceNewPostExecRestart(child)))
             goto error;
 
-        /* XXX mdns entry names ? */
-        if (virNetServerAddService(srv, service, NULL) < 0) {
+        if (virNetServerAddService(srv, service) < 0) {
             virObjectUnref(service);
             goto error;
         }
@@ -622,13 +596,6 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
         goto error;
     }
 
-    if (srv->mdnsGroupName &&
-        virJSONValueObjectAppendString(object, "mdnsGroupName", srv->mdnsGroupName) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Cannot set mdnsGroupName data in JSON document"));
-        goto error;
-    }
-
     if (!(services = virJSONValueNewArray()))
         goto error;
 
@@ -680,25 +647,13 @@ virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv)
 
 
 int virNetServerAddService(virNetServerPtr srv,
-                           virNetServerServicePtr svc,
-                           const char *mdnsEntryName)
+                           virNetServerServicePtr svc)
 {
     virObjectLock(srv);
 
     if (VIR_EXPAND_N(srv->services, srv->nservices, 1) < 0)
         goto error;
 
-    if (mdnsEntryName) {
-        int port = virNetServerServiceGetPort(svc);
-
-        if (!virNetServerMDNSAddEntry(srv->mdnsGroup,
-                                      mdnsEntryName,
-                                      port)) {
-            srv->nservices--;
-            goto error;
-        }
-    }
-
     srv->services[srv->nservices-1] = virObjectRef(svc);
 
     virNetServerServiceSetDispatcher(svc,
@@ -820,9 +775,6 @@ void virNetServerDispose(void *obj)
     for (i = 0; i < srv->nclients; i++)
         virObjectUnref(srv->clients[i]);
     VIR_FREE(srv->clients);
-
-    VIR_FREE(srv->mdnsGroupName);
-    virNetServerMDNSFree(srv->mdns);
 }
 
 void virNetServerClose(virNetServerPtr srv)
@@ -909,18 +861,6 @@ virNetServerProcessClients(virNetServerPtr srv)
     virObjectUnlock(srv);
 }
 
-int
-virNetServerStart(virNetServerPtr srv)
-{
-    /*
-     * Do whatever needs to be done before starting.
-     */
-    if (!srv->mdns)
-        return 0;
-
-    return virNetServerMDNSStart(srv->mdns);
-}
-
 const char *
 virNetServerGetName(virNetServerPtr srv)
 {
diff --git a/src/rpc/virnetserver.h b/src/rpc/virnetserver.h
index e46a717c15..b47b71b4b2 100644
--- a/src/rpc/virnetserver.h
+++ b/src/rpc/virnetserver.h
@@ -38,7 +38,6 @@ virNetServerPtr virNetServerNew(const char *name,
                                 size_t max_anonymous_clients,
                                 int keepaliveInterval,
                                 unsigned int keepaliveCount,
-                                const char *mdnsGroupName,
                                 virNetServerClientPrivNew clientPrivNew,
                                 virNetServerClientPrivPreExecRestart clientPrivPreExecRestart,
                                 virFreeCallback clientPrivFree,
@@ -60,8 +59,7 @@ void virNetServerClose(virNetServerPtr srv);
 virJSONValuePtr virNetServerPreExecRestart(virNetServerPtr srv);
 
 int virNetServerAddService(virNetServerPtr srv,
-                           virNetServerServicePtr svc,
-                           const char *mdnsEntryName);
+                           virNetServerServicePtr svc);
 
 int virNetServerAddProgram(virNetServerPtr srv,
                            virNetServerProgramPtr prog);
@@ -78,8 +76,6 @@ void virNetServerSetClientAuthenticated(virNetServerPtr srv, virNetServerClientP
 
 void virNetServerUpdateServices(virNetServerPtr srv, bool enabled);
 
-int virNetServerStart(virNetServerPtr srv);
-
 const char *virNetServerGetName(virNetServerPtr srv);
 
 int virNetServerGetThreadPoolParameters(virNetServerPtr srv,
diff --git a/src/rpc/virnetservermdns.c b/src/rpc/virnetservermdns.c
deleted file mode 100644
index 4c10749364..0000000000
--- a/src/rpc/virnetservermdns.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * virnetservermdns.c: advertise server sockets
- *
- * Copyright (C) 2011-2012 Red Hat, Inc.
- * Copyright (C) 2007 Daniel P. Berrange
- *
- * Derived from Avahi example service provider code.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * .
- */
-
-#include 
-
-#include 
-
-#if WITH_AVAHI
-# include 
-# include 
-
-# include 
-# include 
-# include 
-# include 
-# include 
-#endif
-
-#include "virnetservermdns.h"
-#include "vireventpoll.h"
-#include "viralloc.h"
-#include "virerror.h"
-#include "virlog.h"
-#include "virstring.h"
-
-#define VIR_FROM_THIS VIR_FROM_RPC
-
-VIR_LOG_INIT("rpc.netservermdns");
-
-struct _virNetServerMDNSEntry {
-    char *type;
-    int port;
-    virNetServerMDNSEntryPtr next;
-};
-
-struct _virNetServerMDNSGroup {
-    virNetServerMDNSPtr mdns;
-#if WITH_AVAHI
-    AvahiEntryGroup *handle;
-#endif
-    char *name;
-    virNetServerMDNSEntryPtr entry;
-    virNetServerMDNSGroupPtr next;
-};
-
-struct _virNetServerMDNS {
-#if WITH_AVAHI
-    AvahiClient *client;
-    AvahiPoll *poller;
-#endif
-    virNetServerMDNSGroupPtr group;
-};
-
-#if WITH_AVAHI
-/* Avahi API requires this struct name in the app :-( */
-struct AvahiWatch {
-    int watch;
-    int fd;
-    int revents;
-    AvahiWatchCallback callback;
-    void *userdata;
-};
-
-/* Avahi API requires this struct name in the app :-( */
-struct AvahiTimeout {
-    int timer;
-    AvahiTimeoutCallback callback;
-    void  *userdata;
-};
-
-static void virNetServerMDNSCreateServices(virNetServerMDNSGroupPtr group);
-
-/* Called whenever the entry group state changes */
-static void virNetServerMDNSGroupCallback(AvahiEntryGroup *g ATTRIBUTE_UNUSED,
-                                          AvahiEntryGroupState state,
-                                          void *data)
-{
-    virNetServerMDNSGroupPtr group = data;
-
-    switch (state) {
-    case AVAHI_ENTRY_GROUP_ESTABLISHED:
-        /* The entry group has been established successfully */
-        VIR_DEBUG("Group '%s' established", group->name);
-        break;
-
-    case AVAHI_ENTRY_GROUP_COLLISION:
-        {
-            char *n;
-
-            /* A service name collision happened. Let's pick a new name */
-            n = avahi_alternative_service_name(group->name);
-            VIR_FREE(group->name);
-            group->name = n;
-
-            VIR_DEBUG("Group name collision, renaming service to '%s'", group->name);
-
-            /* And recreate the services */
-            virNetServerMDNSCreateServices(group);
-        }
-        break;
-
-    case AVAHI_ENTRY_GROUP_FAILURE :
-        VIR_DEBUG("Group failure: %s",
-                  avahi_strerror(avahi_client_errno(group->mdns->client)));
-
-        /* Some kind of failure happened while we were registering our services */
-        /* avahi_simple_poll_quit(simple_poll); */
-        break;
-
-    case AVAHI_ENTRY_GROUP_UNCOMMITED:
-    case AVAHI_ENTRY_GROUP_REGISTERING:
-        ;
-    }
-}
-
-static void virNetServerMDNSCreateServices(virNetServerMDNSGroupPtr group)
-{
-    virNetServerMDNSPtr mdns = group->mdns;
-    virNetServerMDNSEntryPtr entry;
-    int ret;
-    VIR_DEBUG("Adding services to '%s'", group->name);
-
-    /* If we've no services to advertise, just reset the group to make
-     * sure it is emptied of any previously advertised services */
-    if (!group->entry) {
-        if (group->handle)
-            avahi_entry_group_reset(group->handle);
-        return;
-    }
-
-    /* If this is the first time we're called, let's create a new entry group */
-    if (!group->handle) {
-        VIR_DEBUG("Creating initial group %s", group->name);
-        if (!(group->handle =
-              avahi_entry_group_new(mdns->client,
-                                    virNetServerMDNSGroupCallback,
-                                    group))) {
-            VIR_DEBUG("avahi_entry_group_new() failed: %s",
-                      avahi_strerror(avahi_client_errno(mdns->client)));
-            return;
-        }
-    }
-
-    entry = group->entry;
-    while (entry) {
-        if ((ret = avahi_entry_group_add_service(group->handle,
-                                                 AVAHI_IF_UNSPEC,
-                                                 AVAHI_PROTO_UNSPEC,
-                                                 0,
-                                                 group->name,
-                                                 entry->type,
-                                                 NULL,
-                                                 NULL,
-                                                 entry->port,
-                                                 NULL)) < 0) {
-            VIR_DEBUG("Failed to add %s service on port %d: %s",
-                      entry->type, entry->port, avahi_strerror(ret));
-            avahi_entry_group_reset(group->handle);
-            return;
-        }
-        entry = entry->next;
-    }
-
-    /* Tell the server to register the service */
-    if ((ret = avahi_entry_group_commit(group->handle)) < 0) {
-        avahi_entry_group_reset(group->handle);
-        VIR_DEBUG("Failed to commit entry_group: %s",
-                  avahi_strerror(ret));
-        return;
-    }
-}
-
-
-static void virNetServerMDNSClientCallback(AvahiClient *c,
-                                           AvahiClientState state,
-                                           void *data)
-{
-    virNetServerMDNSPtr mdns = data;
-    virNetServerMDNSGroupPtr group;
-    if (!mdns->client)
-        mdns->client = c;
-
-    VIR_DEBUG("Callback state=%d", state);
-
-    /* Called whenever the client or server state changes */
-    switch (state) {
-        case AVAHI_CLIENT_S_RUNNING:
-            /* The server has startup successfully and registered its host
-             * name on the network, so it's time to create our services */
-            VIR_DEBUG("Client running %p", mdns->client);
-            group = mdns->group;
-            while (group) {
-                virNetServerMDNSCreateServices(group);
-                group = group->next;
-            }
-            break;
-
-        case AVAHI_CLIENT_FAILURE:
-            VIR_DEBUG("Client failure: %s",
-                      avahi_strerror(avahi_client_errno(c)));
-            virNetServerMDNSStop(mdns);
-            virNetServerMDNSStart(mdns);
-            break;
-
-        case AVAHI_CLIENT_S_COLLISION:
-            /* Let's drop our registered services. When the server is back
-             * in AVAHI_SERVER_RUNNING state we will register them
-             * again with the new host name. */
-
-            ATTRIBUTE_FALLTHROUGH;
-
-        case AVAHI_CLIENT_S_REGISTERING:
-            /* The server records are now being established. This
-             * might be caused by a host name change. We need to wait
-             * for our own records to register until the host name is
-             * properly established. */
-            VIR_DEBUG("Client collision/connecting %p", mdns->client);
-            group = mdns->group;
-            while (group) {
-                if (group->handle)
-                    avahi_entry_group_reset(group->handle);
-                group = group->next;
-            }
-            break;
-
-        case AVAHI_CLIENT_CONNECTING:
-            VIR_DEBUG("Client connecting.... %p", mdns->client);
-            ;
-    }
-}
-
-
-static void virNetServerMDNSWatchDispatch(int watch, int fd, int events, void *opaque)
-{
-    AvahiWatch *w = opaque;
-    int fd_events = virEventPollToNativeEvents(events);
-    VIR_DEBUG("Dispatch watch %d FD %d Event %d", watch, fd, fd_events);
-    w->revents = fd_events;
-    w->callback(w, fd, fd_events, w->userdata);
-}
-
-static void virNetServerMDNSWatchDofree(void *w)
-{
-    VIR_FREE(w);
-}
-
-
-static AvahiWatch *virNetServerMDNSWatchNew(const AvahiPoll *api ATTRIBUTE_UNUSED,
-                                            int fd, AvahiWatchEvent event,
-                                            AvahiWatchCallback cb, void *userdata)
-{
-    AvahiWatch *w;
-    virEventHandleType hEvents;
-    if (VIR_ALLOC(w) < 0)
-        return NULL;
-
-    w->fd = fd;
-    w->revents = 0;
-    w->callback = cb;
-    w->userdata = userdata;
-
-    VIR_DEBUG("New handle %p FD %d Event %d", w, w->fd, event);
-    hEvents = virEventPollFromNativeEvents(event);
-    if ((w->watch = virEventAddHandle(fd, hEvents,
-                                      virNetServerMDNSWatchDispatch,
-                                      w,
-                                      virNetServerMDNSWatchDofree)) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("Failed to add watch for fd %d events %d"), fd, hEvents);
-        VIR_FREE(w);
-        return NULL;
-    }
-
-    return w;
-}
-
-static void virNetServerMDNSWatchUpdate(AvahiWatch *w, AvahiWatchEvent event)
-{
-    VIR_DEBUG("Update handle %p FD %d Event %d", w, w->fd, event);
-    virEventUpdateHandle(w->watch, event);
-}
-
-static AvahiWatchEvent virNetServerMDNSWatchGetEvents(AvahiWatch *w)
-{
-    VIR_DEBUG("Get handle events %p %d", w, w->fd);
-    return w->revents;
-}
-
-static void virNetServerMDNSWatchFree(AvahiWatch *w)
-{
-    VIR_DEBUG("Free handle %p %d", w, w->fd);
-    virEventRemoveHandle(w->watch);
-}
-
-static void virNetServerMDNSTimeoutDispatch(int timer ATTRIBUTE_UNUSED, void *opaque)
-{
-    AvahiTimeout *t = (AvahiTimeout*)opaque;
-    VIR_DEBUG("Dispatch timeout %p %d", t, timer);
-    virEventUpdateTimeout(t->timer, -1);
-    t->callback(t, t->userdata);
-}
-
-static void virNetServerMDNSTimeoutDofree(void *t)
-{
-    VIR_FREE(t);
-}
-
-static AvahiTimeout *virNetServerMDNSTimeoutNew(const AvahiPoll *api ATTRIBUTE_UNUSED,
-                                                const struct timeval *tv,
-                                                AvahiTimeoutCallback cb,
-                                                void *userdata)
-{
-    AvahiTimeout *t;
-    struct timeval now;
-    long long nowms, thenms, timeout;
-    VIR_DEBUG("Add timeout TV %p", tv);
-    if (VIR_ALLOC(t) < 0)
-        return NULL;
-
-    if (gettimeofday(&now, NULL) < 0) {
-        virReportSystemError(errno, "%s",
-                             _("Unable to get current time"));
-        VIR_FREE(t);
-        return NULL;
-    }
-
-    VIR_DEBUG("Trigger timed for %d %d      %d %d",
-               (int)now.tv_sec, (int)now.tv_usec,
-               (int)(tv ? tv->tv_sec : 0), (int)(tv ? tv->tv_usec : 0));
-    nowms = (now.tv_sec * 1000ll) + (now.tv_usec / 1000ll);
-    if (tv) {
-        thenms = (tv->tv_sec * 1000ll) + (tv->tv_usec/1000ll);
-        timeout = thenms > nowms ? nowms - thenms : 0;
-        if (timeout < 0)
-            timeout = 0;
-    } else {
-        timeout = -1;
-    }
-
-    t->timer = virEventAddTimeout(timeout,
-                                  virNetServerMDNSTimeoutDispatch,
-                                  t,
-                                  virNetServerMDNSTimeoutDofree);
-    t->callback = cb;
-    t->userdata = userdata;
-
-    if (t->timer < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("Failed to add timer with timeout %lld"), timeout);
-        VIR_FREE(t);
-        return NULL;
-    }
-
-    return t;
-}
-
-static void virNetServerMDNSTimeoutUpdate(AvahiTimeout *t, const struct timeval *tv)
-{
-    struct timeval now;
-    long long nowms, thenms, timeout;
-    VIR_DEBUG("Update timeout %p TV %p", t, tv);
-    if (gettimeofday(&now, NULL) < 0) {
-        VIR_FREE(t);
-        return;
-    }
-
-    nowms = (now.tv_sec * 1000ll) + (now.tv_usec / 1000ll);
-    if (tv) {
-        thenms = ((tv->tv_sec * 1000ll) + (tv->tv_usec/1000ll));
-        timeout = thenms > nowms ? nowms - thenms : 0;
-        if (timeout < 0)
-            timeout = 0;
-    } else {
-        timeout = -1;
-    }
-
-    virEventUpdateTimeout(t->timer, timeout);
-}
-
-static void virNetServerMDNSTimeoutFree(AvahiTimeout *t)
-{
-    VIR_DEBUG("Free timeout %p", t);
-    virEventRemoveTimeout(t->timer);
-}
-
-
-static AvahiPoll *virNetServerMDNSCreatePoll(void)
-{
-    AvahiPoll *p;
-    if (VIR_ALLOC(p) < 0)
-        return NULL;
-
-    p->userdata = NULL;
-
-    p->watch_new = virNetServerMDNSWatchNew;
-    p->watch_update = virNetServerMDNSWatchUpdate;
-    p->watch_get_events = virNetServerMDNSWatchGetEvents;
-    p->watch_free = virNetServerMDNSWatchFree;
-
-    p->timeout_new = virNetServerMDNSTimeoutNew;
-    p->timeout_update = virNetServerMDNSTimeoutUpdate;
-    p->timeout_free = virNetServerMDNSTimeoutFree;
-
-    return p;
-}
-
-
-virNetServerMDNS *virNetServerMDNSNew(void)
-{
-    virNetServerMDNS *mdns;
-    if (VIR_ALLOC(mdns) < 0)
-        return NULL;
-
-    /* Allocate main loop object */
-    if (!(mdns->poller = virNetServerMDNSCreatePoll())) {
-        VIR_FREE(mdns);
-        return NULL;
-    }
-
-    return mdns;
-}
-
-
-int virNetServerMDNSStart(virNetServerMDNS *mdns)
-{
-    int error;
-    VIR_DEBUG("Starting client %p", mdns);
-    mdns->client = avahi_client_new(mdns->poller,
-                                    AVAHI_CLIENT_NO_FAIL,
-                                    virNetServerMDNSClientCallback,
-                                    mdns, &error);
-
-    if (!mdns->client) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("Failed to create mDNS client: %s"),
-                       avahi_strerror(error));
-        return -1;
-    }
-
-    return 0;
-}
-
-
-virNetServerMDNSGroupPtr virNetServerMDNSAddGroup(virNetServerMDNS *mdns,
-                                                  const char *name)
-{
-    virNetServerMDNSGroupPtr group;
-
-    VIR_DEBUG("Adding group '%s'", name);
-    if (VIR_ALLOC(group) < 0)
-        return NULL;
-
-    if (VIR_STRDUP(group->name, name) < 0) {
-        VIR_FREE(group);
-        return NULL;
-    }
-    group->mdns = mdns;
-    group->next = mdns->group;
-    mdns->group = group;
-    return group;
-}
-
-
-void virNetServerMDNSRemoveGroup(virNetServerMDNSPtr mdns,
-                                 virNetServerMDNSGroupPtr group)
-{
-    virNetServerMDNSGroupPtr tmp = mdns->group, prev = NULL;
-
-    while (tmp) {
-        if (tmp == group) {
-            VIR_FREE(group->name);
-            if (prev)
-                prev->next = group->next;
-            else
-                group->mdns->group = group->next;
-            VIR_FREE(group);
-            return;
-        }
-        prev = tmp;
-        tmp = tmp->next;
-    }
-}
-
-
-virNetServerMDNSEntryPtr virNetServerMDNSAddEntry(virNetServerMDNSGroupPtr group,
-                                                  const char *type,
-                                                  int port)
-{
-    virNetServerMDNSEntryPtr entry;
-
-    VIR_DEBUG("Adding entry %s %d to group %s", type, port, group->name);
-    if (VIR_ALLOC(entry) < 0)
-        return NULL;
-
-    entry->port = port;
-    if (VIR_STRDUP(entry->type, type) < 0) {
-        VIR_FREE(entry);
-        return NULL;
-    }
-    entry->next = group->entry;
-    group->entry = entry;
-    return entry;
-}
-
-
-void virNetServerMDNSRemoveEntry(virNetServerMDNSGroupPtr group,
-                                 virNetServerMDNSEntryPtr entry)
-{
-    virNetServerMDNSEntryPtr tmp = group->entry, prev = NULL;
-
-    while (tmp) {
-        if (tmp == entry) {
-            VIR_FREE(entry->type);
-            if (prev)
-                prev->next = entry->next;
-            else
-                group->entry = entry->next;
-            return;
-        }
-        prev = tmp;
-        tmp = tmp->next;
-    }
-}
-
-
-void virNetServerMDNSStop(virNetServerMDNSPtr mdns)
-{
-    virNetServerMDNSGroupPtr group = mdns->group;
-    while (group) {
-        if (group->handle) {
-            avahi_entry_group_free(group->handle);
-            group->handle = NULL;
-        }
-        group = group->next;
-    }
-    if (mdns->client)
-        avahi_client_free(mdns->client);
-    mdns->client = NULL;
-}
-
-
-void virNetServerMDNSFree(virNetServerMDNSPtr mdns)
-{
-    virNetServerMDNSGroupPtr group, tmp;
-
-    if (!mdns)
-        return;
-
-    group = mdns->group;
-    while (group) {
-        tmp = group->next;
-        virNetServerMDNSGroupFree(group);
-        group = tmp;
-    }
-
-    VIR_FREE(mdns->poller);
-    VIR_FREE(mdns);
-}
-
-
-void virNetServerMDNSGroupFree(virNetServerMDNSGroupPtr grp)
-{
-    virNetServerMDNSEntryPtr entry, tmp;
-
-    if (!grp)
-        return;
-
-    entry = grp->entry;
-    while (entry) {
-        tmp = entry->next;
-        virNetServerMDNSEntryFree(entry);
-        entry = tmp;
-    }
-
-    VIR_FREE(grp->name);
-    VIR_FREE(grp);
-}
-
-
-void virNetServerMDNSEntryFree(virNetServerMDNSEntryPtr entry)
-{
-    if (!entry)
-        return;
-
-    VIR_FREE(entry->type);
-    VIR_FREE(entry);
-}
-
-#else /* ! WITH_AVAHI */
-
-static const char *unsupported = N_("avahi not available at build time");
-
-virNetServerMDNS *
-virNetServerMDNSNew(void)
-{
-    virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
-    return NULL;
-}
-
-int
-virNetServerMDNSStart(virNetServerMDNS *mdns ATTRIBUTE_UNUSED)
-{
-    virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
-    return -1;
-}
-
-virNetServerMDNSGroupPtr
-virNetServerMDNSAddGroup(virNetServerMDNS *mdns ATTRIBUTE_UNUSED,
-                         const char *name ATTRIBUTE_UNUSED)
-{
-    virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
-    return NULL;
-}
-
-void
-virNetServerMDNSRemoveGroup(virNetServerMDNSPtr mdns ATTRIBUTE_UNUSED,
-                            virNetServerMDNSGroupPtr group ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-virNetServerMDNSEntryPtr
-virNetServerMDNSAddEntry(virNetServerMDNSGroupPtr group ATTRIBUTE_UNUSED,
-                         const char *type ATTRIBUTE_UNUSED,
-                         int port ATTRIBUTE_UNUSED)
-{
-    virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
-    return NULL;
-}
-
-void
-virNetServerMDNSRemoveEntry(virNetServerMDNSGroupPtr group ATTRIBUTE_UNUSED,
-                            virNetServerMDNSEntryPtr entry ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-void
-virNetServerMDNSStop(virNetServerMDNSPtr mdns ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-void
-virNetServerMDNSFree(virNetServerMDNSPtr mdns ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-void
-virNetServerMDNSGroupFree(virNetServerMDNSGroupPtr grp ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-void
-virNetServerMDNSEntryFree(virNetServerMDNSEntryPtr entry ATTRIBUTE_UNUSED)
-{
-    VIR_DEBUG("%s", _(unsupported));
-}
-
-#endif /* ! WITH_AVAHI */
diff --git a/src/rpc/virnetservermdns.h b/src/rpc/virnetservermdns.h
deleted file mode 100644
index 5f8e4da581..0000000000
--- a/src/rpc/virnetservermdns.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * virnetservermdns.h: advertise server sockets
- *
- * Copyright (C) 2011 Red Hat, Inc.
- * Copyright (C) 2007 Daniel P. Berrange
- *
- * Derived from Avahi example service provider code.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * .
- */
-
-#pragma once
-
-#include "internal.h"
-
-typedef struct _virNetServerMDNS virNetServerMDNS;
-typedef virNetServerMDNS *virNetServerMDNSPtr;
-typedef struct _virNetServerMDNSGroup virNetServerMDNSGroup;
-typedef virNetServerMDNSGroup *virNetServerMDNSGroupPtr;
-typedef struct _virNetServerMDNSEntry virNetServerMDNSEntry;
-typedef virNetServerMDNSEntry *virNetServerMDNSEntryPtr;
-
-
-/**
- * Prepares a new mdns manager object for use
- */
-virNetServerMDNSPtr virNetServerMDNSNew(void);
-
-/**
- * Starts the mdns client, advertising any groups/entries currently registered
- *
- * @mdns: manager to start advertising
- *
- * Starts the mdns client. Services may not be immediately visible, since
- * it may asynchronously wait for the mdns service to startup
- *
- * returns -1 upon failure, 0 upon success.
- */
-int virNetServerMDNSStart(virNetServerMDNSPtr mdns);
-
-/**
- * Stops the mdns client, removing any advertisements
- *
- * @mdns: manager to start advertising
- *
- */
-void virNetServerMDNSStop(virNetServerMDNSPtr mdns);
-
-/**
- * Adds a group container for advertisement
- *
- * @mdns manager to attach the group to
- * @name unique human readable service name
- *
- * returns the group record, or NULL upon failure
- */
-virNetServerMDNSGroupPtr virNetServerMDNSAddGroup(virNetServerMDNSPtr mdns,
-                                                  const char *name);
-
-/**
- * Removes a group container from advertisement
- *
- * @mdns amanger to detach group from
- * @group group to remove
- */
-void virNetServerMDNSRemoveGroup(virNetServerMDNSPtr mdns,
-                                 virNetServerMDNSGroupPtr group);
-
-/**
- * Adds a service entry in a group
- *
- * @group group to attach the entry to
- * @type service type string
- * @port tcp port number
- *
- * returns the service record, or NULL upon failure
- */
-virNetServerMDNSEntryPtr virNetServerMDNSAddEntry(virNetServerMDNSGroupPtr group,
-                                                  const char *type, int port);
-
-/**
- * Removes a service entry from a group
- *
- * @group group to detach service entry from
- * @entry service entry to remove
- */
-void virNetServerMDNSRemoveEntry(virNetServerMDNSGroupPtr group,
-                                 virNetServerMDNSEntryPtr entry);
-
-void virNetServerMDNSFree(virNetServerMDNSPtr ptr);
-void virNetServerMDNSGroupFree(virNetServerMDNSGroupPtr ptr);
-void virNetServerMDNSEntryFree(virNetServerMDNSEntryPtr ptr);
diff --git a/tests/virconfdata/libvirtd.conf b/tests/virconfdata/libvirtd.conf
index ee57593109..602aa08d92 100644
--- a/tests/virconfdata/libvirtd.conf
+++ b/tests/virconfdata/libvirtd.conf
@@ -43,23 +43,6 @@ tcp_port = "16509"
 
 
 
-# Flag toggling mDNS advertizement of the libvirt service.
-#
-# Alternatively can disable for all services on a host by
-# stopping the Avahi daemon
-#
-# This is disabled by default, uncomment this to enable it
-mdns_adv = 1
-
-# Override the default mDNS advertizement name. This must be
-# unique on the immediate broadcast network.
-#
-# The default is "Virtualization Host HOSTNAME", where HOSTNAME
-# is subsituted for the short hostname of the machine (without domain)
-#
-mdns_name = "Virtualization Host Joe Demo"
-
-
 #################################################################
 #
 # UNIX socket access controls
diff --git a/tests/virconfdata/libvirtd.out b/tests/virconfdata/libvirtd.out
index e0b6f0a606..d3f2bd20a7 100644
--- a/tests/virconfdata/libvirtd.out
+++ b/tests/virconfdata/libvirtd.out
@@ -32,20 +32,6 @@ tls_port = "16514"
 # This can be a port number, or service name
 #
 tcp_port = "16509"
-# Flag toggling mDNS advertizement of the libvirt service.
-#
-# Alternatively can disable for all services on a host by
-# stopping the Avahi daemon
-#
-# This is disabled by default, uncomment this to enable it
-mdns_adv = 1
-# Override the default mDNS advertizement name. This must be
-# unique on the immediate broadcast network.
-#
-# The default is "Virtualization Host HOSTNAME", where HOSTNAME
-# is subsituted for the short hostname of the machine (without domain)
-#
-mdns_name = "Virtualization Host Joe Demo"
 #################################################################
 #
 # UNIX socket access controls
diff --git a/tests/virnetdaemondata/input-data-admin-nomdns.json b/tests/virnetdaemondata/input-data-admin.json
similarity index 100%
rename from tests/virnetdaemondata/input-data-admin-nomdns.json
rename to tests/virnetdaemondata/input-data-admin.json
diff --git a/tests/virnetdaemondata/input-data-initial-nomdns.json b/tests/virnetdaemondata/input-data-initial-nomdns.json
deleted file mode 100644
index 6cf70d96e8..0000000000
--- a/tests/virnetdaemondata/input-data-initial-nomdns.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-    "min_workers": 10,
-    "max_workers": 50,
-    "priority_workers": 5,
-    "max_clients": 100,
-    "keepaliveInterval": 120,
-    "keepaliveCount": 5,
-    "keepaliveRequired": true,
-    "services": [
-        {
-            "auth": 0,
-            "readonly": true,
-            "nrequests_client_max": 2,
-            "socks": [
-                {
-                    "fd": 100,
-                    "errfd": -1,
-                    "pid": 0,
-                    "isClient": false
-                }
-            ]
-        },
-        {
-            "auth": 2,
-            "readonly": false,
-            "nrequests_client_max": 5,
-            "socks": [
-                {
-                    "fd": 101,
-                    "errfd": -1,
-                    "pid": 0,
-                    "isClient": false
-                }
-            ]
-        }
-    ],
-    "clients": [
-        {
-            "auth": 1,
-            "readonly": true,
-            "nrequests_max": 15,
-            "sock": {
-                "fd": 102,
-                "errfd": -1,
-                "pid": -1,
-                "isClient": true
-            },
-	    "privateData": 1729
-        },
-        {
-            "auth": 2,
-            "readonly": true,
-            "nrequests_max": 66,
-            "sock": {
-                "fd": 103,
-                "errfd": -1,
-                "pid": -1,
-                "isClient": true
-            },
-	    "privateData": 1729
-        }
-    ]
-}
diff --git a/tests/virnetdaemondata/input-data-initial.json b/tests/virnetdaemondata/input-data-initial.json
index 5bb09ed36b..6cf70d96e8 100644
--- a/tests/virnetdaemondata/input-data-initial.json
+++ b/tests/virnetdaemondata/input-data-initial.json
@@ -6,7 +6,6 @@
     "keepaliveInterval": 120,
     "keepaliveCount": 5,
     "keepaliveRequired": true,
-    "mdnsGroupName": "libvirtTest",
     "services": [
         {
             "auth": 0,
diff --git a/tests/virnetdaemondata/output-data-admin-nomdns.json b/tests/virnetdaemondata/output-data-admin.json
similarity index 100%
rename from tests/virnetdaemondata/output-data-admin-nomdns.json
rename to tests/virnetdaemondata/output-data-admin.json
diff --git a/tests/virnetdaemondata/output-data-initial-nomdns.json b/tests/virnetdaemondata/output-data-initial-nomdns.json
deleted file mode 100644
index 916297c59d..0000000000
--- a/tests/virnetdaemondata/output-data-initial-nomdns.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-  "servers": {
-    "testServer0": {
-      "min_workers": 10,
-      "max_workers": 50,
-      "priority_workers": 5,
-      "max_clients": 100,
-      "max_anonymous_clients": 100,
-      "keepaliveInterval": 120,
-      "keepaliveCount": 5,
-      "next_client_id": 3,
-      "services": [
-        {
-          "auth": 0,
-          "readonly": true,
-          "nrequests_client_max": 2,
-          "socks": [
-            {
-              "fd": 100,
-              "errfd": -1,
-              "pid": 0,
-              "isClient": false
-            }
-          ]
-        },
-        {
-          "auth": 2,
-          "readonly": false,
-          "nrequests_client_max": 5,
-          "socks": [
-            {
-              "fd": 101,
-              "errfd": -1,
-              "pid": 0,
-              "isClient": false
-            }
-          ]
-        }
-      ],
-      "clients": [
-        {
-          "id": 1,
-          "auth": 1,
-          "auth_pending": true,
-          "readonly": true,
-          "nrequests_max": 15,
-          "sock": {
-            "fd": 102,
-            "errfd": -1,
-            "pid": -1,
-            "isClient": true
-          },
-          "privateData": 1729
-        },
-        {
-          "id": 2,
-          "auth": 2,
-          "auth_pending": true,
-          "readonly": true,
-          "nrequests_max": 66,
-          "sock": {
-            "fd": 103,
-            "errfd": -1,
-            "pid": -1,
-            "isClient": true
-          },
-          "privateData": 1729
-        }
-      ]
-    }
-  }
-}
diff --git a/tests/virnetdaemondata/output-data-initial.json b/tests/virnetdaemondata/output-data-initial.json
index 5ed03472d6..916297c59d 100644
--- a/tests/virnetdaemondata/output-data-initial.json
+++ b/tests/virnetdaemondata/output-data-initial.json
@@ -9,7 +9,6 @@
       "keepaliveInterval": 120,
       "keepaliveCount": 5,
       "next_client_id": 3,
-      "mdnsGroupName": "libvirtTest",
       "services": [
         {
           "auth": 0,
diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c
index 3e9b007d9b..eae630a8f1 100644
--- a/tests/virnetdaemontest.c
+++ b/tests/virnetdaemontest.c
@@ -87,13 +87,6 @@ testCreateServer(const char *server_name, const char *host, int family)
     virNetServerClientPtr cln1 = NULL, cln2 = NULL;
     virNetSocketPtr sk1 = NULL, sk2 = NULL;
     int fdclient[2];
-    const char *mdns_entry = NULL;
-    const char *mdns_group = NULL;
-
-# ifdef WITH_AVAHI
-    mdns_entry = "libvirt-ro";
-    mdns_group = "libvirtTest";
-# endif
 
     if (socketpair(PF_UNIX, SOCK_STREAM, 0, fdclient) < 0) {
         virReportSystemError(errno, "%s",
@@ -104,7 +97,6 @@ testCreateServer(const char *server_name, const char *host, int family)
     if (!(srv = virNetServerNew(server_name, 1,
                                 10, 50, 5, 100, 10,
                                 120, 5,
-                                mdns_group,
                                 testClientNew,
                                 testClientPreExec,
                                 testClientFree,
@@ -131,9 +123,9 @@ testCreateServer(const char *server_name, const char *host, int family)
                                            5)))
         goto error;
 
-    if (virNetServerAddService(srv, svc1, mdns_entry) < 0)
+    if (virNetServerAddService(srv, svc1) < 0)
         goto error;
-    if (virNetServerAddService(srv, svc2, mdns_entry) < 0)
+    if (virNetServerAddService(srv, svc2) < 0)
         goto error;
 
     if (virNetSocketNewConnectSockFD(fdclient[0], &sk1) < 0)
@@ -408,12 +400,9 @@ mymain(void)
 # define EXEC_RESTART_TEST_FAIL(file, N) EXEC_RESTART_TEST_FULL(file, N, false)
 
 
-# ifdef WITH_AVAHI
     EXEC_RESTART_TEST("initial", 1);
-# endif
-    EXEC_RESTART_TEST("initial-nomdns", 1);
     EXEC_RESTART_TEST("anon-clients", 1);
-    EXEC_RESTART_TEST("admin-nomdns", 2);
+    EXEC_RESTART_TEST("admin", 2);
     EXEC_RESTART_TEST("admin-server-names", 2);
     EXEC_RESTART_TEST("no-keepalive-required", 2);
     EXEC_RESTART_TEST("client-ids", 1);