mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Fixes longstanding issue with interfaces staying in IF_TMP_DOWN.
Thanks to Pierluigi Rolando and others for the bugreport.
This commit is contained in:
@@ -535,7 +535,7 @@ krt_read_ifannounce(struct ks_msg *msg)
|
||||
}
|
||||
|
||||
static void
|
||||
krt_read_ifinfo(struct ks_msg *msg)
|
||||
krt_read_ifinfo(struct ks_msg *msg, int scan)
|
||||
{
|
||||
struct if_msghdr *ifm = (struct if_msghdr *)&msg->rtm;
|
||||
void *body = (void *)(ifm + 1);
|
||||
@@ -608,11 +608,14 @@ krt_read_ifinfo(struct ks_msg *msg)
|
||||
else
|
||||
f.flags |= IF_MULTIACCESS; /* NBMA */
|
||||
|
||||
if_update(&f);
|
||||
iface = if_update(&f);
|
||||
|
||||
if (!scan)
|
||||
if_end_partial_update(iface);
|
||||
}
|
||||
|
||||
static void
|
||||
krt_read_addr(struct ks_msg *msg)
|
||||
krt_read_addr(struct ks_msg *msg, int scan)
|
||||
{
|
||||
struct ifa_msghdr *ifam = (struct ifa_msghdr *)&msg->rtm;
|
||||
void *body = (void *)(ifam + 1);
|
||||
@@ -715,6 +718,9 @@ krt_read_addr(struct ks_msg *msg)
|
||||
ifa_update(&ifa);
|
||||
else
|
||||
ifa_delete(&ifa);
|
||||
|
||||
if (!scan)
|
||||
if_end_partial_update(iface);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -734,11 +740,11 @@ krt_read_msg(struct proto *p, struct ks_msg *msg, int scan)
|
||||
krt_read_ifannounce(msg);
|
||||
break;
|
||||
case RTM_IFINFO:
|
||||
krt_read_ifinfo(msg);
|
||||
krt_read_ifinfo(msg, scan);
|
||||
break;
|
||||
case RTM_NEWADDR:
|
||||
case RTM_DELADDR:
|
||||
krt_read_addr(msg);
|
||||
krt_read_addr(msg, scan);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
Reference in New Issue
Block a user