summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-02-19 12:00:35 -0600
committerDan Williams <dcbw@redhat.com>2014-07-23 14:26:39 -0500
commitdd6abd407acd461e1dd853edade83082dbb0098b (patch)
treedebc92b5dbe49995722c7902e23106288913855b
parentf3557d326cdab575cde84d93743b3c9744925bb2 (diff)
downloadNetworkManager-dd6abd407acd461e1dd853edade83082dbb0098b.tar.gz
wwan: clean up and split IP method values
Add an 'unknown' value; make the type an enum, and rename it since this enum is private to NetworkManager and abstracts differences in old and new MM. We also need separate methods for IPv4 and IPv6 since they may not use the same mechanism. For example, IPv4 may use DHCP but IPv6 may require static configuration, based on what the modem firmware wants.
-rw-r--r--src/devices/wwan/nm-modem-broadband.c10
-rw-r--r--src/devices/wwan/nm-modem.c70
-rw-r--r--src/devices/wwan/nm-modem.h12
3 files changed, 55 insertions, 37 deletions
diff --git a/src/devices/wwan/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c
index 07ee7de423..56bb1c34ef 100644
--- a/src/devices/wwan/nm-modem-broadband.c
+++ b/src/devices/wwan/nm-modem-broadband.c
@@ -163,7 +163,7 @@ connect_ready (MMModemSimple *simple_iface,
NMModemBroadband *self)
{
GError *error = NULL;
- guint ip_method;
+ NMModemIPMethod ip_method;
g_clear_object (&self->priv->connect_properties);
@@ -200,13 +200,13 @@ connect_ready (MMModemSimple *simple_iface,
switch (mm_bearer_ip_config_get_method (self->priv->ipv4_config)) {
case MM_BEARER_IP_METHOD_PPP:
- ip_method = MM_MODEM_IP_METHOD_PPP;
+ ip_method = NM_MODEM_IP_METHOD_PPP;
break;
case MM_BEARER_IP_METHOD_STATIC:
- ip_method = MM_MODEM_IP_METHOD_STATIC;
+ ip_method = NM_MODEM_IP_METHOD_STATIC;
break;
case MM_BEARER_IP_METHOD_DHCP:
- ip_method = MM_MODEM_IP_METHOD_DHCP;
+ ip_method = NM_MODEM_IP_METHOD_AUTO;
break;
default:
error = g_error_new (NM_MODEM_ERROR,
@@ -224,7 +224,7 @@ connect_ready (MMModemSimple *simple_iface,
/* IPv4 for now only */
g_object_set (self,
NM_MODEM_DATA_PORT, mm_bearer_get_interface (self->priv->bearer),
- NM_MODEM_IP_METHOD, ip_method,
+ NM_MODEM_IP4_METHOD, ip_method,
NM_MODEM_IP_TIMEOUT, mm_bearer_get_ip_timeout (self->priv->bearer),
NULL);
diff --git a/src/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c
index d8ccfd42c7..62d1b2b0ae 100644
--- a/src/devices/wwan/nm-modem.c
+++ b/src/devices/wwan/nm-modem.c
@@ -42,7 +42,8 @@ enum {
PROP_PATH,
PROP_UID,
PROP_DRIVER,
- PROP_IP_METHOD,
+ PROP_IP4_METHOD,
+ PROP_IP6_METHOD,
PROP_IP_TIMEOUT,
PROP_STATE,
PROP_DEVICE_ID,
@@ -59,7 +60,8 @@ typedef struct {
char *control_port;
char *data_port;
char *ppp_iface;
- guint32 ip_method;
+ NMModemIPMethod ip4_method;
+ NMModemIPMethod ip6_method;
NMModemState state;
NMModemState prev_state; /* revert to this state if enable/disable fails */
char *device_id;
@@ -401,18 +403,18 @@ nm_modem_stage3_ip4_config_start (NMModem *self,
g_assert (req);
priv = NM_MODEM_GET_PRIVATE (self);
- switch (priv->ip_method) {
- case MM_MODEM_IP_METHOD_PPP:
+ switch (priv->ip4_method) {
+ case NM_MODEM_IP_METHOD_PPP:
ret = ppp_stage3_ip4_config_start (self, req, reason);
break;
- case MM_MODEM_IP_METHOD_STATIC:
+ case NM_MODEM_IP_METHOD_STATIC:
ret = NM_MODEM_GET_CLASS (self)->static_stage3_ip4_config_start (self, req, reason);
break;
- case MM_MODEM_IP_METHOD_DHCP:
+ case NM_MODEM_IP_METHOD_AUTO:
ret = device_class->act_stage3_ip4_config_start (device, NULL, reason);
break;
default:
- nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method);
+ nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip4_method);
ret = NM_ACT_STAGE_RETURN_FAILURE;
break;
}
@@ -431,8 +433,8 @@ nm_modem_ip4_pre_commit (NMModem *modem,
* not point-to-point) and IP config has a /32 prefix, then we assume that
* ARP will be pointless and we turn it off.
*/
- if ( priv->ip_method == MM_MODEM_IP_METHOD_STATIC
- || priv->ip_method == MM_MODEM_IP_METHOD_DHCP) {
+ if ( priv->ip4_method == NM_MODEM_IP_METHOD_STATIC
+ || priv->ip4_method == NM_MODEM_IP_METHOD_AUTO) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (config, 0);
g_assert (address);
@@ -641,22 +643,19 @@ deactivate (NMModem *self, NMDevice *device)
priv->ppp_manager = NULL;
}
- switch (priv->ip_method) {
- case MM_MODEM_IP_METHOD_PPP:
- break;
- case MM_MODEM_IP_METHOD_STATIC:
- case MM_MODEM_IP_METHOD_DHCP:
+ if (priv->ip4_method == NM_MODEM_IP_METHOD_STATIC ||
+ priv->ip4_method == NM_MODEM_IP_METHOD_AUTO ||
+ priv->ip6_method == NM_MODEM_IP_METHOD_STATIC ||
+ priv->ip6_method == NM_MODEM_IP_METHOD_AUTO) {
ifindex = nm_device_get_ip_ifindex (device);
if (ifindex > 0) {
nm_platform_route_flush (ifindex);
nm_platform_address_flush (ifindex);
nm_platform_link_set_down (ifindex);
}
- break;
- default:
- nm_log_err (LOGD_MB, "unknown IP method %d", priv->ip_method);
- break;
}
+ priv->ip4_method = NM_MODEM_IP_METHOD_UNKNOWN;
+ priv->ip6_method = NM_MODEM_IP_METHOD_UNKNOWN;
g_free (priv->ppp_iface);
priv->ppp_iface = NULL;
@@ -854,8 +853,11 @@ get_property (GObject *object, guint prop_id,
case PROP_UID:
g_value_set_string (value, priv->uid);
break;
- case PROP_IP_METHOD:
- g_value_set_uint (value, priv->ip_method);
+ case PROP_IP4_METHOD:
+ g_value_set_uint (value, priv->ip4_method);
+ break;
+ case PROP_IP6_METHOD:
+ g_value_set_uint (value, priv->ip6_method);
break;
case PROP_IP_TIMEOUT:
g_value_set_uint (value, priv->mm_ip_timeout);
@@ -903,8 +905,11 @@ set_property (GObject *object, guint prop_id,
/* Construct only */
priv->uid = g_value_dup_string (value);
break;
- case PROP_IP_METHOD:
- priv->ip_method = g_value_get_uint (value);
+ case PROP_IP4_METHOD:
+ priv->ip4_method = g_value_get_uint (value);
+ break;
+ case PROP_IP6_METHOD:
+ priv->ip6_method = g_value_get_uint (value);
break;
case PROP_IP_TIMEOUT:
priv->mm_ip_timeout = g_value_get_uint (value);
@@ -1013,12 +1018,21 @@ nm_modem_class_init (NMModemClass *klass)
G_PARAM_STATIC_STRINGS));
g_object_class_install_property
- (object_class, PROP_IP_METHOD,
- g_param_spec_uint (NM_MODEM_IP_METHOD, "", "",
- MM_MODEM_IP_METHOD_PPP,
- MM_MODEM_IP_METHOD_DHCP,
- MM_MODEM_IP_METHOD_PPP,
- G_PARAM_READWRITE |
+ (object_class, PROP_IP4_METHOD,
+ g_param_spec_uint (NM_MODEM_IP4_METHOD, "", "",
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ NM_MODEM_IP_METHOD_AUTO,
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property
+ (object_class, PROP_IP6_METHOD,
+ g_param_spec_uint (NM_MODEM_IP6_METHOD, "", "",
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ NM_MODEM_IP_METHOD_AUTO,
+ NM_MODEM_IP_METHOD_UNKNOWN,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
g_object_class_install_property
diff --git a/src/devices/wwan/nm-modem.h b/src/devices/wwan/nm-modem.h
index b2999e2ff0..7fc215c0fa 100644
--- a/src/devices/wwan/nm-modem.h
+++ b/src/devices/wwan/nm-modem.h
@@ -42,7 +42,8 @@ G_BEGIN_DECLS
#define NM_MODEM_DRIVER "driver"
#define NM_MODEM_CONTROL_PORT "control-port"
#define NM_MODEM_DATA_PORT "data-port"
-#define NM_MODEM_IP_METHOD "ip-method"
+#define NM_MODEM_IP4_METHOD "ip4-method"
+#define NM_MODEM_IP6_METHOD "ip6-method"
#define NM_MODEM_IP_TIMEOUT "ip-timeout"
#define NM_MODEM_STATE "state"
#define NM_MODEM_DEVICE_ID "device-id"
@@ -59,9 +60,12 @@ G_BEGIN_DECLS
#define NM_MODEM_REMOVED "removed"
#define NM_MODEM_STATE_CHANGED "state-changed"
-#define MM_MODEM_IP_METHOD_PPP 0
-#define MM_MODEM_IP_METHOD_STATIC 1
-#define MM_MODEM_IP_METHOD_DHCP 2
+typedef enum {
+ NM_MODEM_IP_METHOD_UNKNOWN = 0,
+ NM_MODEM_IP_METHOD_PPP,
+ NM_MODEM_IP_METHOD_STATIC,
+ NM_MODEM_IP_METHOD_AUTO, /* DHCP and/or SLAAC */
+} NMModemIPMethod;
/**
* NMModemIPType: