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

Pino Toscano ptoscano at redhat.com
Mon Nov 28 15:44:46 UTC 2016


On Monday, 7 November 2016 13:10:06 CET Laine Stump wrote:
> 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).

Another option could be to create two except-interface items in the
configuration, "lo" and "lo0", regardless the OS. It seems like
dnsmasq supports multiple arguments for --interface and
--except-interface for a decade (I went back to v2.32 cca 2006, feel
free to double check). If the lo* solution proposed above was deemed
safe, just matching two specific interface names instead of everything
starting with "lo" should be even more safe.

What do you think? Should I go ahead and send the patch implementing
my above proposal?

-- 
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161128/90b0ca97/attachment-0001.sig>


More information about the libvir-list mailing list