linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hv_set_ifconfig.sh double check before setting ip
@ 2017-08-08 13:53 Eduardo Otubo
  2017-08-09  4:11 ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: Eduardo Otubo @ 2017-08-08 13:53 UTC (permalink / raw)
  To: netdev
  Cc: linux-kernel, devel, Stephen Hemminger, Haiyang Zhang,
	K . Y . Srinivasan

This patch fixes the behavior of the hv_set_ifconfig script when setting
the interface ip. Sometimes the interface has already been configured by
network daemon, in this case hv_set_ifconfig causes "RTNETLINK: file
exists error"; in order to avoid this error this patch makes sure double
checks the interface before trying anything.

Signed-off-by: Eduardo Otubo <otubo@redhat.com>
---
 tools/hv/hv_set_ifconfig.sh | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/tools/hv/hv_set_ifconfig.sh b/tools/hv/hv_set_ifconfig.sh
index 735aafd64a3f..ba5e4aa4efe2 100755
--- a/tools/hv/hv_set_ifconfig.sh
+++ b/tools/hv/hv_set_ifconfig.sh
@@ -46,19 +46,26 @@
 # is expected to return the configuration that is set via the SET
 # call.
 #
+interface=$(echo $1 | awk -F - '{ print $2 }')
 
+current_ip=$(ip addr show $interface|grep "inet ");
+config_file_ip=$(grep IPADDR $1|cut -d"=" -f2);
 
+current_ipv6=$(ip addr show $interface|grep "inet6 ");
+config_file_ipv6=$(grep IPV6ADDR $1|cut -d"=" -f2);
+config_file_ipv6_netmask=$(grep IPV6NETMASK $1|cut -d"=" -f2);
+config_file_ipv6=${config_file_ipv6}/${config_file_ipv6_netmask};
 
-echo "IPV6INIT=yes" >> $1
-echo "NM_CONTROLLED=no" >> $1
-echo "PEERDNS=yes" >> $1
-echo "ONBOOT=yes" >> $1
-
-
-cp $1 /etc/sysconfig/network-scripts/
-
+# only set the IP if it's not configured yet
+if [[ $(test "${current_ip#*$config_file_ip}") == "$config_file_ip" \
+    || $(test "${current_ipv6#*$config_file_ipv6}") == "$current_ipv6" ]]; then
+    echo "IPV6INIT=yes" >> $1
+    echo "NM_CONTROLLED=no" >> $1
+    echo "PEERDNS=yes" >> $1
+    echo "ONBOOT=yes" >> $1
 
-interface=$(echo $1 | awk -F - '{ print $2 }')
+    cp $1 /etc/sysconfig/network-scripts/
 
-/sbin/ifdown $interface 2>/dev/null
-/sbin/ifup $interface 2>/dev/null
+    /sbin/ifdown $interface 2>/dev/null
+    /sbin/ifup $interface 2>/dev/null
+fi
-- 
2.13.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] hv_set_ifconfig.sh double check before setting ip
  2017-08-08 13:53 [PATCH] hv_set_ifconfig.sh double check before setting ip Eduardo Otubo
@ 2017-08-09  4:11 ` David Miller
  2017-08-09  9:02   ` Eduardo Otubo
  0 siblings, 1 reply; 5+ messages in thread
From: David Miller @ 2017-08-09  4:11 UTC (permalink / raw)
  To: otubo; +Cc: netdev, linux-kernel, devel, sthemmin, haiyangz, kys

From: Eduardo Otubo <otubo@redhat.com>
Date: Tue,  8 Aug 2017 15:53:45 +0200

> This patch fixes the behavior of the hv_set_ifconfig script when setting
> the interface ip. Sometimes the interface has already been configured by
> network daemon, in this case hv_set_ifconfig causes "RTNETLINK: file
> exists error"; in order to avoid this error this patch makes sure double
> checks the interface before trying anything.
> 
> Signed-off-by: Eduardo Otubo <otubo@redhat.com>

And if the daemon sets the address after you test it but before
you try to set it in the script, what happens?

This is why I hate changes like this.  They don't remove the problem,
they make it smaller.  And smaller in a bad way.  Smaller makes the
problem even more harder to diagnose when it happens.

There is implicitly no synchonization between network configuration
daemons and things people run by hand like this script.

So, caveat emptor.

I'm not applying this, sorry.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hv_set_ifconfig.sh double check before setting ip
  2017-08-09  4:11 ` David Miller
@ 2017-08-09  9:02   ` Eduardo Otubo
  2017-08-10  7:40     ` Eduardo Otubo
  0 siblings, 1 reply; 5+ messages in thread
From: Eduardo Otubo @ 2017-08-09  9:02 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, linux-kernel, devel, sthemmin, haiyangz, kys

On 08/09/2017 06:11 AM, David Miller wrote:
> From: Eduardo Otubo <otubo@redhat.com>
> Date: Tue,  8 Aug 2017 15:53:45 +0200
> 
>> This patch fixes the behavior of the hv_set_ifconfig script when setting
>> the interface ip. Sometimes the interface has already been configured by
>> network daemon, in this case hv_set_ifconfig causes "RTNETLINK: file
>> exists error"; in order to avoid this error this patch makes sure double
>> checks the interface before trying anything.
>>
>> Signed-off-by: Eduardo Otubo <otubo@redhat.com>
> 
> And if the daemon sets the address after you test it but before
> you try to set it in the script, what happens?
> 
> This is why I hate changes like this.  They don't remove the problem,
> they make it smaller.  And smaller in a bad way.  Smaller makes the
> problem even more harder to diagnose when it happens.
> 
> There is implicitly no synchonization between network configuration
> daemons and things people run by hand like this script.
> 
> So, caveat emptor.
> 
> I'm not applying this, sorry.
> 

This is just part of the resolution, actually. For RHEL I also configure 
hyperv-daemons' systemd config file to be run only after network service 
is up.

So perhaps my solution should be distro-agnostic and only involve this 
script as part of it? In this case I'll elaborate a little more then.

Thanks for the comment.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hv_set_ifconfig.sh double check before setting ip
  2017-08-09  9:02   ` Eduardo Otubo
@ 2017-08-10  7:40     ` Eduardo Otubo
  2017-08-10 16:12       ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: Eduardo Otubo @ 2017-08-10  7:40 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, linux-kernel, devel, sthemmin, haiyangz, kys

On 08/09/2017 11:02 AM, Eduardo Otubo wrote:
> On 08/09/2017 06:11 AM, David Miller wrote:
>> From: Eduardo Otubo <otubo@redhat.com>
>> Date: Tue,  8 Aug 2017 15:53:45 +0200
>>
>>> This patch fixes the behavior of the hv_set_ifconfig script when setting
>>> the interface ip. Sometimes the interface has already been configured by
>>> network daemon, in this case hv_set_ifconfig causes "RTNETLINK: file
>>> exists error"; in order to avoid this error this patch makes sure double
>>> checks the interface before trying anything.
>>>
>>> Signed-off-by: Eduardo Otubo <otubo@redhat.com>
>>
>> And if the daemon sets the address after you test it but before
>> you try to set it in the script, what happens?
>>
>> This is why I hate changes like this.  They don't remove the problem,
>> they make it smaller.  And smaller in a bad way.  Smaller makes the
>> problem even more harder to diagnose when it happens.
>>
>> There is implicitly no synchonization between network configuration
>> daemons and things people run by hand like this script.
>>
>> So, caveat emptor.
>>
>> I'm not applying this, sorry.

But also, looking from a different point of view, the current upstream 
solution does not avoid the problems you mentioned. My fix at least 
avoids double configuration and RTNETLINK errors. So perhaps you could 
consider this as "a better version walking towards an ideal fix"?

>>
> 
> This is just part of the resolution, actually. For RHEL I also configure 
> hyperv-daemons' systemd config file to be run only after network service 
> is up.
> 
> So perhaps my solution should be distro-agnostic and only involve this 
> script as part of it? In this case I'll elaborate a little more then.
> 
> Thanks for the comment.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hv_set_ifconfig.sh double check before setting ip
  2017-08-10  7:40     ` Eduardo Otubo
@ 2017-08-10 16:12       ` David Miller
  0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2017-08-10 16:12 UTC (permalink / raw)
  To: otubo; +Cc: netdev, linux-kernel, devel, sthemmin, haiyangz, kys

From: Eduardo Otubo <otubo@redhat.com>
Date: Thu, 10 Aug 2017 09:40:27 +0200

> On 08/09/2017 11:02 AM, Eduardo Otubo wrote:
>> On 08/09/2017 06:11 AM, David Miller wrote:
>>> From: Eduardo Otubo <otubo@redhat.com>
>>> Date: Tue,  8 Aug 2017 15:53:45 +0200
>>>
>>>> This patch fixes the behavior of the hv_set_ifconfig script when
>>>> setting
>>>> the interface ip. Sometimes the interface has already been configured
>>>> by
>>>> network daemon, in this case hv_set_ifconfig causes "RTNETLINK: file
>>>> exists error"; in order to avoid this error this patch makes sure
>>>> double
>>>> checks the interface before trying anything.
>>>>
>>>> Signed-off-by: Eduardo Otubo <otubo@redhat.com>
>>>
>>> And if the daemon sets the address after you test it but before
>>> you try to set it in the script, what happens?
>>>
>>> This is why I hate changes like this.  They don't remove the problem,
>>> they make it smaller.  And smaller in a bad way.  Smaller makes the
>>> problem even more harder to diagnose when it happens.
>>>
>>> There is implicitly no synchonization between network configuration
>>> daemons and things people run by hand like this script.
>>>
>>> So, caveat emptor.
>>>
>>> I'm not applying this, sorry.
> 
> But also, looking from a different point of view, the current upstream
> solution does not avoid the problems you mentioned. My fix at least
> avoids double configuration and RTNETLINK errors. So perhaps you could
> consider this as "a better version walking towards an ideal fix"?

I didn't say upstream avoids the problem.

In fact, that's the good thing.  It doesn't try to do something it
cannot do without explicit pieces of synchronization infrastructure
between such tools.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-08-10 16:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-08 13:53 [PATCH] hv_set_ifconfig.sh double check before setting ip Eduardo Otubo
2017-08-09  4:11 ` David Miller
2017-08-09  9:02   ` Eduardo Otubo
2017-08-10  7:40     ` Eduardo Otubo
2017-08-10 16:12       ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).