Work on data channel
This commit is contained in:
@ -665,7 +665,13 @@ int cw_cfg_get_bool(cw_Cfg_t * cfg, const char * key, int def)
|
||||
return v.val.boolean;
|
||||
}
|
||||
|
||||
/*
|
||||
int cw_cfg_set_bool(cw_Cfg_t * cfg, const char * key, int val)
|
||||
{
|
||||
return cw_cfg_set(cfg,key,val ? "true":"false");
|
||||
}
|
||||
|
||||
*/
|
||||
uint8_t cw_cfg_get_byte(cw_Cfg_t * cfg, char *key, uint8_t def)
|
||||
{
|
||||
struct cw_Val v;
|
||||
|
@ -92,6 +92,8 @@ int cw_cfg_get_first_index_l(cw_Cfg_t ** cfgs, const char *key, int n);
|
||||
int cw_cfg_get_int(cw_Cfg_t * cfg, const char *key, int def);
|
||||
int cw_cfg_write_to_file(FILE *f, cw_Cfg_t * cfg);
|
||||
|
||||
#define cw_cfg_set_bool(cfg,key,val) \
|
||||
cw_cfg_set(cfg,key,(val) ? "true":"false")
|
||||
|
||||
|
||||
int cw_cfg_set_val(cw_Cfg_t * cfg, const char *key, const struct cw_Type *t, const void * valguard, const uint8_t * data, int len);
|
||||
|
@ -765,24 +765,22 @@ int conn_process_packet2(struct cw_Conn *conn, uint8_t * packet, int len,
|
||||
|
||||
if (cw_get_hdr_flag_f(packet)) {
|
||||
/* fragmented, add the packet to fragman */
|
||||
uint8_t *f;
|
||||
uint8_t *f,*fp;
|
||||
int rc;
|
||||
|
||||
f = fragman_add(conn->fragman, packet, offs, payloadlen);
|
||||
if (f == NULL) {
|
||||
fp = fragman_add(conn->fragman, packet, offs, payloadlen);
|
||||
if (fp == NULL) {
|
||||
errno = EAGAIN;
|
||||
return -1;
|
||||
}
|
||||
|
||||
f =fp+MAX_PKT_HDR_LEN;
|
||||
|
||||
cw_dbg_pkt(DBG_PKT_IN, conn, f + 4, *(uint32_t *) f, from);
|
||||
/*// cw_dbg_msg(DBG_MSG_IN, conn, f + 4, *(uint32_t *) f, from);*/
|
||||
|
||||
/* // XXX: Modify fragman to not throw away CAPWAP headers*/
|
||||
cw_dbg_pkt(DBG_PKT_IN, conn, fp, *(uint32_t *) f+MAX_PKT_HDR_LEN, from);
|
||||
|
||||
rc = conn->process_message(conn, f + 4, *(uint32_t *) f, from);
|
||||
|
||||
free(f);
|
||||
free(fp);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include "val.h"
|
||||
#include "cfg.h"
|
||||
#include "dbg.h"
|
||||
|
||||
static int get_len(const struct cw_ValBit *bits)
|
||||
{
|
||||
@ -16,15 +18,28 @@ static int get_bit(const uint8_t * src,int pos, int len)
|
||||
return src[b]&m ? 1:0;
|
||||
}
|
||||
|
||||
static void set_bit(uint8_t * dst,int pos, int len,int val)
|
||||
{
|
||||
int b;
|
||||
uint8_t m;
|
||||
cw_dbg(DBG_X,"set bit val %d",val);
|
||||
if (!val)
|
||||
return;
|
||||
b = len-1-pos/8;
|
||||
m = 1<<(pos%8);
|
||||
dst[b]|=m;
|
||||
}
|
||||
|
||||
static int bread(cw_Cfg_t *cfg, const char * key, const uint8_t *src, int len, const void *param)
|
||||
{
|
||||
char skey[CW_CFG_MAX_KEY_LEN];
|
||||
const struct cw_ValBit * bits=param;
|
||||
int l,i;
|
||||
|
||||
l = get_len(bits);
|
||||
for(i=0;bits[i].key!=NULL;i++){
|
||||
int rc;
|
||||
printf("%s: %d\n",bits[i].key,get_bit(src,bits[i].bit,l));
|
||||
sprintf(skey,"%s/%s",key,bits[i].key);
|
||||
cw_cfg_set_bool(cfg,skey,get_bit(src,bits[i].bit,l));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -32,11 +47,26 @@ static int bread(cw_Cfg_t *cfg, const char * key, const uint8_t *src, int len, c
|
||||
|
||||
static int bwrite(cw_Cfg_t ** cfgs, const char *key, uint8_t *dst, const void * param)
|
||||
{
|
||||
return 0;
|
||||
int l,i;
|
||||
char skey[CW_CFG_MAX_KEY_LEN];
|
||||
const struct cw_ValBit * bits=param;
|
||||
l = get_len(bits);
|
||||
memset(dst,0,l);
|
||||
for(i=0;bits[i].key!=NULL;i++){
|
||||
uint8_t val;
|
||||
int rc;
|
||||
val=0;
|
||||
sprintf(skey,"%s/%s",key,bits[i].key);
|
||||
rc = CW_TYPE_BOOL->write(cfgs, skey, &val, NULL);
|
||||
if (rc<0)
|
||||
val=0;
|
||||
cw_dbg(DBG_X,"%s (rc: %d)",skey,rc);
|
||||
set_bit(dst,bits[i].bit,l,val);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
|
||||
const struct cw_Type cw_type_bits = {
|
||||
"Bits", /* name */
|
||||
NULL, /* del */
|
||||
|
@ -38,3 +38,25 @@ const char * dot11_type_strings[]=
|
||||
"Probe Req",
|
||||
"Probe Resp"
|
||||
};
|
||||
|
||||
|
||||
struct dot11_name{
|
||||
uint8_t val;
|
||||
const char * str;
|
||||
};
|
||||
|
||||
struct cw_StrListElem dot11_names[]={
|
||||
{DOT11_ASSOC_REQ, "Assoc Req"},
|
||||
{DOT11_ASSOC_RESP, "Assoc Resp"},
|
||||
{DOT11_REASSOC_REQ, "Reassoc Req"},
|
||||
{DOT11_REASSOC_RESP, "Reassoc Resp"},
|
||||
{DOT11_PROBE_REQ, "Probe Req"},
|
||||
{DOT11_PROBE_RESP, "Probe Resp"},
|
||||
{DOT11_TIMING_ADV, "Timing Adv"},
|
||||
{DOT11_MGM_RES111, "MGMRES111"},
|
||||
{DOT11_BEACON, "Beacon"},
|
||||
{CW_STR_STOP,"Unknown"},
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <endian.h>
|
||||
#endif
|
||||
|
||||
#include "strlist.h"
|
||||
|
||||
/**
|
||||
* @defgroup DOT11_FRAME_TYPES Frame Types
|
||||
@ -47,17 +48,17 @@
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define DOT11_FC_ASSOC_REQ dot11_fc_mgm(0b0000)
|
||||
#define DOT11_FC_ASSOC_RESP dot11_fc_mgm(0b0001)
|
||||
#define DOT11_FC_REASSOC_REQ dot11_fc_mgm(0b0010)
|
||||
#define DOT11_FC_REASSOC_RESP dot11_fc_mgm(0b0011)
|
||||
#define DOT11_FC_PROBE_REQ dot11_fc_mgm(0b0100)
|
||||
#define DOT11_FC_PROBE_RESP dot11_fc_mgm(0b0101)
|
||||
#define DOT11_FC_TIMING_ADV dot11_fc_mgm(0b0110)
|
||||
#define DOT11_FC_MGM_RES111 dot11_fc_mgm(0b0111)
|
||||
#define DOT11_FC_BEACON dot11_fc_mgm(0b1000)
|
||||
#define DOT11_ASSOC_REQ dot11_fc_mgm(0b0000)
|
||||
#define DOT11_ASSOC_RESP dot11_fc_mgm(0b0001)
|
||||
#define DOT11_REASSOC_REQ dot11_fc_mgm(0b0010)
|
||||
#define DOT11_REASSOC_RESP dot11_fc_mgm(0b0011)
|
||||
#define DOT11_PROBE_REQ dot11_fc_mgm(0b0100)
|
||||
#define DOT11_PROBE_RESP dot11_fc_mgm(0b0101)
|
||||
#define DOT11_TIMING_ADV dot11_fc_mgm(0b0110)
|
||||
#define DOT11_MGM_RES111 dot11_fc_mgm(0b0111)
|
||||
#define DOT11_BEACON dot11_fc_mgm(0b1000)
|
||||
|
||||
#define DOT11_FC_DATA dot11_fc_dta(0b0000)
|
||||
#define DOT11_DATA dot11_fc_dta(0b0000)
|
||||
|
||||
/**
|
||||
* @}
|
||||
@ -125,9 +126,9 @@ extern const uint8_t dot11_tab_br[256];
|
||||
|
||||
#define dot11_get_byte(ptr) (*(ptr))
|
||||
|
||||
#define dot11_put_byte(ptr,b) (*(ptr) = b)
|
||||
#define dot11_put_byte(ptr,b) (*(ptr) = b,1)
|
||||
#define dot11_put_word(dst,v) ((*((uint16_t*)(dst))=htobe16(v)),2)
|
||||
#define dot11_put_dword(dst,v) ((*((uint16_t*)(dst))=htobe16(v)),4)
|
||||
#define dot11_put_dword(dst,v) ((*((uint32_t*)(dst))=htobe32(v)),4)
|
||||
#define dot11_put_qword(dst,v) ((*((uint64_t*)(dst))=htobe64(v)),8)
|
||||
|
||||
|
||||
@ -135,9 +136,11 @@ uint16_t dot11_get_word(uint8_t * ptr);
|
||||
|
||||
|
||||
|
||||
#define dot11_get_version(frame) ((frame[1])&0x03)
|
||||
#define dot11_get_type(frame) (((frame[1])&0x0c) >> 2)
|
||||
#define dot11_get_subtype(frame) (((frame[1])&0xf0) >> 4)
|
||||
#define cw_dot11_get_version(frame) ( (frame)[1] & 0x03)
|
||||
#define cw_dot11_get_type(frame) ( ((frame)[1] & 0x0c) >> 2)
|
||||
#define cw_dot11_get_subtype(frame) ( (frame)[1] >> 4 )
|
||||
|
||||
|
||||
/**
|
||||
* Get Frame Control field
|
||||
* @param frame
|
||||
@ -235,6 +238,9 @@ extern uint8_t dot11_broadcast_address[6];
|
||||
|
||||
|
||||
|
||||
extern struct cw_StrListElem dot11_names[];
|
||||
|
||||
#define dot11_get_frame_name(data) cw_strlist_get_str(dot11_names,(data)[1])
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user