mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-01 13:55:36 +00:00
merge: branch 'wwan-ipv6-dhcp-fix'
wwan: Perform SLAAC and DNS assignment when IPv6 is set to auto method, even without address from the bearer https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1440 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1918
This commit is contained in:
commit
0a3917e6a1
2
NEWS
2
NEWS
|
@ -16,6 +16,8 @@ USE AT YOUR OWN RISK. NOT RECOMMENDED FOR PRODUCTION USE!
|
|||
* Deprecated 802-11-wireless and 802-11-wired property 'mac-address-blacklist'
|
||||
and introduced the 'mac-address-denylist' property.
|
||||
* Fix detection of 6 GHz band capability for WiFi devices
|
||||
* Allow IPv6 SLAAC and static IPv6 DNS server assignment for modem broadband
|
||||
when IPv6 device address was not explicitly passed on by ModemManager
|
||||
|
||||
=============================================
|
||||
NetworkManager-1.46
|
||||
|
|
|
@ -1155,6 +1155,8 @@ stage3_ip_config_start(NMModem *modem, int addr_family, NMModemIPMethod ip_metho
|
|||
#endif
|
||||
} else {
|
||||
NMPlatformIP6Address address;
|
||||
NMPlatformIP6Address gw;
|
||||
const char *gw_string;
|
||||
|
||||
address_string = mm_bearer_ip_config_get_address(self->_priv.ipv6_config);
|
||||
if (!address_string) {
|
||||
|
@ -1165,20 +1167,8 @@ stage3_ip_config_start(NMModem *modem, int addr_family, NMModemIPMethod ip_metho
|
|||
NM_DEVICE_ERROR_INVALID_CONNECTION,
|
||||
"(%s) retrieving IPv6 configuration failed: no address given",
|
||||
nm_modem_get_uid(NM_MODEM(self)));
|
||||
goto out;
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
address = (NMPlatformIP6Address){};
|
||||
|
||||
if (!inet_pton(AF_INET6, address_string, &address.address)) {
|
||||
g_set_error(&error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INVALID_CONNECTION,
|
||||
"(%s) retrieving IPv6 configuration failed: invalid address given '%s'",
|
||||
nm_modem_get_uid(NM_MODEM(self)),
|
||||
address_string);
|
||||
goto out;
|
||||
}
|
||||
|
||||
data_port = mm_bearer_get_interface(self->_priv.bearer);
|
||||
|
@ -1202,43 +1192,57 @@ stage3_ip_config_start(NMModem *modem, int addr_family, NMModemIPMethod ip_metho
|
|||
NM_IP_CONFIG_SOURCE_WWAN);
|
||||
do_auto = TRUE;
|
||||
|
||||
address.plen = mm_bearer_ip_config_get_prefix(self->_priv.ipv6_config);
|
||||
if (address.plen <= 128) {
|
||||
if (IN6_IS_ADDR_LINKLOCAL(&address.address)) {
|
||||
nm_utils_ipv6_interface_identifier_get_from_addr(&iid_data, &address.address);
|
||||
iid = &iid_data;
|
||||
} else
|
||||
do_auto = FALSE;
|
||||
nm_l3_config_data_add_address_6(l3cd, &address);
|
||||
if (address_string) {
|
||||
address = (NMPlatformIP6Address){};
|
||||
|
||||
if (!inet_pton(AF_INET6, address_string, &address.address)) {
|
||||
g_set_error(&error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INVALID_CONNECTION,
|
||||
"(%s) retrieving IPv6 configuration failed: invalid address given '%s'",
|
||||
nm_modem_get_uid(NM_MODEM(self)),
|
||||
address_string);
|
||||
goto out;
|
||||
}
|
||||
|
||||
address.plen = mm_bearer_ip_config_get_prefix(self->_priv.ipv6_config);
|
||||
if (address.plen <= 128) {
|
||||
if (IN6_IS_ADDR_LINKLOCAL(&address.address)) {
|
||||
nm_utils_ipv6_interface_identifier_get_from_addr(&iid_data, &address.address);
|
||||
iid = &iid_data;
|
||||
} else
|
||||
do_auto = FALSE;
|
||||
nm_l3_config_data_add_address_6(l3cd, &address);
|
||||
}
|
||||
|
||||
_LOGI(" address %s", nm_platform_ip6_address_to_string(&address, sbuf, sizeof(sbuf)));
|
||||
}
|
||||
|
||||
_LOGI(" address %s (slaac %s)",
|
||||
nm_platform_ip6_address_to_string(&address, sbuf, sizeof(sbuf)),
|
||||
do_auto ? "enabled" : "disabled");
|
||||
_LOGI(" slaac %s", do_auto ? "enabled" : "disabled");
|
||||
|
||||
address_string = mm_bearer_ip_config_get_gateway(self->_priv.ipv6_config);
|
||||
if (address_string) {
|
||||
if (inet_pton(AF_INET6, address_string, &address.address) != 1) {
|
||||
gw_string = mm_bearer_ip_config_get_gateway(self->_priv.ipv6_config);
|
||||
if (gw_string) {
|
||||
if (inet_pton(AF_INET6, gw_string, &gw.address) != 1) {
|
||||
g_set_error(&error,
|
||||
NM_DEVICE_ERROR,
|
||||
NM_DEVICE_ERROR_INVALID_CONNECTION,
|
||||
"(%s) retrieving IPv6 configuration failed: invalid gateway given '%s'",
|
||||
nm_modem_get_uid(NM_MODEM(self)),
|
||||
address_string);
|
||||
gw_string);
|
||||
goto out;
|
||||
}
|
||||
|
||||
{
|
||||
const NMPlatformIP6Route r = {
|
||||
.rt_source = NM_IP_CONFIG_SOURCE_WWAN,
|
||||
.gateway = address.address,
|
||||
.gateway = gw.address,
|
||||
.table_any = TRUE,
|
||||
.table_coerced = 0,
|
||||
.metric_any = TRUE,
|
||||
.metric = 0,
|
||||
};
|
||||
|
||||
_LOGI(" gateway %s", address_string);
|
||||
_LOGI(" gateway %s", gw_string);
|
||||
nm_l3_config_data_add_route_6(l3cd, &r);
|
||||
}
|
||||
} else if (ip_method == NM_MODEM_IP_METHOD_STATIC) {
|
||||
|
|
Loading…
Reference in a new issue