Not working, more testing
FossilOrigin-Name: 914f7b840050bde9e8aa265af0e723efcfee36337087ad793780c757897d5778
This commit is contained in:
parent
737fd75585
commit
677edeaaef
137
src/ac/ac_main.c
137
src/ac/ac_main.c
@ -41,6 +41,7 @@ int ac_run();
|
|||||||
int main (int argc, const char * argv[])
|
int main (int argc, const char * argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
cw_log_name="AC-Tube";
|
cw_log_name="AC-Tube";
|
||||||
|
|
||||||
read_config("ac.conf");
|
read_config("ac.conf");
|
||||||
@ -71,6 +72,11 @@ errX:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void process_ctrl_packet(int index, struct sockaddr * addr, uint8_t * buffer, int len);
|
void process_ctrl_packet(int index, struct sockaddr * addr, uint8_t * buffer, int len);
|
||||||
|
#define AC_PROTO_CAPWAP 0
|
||||||
|
#define AC_PROTO_LWAPP 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ac_run()
|
int ac_run()
|
||||||
{
|
{
|
||||||
@ -89,7 +95,11 @@ int ac_run()
|
|||||||
|
|
||||||
int i;
|
int i;
|
||||||
for(i=0; i<conf_listen_addrs_len; i++){
|
for(i=0; i<conf_listen_addrs_len; i++){
|
||||||
socklist_add_unicast(conf_listen_addrs[i],conf_control_port);
|
socklist_add_unicast(conf_listen_addrs[i],conf_control_port,AC_PROTO_CAPWAP);
|
||||||
|
#ifdef WITH_LWAPP
|
||||||
|
if (conf_lwapp)
|
||||||
|
socklist_add_unicast(conf_listen_addrs[i],conf_lw_control_port,AC_PROTO_LWAPP);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (socklist_len==0){
|
if (socklist_len==0){
|
||||||
@ -99,12 +109,23 @@ int ac_run()
|
|||||||
|
|
||||||
/* create multicast sockets */
|
/* create multicast sockets */
|
||||||
for (i=0; i<conf_mcast_groups_len;i++){
|
for (i=0; i<conf_mcast_groups_len;i++){
|
||||||
socklist_add_multicast(conf_mcast_groups[i],conf_control_port);
|
socklist_add_multicast(conf_mcast_groups[i],conf_control_port,AC_PROTO_CAPWAP);
|
||||||
|
#ifdef WITH_LWAPP
|
||||||
|
if (conf_lwapp)
|
||||||
|
socklist_add_multicast(conf_mcast_groups[i],conf_lw_control_port,AC_PROTO_LWAPP);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* broadcast sockety ipv4 only */
|
/* broadcast sockety ipv4 only */
|
||||||
for (i=0; i<conf_bcast_addrs_len;i++){
|
for (i=0; i<conf_bcast_addrs_len;i++){
|
||||||
socklist_add_broadcast(conf_bcast_addrs[i],conf_control_port);
|
socklist_add_broadcast(conf_bcast_addrs[i],conf_control_port,AC_PROTO_CAPWAP);
|
||||||
|
#ifdef WITH_LWAPP
|
||||||
|
printf("Adding %d\n",socklist_len);
|
||||||
|
if (conf_lwapp)
|
||||||
|
socklist_add_broadcast(conf_bcast_addrs[i],conf_lw_control_port,AC_PROTO_LWAPP);
|
||||||
|
printf ("SI %d, PROTO: %d\n",socklist_len-1,socklist[socklist_len-1].ac_proto);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -163,21 +184,10 @@ int ac_run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void process_cw_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer, int len)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void process_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer, int len)
|
|
||||||
{
|
{
|
||||||
int sock = socklist[index].reply_sockfd;
|
int sock = socklist[index].reply_sockfd;
|
||||||
|
|
||||||
#ifdef WITH_CW_LOG_DEBUG
|
|
||||||
char str[100];
|
|
||||||
sock_addrtostr(addr,str,100);
|
|
||||||
cw_log_debug1("Received packet from %s, len = %i, via %s\n",str,len,
|
|
||||||
socklist[index].type==SOCKLIST_UNICAST_SOCKET ? "unicast":"bcast/mcast");
|
|
||||||
cw_log_debug2_dump(buffer,len,"Packet data for packet, recevied from %s",str);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* first of all check preamble */
|
/* first of all check preamble */
|
||||||
int preamble = CWTH_GET_PREAMBLE(buffer);
|
int preamble = CWTH_GET_PREAMBLE(buffer);
|
||||||
@ -220,3 +230,100 @@ void process_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer, int
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void process_lw_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer, int len)
|
||||||
|
{
|
||||||
|
int sock = socklist[index].reply_sockfd;
|
||||||
|
|
||||||
|
uint8_t * m = buffer+6;
|
||||||
|
uint32_t val = ntohl(*((uint32_t*)(m)));
|
||||||
|
|
||||||
|
|
||||||
|
printf ("VAL: %08X\n",val);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* first of all check preamble */
|
||||||
|
int version = LWTH_GET_VERSION(m);
|
||||||
|
|
||||||
|
if (version != LW_VERSION){
|
||||||
|
cw_log_debug1("Discarding LWAPP packet, wrong verson");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int l = LWTH_GET_LENGTH(m);
|
||||||
|
printf ("LEN = %d\n",l);
|
||||||
|
|
||||||
|
if (l+12 != len){
|
||||||
|
cw_log_debug1("Discarding LWAPP packet, wrong length");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wtplist_lock();
|
||||||
|
struct wtpman * wtpman = wtplist_get(addr);
|
||||||
|
if (!wtpman){
|
||||||
|
|
||||||
|
wtpman = wtpman_create(index,addr);
|
||||||
|
|
||||||
|
if (!wtpman ){
|
||||||
|
cw_log(LOG_ERR,"Error creating wtpman: %s",strerror(errno));
|
||||||
|
wtplist_unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!wtplist_add(wtpman)){
|
||||||
|
cw_log(LOG_ERR,"Error adding wtpman: Too many wtp connections");
|
||||||
|
wtpman_destroy(wtpman);
|
||||||
|
wtplist_unlock();
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
wtpman_lw_start(wtpman);
|
||||||
|
}
|
||||||
|
|
||||||
|
wtpman_lw_addpacket(wtpman,buffer,len);
|
||||||
|
wtplist_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void process_ctrl_packet(int index,struct sockaddr * addr, uint8_t * buffer, int len)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef WITH_CW_LOG_DEBUG
|
||||||
|
char str[100];
|
||||||
|
sock_addrtostr(addr,str,100);
|
||||||
|
cw_log_debug1("Received packet from %s, len = %i, via %s\n",str,len,
|
||||||
|
socklist[index].type==SOCKLIST_UNICAST_SOCKET ? "unicast":"bcast/mcast");
|
||||||
|
cw_log_debug2_dump(buffer,len,"Packet data for packet, recevied from %s",str);
|
||||||
|
#endif
|
||||||
|
printf("Index is %d\n",index);
|
||||||
|
printf ("AC PROTO %d\n",socklist[index].ac_proto);
|
||||||
|
|
||||||
|
switch (socklist[index].ac_proto){
|
||||||
|
case AC_PROTO_CAPWAP:
|
||||||
|
process_cw_ctrl_packet(index,addr,buffer,len);
|
||||||
|
return;
|
||||||
|
case AC_PROTO_LWAPP:
|
||||||
|
process_lw_ctrl_packet(index,addr,buffer,len);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user