summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/dhcp/nm-dhcp-nettools.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c
index c1a26eca62..ac1179de85 100644
--- a/src/core/dhcp/nm-dhcp-nettools.c
+++ b/src/core/dhcp/nm-dhcp-nettools.c
@@ -342,16 +342,16 @@ lease_parse_routes(NDhcp4ClientLease *lease,
const guint8 *l_data;
gsize l_data_len;
int r;
+ guint i;
- r = _client_lease_query(lease,
- NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE,
- &l_data,
- &l_data_len);
- if (r == 0) {
- nm_str_buf_reset(sbuf);
+ for (i = 0; i < 2; i++) {
+ const guint8 option_code = (i == 0) ? NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE
+ : NM_DHCP_OPTION_DHCP4_PRIVATE_CLASSLESS_STATIC_ROUTE;
- has_classless = TRUE;
+ if (_client_lease_query(lease, option_code, &l_data, &l_data_len) != 0)
+ continue;
+ nm_str_buf_reset(sbuf);
while (lease_option_consume_route(&l_data, &l_data_len, TRUE, &dest, &plen, &gateway)) {
_nm_utils_inet4_ntop(dest, dest_str);
_nm_utils_inet4_ntop(gateway, gateway_str);
@@ -359,6 +359,11 @@ lease_parse_routes(NDhcp4ClientLease *lease,
nm_str_buf_append_required_delimiter(sbuf, ' ');
nm_str_buf_append_printf(sbuf, "%s/%d %s", dest_str, (int) plen, gateway_str);
+ if (has_classless) {
+ /* Ignore private option if the standard one is present */
+ continue;
+ }
+
if (plen == 0) {
/* if there are multiple default routes, we add them with differing
* metrics. */
@@ -384,10 +389,8 @@ lease_parse_routes(NDhcp4ClientLease *lease,
NULL);
}
- nm_dhcp_option_add_option(options,
- AF_INET,
- NM_DHCP_OPTION_DHCP4_CLASSLESS_STATIC_ROUTE,
- nm_str_buf_get_str(sbuf));
+ has_classless = TRUE;
+ nm_dhcp_option_add_option(options, AF_INET, option_code, nm_str_buf_get_str(sbuf));
}
r = _client_lease_query(lease, NM_DHCP_OPTION_DHCP4_STATIC_ROUTE, &l_data, &l_data_len);