summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-02-18 13:51:03 -0600
committerDan Williams <dcbw@redhat.com>2014-02-21 09:45:06 -0600
commit19089fb9609c5a62a3cfe5ff81e3d3d93beabeb3 (patch)
tree7e830e85ff896d932a049452fdc371e04f4bdbb8
parent9d50e9dbd9d84f5e8df32895bc245dadf133aa39 (diff)
downloadNetworkManager-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.c27
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);