From edbcddd12d1c5f9cf290563c14c932fe3b999c73 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 23 Mar 2015 06:47:27 +0000 Subject: [PATCH] Renaming of constants and macros. FossilOrigin-Name: e178706d8b193e63521682a3a894fd4ac4cbc9fe4f0006db2ab5d2964a92be9c --- src/capwap/capwap.h | 287 ++++++++++++++++++++++++++++---------------- 1 file changed, 182 insertions(+), 105 deletions(-) diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 9f06cd0a..77b6f8e5 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -21,10 +21,14 @@ #include #include +#include + #include #include "conn.h" +#include "lwapp.h" + /* capwap version and iana number */ #define CW_VERSION 0 #define CWIANA_ENTERPRISE_NUMBER 0 /* for capwap base the number */ @@ -37,7 +41,7 @@ /** * CAPWAP modes - */ + */ enum capwapmodes { CWMODE_STD = 0, CWMODE_CISCO, @@ -50,24 +54,13 @@ enum capwapmodes { #define CWTH_FLAGS_R2 0x02 /* bit 1 reserved 2 */ #define CWTH_FLAGS_R3 0x04 /* bit 2 reserved 3 */ #define CWTH_FLAGS_K 0x08 /* bit 3 Keep alive flag */ -#define CWTH_FLAGS_M 0x10 /* bit 4 MAC Adress field present*/ +#define CWTH_FLAGS_M 0x10 /* bit 4 MAC Adress field present */ #define CWTH_FLAGS_W 0x20 /* bit 5 wireless info present */ #define CWTH_FLAGS_L 0x40 /* bit 6 last fragment */ #define CWTH_FLAGS_F 0x80 /* bit 7 fragment */ #define CWTH_FLAGS_T 0x100 /* bit 8 type of payload frame */ -#define CWTH_GET_FLAG_R1(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R1 ) ? 1:0) -#define CWTH_GET_FLAG_R2(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R2 ) ? 1:0) -#define CWTH_GET_FLAG_R3(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R3 ) ? 1:0) - -#define CWTH_GET_FLAG_K(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_K ) ? 1:0) -#define CWTH_GET_FLAG_M(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_M ) ? 1:0) -#define CWTH_GET_FLAG_W(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_W ) ? 1:0) -#define CWTH_GET_FLAG_L(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_L ) ? 1:0) -#define CWTH_GET_FLAG_F(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_F ) ? 1:0) -#define CWTH_GET_FLAG_T(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_T ) ? 1:0) - /* wireless binding ids */ #define CWTH_WBID_RESERVED1 0 #define CWTH_WBID_IEEE80211 1 @@ -77,24 +70,13 @@ enum capwapmodes { -/* generic macroto to isolate bits from a dword */ -#define CW_GET_DWORD_BITS(src,start,len) ((~(0xFFFFFFFF<> (32 - start - len))) - -/* macros to acces transport header values */ -#define CWTH_GET_PREAMBLE(th) (th[0]) -//(ntohl(((uint32_t*)th)[0]) >> 24) -#define CWTH_GET_FRAGID(th) ((ntohl((((uint32_t*)th)[1]) >> 16) & 0xffff)) -#define CWTH_GET_FRAGOFFSET(th) ((ntohl((((uint32_t*)th)[1]) >> 3) & 0x1fff)) -#define CWTH_GET_RID(th) ((ntohl((((uint32_t*)th)[0]) >> 14) & 0x1f)) -#define CWTH_GET_WBID(th) ((ntohl(((uint32_t*)th)[0]) >> 9) & 0x1f) -#define CWTH_GET_HLEN(th) ((ntohl(((uint32_t*)th)[0]) >> 19) & 0x1f) #define CAPWAP_PACKET_PREAMBLE (CW_VERSION<<4) #define CAPWAP_DTLS_PACKET_PREAMBLE (CW_VERSION<<4|1) /* * control header stuff - */ + */ /* struct capwap_ctrlhdr @@ -117,8 +99,8 @@ struct capwap_ctrlhdr #define CWMSG_JOIN_REQUEST 3 + CWIANA_ENTERPRISE_NUMBER*256 #define CWMSG_JOIN_RESPONSE 4 + CWIANA_ENTERPRISE_NUMBER*256 -#define CWMSG_CONFIGURATION_STATUS_REQUEST 5 -#define CWMSG_CONFIGURATION_STATUS_RESPONSE 6 +#define CW_MSG_CONFIGURATION_STATUS_REQUEST 5 +#define CW_MSG_CONFIGURATION_STATUS_RESPONSE 6 #define CWMSG_CONFIGURATION_UPDATE_REQUEST 7 #define CWMSG_CONFIGURATION_UPDATE_RESPONSE 8 @@ -132,8 +114,8 @@ struct capwap_ctrlhdr #define CWMSG_ECHO_REQUEST 13 #define CWMSG_ECHO_RESPONSE 14 -#define CWMSG_IMAGE_DATA_REQUEST 15 -#define CWMSG_IMAGE_DATA_RESPONSE 16 +#define CWMSG_IMAGE_DATA_REQUEST 15 +#define CWMSG_IMAGE_DATA_RESPONSE 16 #define CWMSG_RESET_REQUEST 17 + CWIANA_ENTERPRISE_NUMBER*256 #define CWMSG_RESET_RESPONSE 18 + CWIANA_ENTERPRISE_NUMBER*256 @@ -157,24 +139,20 @@ struct capwap_ctrlhdr */ -#define CWMSGELEM_AC_DESCRIPTOR 1 -/* AC IPv4 List 2 - AC IPv6 List 3 -*/ -#define CWMSGELEM_AC_NAME 4 -/* - AC Name with Priority 5 -*/ - -#define CWMSGELEM_AC_TIMESTAMP 6 +#define CW_ELEM_AC_DESCRIPTOR 1 +#define CW_ELEM_AC_IPV4_LIST 2 +#define CW_ELEM_AC_IPv6_LIST 3 +#define CW_ELEM_AC_NAME 4 +#define CW_ELEM_AC_NAME_WITH_PRIORITY 5 +#define CW_ELEM_AC_TIMESTAMP 6 /* Add MAC ACL Entry 7 Add Station 8 Reserved 9 -*/ +*/ #define CWMSGELEM_CONTROL_IPV4_ADDRESS 10 #define CWMSGELEM_CONTROL_IPV6_ADDRESS 11 - + #define CWMSGELEM_CAPWAP_LOCAL_IPV4_ADDRESS 30 #define CWMSGELEM_CAPWAP_LOCAL_IPV6_ADDRESS 50 @@ -189,20 +167,20 @@ struct capwap_ctrlhdr Delete MAC ACL Entry 17 Delete Station 18 Reserved 19 -*/ +*/ #define CWMSGELEM_DISCOVERY_TYPE 20 -/* - Duplicate IPv4 Address 21 - Duplicate IPv6 Address 22 -*/ + +#define CW_ELEM_DUPLICATE_IPV4_ADDRESS 21 +#define CW_ELEM_DUPLICATE_IPV6_ADRESS 22 + #define CWMSGELEM_ECN_SUPPORT 53 /* Idle Timeout 23 -*/ + */ #define CWMSGELEM_IMAGE_DATA 24 #define CWMSGELEM_IMAGE_IDENTIFIER 25 /* Image Information 26 - Initiate Download 27 + Initiate Download 27 */ #define CWMSGELEM_LOCATION_DATA 28 @@ -215,13 +193,14 @@ struct capwap_ctrlhdr #define CWMSGELEM_RESULT_CODE 33 /* Returned Message Element 34 -*/ -#define CWMSGELEM_SESSION_ID 35 +*/ +#define CW_ELEM_SESSION_ID 35 #define CWMSGELEM_STATISTICS_TIMER 36 -#define CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD 37 + +#define CW_ELEM_VENDOR_SPECIFIC_PAYLOAD 37 #define CWMSGELEM_WTP_BOARD_DATA 38 - + #define CWMSGELEM_WTP_DESCRIPTOR 39 /* WTP Fallback 40 */ @@ -230,7 +209,7 @@ struct capwap_ctrlhdr /* Reserved 43 -*/ +*/ #define CWMSGELEM_WTP_MAC_TYPE 44 #define CWMSGELEM_WTP_NAME 45 /* @@ -245,9 +224,9 @@ struct capwap_ctrlhdr */ /* Cisco's CAPWAP definitions (CAPWAP draft 7)*/ -#define CWMSGELEM_WTP_IPV4_IP_ADDR 42 -#define CWMSGELEM_WTP_IPV6_IP_ADDR 43 - +#define CW_ELEM_WTP_IPV4_IP_ADDRESS 42 +#define CW_ELEM_WTP_IPV6_IP_ADDRESS 43 + /* pseudo message elements, defined for libcapwap */ @@ -301,8 +280,8 @@ struct capwap_ctrlhdr /* wtpinfo methods */ -extern void wtpinfo_set_location(struct wtpinfo * wtpinfo, uint8_t * str, int len); -extern int wtpinfo_set_radioinfo(struct wtpinfo * wtpinfo,uint8_t *msgelem, int len); +extern void wtpinfo_set_location(struct wtpinfo *wtpinfo, uint8_t * str, int len); +extern int wtpinfo_set_radioinfo(struct wtpinfo *wtpinfo, uint8_t * msgelem, int len); /* wtp mac types */ @@ -328,13 +307,13 @@ extern int wtpinfo_set_radioinfo(struct wtpinfo * wtpinfo,uint8_t *msgelem, int #define CAPWAP_WAIT_JOIN 60 -//#define CAPWAP_CIPHER "PSK-AES128-CBC-SHA:" -//#define CAPWAP_CIPHER "AES128-SHA" +//#define CAPWAP_CIPHER "PSK-AES128-CBC-SHA:" +//#define CAPWAP_CIPHER "AES128-SHA" #ifdef WITH_GNUTLS - #define CAPWAP_CIPHER "NORMAL" +#define CAPWAP_CIPHER "NORMAL" #else - #define CAPWAP_CIPHER "ALL" +#define CAPWAP_CIPHER "ALL" #endif @@ -346,12 +325,12 @@ extern int wtpinfo_set_radioinfo(struct wtpinfo * wtpinfo,uint8_t *msgelem, int /* AC dtls policy flags */ #define AC_DTLS_POLICY_C 2 /* Clear data channel support */ -#define AC_DTLS_POLICY_D 4 /* DTLS Data channel support */ +#define AC_DTLS_POLICY_D 4 /* DTLS Data channel support */ -struct cwimage_data{ - uint8_t * data; +struct cwimage_data { + uint8_t *data; uint8_t type; int len; uint32_t vendor_id; @@ -368,62 +347,75 @@ struct cwimage_identifier{ -extern void cwmsg_addelem_wtp_descriptor(struct cwmsg * cwmsg, struct wtpinfo * wtpinfo); +extern void cwmsg_addelem_wtp_descriptor(struct cwmsg *cwmsg, struct wtpinfo *wtpinfo); extern void cwmsg_addelem_ctrl_ip_addrs(struct cwmsg *msg, struct ac_info *acinfo); -extern void cwmsg_addelem_wtp_board_data(struct cwmsg * cwmsg, struct wtpinfo * wtpinfo); -extern void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn * conn); +extern void cwmsg_addelem_wtp_board_data(struct cwmsg *cwmsg, struct wtpinfo *wtpinfo); +extern void cwmsg_addelem_cw_local_ip_addr(struct cwmsg *msg, struct conn *conn); //extern void cwmsg_addelem_wtp_radio_infos(struct cwmsg * cwmsg,struct wtpinfo * wtpinfo); -extern void cwmsg_addelem_wtp_radio_infos(struct cwmsg * msg,struct radioinfo * radioinfos); +extern void cwmsg_addelem_wtp_radio_infos(struct cwmsg *msg, struct radioinfo *radioinfos); -extern void cwmsg_addelem_result_code(struct cwmsg *msg,int rc); -extern void cwmsg_addelem_vendor_specific_payload(struct cwmsg *msg,int vendor_id, int type, uint8_t * payload,int len); +extern void cwmsg_addelem_result_code(struct cwmsg *msg, int rc); +extern void cwmsg_addelem_vendor_specific_payload(struct cwmsg *msg, int vendor_id, int type, + uint8_t * payload, int len); //extern void cwsend_discovery_reponse(struct conn * conn, struct ac_info * acinfo); //extern int process_msgelems(uint8_t * msgelems, int len, -// int (*callback)(void*,int,uint8_t*,int),void *arg ); +// int (*callback)(void*,int,uint8_t*,int),void *arg ); //void cwsend_discovery_response(struct conn * conn,int seqnum, struct radioinfo * radioinfo, struct ac_info * acinfo, struct wtpinfo * wtpinfo); // -extern void cwsend_discovery_response(struct conn * conn,int seqnum, struct radioinfo * radioinfo, struct ac_info * acinfo, struct wtpinfo * wtpinfo); -extern int cwsend_discovery_request(struct conn * conn,struct radioinfo * radioinfo,struct wtpinfo * wtpinfo); -extern void cwsend_join_response(struct conn * conn,int seqnum, int rc, struct radioinfo * radioinfo, struct ac_info * acinfo, struct wtpinfo * wtpinfo); +extern void cwsend_discovery_response(struct conn *conn, int seqnum, struct radioinfo *radioinfo, + struct ac_info *acinfo, struct wtpinfo *wtpinfo); +extern int cwsend_discovery_request(struct conn *conn, struct radioinfo *radioinfo, + struct wtpinfo *wtpinfo); +extern void cwsend_join_response(struct conn *conn, int seqnum, int rc, struct radioinfo *radioinfo, + struct ac_info *acinfo, struct wtpinfo *wtpinfo); -extern void cwread_discovery_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); -extern void process_join_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); -extern void process_conf_status_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); +extern void cwread_discovery_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +extern void process_join_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +extern void process_conf_status_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); -extern void cwread_discovery_response(struct ac_info * acinfo, uint8_t * msg, int len); -extern void cwsend_image_data_response(struct conn * conn,int seqnum, int rc); -extern int cwsend_image_data_request(struct conn * conn, struct cwimage_data * data, struct image_identifier *id ); -extern int cwread_change_state_event_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); -extern void cwsend_change_state_event_response(struct conn * conn,int seqnum, struct radioinfo * radioinfo); -extern int cwread_wtp_event_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); -extern void cwread_configuration_status_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len); -extern void cwsend_conf_status_response(struct conn * conn,int seqnum, int rc, struct radioinfo * radioinfo, struct ac_info * acinfo, struct wtpinfo * wtpinfo); +extern void cwread_discovery_response(struct ac_info *acinfo, uint8_t * msg, int len); +extern void cwsend_image_data_response(struct conn *conn, int seqnum, int rc); +extern int cwsend_image_data_request(struct conn *conn, struct cwimage_data *data, + struct image_identifier *id); +extern int cwread_change_state_event_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +extern void cwsend_change_state_event_response(struct conn *conn, int seqnum, + struct radioinfo *radioinfo); +extern int cwread_wtp_event_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +extern void cwread_configuration_status_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +extern void cwsend_conf_status_response(struct conn *conn, int seqnum, int rc, + struct radioinfo *radioinfo, struct ac_info *acinfo, + struct wtpinfo *wtpinfo); -extern void cwsend_unknown_response(struct conn * conn,int seqnum, int unknow_request); +extern void cwsend_unknown_response(struct conn *conn, int seqnum, int unknow_request); -extern int hdr_print(char *str, uint8_t *packet, int len); +extern int hdr_print(char *str, uint8_t * packet, int len); -extern int cw_readelem_ecn_support(uint8_t *ecn_support, int type, uint8_t * msgelem, int len); -extern int cw_readelem_maximum_message_length(uint16_t *dst, int type, uint8_t * msgelem, int len); -extern int cw_readelem_ac_name(uint8_t **dst, int type,uint8_t *msgelem, int len); -extern int cw_readelem_wtp_reboot_statistics(struct wtp_reboot_statistics *s, int type,uint8_t *msgelem, int len); -extern int cw_readelem_cw_local_ip_addr(struct sockaddr * local_ip, int type, uint8_t * msgelem, int len); -extern int cw_readelem_radio_administrative_state(struct radioinfo * radioinfo, int type,uint8_t *msgelem, int len); -extern int cw_readelem_radio_operational_state(struct radioinfo * radioinfo, int type,uint8_t *msgelem, int len); +extern int cw_readelem_ecn_support(uint8_t * ecn_support, int type, uint8_t * msgelem, int len); +extern int cw_readelem_maximum_message_length(uint16_t * dst, int type, uint8_t * msgelem, int len); +extern int cw_readelem_ac_name(uint8_t ** dst, int type, uint8_t * msgelem, int len); +extern int cw_readelem_wtp_reboot_statistics(struct wtp_reboot_statistics *s, int type, + uint8_t * msgelem, int len); +extern int cw_readelem_cw_local_ip_addr(struct sockaddr *local_ip, int type, uint8_t * msgelem, + int len); +extern int cw_readelem_radio_administrative_state(struct radioinfo *radioinfo, int type, + uint8_t * msgelem, int len); +extern int cw_readelem_radio_operational_state(struct radioinfo *radioinfo, int type, + uint8_t * msgelem, int len); -extern int cw_readelem_statistics_timer(uint16_t *timer, int type, uint8_t * msgelem, int len); -extern int cw_readelem_result_code(uint32_t *result_code, int type, uint8_t * msgelem, int len); -extern int cw_readelem_mtu_discovery_padding(int type,uint8_t *msgelem, int len); -extern int cw_readelem_vendor_specific_payload(void * data, int msgtype, int elemtype,uint8_t *msgelem, int len); +extern int cw_readelem_statistics_timer(uint16_t * timer, int type, uint8_t * msgelem, int len); +extern int cw_readelem_result_code(uint32_t * result_code, int type, uint8_t * msgelem, int len); +extern int cw_readelem_mtu_discovery_padding(int type, uint8_t * msgelem, int len); +extern int cw_readelem_vendor_specific_payload(void *data, int msgtype, int elemtype, + uint8_t * msgelem, int len); @@ -473,7 +465,7 @@ extern int cw_readelem_vendor_specific_payload(void * data, int msgtype, int ele 19 Message Unexpected (Unrecognized Request) */ -#define CW_RESULT_MISSING_MAND_ELEM 20 +#define CW_RESULT_MISSING_MAND_ELEM 20 /* 21 Failure - Unrecognized Message Element @@ -485,14 +477,99 @@ extern int cw_readelem_vendor_specific_payload(void * data, int msgtype, int ele extern void cw_read_image_data_request(struct cwimage_data *, uint8_t * msg, int len); -extern int cw_readelem_ac_descriptor(struct ac_info * acinfo,int type, uint8_t *msgelem, int len); -extern int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8_t * msgelem, int len); +extern int cw_readelem_ac_descriptor(struct ac_info *acinfo, int type, uint8_t * msgelem, int len); +extern int cw_readelem_capwap_local_ip_addr(struct sockaddr *local_ip, int type, uint8_t * msgelem, + int len); -extern int cw_send_echo_response(struct conn * conn,int seqnum,struct radioinfo * radioinfo); -extern int cw_handle_echo_request(void * d); -extern void cw_send_image_file(struct conn *conn, FILE *infile); +extern int cw_send_echo_response(struct conn *conn, int seqnum, struct radioinfo *radioinfo); +extern int cw_handle_echo_request(void *d); +extern void cw_send_image_file(struct conn *conn, FILE * infile); + +/* macro to isolate bits from a dword */ +#define cw_get_dword_bits(src,start,len) ((~(0xFFFFFFFF<> (32 - start - len))) + +/* macros to acces transport header values */ + +#define cw_get_hdr_preamble(th) (th[0]) +#define cw_get_hdr_fragid(th) ((ntohl((((uint32_t*)th)[1]) >> 16) & 0xffff)) +#define cw_get_hdr_fragoffset(th) ((ntohl((((uint32_t*)th)[1]) >> 3) & 0x1fff)) +#define cw_get_hdr_rid(th) ((ntohl((((uint32_t*)th)[0]) >> 14) & 0x1f)) +#define cw_get_hdr_wbid(th) ((ntohl(((uint32_t*)th)[0]) >> 9) & 0x1f) +#define cw_get_hdr_hlen(th) ((ntohl(((uint32_t*)th)[0]) >> 19) & 0x1f) + +#define cw_get_hdr_rmac(th) (th+8) + +#define cw_get_hdr_flag_r1(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R1 ) ? 1:0) +#define cw_get_hdr_flag_r2(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R2 ) ? 1:0) +#define cw_get_hdr_flag_r3(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_R3 ) ? 1:0) + +#define cw_get_hdr_flag_k(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_K ) ? 1:0) +#define cw_get_hdr_flag_m(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_M ) ? 1:0) +#define cw_get_hdr_flag_w(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_W ) ? 1:0) +#define cw_get_hdr_flag_l(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_L ) ? 1:0) +#define cw_get_hdr_flag_f(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_F ) ? 1:0) +#define cw_get_hdr_flag_t(th) ((ntohl( *((uint32_t*)th)) & CWTH_FLAGS_T ) ? 1:0) + + +/* Use some macros from LWAPP */ + +#define cw_put_dword lw_put_dword +#define cw_put_word lw_put_word + + +static inline int cw_put_elem_hdr(uint8_t * dst, uint16_t type, uint16_t len) +{ + *((uint32_t *) (dst)) = htonl(type << 16 | len); + return 4 + len; +} + + +static inline int cw_addelem(uint8_t *dst, uint16_t type,uint8_t*data,uint16_t len) +{ + memcpy(dst+4,data,len); + return cw_put_elem_hdr(dst,type,len); +} + + +/* +static inline int cw_addbyteelem(uint8_t *dst, uint16_t type, uint8_t byte) +{ +// *(dst+3)=byte; +// return cw_put_elem_hdr( +} +*/ + +static inline int cw_addelem_vendor_specific_payload(uint8_t * dst, uint32_t vendor_id, uint16_t type, + uint8_t * data, uint16_t len) +{ + cw_put_dword(dst+4, vendor_id); + cw_put_word(dst + 8, type); + memcpy(dst + 10, data, len); + return cw_put_elem_hdr(dst, CW_ELEM_VENDOR_SPECIFIC_PAYLOAD, len + 10-4); +} + + +#define cw_addelem_ac_name(dst,name) \ + cw_addelem(dst,CW_ELEM_AC_NAME,name,strlen((char*)(name))) + +#define cw_addelem_session_id(dst,sessid)\ + cw_addelem(dst,CW_ELEM_SESSION_ID,bstr_data(sessid),bstr_len(sessid)) + + + +/* cwmsg methods */ + +#define cwmsg_addelem_vendor_s_payload(cwmsg,vendor_id, type, data,len) \ + (cwmsg)->pos+=cw_addelem_vendor_specific_payload((cwmsg)->msgelems+(cwmsg)->pos,vendor_id,type,data,len) + +#define cwmsg_addelem_ac_name(cwmsg,name) \ + (cwmsg)->pos+=cw_addelem_ac_name((cwmsg)->msgelems+(cwmsg)->pos,name) + +#define cwmsg_addelem_session_id(cwmsg,sessid) \ + (cwmsg)->pos+=cw_addelem_session_id((cwmsg)->msgelems+(cwmsg)->pos,sessid) + #endif