diff options
Diffstat (limited to 'src/core/devices/wwan')
| -rw-r--r-- | src/core/devices/wwan/meson.build | 3 | ||||
| -rw-r--r-- | src/core/devices/wwan/nm-modem-broadband.c | 64 |
2 files changed, 36 insertions, 31 deletions
diff --git a/src/core/devices/wwan/meson.build b/src/core/devices/wwan/meson.build index 37ef738c..acccb5fd 100644 --- a/src/core/devices/wwan/meson.build +++ b/src/core/devices/wwan/meson.build @@ -4,7 +4,7 @@ wwan_inc = include_directories('.') linker_script = join_paths(meson.current_source_dir(), 'libnm-wwan.ver') -libnm_wwan = shared_module( +libnm_wwan = shared_library( 'nm-wwan', sources: files( 'nm-service-providers.c', @@ -21,6 +21,7 @@ libnm_wwan = shared_module( link_depends: linker_script, install: true, install_dir: nm_plugindir, + override_options: ['b_lundef=false'], ) libnm_wwan_dep = declare_dependency( diff --git a/src/core/devices/wwan/nm-modem-broadband.c b/src/core/devices/wwan/nm-modem-broadband.c index a150040f..c03446b9 100644 --- a/src/core/devices/wwan/nm-modem-broadband.c +++ b/src/core/devices/wwan/nm-modem-broadband.c @@ -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) { |