@@ -1079,6 +1079,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
1079
1079
int optlen ;
1080
1080
unsigned int pref = 0 ;
1081
1081
__u32 old_if_flags ;
1082
+ bool send_ifinfo_notify = false;
1082
1083
1083
1084
__u8 * opt = (__u8 * )(ra_msg + 1 );
1084
1085
@@ -1158,7 +1159,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
1158
1159
IF_RA_OTHERCONF : 0 );
1159
1160
1160
1161
if (old_if_flags != in6_dev -> if_flags )
1161
- inet6_ifinfo_notify ( RTM_NEWLINK , in6_dev ) ;
1162
+ send_ifinfo_notify = true ;
1162
1163
1163
1164
if (!in6_dev -> cnf .accept_ra_defrtr ) {
1164
1165
ND_PRINTK (2 , info ,
@@ -1261,7 +1262,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
1261
1262
rtime = HZ /10 ;
1262
1263
NEIGH_VAR_SET (in6_dev -> nd_parms , RETRANS_TIME , rtime );
1263
1264
in6_dev -> tstamp = jiffies ;
1264
- inet6_ifinfo_notify ( RTM_NEWLINK , in6_dev ) ;
1265
+ send_ifinfo_notify = true ;
1265
1266
}
1266
1267
1267
1268
rtime = ntohl (ra_msg -> reachable_time );
@@ -1278,11 +1279,17 @@ static void ndisc_router_discovery(struct sk_buff *skb)
1278
1279
GC_STALETIME , 3 * rtime );
1279
1280
in6_dev -> nd_parms -> reachable_time = neigh_rand_reach_time (rtime );
1280
1281
in6_dev -> tstamp = jiffies ;
1281
- inet6_ifinfo_notify ( RTM_NEWLINK , in6_dev ) ;
1282
+ send_ifinfo_notify = true ;
1282
1283
}
1283
1284
}
1284
1285
}
1285
1286
1287
+ /*
1288
+ * Send a notify if RA changed managed/otherconf flags or timer settings
1289
+ */
1290
+ if (send_ifinfo_notify )
1291
+ inet6_ifinfo_notify (RTM_NEWLINK , in6_dev );
1292
+
1286
1293
skip_linkparms :
1287
1294
1288
1295
/*
0 commit comments