diff options
author | Dan Williams <dcbw@redhat.com> | 2014-02-18 13:51:03 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-02-21 09:45:06 -0600 |
commit | 19089fb9609c5a62a3cfe5ff81e3d3d93beabeb3 (patch) | |
tree | 7e830e85ff896d932a049452fdc371e04f4bdbb8 | |
parent | 9d50e9dbd9d84f5e8df32895bc245dadf133aa39 (diff) | |
download | NetworkManager-dcbw/wwan-fu.tar.gz |
mobile: use gateway returned from ModemManagerdcbw/wwan-fu
If we get a gateway, use it.
-rw-r--r-- | src/modem-manager/nm-modem-broadband.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/modem-manager/nm-modem-broadband.c b/src/modem-manager/nm-modem-broadband.c index 5acce68f79..f368c2e0ac 100644 --- a/src/modem-manager/nm-modem-broadband.c +++ b/src/modem-manager/nm-modem-broadband.c @@ -615,14 +615,16 @@ static gboolean ip_string_to_network_address (const gchar *str, guint32 *out) { - guint32 addr; + guint32 addr = 0; + gboolean success = FALSE; - /* IP address */ - if (inet_pton (AF_INET, str, &addr) <= 0) - return FALSE; + if (!str || inet_pton (AF_INET, str, &addr) != 1) + addr = 0; + else + success = TRUE; *out = (guint32)addr; - return TRUE; + return success; } static gboolean @@ -631,7 +633,9 @@ static_stage3_done (NMModemBroadband *self) GError *error = NULL; NMIP4Config *config = NULL; const gchar *address_string; + const gchar *gw_string; guint32 address_network; + guint32 gw; NMPlatformIP4Address address; const gchar **dns; guint i; @@ -652,6 +656,10 @@ static_stage3_done (NMModemBroadband *self) goto out; } + /* Missing gateway not a hard failure */ + gw_string = mm_bearer_ip_config_get_gateway (self->priv->ipv4_config); + ip_string_to_network_address (gw_string, &gw); + config = nm_ip4_config_new (); memset (&address, 0, sizeof (address)); @@ -660,9 +668,12 @@ static_stage3_done (NMModemBroadband *self) address.source = NM_PLATFORM_SOURCE_WWAN; nm_ip4_config_add_address (config, &address); - nm_log_info (LOGD_MB, " address %s/%d", - mm_bearer_ip_config_get_address (self->priv->ipv4_config), - mm_bearer_ip_config_get_prefix (self->priv->ipv4_config)); + nm_log_info (LOGD_MB, " address %s/%d", address_string, address.plen); + + if (gw) { + nm_ip4_config_set_gateway (config, gw); + nm_log_info (LOGD_MB, " gateway %s", gw_string); + } /* DNS servers */ dns = mm_bearer_ip_config_get_dns (self->priv->ipv4_config); |