[PATCH 2/2] network: Propagate DNS forwarder port into dnsmasq config

Michal Privoznik via Devel posted 2 patches 3 weeks ago
[PATCH 2/2] network: Propagate DNS forwarder port into dnsmasq config
Posted by Michal Privoznik via Devel 3 weeks ago
From: Michal Privoznik <mprivozn@redhat.com>

If a DNS forwarder has port specified then we ought to format it
into dnsmasq config. The correct syntax is

  server=/domain/ip-address#port

Closes: https://gitlab.com/libvirt/libvirt/-/issues/833
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 src/network/bridge_driver.c                               | 6 +++++-
 tests/networkxml2confdata/nat-network-dns-forwarders.conf | 2 +-
 tests/networkxml2confdata/nat-network-dns-forwarders.xml  | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 34b655e816..8b5dbb3ab7 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -1212,10 +1212,14 @@ networkDnsmasqConfContents(virNetworkObj *obj,
                 virBufferAsprintf(&configbuf, "/%s/", fwd->domain);
             if (VIR_SOCKET_ADDR_VALID(&fwd->addr)) {
                 g_autofree char *addr = virSocketAddrFormat(&fwd->addr);
+                int port = virSocketAddrGetPort(&fwd->addr);
 
                 if (!addr)
                     return -1;
-                virBufferAsprintf(&configbuf, "%s\n", addr);
+                virBufferAddStr(&configbuf, addr);
+                if (port > 0)
+                    virBufferAsprintf(&configbuf, "#%d", port);
+                virBufferAddChar(&configbuf, '\n');
                 if (!fwd->domain)
                     addNoResolv = true;
             } else {
diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.conf b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
index 1b0c94c3fb..85d6c6ceb9 100644
--- a/tests/networkxml2confdata/nat-network-dns-forwarders.conf
+++ b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
@@ -7,7 +7,7 @@
 strict-order
 server=8.8.8.8
 server=8.8.4.4
-server=/example.com/192.168.1.1
+server=/example.com/192.168.1.1#1234
 server=/www.example.com/#
 no-resolv
 except-interface=lo
diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.xml b/tests/networkxml2confdata/nat-network-dns-forwarders.xml
index 5d4f3fa697..98d9660b14 100644
--- a/tests/networkxml2confdata/nat-network-dns-forwarders.xml
+++ b/tests/networkxml2confdata/nat-network-dns-forwarders.xml
@@ -6,7 +6,7 @@
   <dns>
     <forwarder addr='8.8.8.8'/>
     <forwarder addr='8.8.4.4'/>
-    <forwarder domain='example.com' addr='192.168.1.1'/>
+    <forwarder domain='example.com' addr='192.168.1.1' port='1234'/>
     <forwarder domain='www.example.com'/>
   </dns>
   <ip address='192.168.122.1' netmask='255.255.255.0'>
-- 
2.51.2
Re: [PATCH 2/2] network: Propagate DNS forwarder port into dnsmasq config
Posted by Laine Stump via Devel 2 weeks, 6 days ago
On 12/18/25 5:00 AM, Michal Privoznik via Devel wrote:
> From: Michal Privoznik <mprivozn@redhat.com>
> 
> If a DNS forwarder has port specified then we ought to format it
> into dnsmasq config. The correct syntax is
> 
>    server=/domain/ip-address#port
> 
> Closes: https://gitlab.com/libvirt/libvirt/-/issues/833
> Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
> ---
>   src/network/bridge_driver.c                               | 6 +++++-
>   tests/networkxml2confdata/nat-network-dns-forwarders.conf | 2 +-
>   tests/networkxml2confdata/nat-network-dns-forwarders.xml  | 2 +-
>   3 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
> index 34b655e816..8b5dbb3ab7 100644
> --- a/src/network/bridge_driver.c
> +++ b/src/network/bridge_driver.c
> @@ -1212,10 +1212,14 @@ networkDnsmasqConfContents(virNetworkObj *obj,
>                   virBufferAsprintf(&configbuf, "/%s/", fwd->domain);
>               if (VIR_SOCKET_ADDR_VALID(&fwd->addr)) {
>                   g_autofree char *addr = virSocketAddrFormat(&fwd->addr);
> +                int port = virSocketAddrGetPort(&fwd->addr);
>   
>                   if (!addr)
>                       return -1;
> -                virBufferAsprintf(&configbuf, "%s\n", addr);
> +                virBufferAddStr(&configbuf, addr);
> +                if (port > 0)
> +                    virBufferAsprintf(&configbuf, "#%d", port);
> +                virBufferAddChar(&configbuf, '\n');
>                   if (!fwd->domain)
>                       addNoResolv = true;
>               } else {
> diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.conf b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
> index 1b0c94c3fb..85d6c6ceb9 100644
> --- a/tests/networkxml2confdata/nat-network-dns-forwarders.conf
> +++ b/tests/networkxml2confdata/nat-network-dns-forwarders.conf
> @@ -7,7 +7,7 @@
>   strict-order
>   server=8.8.8.8
>   server=8.8.4.4
> -server=/example.com/192.168.1.1
> +server=/example.com/192.168.1.1#1234
>   server=/www.example.com/#
>   no-resolv
>   except-interface=lo
> diff --git a/tests/networkxml2confdata/nat-network-dns-forwarders.xml b/tests/networkxml2confdata/nat-network-dns-forwarders.xml
> index 5d4f3fa697..98d9660b14 100644
> --- a/tests/networkxml2confdata/nat-network-dns-forwarders.xml
> +++ b/tests/networkxml2confdata/nat-network-dns-forwarders.xml
> @@ -6,7 +6,7 @@
>     <dns>
>       <forwarder addr='8.8.8.8'/>
>       <forwarder addr='8.8.4.4'/>
> -    <forwarder domain='example.com' addr='192.168.1.1'/>
> +    <forwarder domain='example.com' addr='192.168.1.1' port='1234'/>
>       <forwarder domain='www.example.com'/>

The one issue with this is that by changing an existing entry rather 
than adding a new one, you've eliminated the test case that checks for 
proper operation when domain & addr are specified, but port is not.

Otherwise

Reviewed-by: Laine Stump <laine@redhat.com>

>     </dns>
>     <ip address='192.168.122.1' netmask='255.255.255.0'>