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(a)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