From 2ccdef571337760626aafe833fbefe7a726a7ea5 Mon Sep 17 00:00:00 2001 From: Anjali Nijhara Date: Fri, 16 Jun 2023 16:59:05 +0530 Subject: [PATCH] Add new dbus method for setting NTP Server Change-Id: Ib6151577ba3c32b034dc03c8b76029f5b1c3fb82 --- CMakeLists.txt | 2 +- include/netdbus.h | 3 + include/network-clock.h | 8 +++ interfaces/netconfig-iface-clock.xml | 8 +++ .../etc/dbus-1/system.d/net-config-robot.conf | 2 + resources/etc/dbus-1/system.d/net-config.conf | 2 + src/dbus/netdbus.c | 13 ++++ src/main.c | 2 + src/network-clock.c | 63 +++++++++++++++++++ 9 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 interfaces/netconfig-iface-clock.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 45a66fb..43de6e9 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,7 +130,7 @@ ADD_CUSTOM_COMMAND( --generate-c-code generated-code --c-generate-object-manager --generate-docbook generated-code-docs - ${INTERFACES}/netconfig-iface-network-state.xml ${INTERFACES}/netconfig-iface-network-statistics.xml ${INTERFACES}/netconfig-iface-wifi.xml ${INTERFACES}/netconfig-iface-vpnsvc.xml ${INTERFACES}/netconfig-iface-mptcp.xml ${INTERFACES}/netconfig-iface-ethernet.xml + ${INTERFACES}/netconfig-iface-network-state.xml ${INTERFACES}/netconfig-iface-network-statistics.xml ${INTERFACES}/netconfig-iface-wifi.xml ${INTERFACES}/netconfig-iface-vpnsvc.xml ${INTERFACES}/netconfig-iface-mptcp.xml ${INTERFACES}/netconfig-iface-ethernet.xml ${INTERFACES}/netconfig-iface-clock.xml COMMENT "Generating GDBus .c/.h") ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS} ${CMAKE_SOURCE_DIR}/generated-code.c) diff --git a/include/netdbus.h b/include/netdbus.h index ed2175b..886f5bd 100755 --- a/include/netdbus.h +++ b/include/netdbus.h @@ -68,6 +68,8 @@ extern "C" { #define NETCONFIG_MPTCP_INTERFACE "net.netconfig.mptcp" #define NETCONFIG_ETHERNET_PATH "/net/netconfig/ethernet" #define NETCONFIG_ETHERNET_INTERFACE "net.netconfig.ethernet" +#define NETCONFIG_CLOCK_PATH "/net/netconfig/clock" +#define NETCONFIG_CLOCK_INTERFACE "net.netconfig.clock" #define CONTAINER_FILE "/run/systemd/container" #define DBUS_HOST_SYSTEM_BUS_ADDRESS "unix:path=/run/host/dbus/system_bus_socket" @@ -88,6 +90,7 @@ GDBusObjectManagerServer *netdbus_get_statistics_manager(void); GDBusObjectManagerServer *netdbus_get_vpn_manager(void); GDBusObjectManagerServer *netdbus_get_mptcp_manager(void); GDBusObjectManagerServer *netdbus_get_ethernet_manager(void); +GDBusObjectManagerServer *netdbus_get_clock_manager(void); GDBusConnection *netdbus_get_connection(void); GCancellable *netdbus_get_cancellable(void); diff --git a/include/network-clock.h b/include/network-clock.h index e1ef985..2f5e9a5 100755 --- a/include/network-clock.h +++ b/include/network-clock.h @@ -24,6 +24,14 @@ extern "C" { #endif +#include +#include +#include + +void clock_object_create_and_init(void); +void clock_object_deinit(void); +Clock *get_clock_object(void); + void netconfig_clock_init(void); void netconfig_clock_deinit(void); diff --git a/interfaces/netconfig-iface-clock.xml b/interfaces/netconfig-iface-clock.xml new file mode 100644 index 0000000..0f78bed --- /dev/null +++ b/interfaces/netconfig-iface-clock.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/etc/dbus-1/system.d/net-config-robot.conf b/resources/etc/dbus-1/system.d/net-config-robot.conf index da297ca..81cba6c 100755 --- a/resources/etc/dbus-1/system.d/net-config-robot.conf +++ b/resources/etc/dbus-1/system.d/net-config-robot.conf @@ -119,5 +119,7 @@ + + diff --git a/resources/etc/dbus-1/system.d/net-config.conf b/resources/etc/dbus-1/system.d/net-config.conf index bb7b99c..cbbf252 100755 --- a/resources/etc/dbus-1/system.d/net-config.conf +++ b/resources/etc/dbus-1/system.d/net-config.conf @@ -121,5 +121,7 @@ + + diff --git a/src/dbus/netdbus.c b/src/dbus/netdbus.c index 3136ddb..6ca7316 100755 --- a/src/dbus/netdbus.c +++ b/src/dbus/netdbus.c @@ -44,6 +44,8 @@ static GDBusObjectManagerServer *manager_server_statistics = NULL; static GDBusObjectManagerServer *manager_server_vpn = NULL; static GDBusObjectManagerServer *manager_server_mptcp = NULL; static GDBusObjectManagerServer *manager_server_ethernet = NULL; +static GDBusObjectManagerServer *manager_server_clock = NULL; + static guint owner_id = 0; static got_name_cb g_callback = NULL; @@ -85,6 +87,11 @@ GDBusObjectManagerServer *netdbus_get_ethernet_manager(void) return manager_server_ethernet; } +GDBusObjectManagerServer *netdbus_get_clock_manager(void) +{ + return manager_server_clock; +} + GDBusConnection *netdbus_get_connection(void) { return gconn_data.connection; @@ -361,6 +368,12 @@ int setup_gdbus(got_name_cb cb) exit(1); } + manager_server_clock = g_dbus_object_manager_server_new(NETCONFIG_CLOCK_PATH); + if (manager_server_clock == NULL) { + ERR("Manager server for NETCONFIG_CLOCK_PATH not created."); + exit(1); + } + owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, NETCONFIG_SERVICE, G_BUS_NAME_OWNER_FLAGS_NONE, _got_bus_cb, _got_name_cb, _lost_name_cb, diff --git a/src/main.c b/src/main.c index f1832c7..3fe3d3b 100755 --- a/src/main.c +++ b/src/main.c @@ -70,6 +70,7 @@ void _got_name_cb(void) vpnsvc_create_and_init(); mptcp_object_create_and_init(); ethernet_object_create_and_init(); + clock_object_create_and_init(); register_gdbus_signal(); connman_register_agent(); @@ -87,6 +88,7 @@ static void _objects_deinit(void) vpnsvc_destroy_deinit(); mptcp_object_deinit(); ethernet_object_deinit(); + clock_object_deinit(); } int main(int argc, char *argv[]) diff --git a/src/network-clock.c b/src/network-clock.c index 59551c4..127f8e7 100755 --- a/src/network-clock.c +++ b/src/network-clock.c @@ -28,6 +28,13 @@ #define NTP_SERVER "pool.ntp.org" #define CONNMAN_GLOBAL_SETTING "/var/lib/connman/settings" +static Clock *clock_object = NULL; + +Clock *get_clock_object(void) +{ + return clock_object; +} + static void __netconfig_clock_clear_timeserver(void) { GKeyFile *keyfile = NULL; @@ -209,3 +216,59 @@ void netconfig_clock_deinit(void) vconf_ignore_key_changed(VCONFKEY_NETWORK_STATUS, __network_changed_cb); } + +gboolean handle_set_ntp_server(Clock *object, GDBusMethodInvocation *invocation, + const gchar *server) +{ + if(server == NULL) { + netconfig_error_dbus_method_return(invocation, + NETCONFIG_ERROR_INTERNAL, "SetNtpServer Failed"); + return TRUE; + } + + __netconfig_clock_set_timeserver(server); + + DBG("NTP Server:%s set successfully",server); + + clock_complete_set_ntp_server(object, invocation); + + return TRUE; +} + +/***************************** + * Initializations Functions * + ****************************/ +void clock_object_create_and_init(void) +{ + DBG("Create clock object."); + GDBusInterfaceSkeleton *interface_clock = NULL; + GDBusConnection *connection = NULL; + GDBusObjectManagerServer *server = netdbus_get_clock_manager(); + if (server == NULL) + return; + + connection = netdbus_get_connection(); + g_dbus_object_manager_server_set_connection(server, connection); + + /* Interface */ + clock_object = clock_skeleton_new(); + interface_clock = G_DBUS_INTERFACE_SKELETON(clock_object); + + /* Set NTP Server */ + g_signal_connect(clock_object, "handle-set-ntp-server", + G_CALLBACK(handle_set_ntp_server), NULL); + + if (!g_dbus_interface_skeleton_export(interface_clock, connection, + NETCONFIG_CLOCK_PATH, NULL)) { + ERR("Export NETCONFIG_CLOCK_PATH for clock failed"); + } + + return; +} + +void clock_object_deinit(void) +{ + DBG("Deinit clock object."); + + g_object_unref(clock_object); +} -- 2.34.1