From 533532f2859f9af7134a4abe28a5d20f7650fd59 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 14 Dec 2009 05:45:58 +0100 Subject: [PATCH] Add support for setting time server configuration --- include/property.h | 1 + src/element.c | 27 +++++++++++++++++++++++++++ src/ipv4.c | 16 ++++++++++++++-- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/include/property.h b/include/property.h index a6ea83c..0cf5d2b 100644 --- a/include/property.h +++ b/include/property.h @@ -46,6 +46,7 @@ enum connman_property_id { CONNMAN_PROPERTY_ID_IPV4_GATEWAY, CONNMAN_PROPERTY_ID_IPV4_BROADCAST, CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, + CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, }; enum connman_property_type { diff --git a/src/element.c b/src/element.c index ef5f775..6917a29 100644 --- a/src/element.c +++ b/src/element.c @@ -868,6 +868,14 @@ int connman_element_get_value(struct connman_element *element, *((char **) value) = element->ipv4.nameserver; __connman_element_unlock(element); break; + case CONNMAN_PROPERTY_ID_IPV4_TIMESERVER: + if (element->ipv4.timeserver == NULL) + return connman_element_get_value(element->parent, + id, value); + __connman_element_lock(element); + *((char **) value) = element->ipv4.timeserver; + __connman_element_unlock(element); + break; default: return -EINVAL; } @@ -1091,6 +1099,7 @@ int __connman_element_append_ipv4(struct connman_element *element, const char *method = NULL; const char *address = NULL, *netmask = NULL, *gateway = NULL; const char *broadcast = NULL, *nameserver = NULL; + const char *timeserver = NULL; connman_element_get_value(element, CONNMAN_PROPERTY_ID_IPV4_METHOD, &method); @@ -1105,6 +1114,8 @@ int __connman_element_append_ipv4(struct connman_element *element, CONNMAN_PROPERTY_ID_IPV4_BROADCAST, &broadcast); connman_element_get_value(element, CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver); + connman_element_get_value(element, + CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, ×erver); if (method != NULL) connman_dbus_dict_append_variant(dict, "IPv4.Method", @@ -1130,6 +1141,10 @@ int __connman_element_append_ipv4(struct connman_element *element, connman_dbus_dict_append_variant(dict, "IPv4.Nameserver", DBUS_TYPE_STRING, &nameserver); + if (timeserver != NULL) + connman_dbus_dict_append_variant(dict, "IPv4.Timeserver", + DBUS_TYPE_STRING, ×erver); + return 0; } @@ -1218,6 +1233,18 @@ int __connman_element_set_ipv4(struct connman_element *element, element->ipv4.nameserver = g_strdup(nameserver); connman_element_update(element); + } else if (g_str_equal(name, "IPv4.Timeserver") == TRUE) { + const char *timeserver; + + if (type != DBUS_TYPE_STRING) + return -EINVAL; + + dbus_message_iter_get_basic(value, ×erver); + + g_free(element->ipv4.timeserver); + element->ipv4.nameserver = g_strdup(timeserver); + + connman_element_update(element); } return 0; diff --git a/src/ipv4.c b/src/ipv4.c index 01a430a..06566bf 100644 --- a/src/ipv4.c +++ b/src/ipv4.c @@ -175,7 +175,7 @@ static int ipv4_probe(struct connman_element *element) struct connman_element *connection; struct connman_ipv4 ipv4; const char *address = NULL, *netmask = NULL, *broadcast = NULL; - const char *nameserver = NULL; + const char *nameserver = NULL, *timeserver = NULL; DBG("element %p name %s", element, element->name); @@ -188,6 +188,8 @@ static int ipv4_probe(struct connman_element *element) connman_element_get_value(element, CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver); + connman_element_get_value(element, + CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, ×erver); DBG("address %s", address); DBG("netmask %s", netmask); @@ -202,10 +204,13 @@ static int ipv4_probe(struct connman_element *element) if (broadcast) ipv4.broadcast.s_addr = inet_addr(broadcast); else - ipv4.broadcast.s_addr = ipv4.address.s_addr | ~ipv4.netmask.s_addr; + ipv4.broadcast.s_addr = ipv4.address.s_addr | + ~ipv4.netmask.s_addr; set_ipv4(element, &ipv4, nameserver); + connman_timeserver_append(timeserver); + connection = connman_element_create(NULL); connection->type = CONNMAN_ELEMENT_TYPE_CONNECTION; @@ -220,8 +225,15 @@ static int ipv4_probe(struct connman_element *element) static void ipv4_remove(struct connman_element *element) { + const char *timeserver = NULL; + DBG("element %p name %s", element, element->name); + connman_element_get_value(element, + CONNMAN_PROPERTY_ID_IPV4_TIMESERVER, ×erver); + + connman_timeserver_remove(timeserver); + clear_ipv4(element); } -- 2.7.4