ifupdown: do not fail if interface disappears during ifdown
Interface may not exist because it got deleted by an ifdown hook script earlier. This may happen when a virtual interface, such as VLAN, has multiple iface blocks defined. function old new delta static_down6 14 40 +26 static_down 54 70 +16 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 42/0) Total: 42 bytes Signed-off-by: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
46ba2468a3
commit
123fdda0a4
@ -138,6 +138,7 @@
|
|||||||
//usage: "\n -v Print out what would happen before doing it"
|
//usage: "\n -v Print out what would happen before doing it"
|
||||||
//usage: "\n -f Force deconfiguration"
|
//usage: "\n -f Force deconfiguration"
|
||||||
|
|
||||||
|
#include <net/if.h>
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "common_bufsiz.h"
|
#include "common_bufsiz.h"
|
||||||
/* After libbb.h, since it needs sys/types.h on some systems */
|
/* After libbb.h, since it needs sys/types.h on some systems */
|
||||||
@ -503,6 +504,8 @@ static int FAST_FUNC static_up6(struct interface_defn_t *ifd, execfn *exec)
|
|||||||
|
|
||||||
static int FAST_FUNC static_down6(struct interface_defn_t *ifd, execfn *exec)
|
static int FAST_FUNC static_down6(struct interface_defn_t *ifd, execfn *exec)
|
||||||
{
|
{
|
||||||
|
if (!if_nametoindex(ifd->iface))
|
||||||
|
return 1; /* already gone */
|
||||||
# if ENABLE_FEATURE_IFUPDOWN_IP
|
# if ENABLE_FEATURE_IFUPDOWN_IP
|
||||||
return execute("ip link set %iface% down", ifd, exec);
|
return execute("ip link set %iface% down", ifd, exec);
|
||||||
# else
|
# else
|
||||||
@ -598,6 +601,9 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec)
|
|||||||
static int FAST_FUNC static_down(struct interface_defn_t *ifd, execfn *exec)
|
static int FAST_FUNC static_down(struct interface_defn_t *ifd, execfn *exec)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
if (!if_nametoindex(ifd->iface))
|
||||||
|
return 2; /* already gone */
|
||||||
# if ENABLE_FEATURE_IFUPDOWN_IP
|
# if ENABLE_FEATURE_IFUPDOWN_IP
|
||||||
/* Optional "label LBL" is necessary if interface is an alias (eth0:0),
|
/* Optional "label LBL" is necessary if interface is an alias (eth0:0),
|
||||||
* otherwise "ip addr flush dev eth0:0" flushes all addresses on eth0.
|
* otherwise "ip addr flush dev eth0:0" flushes all addresses on eth0.
|
||||||
|
Loading…
Reference in New Issue
Block a user