From 4be8c46913741d517090d3dd259416978d2588cf Mon Sep 17 00:00:00 2001 From: Maneesh Jain Date: Fri, 15 May 2015 14:43:56 +0530 Subject: [PATCH] Add support of Manual/DHCP IP address for ethernet profile This Patch contains follwing change: a. Update IP addressing(IPv4) for ethernet Profile Change-Id: I7e110ece3435f827df61c751f7609388cd81f649 Signed-off-by: Maneesh Jain --- packaging/libnet-client.spec | 2 +- src/network-dbus-request.c | 34 ++++++--- src/network-profile-intf.c | 140 ++++++++++++++++++++++++++++++++++- 3 files changed, 161 insertions(+), 15 deletions(-) mode change 100644 => 100755 src/network-dbus-request.c mode change 100644 => 100755 src/network-profile-intf.c diff --git a/packaging/libnet-client.spec b/packaging/libnet-client.spec index e04479c..b99a628 100644 --- a/packaging/libnet-client.spec +++ b/packaging/libnet-client.spec @@ -1,6 +1,6 @@ Name: libnet-client Summary: Network Client library (Shared library) -Version: 0.1.77_55 +Version: 0.1.77_56 Release: 0 Group: System/Network License: Flora License diff --git a/src/network-dbus-request.c b/src/network-dbus-request.c old mode 100644 new mode 100755 index d9c0be5..2d19bd5 --- a/src/network-dbus-request.c +++ b/src/network-dbus-request.c @@ -1359,6 +1359,7 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name GVariant *params = NULL; GVariantBuilder *builder; GDBusConnection *connection; + net_dev_info_t *profile_net_info = NULL; connection = _net_dbus_get_gdbus_conn(); if (connection == NULL) @@ -1370,18 +1371,30 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name return NET_ERR_INVALID_PARAM; } + if (prof_info->profile_type == NET_DEVICE_WIFI) + profile_net_info = &(prof_info->ProfileInfo.Wlan.net_info); + else if (prof_info->profile_type == NET_DEVICE_ETHERNET) + profile_net_info = &(prof_info->ProfileInfo.Ethernet.net_info); + else { + NETWORK_LOG(NETWORK_ERROR, "Invalid Profile Type\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_INVALID_PARAM; + } + + g_strlcpy(ip_buffer, - inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.IpAddr.Data.Ipv4), + inet_ntoa(profile_net_info->IpAddr.Data.Ipv4), NETPM_IPV4_STR_LEN_MAX + 1); g_strlcpy(netmask_buffer, - inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.SubnetMask.Data.Ipv4), + inet_ntoa(profile_net_info->SubnetMask.Data.Ipv4), NETPM_IPV4_STR_LEN_MAX + 1); g_strlcpy(gateway_buffer, - inet_ntoa(prof_info->ProfileInfo.Wlan.net_info.GatewayAddr.Data.Ipv4), + inet_ntoa(profile_net_info->GatewayAddr.Data.Ipv4), NETPM_IPV4_STR_LEN_MAX + 1); + NETWORK_LOG(NETWORK_HIGH, "ipaddress: %s, netmask: %s, gateway: %s\n", ipaddress, netmask, gateway); @@ -1390,17 +1403,16 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name builder = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}")); - if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_DYNAMIC || - prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_AUTO_IP) { + if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_DYNAMIC || + profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_AUTO_IP) { g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(dhcp_method)); - } else if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_OFF) { + } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_OFF) { g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(off_method)); - NETWORK_LOG(NETWORK_HIGH, "DBus Message 2/2: %s %s\n", prop_method, off_method); - } else if (prof_info->ProfileInfo.Wlan.net_info.IpConfigType == NET_IP_CONFIG_TYPE_STATIC) { + } else if (profile_net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC) { g_variant_builder_add(builder, "{sv}", prop_method, g_variant_new_string(manual_method)); @@ -1415,15 +1427,13 @@ int _net_dbus_set_profile_ipv4(net_profile_info_t* prof_info, char* profile_name if (strlen(gateway) >= NETPM_IPV4_STR_LEN_MIN) { g_variant_builder_add(builder, "{sv}", prop_gateway, g_variant_new_string(gateway)); } - NETWORK_LOG(NETWORK_HIGH, "DBus Message 2/2: %s %s %s %s %s %s %s %s\n", - prop_method, manual_method, prop_address, ipaddress, - prop_netmask, netmask, prop_gateway, gateway); } else { - NETWORK_LOG(NETWORK_ERROR, "Invalid argument\n"); + NETWORK_LOG(NETWORK_ERROR, "Invalid argument"); __NETWORK_FUNC_EXIT__; return NET_ERR_INVALID_PARAM; } + params = g_variant_new("(sv)", prop_ipv4_configuration, g_variant_builder_end(builder)); g_variant_builder_unref(builder); diff --git a/src/network-profile-intf.c b/src/network-profile-intf.c old mode 100644 new mode 100755 index 7dc4cdb..34e4f29 --- a/src/network-profile-intf.c +++ b/src/network-profile-intf.c @@ -52,6 +52,8 @@ static int __net_wifi_delete_profile(net_profile_name_t* WifiProfName, static int __net_telephony_add_profile(net_profile_info_t *ProfInfo, net_service_type_t network_type); static int __net_set_default_cellular_service_profile_sync(const char* ProfileName); static int __net_set_default_cellular_service_profile_async(const char* ProfileName); +static int __net_modify_ethernet_profile(const char* ProfileName, + net_profile_info_t* ProfInfo, net_profile_info_t* exProfInfo); /***************************************************************************** * Extern Variables @@ -1756,6 +1758,138 @@ static int __net_telephony_modify_profile(const char *ProfileName, return Error; } +static int __net_modify_ethernet_profile(const char* ProfileName, + net_profile_info_t* ProfInfo, net_profile_info_t* exProfInfo) +{ + __NETWORK_FUNC_ENTER__; + + net_err_t Error = NET_ERR_NONE; + int i = 0; + char profilePath[NET_PROFILE_NAME_LEN_MAX+1] = ""; + + net_dev_info_t *net_info = &(ProfInfo->ProfileInfo.Ethernet.net_info); + net_dev_info_t *ex_net_info = &(exProfInfo->ProfileInfo.Ethernet.net_info); + + g_strlcpy(profilePath, ProfileName, NET_PROFILE_NAME_LEN_MAX+1); + + /* Compare and Set 'Proxy' */ + NETWORK_LOG(NETWORK_HIGH, "Proxy old:%d %s, new:%d %s\n", + ex_net_info->ProxyMethod, + ex_net_info->ProxyAddr, + net_info->ProxyMethod, + net_info->ProxyAddr); + + if ((ex_net_info->ProxyMethod != net_info->ProxyMethod) || + (g_strcmp0(ex_net_info->ProxyAddr, net_info->ProxyAddr) != 0)) { + + Error = _net_dbus_set_proxy(ProfInfo, profilePath); + + if (Error != NET_ERR_NONE) { + __NETWORK_FUNC_EXIT__; + return Error; + } + } + + /* Compare and Set 'IPv4 addresses' */ + char ip_buffer[NETPM_IPV4_STR_LEN_MAX+1] = ""; + char netmask_buffer[NETPM_IPV4_STR_LEN_MAX+1] = ""; + char gateway_buffer[NETPM_IPV4_STR_LEN_MAX+1] = ""; + g_strlcpy(ip_buffer, + inet_ntoa(ex_net_info->IpAddr.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + g_strlcpy(netmask_buffer, + inet_ntoa(ex_net_info->SubnetMask.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + g_strlcpy(gateway_buffer, + inet_ntoa(ex_net_info->GatewayAddr.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + NETWORK_LOG(NETWORK_HIGH, "IPv4 info old: type %d, IP: %s, netmask:" + " %s, gateway: %s\n", ex_net_info->IpConfigType, + ip_buffer, + netmask_buffer, + gateway_buffer); + + g_strlcpy(ip_buffer, + inet_ntoa(net_info->IpAddr.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + g_strlcpy(netmask_buffer, + inet_ntoa(net_info->SubnetMask.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + g_strlcpy(gateway_buffer, + inet_ntoa(net_info->GatewayAddr.Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX + 1); + + NETWORK_LOG(NETWORK_HIGH, "IPv4 info new: type %d, IP: %s, netmask:" + " %s, gateway: %s\n", net_info->IpConfigType, + ip_buffer, + netmask_buffer, + gateway_buffer); + + if ((ex_net_info->IpConfigType != net_info->IpConfigType) || + (net_info->IpConfigType == NET_IP_CONFIG_TYPE_STATIC && + (net_info->IpAddr.Data.Ipv4.s_addr + != ex_net_info->IpAddr.Data.Ipv4.s_addr || + net_info->SubnetMask.Data.Ipv4.s_addr + != ex_net_info->SubnetMask.Data.Ipv4.s_addr || + net_info->GatewayAddr.Data.Ipv4.s_addr + != ex_net_info->GatewayAddr.Data.Ipv4.s_addr))) { + Error = _net_dbus_set_profile_ipv4(ProfInfo, profilePath); + + if (Error != NET_ERR_NONE) { + NETWORK_LOG(NETWORK_ERROR, "Failed to set IPv4\n"); + + __NETWORK_FUNC_EXIT__; + return Error; + } + } + /* Compare and Set 'DNS addresses' */ + for (i = 0; i < net_info->DnsCount; i++) { + if (i >= NET_DNS_ADDR_MAX) { + net_info->DnsCount = NET_DNS_ADDR_MAX; + break; + } + + if(net_info->DnsAddr[i].Type == NET_ADDR_IPV4) { + char old_dns[NETPM_IPV4_STR_LEN_MAX+1] = ""; + char new_dns[NETPM_IPV4_STR_LEN_MAX+1] = ""; + g_strlcpy(old_dns, + inet_ntoa(ex_net_info->DnsAddr[i].Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX+1); + g_strlcpy(new_dns, + inet_ntoa(net_info->DnsAddr[i].Data.Ipv4), + NETPM_IPV4_STR_LEN_MAX+1); + + NETWORK_LOG(NETWORK_HIGH, "IPv4 DNS Addr order: %d, old:" + "%s, new: %s\n", i, old_dns, new_dns); + + if (net_info->DnsAddr[i].Data.Ipv4.s_addr != + ex_net_info->DnsAddr[i].Data.Ipv4.s_addr) + break; + } + + } + + if (i < net_info->DnsCount) { + Error = _net_dbus_set_profile_dns(ProfInfo, profilePath); + + if (Error != NET_ERR_NONE) { + NETWORK_LOG(NETWORK_ERROR, "Failed to set DNS\n"); + + __NETWORK_FUNC_EXIT__; + return Error; + } + } + + __NETWORK_FUNC_EXIT__; + return NET_ERR_NONE; +} + + static int __net_telephony_delete_profile(net_profile_name_t* PdpProfName) { __NETWORK_FUNC_ENTER__; @@ -2306,10 +2440,10 @@ EXPORT_API int net_modify_profile(const char* profile_name, net_profile_info_t* __NETWORK_FUNC_EXIT__; return Error; } - if (prof_info == NULL || (exProfInfo.profile_type != NET_DEVICE_WIFI && - exProfInfo.profile_type != NET_DEVICE_CELLULAR)) { + exProfInfo.profile_type != NET_DEVICE_CELLULAR && + exProfInfo.profile_type != NET_DEVICE_ETHERNET)) { NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n"); __NETWORK_FUNC_EXIT__; return NET_ERR_INVALID_PARAM; @@ -2319,6 +2453,8 @@ EXPORT_API int net_modify_profile(const char* profile_name, net_profile_info_t* Error = __net_modify_wlan_profile_info(profile_name, prof_info, &exProfInfo); else if (exProfInfo.profile_type == NET_DEVICE_CELLULAR) Error = __net_telephony_modify_profile(profile_name, prof_info, &exProfInfo); + else if (exProfInfo.profile_type == NET_DEVICE_ETHERNET) + Error = __net_modify_ethernet_profile(profile_name, prof_info, &exProfInfo); if (Error != NET_ERR_NONE) { NETWORK_LOG(NETWORK_ERROR, -- 2.34.1