On Sat, Jun 3, 2017 at 3:33 PM, Paul Oranje <p...@xs4all.nl> wrote:
> Thanks, please see a few quick reactions of mine inline ...
> Paul
>
>> Op 3 jun. 2017, om 14:18 heeft Hans Dedecker <dedec...@gmail.com> het 
>> volgende geschreven:
>>
>> On Thu, Jun 1, 2017 at 12:00 PM, Paul Oranje <p...@xs4all.nl> wrote:
>>> Hello Hans,
>>>
>>> A new version of this small patch is worked on -overlooked your previous 
>>> comment and have lately been busy with other stuff-, but after studying the 
>>> code a little more I’ve a few questions. The intended patch changes code 
>>> that was added with commit a35f9bbc43c3da06eed042f80dc09e8c1da681b4 
>>> (dnsmasq: Multiple dnsmasq instances support) that was authored by you.
>>>
>>>
>>> The routines dnsmasq_start() and dnsmasq_stop() contain a guard on writing 
>>> and resetting /tmp/resolv.conf:
>>>        [ "$resolvfile" = "/tmp/resolv.conf.auto” ] &&
>>>
>>> As explained in FS#785, the guard test fails when $noresolv is true and 
>>> $resolvfile has not been explicitly configured to its default 
>>> "/tmp/resolv.conf.auto", causing /tmp/resolv.conf to remain a soft link to 
>>> /tmp/resolv.conf.auto (the WAN its DNS).
>>>
>>> The routine dnsmasq_stop() the guard is commented with
>>>        #relink /tmp/resolve.conf only for main instance
>>>
>>> This suggests that only for the main (first ?) instance /tmp/resolv.conf 
>>> would be handled, which makes sense, but the test to accomplish that seems 
>>> wrong.
>>>
>>> Q1:
>>> What is the supposed relation between dnsmasq instance and the value of the 
>>> value/setting of resolvfile ?
>> The DNS servers learned on the wan interface(s) by netifd are written
>> in /tmp/resolv.conf.auto. By default a dnsmasq instance uses
>> /tmp/resolv.conf.auto as resolver file unless configured otherwise.
> Indeed and whether dnsmasq uses the (whatever) resolvfile is governed by the 
> noresolv parameter; these two parameters are orthogonal.
> The init script though skips setting resolvfile when noresolv is true.
Agree the value of noresolv should have no influence on reading he
resolvfile parameter; this behavior has been introduced in commit
2ac21bd793946a214295b760cd652b4150d3dc07
>
>> Using /tmp/rsolv.conf.auto as resolver file triggers logic to rewrite
>> /tmp/resolv.conf
> Why would the question whether local DNS resolution is handled by the DNS 
> available on WAN interface be determined by this specific **value** of 
> $resolvfile (and irrespective of the actual existence of that file) ?
>
> Also the above question (Q1) is about the relation with the dnsmasq 
> **instance**.
> Could you please share your thoughts on the relation behind first instance 
> and the value of $resolvfile ?
If resolvfile is set to /tmp/resolv.conf.auto assumption is made this
is the main dnsmasq instance due to a lack of a better criterium. DHCP
configs in use before the introduction of multiple dnsmasq instances
used /tmp/resolv.conf.auto as netifd by default populates the file
/tmp/resolv.conf.auto. That's the only link I see between the main
dnsmasq instance and the value of resolvfile
>
>
>>> A fix I considered is to omit this guard altogether (so different from the 
>>> patch previously submitted), so that the local DNS service will allways be 
>>> used for local (router) DNS resolution when dnsmasq is started; at stop of 
>>> dnsmasq the local resolution would return to use $resolvfile. Obviously 
>>> doing so in dnsmasq_start() and dnsmasq_stop() routines that start or stop 
>>> an instance would be the wrong place to do so, since that code will be 
>>> called for each instance. These routines ar spawned from the 
>>> start_service() and stop_service() routines that do iterate on the 
>>> instances.
>>>
>>> Q2:
>>> Would placement of the /tmp/resolv.conf handling not be better placed in 
>>> the start_ and stop_service() routines or, be guarded by a better test in 
>>> the dnsmasq_start() and _stop() routines ? In other words: what would be a 
>>> correct test ?
>> we could move rewriting of /tmp/resolv.conf to the start routine; but
>> this will not be trivial as for every dnsmasq instance DNS_SERVERS and
>> DOMAIN state will need to be kept
> The objective is to rewrite /tmp/resolv.conf to use local resolution whenever 
> a local resolver runs (i.e. dnsmasq, unbound, ... listening on localhost:53). 
> As multiple instances may be started, triggering on the first/main one seems 
> to make sense (for lack of a better criterium).
> So the question is: what do you think is a (practical) guard for that (and in 
> what routines would those be placed best) ?
The dnsmasq instance which listens on 127.0.0.1 (and thus does not
exclude the loopback interface in the notinterface parameter) for dns
requests can be used as trigger to rewrite /tmp/resolv.conf.auto which
means the logic needs to be kept in dnsmasq_start
>
>>> In the stop routine the file /tmp/resolv.conf is (re)set to a soft link to 
>>> $resolvfile, which currently because of the test always is 
>>> "/tmp/resolv.conf.auto”, irrespective whether that file exists or not.
>>>
>>> Q3:
>>> What would be the desired state of /tmp/resolv.conf after dnsmasq has been 
>>> stopped ?
>> In case dnsmasq is stopped /tmp/resolv.conf needs to use only the wan
>> DNS servers; which are written by netifd in /tmp/resolv.conf.auto; and
>> not anymore 127.0.0.1.
> Okay, so that should never be any self user defined resolvfile ?
AFAIK this has never been the case before

Hans
>
>> Hans
>>>
>>>
>>> Bye,
>>> Paul
>>>
>>>
>>>
>>>> Op 20 mei 2017, om 20:58 heeft Hans Dedecker <dedec...@gmail.com> het 
>>>> volgende geschreven:
>>>>
>>>> On Sat, May 20, 2017 at 12:41 AM, Paul Oranje <p...@xs4all.nl> wrote:
>>>>> When UCI dhcp.dnsmasq.noresolv is true, dnsmasq ignores the (wan) 
>>>>> resolv.conf
>>>>> for upstream name resolution and the dnsmasq init script ialso skips 
>>>>> writing
>>>>> /tmp/resolv.conf (/etc/resolv.conf soft links that file).
>>>>>
>>>>> Not using the local running DNS service when noresolv is true does not 
>>>>> make
>>>>> sence; the semantics of that config value do not imply this. With this 
>>>>> patch
>>>>> the init script also writes /tmp/resolv.conf when noresolv is true.
>>>>>
>>>>> fixes FS#785
>>>>>
>>>>> Signed-off-by: Paul Oranje <p...@xs4all.nl>
>>>>> ---
>>>>> This patch replaces an earlier patch with subject
>>>>> dnsmasq: also write /tmp/resolv.conf when UCI dhcp.dnsmasq.noresolv is '1'
>>>>> which is obsoleted because that subject was required to be shorter.
>>>>> ---
>>>>> package/network/services/dnsmasq/files/dnsmasq.init | 4 ++--
>>>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/package/network/services/dnsmasq/files/dnsmasq.init 
>>>>> b/package/network/services/dnsmasq/files/dnsmasq.init
>>>>> index 30fec7a4ee..197aae9de1 100644
>>>>> --- a/package/network/services/dnsmasq/files/dnsmasq.init
>>>>> +++ b/package/network/services/dnsmasq/files/dnsmasq.init
>>>>> @@ -947,7 +947,7 @@ dnsmasq_start()
>>>>>       echo >> $CONFIGFILE_TMP
>>>>>       mv -f $CONFIGFILE_TMP $CONFIGFILE
>>>>>
>>>>> -       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>>>> +       [ "$noresolv" = "1" -o "$resolvfile" = "/tmp/resolv.conf.auto" ] 
>>>>> && {
>>>>>               rm -f /tmp/resolv.conf
>>>>>               [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
>>>>>                       echo "search $DOMAIN" >> /tmp/resolv.conf
>>>>> @@ -982,7 +982,7 @@ dnsmasq_stop()
>>>>>       config_get resolvfile "$cfg" "resolvfile"
>>>>>
>>>>>       #relink /tmp/resolve.conf only for main instance
>>>>> -       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
>>>>> +       [ "$noresolv" = "1" -o "$resolvfile" = "/tmp/resolv.conf.auto" ] 
>>>>> && {
>>>> As mentioned in the previous code review noresolv value must be read
>>>> from config (similar to resolvfile) otherwise this will not work
>>>>>               [ -f /tmp/resolv.conf ] && {
>>>>>                       rm -f /tmp/resolv.conf
>>>>>                       ln -s "$resolvfile" /tmp/resolv.conf
>>>> As mentioned in the previous code review resolvfile can now be empty
>>>> which will make ln -s produce an error
>>>>
>>>> Hans
>>>>> --
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Lede-dev mailing list
>>>>> Lede-dev@lists.infradead.org
>>>>> http://lists.infradead.org/mailman/listinfo/lede-dev
>>>>
>>>> _______________________________________________
>>>> Lede-dev mailing list
>>>> Lede-dev@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/lede-dev
>>>
>>
>> _______________________________________________
>> Lede-dev mailing list
>> Lede-dev@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/lede-dev
>

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to