[libvirt] [PATCH] additional parameter needed for dnsmasq
Gene Czarcinski
gene at czarc.net
Wed Aug 22 14:23:44 UTC 2012
On 08/22/2012 06:51 AM, Gene Czarcinski wrote:
> On 08/21/2012 11:04 AM, Daniel P. Berrange wrote:
>> On Tue, Aug 21, 2012 at 10:43:44AM -0400, Gene Czarcinski wrote:
>>> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=849787
>>>
>>> As currently configured, dnsmasq for a virtual network will pass
>>> some queries upstream toward the Internet. This includes AAAA and
>>> MX queries as well a A queries when dnsmasq cannot answer for that
>>> name. This is occurring whether a domain name is specified or not.
>>> The problem is that dnsmasq will, by default, forward all queries
>>> unless "local=" is specified. I cannot envision a situation where
>>> such queries should be forwarded.
>>>
>>> See the bugzilla report for more info. While I did a lot of testing
>>> to figure out the problem and what needed to be done to fix it, I am
>>> unable to actually rebuild the libvirt rpm in my environment.
>>>
>>> The solution is the following patch:
>>>
>>> diff -uNr libvirt-0.9.11.4.orig/src/network/bridge_driver.c
>>> libvirt-0.9.11.4/src/network/bridge_driver.c
>>> --- libvirt-0.9.11.4.orig/src/network/bridge_driver.c 2012-06-15
>>> 14:23:21.000000000 -0400
>>> +++ libvirt-0.9.11.4/src/network/bridge_driver.c 2012-08-21
>>> 09:03:17.387602485 -0400
>>> @@ -491,7 +491,13 @@
>>> virCommandAddArgList(cmd, "--strict-order",
>>> "--bind-interfaces", NULL);
>>>
>>> if (network->def->domain)
>>> - virCommandAddArgList(cmd, "--domain", network->def->domain,
>>> NULL);
>>> +// virCommandAddArgList(cmd, "--domain",
>>> network->def->domain, NULL);
>>> + virCommandAddArgFormat(cmd,
>>> + "--domain %s --local=/%s/",
>>> + network->def->domain,
>>> + network->def->domain);
>>> + else
>>> + virCommandAddArg(cmd, "--local=");
>>>
>>> if (pidfile)
>>> virCommandAddArgPair(cmd, "--pid-file", pidfile);
>>
>> Since this changes the code that generates dnsmasq args, you'll
>> also need to update the tests/networkxml2argvdata/ data files
>> to take account of your new additions.
>>
>>
> And here I thought it was just a tiny patch. When I get thinks
> finalized, there will be an update to the tests also.
>
> But, the patch itself is not good. For example, for no domain
> specified, instead of "--local=", it should be "--local-//". And then
> with the domain specified, this just does not work for some reason
> dnsmasq has errors starting.
>
> I must say that I believe that whoever chose to use dnsmasq definitely
> made the right choice. However, I wich it was easier to change and
> test new parameter seetings for dnsmasq rather than having it in the
> code.
>
> So that I do not have to go through a lot of code changes, I am
> testing with two virtual guests. The first has two NICs one connected
> to the default network and a second to a private network with dnsmasq
> (dns and dhcp) for the private network. The second guest is on the
> private network and tests the various setups for dnsmasq.
>
> My initial simplified test used the /etc/dnsmasq.conf and supplied
> some additional parameters that I had not realized. My testing is not
> attempting to create a situation similar to that for libvirtd which
> has everything specified on the command-line.
>
> Any comments, suggestions will be appreciated.
>
OK, I am going to need a little help here.
First, is there any documentation on things that need to be done in test
when changes are made? Right now there is a lot of stuff there and I am
not sure what needs to be added where.
Second, I have since the rpm will compile with my patch and goes through
enough of -bi --short-circuit to create
BUILDROOT/libvirt.../usr/sbin/libvirtd I am copying this over to a real
system and installing it replacing the original /usr/sbin/libvirtd
With my patch installed, when libvirtd attempts to start a network, it
errors out with something like the follow:
====================
internal error Child process (/sbin/dnsmasq --strict-order
--bind-interfaces --domain virt123 --local=/virt123/ --domain-needed
--filterwin2k --pid-file=/var/run/libvirt/network/net123.pid
--conf-file= --except-interface lo --listen-address 192.168.123.1
--dhcp-range 192.168.123.128,192.168.123.254
--dhcp-leasefile=/var/lib/libvirt/dnsmasq/net123.leases
--dhcp-lease-max=127 --dhcp-no-override --expand-hosts) status
unexpected: exit status 1
====================
About the only version that does not have a problem is replacing
"--domain virt123 --local=/virt123/ --domain-needed --filterwin2k" with
"--local="
OK, something is wrong.
However, is I "kill -9 <the running instance or dnsmasq>" and then, as
root, manually start dnsmasq with all of the above parameters, it runs
and works find on the virtual network!
Obviously, I am missing something! Can someone point me in the right
direction?
Gene
More information about the libvir-list
mailing list