summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Xu <martin.xu@intel.com>2010-02-09 10:29:49 +0100
committerMarcel Holtmann <marcel@holtmann.org>2010-02-11 05:27:57 +0100
commite61f21a9e72cf4100c7ecbd80d2a25c84a63b33a (patch)
tree23f4a4560fc1232af07d5fd16be4685e38d45ad2
parent79e2ffe2f56701d43dce0fc890c8c956336cf68f (diff)
downloadconnman-e61f21a9e72cf4100c7ecbd80d2a25c84a63b33a.tar.gz
connman-e61f21a9e72cf4100c7ecbd80d2a25c84a63b33a.tar.bz2
connman-e61f21a9e72cf4100c7ecbd80d2a25c84a63b33a.zip
Add some ipconfig helpers
__connman_ipconfig_get_method(): Returns the selected ipconfig method. __connman_ipconfig_set_address(): Sets the device's IP address according to the selected method. Only the manual method is supported. __connman_ipconfig_clear_address(): Clears the device's IP address. Again, only the manual method is supported for now.
-rw-r--r--src/connman.h4
-rw-r--r--src/ipconfig.c45
2 files changed, 49 insertions, 0 deletions
diff --git a/src/connman.h b/src/connman.h
index 593a5178..ff38ad56 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -151,6 +151,10 @@ void __connman_ipconfig_append_proxy(struct connman_ipconfig *ipconfig,
DBusMessageIter *iter);
void __connman_ipconfig_append_ethernet(struct connman_ipconfig *ipconfig,
DBusMessageIter *iter);
+enum connman_ipconfig_method __connman_ipconfig_get_method(
+ struct connman_ipconfig *ipconfig);
+int __connman_ipconfig_set_address(struct connman_ipconfig *ipconfig);
+int __connman_ipconfig_clear_address(struct connman_ipconfig *ipconfig);
int __connman_ipconfig_load(struct connman_ipconfig *ipconfig,
GKeyFile *keyfile, const char *identifier, const char *prefix);
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 38c317b8..5d626e2f 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -888,6 +888,15 @@ int connman_ipconfig_set_method(struct connman_ipconfig *ipconfig,
return 0;
}
+enum connman_ipconfig_method __connman_ipconfig_get_method(
+ struct connman_ipconfig *ipconfig)
+{
+ if (ipconfig == NULL)
+ return CONNMAN_IPCONFIG_METHOD_UNKNOWN;
+
+ return ipconfig->method;
+}
+
/**
* connman_ipconfig_bind:
* @ipconfig: ipconfig structure
@@ -907,6 +916,42 @@ void connman_ipconfig_bind(struct connman_ipconfig *ipconfig,
connman_inet_set_address(origin->index, origin->address);
}
+int __connman_ipconfig_set_address(struct connman_ipconfig *ipconfig)
+{
+ DBG("");
+
+ switch (ipconfig->method) {
+ case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+ case CONNMAN_IPCONFIG_METHOD_OFF:
+ case CONNMAN_IPCONFIG_METHOD_FIXED:
+ case CONNMAN_IPCONFIG_METHOD_DHCP:
+ break;
+ case CONNMAN_IPCONFIG_METHOD_MANUAL:
+ return connman_inet_set_address(ipconfig->index,
+ ipconfig->address);
+ }
+
+ return 0;
+}
+
+int __connman_ipconfig_clear_address(struct connman_ipconfig *ipconfig)
+{
+ DBG("");
+
+ switch (ipconfig->method) {
+ case CONNMAN_IPCONFIG_METHOD_UNKNOWN:
+ case CONNMAN_IPCONFIG_METHOD_OFF:
+ case CONNMAN_IPCONFIG_METHOD_FIXED:
+ case CONNMAN_IPCONFIG_METHOD_DHCP:
+ break;
+ case CONNMAN_IPCONFIG_METHOD_MANUAL:
+ return connman_inet_clear_address(ipconfig->index);
+ }
+
+ return 0;
+
+}
+
int __connman_ipconfig_enable(struct connman_ipconfig *ipconfig)
{
struct connman_ipdevice *ipdevice;