diff --git a/src/capwap/Makefile b/src/capwap/Makefile index 22dafedf..ed2b2baa 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -32,7 +32,7 @@ SOCKOBJS=sock_create.o sock_copyaddr.o sock_strtoaddr.o sock_cmpaddr.o sock_addr sock_addrinit.o \ sock_set_dontfrag.o \ sock_get_primary_if.o \ - sock_receive.o \ + #sock_receive.o \ LOGOBJS=cw_log.o \ cw_log_debug.o \ @@ -54,6 +54,7 @@ UTILOBJS= \ cw_foreach_msgelem.o \ avltree.o \ avltree_get_node.o \ + avltree_get.o \ avltree_del_all.o \ avltree_foreach_lr.o \ avltree_foreach_rl.o \ @@ -91,7 +92,6 @@ LWAPPCISCOOBJS = \ CAPWAPOBJS= \ - cwmsg_init.o \ cwmsg_init_echo_request.o \ cwmsg_addelem.o \ cwmsg_vaddelem.o \ @@ -101,7 +101,6 @@ CAPWAPOBJS= \ cwmsg_addelem_cw_local_ip_addr.o \ cwmsg_addelem_mtu_discovery_padding.o \ cwmsg_addelem_ac_timestamp.o \ - cw_addelem_vendor_specific_payload.o \ cwmsg_addelem_maximum_message_length.o \ cwmsg_addelem_image_identifier.o \ cwmsg_send.o \ @@ -182,6 +181,7 @@ CAPWAPOBJS= \ format.o +# cw_addelem_vendor_specific_payload.o \ #cw_in_wtp_name.o \ #cw_msgtostr.o \ #cw_msgelemtostr.o \ @@ -190,6 +190,7 @@ CAPWAPOBJS= \ #cwmsg_addelem_wtp_board_data.o \ #wtpinfo_readelem_wtp_board_data.o \ # cw_send_image_data_response.o \ + #cwmsg_init.o \ #cw_ianavendoridtostr.o \ #cwmsg_addelem_result_code.o \ diff --git a/src/capwap/capwap_actions.h b/src/capwap/capwap_actions.h index 180397e1..fa7727ac 100644 --- a/src/capwap/capwap_actions.h +++ b/src/capwap/capwap_actions.h @@ -112,4 +112,12 @@ 0,0 +#define CW_ACTION_IN_CAPWAP_CONTROL_IPV4_ADDRESS \ + CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, /* Element ID*/ \ + cw_in_generic, 0, /* start/end callback */ \ + CW_ITEMTYPE_DATA, /* Type of element */ \ + CW_ITEM_CAPWAP_CONTROL_IP_ADDR, /* ID to use store */ \ + 6, 6 /* min/max length */ + + #endif diff --git a/src/capwap/capwap_actions_wtp.c b/src/capwap/capwap_actions_wtp.c index c9f421cc..739c6259 100644 --- a/src/capwap/capwap_actions_wtp.c +++ b/src/capwap/capwap_actions_wtp.c @@ -30,7 +30,7 @@ cw_action_in_t capwap_actions_wtp_in[] = { /* ------------------------------------------------------------------------------- */ - /* Message Discovery Request */ + /* Message Discovery Response */ {0, 0, CW_STATE_DISCOVERY, CW_MSG_DISCOVERY_RESPONSE, 0, 0, 0} , @@ -44,7 +44,8 @@ cw_action_in_t capwap_actions_wtp_in[] = { CW_ACTION_IN_VENDOR_SPECIFIC_PAYLOAD, 1} , - + /* Element CAPWAP Control IPv4 Address */ + {0, 0, 0} diff --git a/src/capwap/conn.h b/src/capwap/conn.h index a15c5044..02514b55 100644 --- a/src/capwap/conn.h +++ b/src/capwap/conn.h @@ -170,7 +170,7 @@ struct conn *conn_create_noq(int sock, struct sockaddr *addr); extern int conn_send_cwmsg(struct conn *conn, struct cwmsg *cwmsg); -extern void conn_process_packet(struct conn *conn, uint8_t * packet, int len, +extern int conn_process_packet(struct conn *conn, uint8_t * packet, int len, int (*cb) (void *, uint8_t *,int len), void *cbarg); extern uint8_t *conn_get_message(struct conn *conn); diff --git a/src/capwap/conn_process_packet.c b/src/capwap/conn_process_packet.c index 84fa4f19..53a7aaba 100644 --- a/src/capwap/conn_process_packet.c +++ b/src/capwap/conn_process_packet.c @@ -161,13 +161,13 @@ static void cw_dbg_packet(struct conn * conn, uint8_t * packet, int len) #endif -void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)(void*,uint8_t *,int),void *cbarg) +int conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)(void*,uint8_t *,int),void *cbarg) { if (len<8){ /* packet too short */ cw_dbg(DBG_CW_PKT_ERR,"Discarding packet from %s, packet too short, len=%d",sock_addr2str(&conn->addr),len); - return; + return 0; } int preamble = cw_get_hdr_preamble(packet); @@ -175,12 +175,12 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( if ( (preamble & 0xf0) != CW_VERSION){ /* wrong version */ cw_dbg(DBG_CW_PKT_ERR,"Discarding packet from %s, wrong version, version=%d",sock_addr2str(&conn->addr),(preamble&0xf0)>>8); - return; + return 0; } if (preamble & 0xf ) { /* decode dtls */ - return; + return 0; } /* log this packet */ @@ -194,7 +194,7 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( if (payloadlen<0){ cw_dbg(DBG_CW_PKT_ERR,"Discarding packet from %s, header length greater than len, hlen=%d",sock_addr2str(&conn->addr),offs); /* EINVAL */ - return; + return 0; } /* @@ -211,7 +211,7 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( if (cw_get_hdr_rmac_len(packet)+8>offs){ /* wrong rmac size */ cw_dbg(DBG_CW_PKT_ERR,"Discarding packet, wrong R-MAC size, size=%d",*(packet+8)); - return; + return 0; } // memcpy(cwrmsg.rmac, packet+8,8); } @@ -224,7 +224,7 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( uint8_t * f; f = fragman_add(conn->fragman, packet,offs,payloadlen); if (f==NULL) - return; + return 0; cw_dbg_packet(conn,f+4,*(uint32_t*)f); @@ -244,7 +244,7 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( process_message(conn,f+4,*(uint32_t*)f,cb,cbarg); free (f); - return; + return 1; } //extern int cw_process_msg(struct conn * conn,uint8_t*msg,int len); @@ -258,7 +258,7 @@ void conn_process_packet(struct conn * conn, uint8_t *packet, int len,int (*cb)( //msg_4*((val >> 19) & 0x1f); process_message(conn,packet,len,cb,cbarg); - return; + return 1; } @@ -277,7 +277,7 @@ int cw_read_messages(struct conn *conn) if (n > 0) conn_process_packet(conn, buf, n, cw_process_msg, conn); + } - diff --git a/src/capwap/cw_in_vendor_specific_payload.c b/src/capwap/cw_in_vendor_specific_payload.c index b13c94ac..777104c0 100644 --- a/src/capwap/cw_in_vendor_specific_payload.c +++ b/src/capwap/cw_in_vendor_specific_payload.c @@ -1,6 +1,7 @@ #include "capwap.h" #include "cw_log.h" +#include "sock.h" //Tube /** * @file * @brief Implementation of Vendor Specific Payload @@ -19,6 +20,8 @@ int cw_in_vendor_specific_payload(struct conn *conn,struct cw_action_in * a,uint af = cw_actionlist_in_get(conn->actions->in,&as); +cw_dbg(DBG_ELEM,"From might be: %s\n",sock_addr2str(&conn->addr)); + if (!af) { cw_log(DBG_ELEM,"Can't handle Vendor Specific Payload %s/%d, in msg %d (%s) in %s state.", cw_strvendor(as.vendor_id), diff --git a/src/contrib/install_libuci.sh b/src/contrib/install_libuci.sh index 950f651c..a07871bd 100755 --- a/src/contrib/install_libuci.sh +++ b/src/contrib/install_libuci.sh @@ -20,4 +20,4 @@ export LDFLAGS cmake .. make uci cli - +make install diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index ec0a22d1..378b08d8 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -57,6 +57,7 @@ static int run_discovery(struct conn *conn) while (!cw_timer_timeout(timer) && conn->capwap_state == CW_STATE_DISCOVERY) { cw_read_messages(conn); + printf ("Got one annswer\n"); }