[libvirt] [PATCH] loopback is not always just lo

Laine Stump laine at laine.org
Mon Nov 7 18:10:06 UTC 2016


On 11/07/2016 04:15 AM, Daniel P. Berrange wrote:
> On Mon, Nov 07, 2016 at 01:52:05AM -0500, Laine Stump wrote:
>> On 11/06/2016 01:54 AM, Roman Bogorodskiy wrote:
>>>     Daniel P. Berrange wrote:
>>>
>>>> On Tue, Nov 01, 2016 at 06:15:59PM +0300, Pavel Timofeev wrote:
>>>>>    On BSD family OSes (Free/Net/Open/DragonFlyBSD, Mac OS) and
>>>>>    Solaris loopback interface is called 'lo0' instead of just 'lo'.
>>>>>
>>>>> ---
>>>>>    src/network/bridge_driver.c | 5 +++++
>>>>>    1 file changed, 5 insertions(+)
>>>>>
>>>>> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
>>>>> index a3ee3f3..9d94d65 100644
>>>>> --- a/src/network/bridge_driver.c
>>>>> +++ b/src/network/bridge_driver.c
>>>>> @@ -1002,7 +1002,12 @@ networkDnsmasqConfContents(virNetworkObjPtr network,
>>>>>            virBufferAsprintf(&configbuf, "pid-file=%s\n", pidfile);
>>>>>        /* dnsmasq will *always* listen on localhost unless told otherwise */
>>>>> +#ifdef __linux__
>>>>>        virBufferAddLit(&configbuf, "except-interface=lo\n");
>>>>> +#else
>>>>> +    /* BSD family OSes and Solaris call loopback interface as lo0 */
>>>>> +    virBufferAddLit(&configbuf, "except-interface=lo0\n");
>>>>> +#endif
>>>>>        if (dnsmasqCapsGet(caps, DNSMASQ_CAPS_BIND_DYNAMIC)) {
>>>>>            /* using --bind-dynamic with only --interface (no
>>>> ACK will push shortly.
>>> This breaks all the networkxml2conftest tests, for example:
>>>
>>> $ VIR_TEST_DEBUG=1 VIR_TEST_RANGE=1 ./tests/networkxml2conftest
>>> TEST: networkxml2conftest
>>>    1) Network XML-2-Conf isolated-network                               ...
>>> In '/home/novel/code/libvirt/tests/networkxml2confdata/isolated-network.conf':
>>> Offset 303
>>> Expect [
>>> ]
>>> Actual [0
>>> ]
>>> $
>> On IRC the other day Roman mentioned the idea of just replacing "lo" with
>> "lo*" on all platforms. I checked the dnsmasq documentation and this simple
>> wildcarding is supported for the except-interface option, so I tried out
>> such a patch on my system and it seems to work properly. Maybe we should do
>> that instead of having yet another chunk of #ifdef __linux__ code (the test
>> case datafiles will still need to be changed, but at least they'll be
>> identical for all platforms).
> Any idea how far back wildcards work.  If they still work on the RHEL-6
> vintage dnsmasq, then I'd agree with you and it'll make the test case
> fix easier to avoid the conditional.

Time for the "Monday Sigh". Sigh.

I looked this up in dnsmasq's git repo, and it seems recognition of 
wildcards in interface names was added in

   commit 49333cbdbef3bf86198b31a42bffad002de305d5
   Author: Simon Kelley <simon at thekelleys.org.uk>
   Date:   Fri Mar 15 20:30:51 2013 +0000

       Allow trailing '*' wildcard in interface names.

That commit was first in dnsmasq 2.66, but RHEL6 is using dnsmasq 2.48.

The strange thing is that I tried running dnsmasq on RHEL6 with 
"--except-interface=lo*" and was able to run multiple instances. I guess 
my test was flawed. (NetworkManager doesn't support use of dnsmasq for 
DNS services, as Cole suggested as a test in:

   https://bugzilla.redhat.com/show_bug.cgi?id=886663#c2

But the source doesn't lie.)

So I guess we need to parameterize the tests somehow (this seems 
familiar, but I can't remember why).




More information about the libvir-list mailing list