WMESHD_SECURITY_SAE, /**< SAE */
} wmeshd_security_type_e;
+/**< Internal enum for IP Config Type */
+typedef enum {
+ WMESHD_IP_CONFIG_TYPE_UNKNOWN = 0, /**< Unknown */
+ WMESHD_IP_CONFIG_TYPE_DYNAMIC, /**< DHCP */
+ WMESHD_IP_CONFIG_TYPE_STATIC, /**< Static */
+} wmeshd_ip_config_type_e;
+
/**< mesh interface information structure */
typedef struct {
gchar *bridge_interface; /**< Bridge name between mesh and others */
int channel; /**< Channel */
wmeshd_security_type_e security; /**< Security type */
wmeshd_connection_state_e state; /**< Connection state */
+ wmeshd_ip_config_type_e ipv4_type; /**< IPv4 Config Type */
+ char *ipv4_address; /**< IPv4 Address */
+ char *ipv4_netmask; /**< IPv4 Netmask */
} wmesh_network_info_s;
/**< Mesh network scan result structure */
const gchar *signal_name, GVariant *parameters, gpointer user_data)
{
wmesh_service *service = (wmesh_service*)user_data;
- wmesh_network_info_s network_info = { 0, 0, 0, 0, 0 };
+ wmesh_network_info_s network_info = { 0, 0, 0, 0, 0, 0, 0, 0};
int ret = WMESHD_ERROR_NONE;
wmeshd_check_null_ret("user_data", user_data);
{
GVariantIter *peer = NULL;
GVariantIter *property = NULL;
+ GVariantIter *iter = NULL;
gchar *key = NULL;
+ gchar *sub_key = NULL;
GVariant *val = NULL;
+ GVariant *sub_val = NULL;
gsize len = 0;
GVariant *child;
const gchar* obj_path = NULL;
joined_info->security = WMESHD_SECURITY_NONE;
} else if (strcasecmp(key, "Frequency") == 0) {
joined_info->channel = __frequency_to_channel(g_variant_get_uint16(val));
+ } else if (strcasecmp(key, "IPv4") == 0) {
+ g_variant_get(val, "a{sv}", &iter);
+ while (g_variant_iter_loop(iter, "{sv}", &sub_key, &sub_val)) {
+
+ if (strcasecmp(sub_key, "Method") == 0) {
+ buf = g_variant_get_string(sub_val, &len);
+ WMESH_LOGD("Method %s", buf);
+
+ if (strcasecmp(buf, "dhcp") == 0)
+ joined_info->ipv4_type =
+ WMESHD_IP_CONFIG_TYPE_DYNAMIC;
+ else if (strcasecmp(buf, "manual") == 0)
+ joined_info->ipv4_type =
+ WMESHD_IP_CONFIG_TYPE_STATIC;
+ else
+ joined_info->ipv4_type =
+ WMESHD_IP_CONFIG_TYPE_UNKNOWN;
+ } else if (strcasecmp(sub_key, "Address") == 0) {
+ buf = g_variant_get_string(sub_val, &len);
+ WMESH_LOGD("Address %s", buf);
+ joined_info->ipv4_address = g_strdup(buf);
+ } else if (strcasecmp(sub_key, "Netmask") == 0) {
+ buf = g_variant_get_string(sub_val, &len);
+ WMESH_LOGD("Netmask %s", buf);
+ joined_info->ipv4_netmask = g_strdup(buf);
+ }
+ }
+ g_variant_iter_free(iter);
}
}
if (FALSE == valid_state) {
g_free(joined_info->mesh_id);
g_free(joined_info->bssid);
+ g_free(joined_info->ipv4_address);
+ g_free(joined_info->ipv4_netmask);
continue;
}
if (service->joined_network) {
g_free(service->joined_network->mesh_id);
g_free(service->joined_network->bssid);
+ g_free(service->joined_network->ipv4_address);
+ g_free(service->joined_network->ipv4_netmask);
g_free(service->joined_network);
service->joined_network = NULL;
}
net_wmesh_complete_get_joined_mesh_network(object, invocation,
joined->mesh_id, joined->bssid,
joined->channel, (int)joined->security,
- joined->state, ret);
+ joined->state, joined->ipv4_type, joined->ipv4_address,
+ joined->ipv4_netmask, ret);
} else {
net_wmesh_complete_get_joined_mesh_network(object, invocation,
- "", "", 0, 0, 0, WMESHD_ERROR_NO_DATA);
+ "", "", 0, 0, 0, 0, "", "", WMESHD_ERROR_NO_DATA);
}
} else {
net_wmesh_complete_get_joined_mesh_network(object, invocation,
- "", "", 0, 0, 0, ret);
+ "", "", 0, 0, 0, 0, "", "", ret);
}
return TRUE;