summaryrefslogtreecommitdiff
path: root/src/ipconfig.c
diff options
context:
space:
mode:
authorPatrik Flykt <patrik.flykt@linux.intel.com>2012-05-21 14:35:34 +0300
committerMarcel Holtmann <marcel@holtmann.org>2012-05-22 21:14:54 +0200
commit83cbe1a9649ee49cb237558b3af8473d7899165a (patch)
tree328776763f62df4ebfa6602e03f320ce731a53dc /src/ipconfig.c
parent5bf6e62fa5cdf7d9a19af04948e53b7db07abbc8 (diff)
downloadconnman-83cbe1a9649ee49cb237558b3af8473d7899165a.tar.gz
connman-83cbe1a9649ee49cb237558b3af8473d7899165a.tar.bz2
connman-83cbe1a9649ee49cb237558b3af8473d7899165a.zip
ipconfig: Show FIXED configuration IP address info
Show FIXED configuration IP address info in service IPv4 and IPv6 properties. If IP address is not available via ipconfig->system, use the provider configured ones instead. Fixes BMC#25084
Diffstat (limited to 'src/ipconfig.c')
-rw-r--r--src/ipconfig.c62
1 files changed, 50 insertions, 12 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 5f6e950d..3b85827f 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1849,6 +1849,7 @@ static int string2privacy(const char *privacy)
void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig,
DBusMessageIter *iter)
{
+ struct connman_ipaddress *append_addr = NULL;
const char *str;
DBG("");
@@ -1862,33 +1863,52 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig,
connman_dbus_dict_append_basic(iter, "Method", DBUS_TYPE_STRING, &str);
- if (ipconfig->system == NULL)
+ append_addr = ipconfig->system;
+
+ switch (ipconfig->method) {
+ case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+ case CONNMAN_IPCONFIG_METHOD_OFF:
+ return;
+
+ case CONNMAN_IPCONFIG_METHOD_FIXED:
+ if (append_addr == NULL)
+ append_addr = ipconfig->address;
+ break;
+
+ case CONNMAN_IPCONFIG_METHOD_MANUAL:
+ case CONNMAN_IPCONFIG_METHOD_DHCP:
+ case CONNMAN_IPCONFIG_METHOD_AUTO:
+ break;
+ }
+
+ if (append_addr == NULL)
return;
- if (ipconfig->system->local != NULL) {
+ if (append_addr->local != NULL) {
in_addr_t addr;
struct in_addr netmask;
char *mask;
connman_dbus_dict_append_basic(iter, "Address",
- DBUS_TYPE_STRING, &ipconfig->system->local);
+ DBUS_TYPE_STRING, &append_addr->local);
- addr = 0xffffffff << (32 - ipconfig->system->prefixlen);
+ addr = 0xffffffff << (32 - append_addr->prefixlen);
netmask.s_addr = htonl(addr);
mask = inet_ntoa(netmask);
connman_dbus_dict_append_basic(iter, "Netmask",
DBUS_TYPE_STRING, &mask);
}
- if (ipconfig->system->gateway != NULL)
+ if (append_addr->gateway != NULL)
connman_dbus_dict_append_basic(iter, "Gateway",
- DBUS_TYPE_STRING, &ipconfig->system->gateway);
+ DBUS_TYPE_STRING, &append_addr->gateway);
}
void __connman_ipconfig_append_ipv6(struct connman_ipconfig *ipconfig,
DBusMessageIter *iter,
struct connman_ipconfig *ipconfig_ipv4)
{
+ struct connman_ipaddress *append_addr = NULL;
const char *str, *privacy;
DBG("");
@@ -1908,20 +1928,38 @@ void __connman_ipconfig_append_ipv6(struct connman_ipconfig *ipconfig,
connman_dbus_dict_append_basic(iter, "Method", DBUS_TYPE_STRING, &str);
- if (ipconfig->system == NULL)
+ append_addr = ipconfig->system;
+
+ switch (ipconfig->method) {
+ case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+ case CONNMAN_IPCONFIG_METHOD_OFF:
+ return;
+
+ case CONNMAN_IPCONFIG_METHOD_FIXED:
+ if (append_addr == NULL)
+ append_addr = ipconfig->address;
+ break;
+
+ case CONNMAN_IPCONFIG_METHOD_MANUAL:
+ case CONNMAN_IPCONFIG_METHOD_DHCP:
+ case CONNMAN_IPCONFIG_METHOD_AUTO:
+ break;
+ }
+
+ if (append_addr == NULL)
return;
- if (ipconfig->system->local != NULL) {
+ if (append_addr->local != NULL) {
connman_dbus_dict_append_basic(iter, "Address",
- DBUS_TYPE_STRING, &ipconfig->system->local);
+ DBUS_TYPE_STRING, &append_addr->local);
connman_dbus_dict_append_basic(iter, "PrefixLength",
DBUS_TYPE_BYTE,
- &ipconfig->system->prefixlen);
+ &append_addr->prefixlen);
}
- if (ipconfig->system->gateway != NULL)
+ if (append_addr->gateway != NULL)
connman_dbus_dict_append_basic(iter, "Gateway",
- DBUS_TYPE_STRING, &ipconfig->system->gateway);
+ DBUS_TYPE_STRING, &append_addr->gateway);
privacy = privacy2string(ipconfig->ipv6_privacy_config);
connman_dbus_dict_append_basic(iter, "Privacy",