/bin/echo "Setting mesh gate..."
/bin/echo " setting mesh interface.."
+## Enable mesh
# Add virtual interface
@SBIN_DIR@/iw dev $WLAN_INTERFACE set type managed
@SBIN_DIR@/ifconfig $WLAN_INTERFACE up
@SBIN_DIR@/ifconfig $MESH_INTERFACE 0.0.0.0 up
@SBIN_DIR@/ifconfig $BRIDGE_INTERFACE up
+## Join mesh
# Join(create) specific mesh network
# NOTICE: [iw dev ## set channel] should be performed before join
@SBIN_DIR@/iw dev $MESH_INTERFACE set channel $MESH_CHANNEL
@SBIN_DIR@/iw dev $MESH_INTERFACE mesh join $MESH_ID
+## Set gate
# Add external network into bridge
@SBIN_DIR@/brctl addif $BRIDGE_INTERFACE $ETHER_INTERFACE
@SBIN_DIR@/ifconfig $ETHER_INTERFACE down
@SBIN_DIR@/ifconfig $ETHER_INTERFACE 0.0.0.0 up
- # Get MAC address from eth0
- ETH_MAC_ADDR=`@SBIN_DIR@/ifconfig $ETHER_INTERFACE | /usr/bin/sed -n '/ether/p' | /usr/bin/awk "{print \\$2}"`
- echo "========================"
- echo $ETH_MAC_ADDR
- @SBIN_DIR@/ifconfig $BRIDGE_INTERFACE hw ether $ETH_MAC_ADDR
-
- # Do scan
- @SBIN_DIR@/iw $MESH_INTERFACE scan > /dev/null
-
# Announce mesh gate
/bin/echo " announce mesh gate.."
@SBIN_DIR@/iw $MESH_INTERFACE set mesh_param mesh_hwmp_rootmode=4
@SBIN_DIR@/iw $MESH_INTERFACE set mesh_param mesh_gate_announcements=1
+ # Get MAC address from eth0
+ #ETH_MAC_ADDR=`@SBIN_DIR@/ifconfig $ETHER_INTERFACE | /usr/bin/sed -n '/ether/p' | /usr/bin/awk "{print \\$2}"`
+ #echo "========================"
+ #echo $ETH_MAC_ADDR
+ #@SBIN_DIR@/ifconfig $BRIDGE_INTERFACE hw ether $ETH_MAC_ADDR
+
+ # Do scan
+ @SBIN_DIR@/iw $MESH_INTERFACE scan > /dev/null
+
# Set IP into bridge interface
/bin/echo " Get IP address with DHCP.."
#/usr/bin/dhcp -v -i $BRIDGE_INTERFACE
int mesh_request_dhcp(const char* interface);
-int mesh_request_enable_mesh_gate(const char* base_interface,
+int mesh_request_enable_mesh(const char* base_interface,
const char* mesh_interface, const char* mesh_id, int mesh_channel);
-int mesh_request_disable_mesh_gate(const char* mesh_interface);
+int mesh_request_disable_mesh(const char* mesh_interface);
+int mesh_request_set_mesh_gate(const char* bridge_interface,
+ const char* mesh_interface, const char* external_interface);
+int mesh_request_unset_mesh_gate(const char* bridge_interface,
+ const char* mesh_interface, const char* external_interface);
+
+/* Bridge network */
int mesh_request_create_bridge(const char* bridge_interface,
const char* mesh_interface, const char* external_interface);
int mesh_request_remove_bridge(const char* bridge_interface);
+int mesh_request_add_bridge_interface(const char* bridge_interface,
+ const char* interface);
+int mesh_request_remove_bridge_interface(const char* bridge_interface,
+ const char* interface);
int mesh_request_scan(const char* mesh_interface);
int mesh_request_specific_scan(const char* mesh_interface, const char* mesh_id,
gboolean mesh_activated; /**< Stored if mesh network is activated */
GList *saved_mesh_network; /**< Saved mesh network list */
GList *scanned_mesh_network; /**< Scanned mesh network list */
+ mesh_network_info_s *joined_network; /**< Joined network info */
} mesh_service;
#endif /* __MESH_H__ */
return ret;
}
-int mesh_request_disable_mesh_gate(const char* mesh_interface)
+int mesh_request_disable_mesh(const char* mesh_interface)
{
int ret = MESHD_ERROR_NONE;
return MESHD_ERROR_NONE;
}
-int mesh_request_enable_mesh_gate(const char* base_interface,
+int mesh_request_enable_mesh(const char* base_interface,
const char* mesh_interface, const char* mesh_id, int mesh_channel)
{
int ret = MESHD_ERROR_NONE;
return ret;
}
- /* Make wlan interface down */
+ /* Make base interface down */
ret = mesh_interface_set(base_interface, NULL, MESH_INTERFACE_DOWN);
if(MESHD_ERROR_NONE != ret) {
MESH_LOGE("Failed to change base interface state");
return ret;
}
+ return MESHD_ERROR_NONE;
+}
+
+int mesh_request_set_mesh_gate(const char* bridge_interface,
+ const char* mesh_interface, const char* external_interface)
+{
+ int ret = MESHD_ERROR_NONE;
+
+/* TODO: Add external network into bridge */
+ NOTUSED(bridge_interface);
+ NOTUSED(external_interface);
+
/* Set mesh parameters */
ret = mesh_netlink_set_mesh_parameter(mesh_interface,
"mesh_hwmp_rootmode", 4);
return MESHD_ERROR_NONE;
}
+int mesh_request_unset_mesh_gate(const char* bridge_interface,
+ const char* mesh_interface, const char* external_interface)
+{
+ int ret = MESHD_ERROR_NONE;
+
+/* TODO: remove external network from bridge */
+ NOTUSED(bridge_interface);
+ NOTUSED(external_interface);
+
+ /* Set mesh parameters */
+ ret = mesh_netlink_set_mesh_parameter(mesh_interface,
+ "mesh_hwmp_rootmode", 0);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to set [mesh_hwmp_rootmode] : 4");
+ }
+
+ ret = mesh_netlink_set_mesh_parameter(mesh_interface,
+ "mesh_gate_announcements", 0);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to set [mesh_gate_announcements] : 1");
+ }
+
+ return MESHD_ERROR_NONE;
+}
+
int mesh_request_remove_bridge(const char* bridge_interface)
{
int ret = MESHD_ERROR_NONE;
goto FINISH;
}
- ret = mesh_request_enable_mesh_gate(info->base_interface,
- info->mesh_interface, info->mesh_id, info->mesh_channel);
- if (MESHD_ERROR_NONE != ret) {
- MESH_LOGE("Failed to mesh_request_enable_mesh_gate [%d]", ret);
- goto FINISH;
- }
-
- ret = mesh_request_create_bridge(info->bridge_interface,
- info->mesh_interface, info->external_interface);
- if (MESHD_ERROR_NONE != ret) {
- MESH_LOGE("Failed to mesh_request_create_bridge [%d]", ret);
- goto FINISH;
- }
-#if 0
- ret = mesh_request_specific_scan(info->mesh_interface,
- info->mesh_id, info->mesh_channel);
- if (MESHD_ERROR_NONE != ret) {
- MESH_LOGE("Failed to mesh_request_specific_scan [%d]", ret);
- }
-
- ret = mesh_dhcp_request(info->bridge_interface);
- if (MESHD_ERROR_NONE != ret) {
- MESH_LOGE("Failed to mesh_dhcp_request [%d]", ret);
- }
-#endif
-
FINISH:
net_mesh_emit_mesh_enabled(object, ret);
goto FINISH;
}
- ret = mesh_request_disable_mesh_gate(info->mesh_interface);
+ ret = mesh_request_disable_mesh(info->mesh_interface);
if (MESHD_ERROR_NONE != ret) {
MESH_LOGE("Failed to mesh_request_disable_mesh_gate");
- goto FINISH;
}
ret = mesh_request_remove_bridge(info->bridge_interface);
}
static gboolean _meshd_dbus_handle_enable_mesh(NetMesh *object,
- GDBusMethodInvocation *invocation)
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
{
int ret = MESHD_ERROR_NONE;
-
- MESH_LOGD("Not implemented yet !");
+ mesh_service *service = (mesh_service *)user_data;
+ mesh_interface_s *info = service->interface_info;
/* TODO: Create or join mesh network and create bridge */
+ ret = mesh_request_enable_mesh(info->base_interface,
+ info->mesh_interface, info->mesh_id, info->mesh_channel);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to mesh_request_enable_mesh_gate [%d]", ret);
+ goto FINISH;
+ }
+
+ ret = mesh_request_create_bridge(info->bridge_interface,
+ info->mesh_interface, info->external_interface);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to mesh_request_create_bridge [%d]", ret);
+ goto FINISH;
+ }
+#if 0
+ ret = mesh_request_specific_scan(info->mesh_interface,
+ info->mesh_id, info->mesh_channel);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to mesh_request_specific_scan [%d]", ret);
+ }
+
+ ret = mesh_dhcp_request(info->bridge_interface);
+ if (MESHD_ERROR_NONE != ret) {
+ MESH_LOGE("Failed to mesh_dhcp_request [%d]", ret);
+ }
+#endif
+
+FINISH:
net_mesh_complete_enable_mesh(object, invocation, ret);
return TRUE;
}
static gboolean _meshd_dbus_handle_disable_mesh(NetMesh *object,
- GDBusMethodInvocation *invocation)
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
{
int ret = MESHD_ERROR_NONE;
MESH_LOGD("Not implemented yet !");
+ NOTUSED(user_data);
/* TODO: Destroy bridge and return from mesh to infra mode */