rdisc: preserve most-managed dhcp-level from multiple router advertisements
This commit is contained in:
@@ -238,11 +238,15 @@ receive_ra (gpointer user_data)
|
||||
NMRDiscConfigMap changed = 0;
|
||||
guint32 now = nm_utils_get_monotonic_timestamp_s ();
|
||||
guint i;
|
||||
NMRDiscDHCPLevel dhcp_level;
|
||||
|
||||
priv->receive_ra_id = 0;
|
||||
|
||||
if (rdata->public.dhcp_level != ra->dhcp_level) {
|
||||
rdata->public.dhcp_level = ra->dhcp_level;
|
||||
/* preserve the "most managed" level on updates. */
|
||||
dhcp_level = MAX (rdata->public.dhcp_level, ra->dhcp_level);
|
||||
|
||||
if (rdata->public.dhcp_level != dhcp_level) {
|
||||
rdata->public.dhcp_level = dhcp_level;
|
||||
changed |= NM_RDISC_CONFIG_DHCP_LEVEL;
|
||||
}
|
||||
|
||||
|
@@ -152,6 +152,12 @@ receive_ra (struct ndp *ndp, struct ndp_msg *msg, gpointer user_data)
|
||||
else
|
||||
dhcp_level = NM_RDISC_DHCP_LEVEL_NONE;
|
||||
|
||||
/* when receiving multiple RA (possibly from different routers),
|
||||
* let's keep the "most managed" level. */
|
||||
G_STATIC_ASSERT_EXPR (NM_RDISC_DHCP_LEVEL_MANAGED > NM_RDISC_DHCP_LEVEL_OTHERCONF);
|
||||
G_STATIC_ASSERT_EXPR (NM_RDISC_DHCP_LEVEL_OTHERCONF > NM_RDISC_DHCP_LEVEL_NONE);
|
||||
dhcp_level = MAX (dhcp_level, rdata->public.dhcp_level);
|
||||
|
||||
if (dhcp_level != rdata->public.dhcp_level) {
|
||||
rdata->public.dhcp_level = dhcp_level;
|
||||
changed |= NM_RDISC_CONFIG_DHCP_LEVEL;
|
||||
|
Reference in New Issue
Block a user