Hi all,
This is a followup to the excellent patch which allows static IP address assignment. The
problem with that patch is that you can only set the host name and cannot set a FQDN
because dnsmasq will, as a security measure, not allow it unless --domain is specified.
This patch adds support for adding <domain name="my.domain" /> to the
network config file. With that stanza, one can then use FQDNs on the static host
assignments, and this should be the domain reported for any clients that request it. If
<domain name .. ./> is not specified in the config file, then there is no change in
behaviour.
As a special case, you can also set the domain name to "#", whereupon dnsmasq
interprets that to use the domain of the host OS.
Example default.xml:
<network>
<name>default</name>
<uuid>0098abb7-ff94-4df9-aa78-e4c3fe636a3d</uuid>
<bridge name="virbr0" />
<domain name="mynet.net" />
<forward/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<host name="vm1.mynet.net" mac="00:16:3e:24:a5:84"
ip="192.168.122.101" />
<host name='vm2.mynet.net' mac="00:16:3e:1f:9a:95"
ip="192.168.122.102" />
<range start="192.168.122.2" end="192.168.122.99" />
</dhcp>
</ip>
</network>
Here is the patch:
diff -r -U 3 libvirt-0.4.4/src/network_conf.c libvirt-0.4.4jjr/src/network_conf.c
--- libvirt-0.4.4/src/network_conf.c 2008-08-20 09:20:01.000000000 -0400
+++ libvirt-0.4.4jjr/src/network_conf.c 2008-09-06 14:03:56.000000000 -0400
@@ -326,6 +326,9 @@
VIR_FREE(tmp);
}
+ /* Parse network domain information */
+ def->domain = virXPathString(conn, "string(./domain[1]/@name)", ctxt);
+
/* Parse bridge information */
def->bridge = virXPathString(conn, "string(./bridge[1]/@name)", ctxt);
tmp = virXPathString(conn, "string(./bridge[1]/@stp)", ctxt);
diff -r -U 3 libvirt-0.4.4/src/network_conf.h libvirt-0.4.4jjr/src/network_conf.h
--- libvirt-0.4.4/src/network_conf.h 2008-08-20 09:20:01.000000000 -0400
+++ libvirt-0.4.4jjr/src/network_conf.h 2008-09-06 14:03:56.000000000 -0400
@@ -57,6 +57,7 @@
char *name;
char *bridge; /* Name of bridge device */
+ char *domain;
unsigned long delay; /* Bridge forward delay (ms) */
int stp : 1; /* Spanning tree protocol */
diff -r -U 3 libvirt-0.4.4/src/qemu_driver.c libvirt-0.4.4jjr/src/qemu_driver.c
--- libvirt-0.4.4/src/qemu_driver.c 2008-08-29 03:20:02.000000000 -0400
+++ libvirt-0.4.4jjr/src/qemu_driver.c 2008-09-06 14:15:28.000000000 -0400
@@ -1105,6 +1105,7 @@
1 + /* --keep-in-foreground */
1 + /* --strict-order */
1 + /* --bind-interfaces */
+ (network->def->domain?2:0) + /* --domain name */
2 + /* --pid-file "" */
2 + /* --conf-file "" */
/*2 + *//* --interface virbr0 */
@@ -1136,6 +1137,11 @@
APPEND_ARG(*argv, i++, "--strict-order");
APPEND_ARG(*argv, i++, "--bind-interfaces");
+ if (network->def->domain) {
+ APPEND_ARG(*argv, i++, "--domain");
+ APPEND_ARG(*argv, i++, network->def->domain);
+ }
+
APPEND_ARG(*argv, i++, "--pid-file");
APPEND_ARG(*argv, i++, "");
Thanks!
-JJ Reynolds