mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-11-01 10:57:47 +00:00
apc:Fix AP not receiving hello packets
Fix firewall setting not being applied. return incase the interap socket fails. Clean up in failure conditions. Signed-off-by: Chaitanya Godavarthi <chaitanya.kiran@netexperience.com>
This commit is contained in:
committed by
Rick Sommerville
parent
63f602a136
commit
93baf6d334
@@ -253,6 +253,10 @@ static void check_timer_handler(struct uloop_timeout *timeout)
|
|||||||
if (CheckIp && (MyIpAddr != CheckIp))
|
if (CheckIp && (MyIpAddr != CheckIp))
|
||||||
{
|
{
|
||||||
printf("IP address changed from %x to %x - restart APC election\n", MyIpAddr, CheckIp);
|
printf("IP address changed from %x to %x - restart APC election\n", MyIpAddr, CheckIp);
|
||||||
|
system("/usr/opensync/bin/ovsh u APC_State dr_addr:=0.0.0.0 bdr_addr:=0.0.0.0 enabled:=false mode:=NC");
|
||||||
|
uloop_done();
|
||||||
|
ubus_done();
|
||||||
|
interap_rcv_close();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,6 +270,9 @@ static void check_timer_handler(struct uloop_timeout *timeout)
|
|||||||
|
|
||||||
static void handle_signal(int signo)
|
static void handle_signal(int signo)
|
||||||
{
|
{
|
||||||
|
uloop_done();
|
||||||
|
ubus_done();
|
||||||
|
interap_rcv_close();
|
||||||
system("/usr/opensync/bin/ovsh u APC_State dr_addr:=0.0.0.0 bdr_addr:=0.0.0.0 enabled:=false mode:=NC");
|
system("/usr/opensync/bin/ovsh u APC_State dr_addr:=0.0.0.0 bdr_addr:=0.0.0.0 enabled:=false mode:=NC");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,8 +334,10 @@ int main(int argc, char *const* argv)
|
|||||||
callback cb = receive_from_socket;
|
callback cb = receive_from_socket;
|
||||||
|
|
||||||
if (interap_recv(IAC_APC_ELECTION_PORT, cb, 1000,
|
if (interap_recv(IAC_APC_ELECTION_PORT, cb, 1000,
|
||||||
NULL, NULL) < 0)
|
NULL, NULL) < 0) {
|
||||||
printf("Error: Failed InterAP receive");
|
printf("Error: Failed InterAP receive");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
memset(Timers, 0, sizeof(Timers));
|
memset(Timers, 0, sizeof(Timers));
|
||||||
@@ -351,6 +360,7 @@ int main(int argc, char *const* argv)
|
|||||||
uloop_run();
|
uloop_run();
|
||||||
uloop_done();
|
uloop_done();
|
||||||
ubus_done();
|
ubus_done();
|
||||||
|
interap_rcv_close();
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,5 +30,8 @@ endef
|
|||||||
define Package/libinterapcomm/install
|
define Package/libinterapcomm/install
|
||||||
$(INSTALL_DIR) $(1)/usr/lib
|
$(INSTALL_DIR) $(1)/usr/lib
|
||||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/libinterapcomm.so $(1)/usr/lib/
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/libinterapcomm.so $(1)/usr/lib/
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/interap.init $(1)/etc/init.d/interap
|
||||||
|
|
||||||
endef
|
endef
|
||||||
$(eval $(call BuildPackage,libinterapcomm))
|
$(eval $(call BuildPackage,libinterapcomm))
|
||||||
|
|||||||
35
feeds/wlan-ap/interAPcomm/files/interap.init
Normal file
35
feeds/wlan-ap/interAPcomm/files/interap.init
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=12
|
||||||
|
STOP=12
|
||||||
|
|
||||||
|
start() {
|
||||||
|
apc=`cat /etc/config/firewall | grep Allow-APC`
|
||||||
|
ucc=`cat /etc/config/firewall | grep Allow-UCC`
|
||||||
|
|
||||||
|
if [ -z "$apc" ]; then
|
||||||
|
uci add firewall rule
|
||||||
|
uci set firewall.@rule[-1].name='Allow-APC'
|
||||||
|
uci set firewall.@rule[-1].src='wan'
|
||||||
|
uci set firewall.@rule[-1].proto='udp'
|
||||||
|
uci set firewall.@rule[-1].dst_port='50010'
|
||||||
|
uci set firewall.@rule[-1].target='ACCEPT'
|
||||||
|
uci set firewall.@rule[-1].family='ipv4'
|
||||||
|
uci commit firewall
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$ucc" ]; then
|
||||||
|
uci add firewall rule
|
||||||
|
uci set firewall.@rule[-1].name='Allow-UCC'
|
||||||
|
uci set firewall.@rule[-1].src='wan'
|
||||||
|
uci set firewall.@rule[-1].proto='udp'
|
||||||
|
uci set firewall.@rule[-1].dst_port='50000'
|
||||||
|
uci set firewall.@rule[-1].target='ACCEPT'
|
||||||
|
uci set firewall.@rule[-1].family='ipv4'
|
||||||
|
uci commit firewall
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo stop
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ int interap_send(unsigned short port, char *dst_ip,
|
|||||||
int interap_recv(unsigned short port, int (*recv_cb)(void *, ssize_t),
|
int interap_recv(unsigned short port, int (*recv_cb)(void *, ssize_t),
|
||||||
unsigned int len, struct ev_loop *loop,
|
unsigned int len, struct ev_loop *loop,
|
||||||
ev_io *io);
|
ev_io *io);
|
||||||
|
void interap_rcv_close(void);
|
||||||
|
|
||||||
typedef int (*callback)(void *, ssize_t);
|
typedef int (*callback)(void *, ssize_t);
|
||||||
typedef struct recv_arg {
|
typedef struct recv_arg {
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ static void receive_data_uloop(struct uloop_fd *fd, unsigned int events)
|
|||||||
recv_data = malloc(ra.len);
|
recv_data = malloc(ra.len);
|
||||||
memset(recv_data, 0, ra.len);
|
memset(recv_data, 0, ra.len);
|
||||||
if ((recv_data_len = recvfrom(recv_sock, recv_data, ra.len,
|
if ((recv_data_len = recvfrom(recv_sock, recv_data, ra.len,
|
||||||
0, NULL, 0)) < 0)
|
0, NULL, 0)) < 0) {
|
||||||
printf("recvfrom() failed");
|
printf("recvfrom() failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ra.cb(recv_data, recv_data_len);
|
ra.cb(recv_data, recv_data_len);
|
||||||
free(recv_data);
|
free(recv_data);
|
||||||
@@ -99,6 +101,11 @@ int interap_recv(unsigned short port, int (*recv_cb)(void *, ssize_t),
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void interap_rcv_close(void)
|
||||||
|
{
|
||||||
|
close(recv_sock);
|
||||||
|
}
|
||||||
|
|
||||||
int interap_send(unsigned short port, char *dst_ip, void *data,
|
int interap_send(unsigned short port, char *dst_ip, void *data,
|
||||||
unsigned int len)
|
unsigned int len)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -275,8 +275,10 @@ int main(int argc, char ** argv)
|
|||||||
callback cb = recv_process;
|
callback cb = recv_process;
|
||||||
LOGI("Call interap_recv");
|
LOGI("Call interap_recv");
|
||||||
if( interap_recv(IAC_VOIP_PORT, cb, sizeof(struct voip_session),
|
if( interap_recv(IAC_VOIP_PORT, cb, sizeof(struct voip_session),
|
||||||
loop, &iac_io) < 0)
|
loop, &iac_io) < 0) {
|
||||||
LOGI("Error: Failed InterAP receive");
|
LOGI("Error: Failed InterAP receive");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// task_init();
|
// task_init();
|
||||||
netlink_listen(loop);
|
netlink_listen(loop);
|
||||||
@@ -291,6 +293,7 @@ int main(int argc, char ** argv)
|
|||||||
#endif
|
#endif
|
||||||
ev_default_destroy();
|
ev_default_destroy();
|
||||||
|
|
||||||
|
interap_rcv_close();
|
||||||
LOGN("Exiting UCCM");
|
LOGN("Exiting UCCM");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user