Work on data channel
This commit is contained in:
@ -3,105 +3,103 @@
|
||||
#include "conn.h"
|
||||
#include "cw.h"
|
||||
|
||||
/**
|
||||
* @brief Format a packet header for debugging purposes
|
||||
* @param dst Destination buffer
|
||||
* @param incomming True if the packet is an incomming packet, otherweise 0
|
||||
* @param packet packet data
|
||||
* @param len length of packet data
|
||||
* @param from Address from where the packet was received
|
||||
* @return Number of bytes written
|
||||
*/
|
||||
int cw_format_pkt_hdr(char *dst, int incomming, uint8_t * packet, int len,
|
||||
struct sockaddr *from)
|
||||
#include "dot11.h"
|
||||
|
||||
int cw_format_dot11_fc_flags(char *dst, uint8_t *frame){
|
||||
char *s = dst;
|
||||
uint8_t f = frame[2];
|
||||
s+=sprintf(s,"ToDS:%d ", f&1 ? 1:0);
|
||||
s+=sprintf(s,"FromDS:%d ", f&2 ? 1:0);
|
||||
s+=sprintf(s,"More Frgs:%d ", f&4 ? 1:0);
|
||||
s+=sprintf(s,"Retry:%d ", f&8 ? 1:0);
|
||||
s+=sprintf(s,"PwrMgmt:%d ", f&16 ? 1:0);
|
||||
s+=sprintf(s,"More Dta:%d ", f&32 ? 1:0);
|
||||
s+=sprintf(s,"Protec:%d ", f&64 ? 1:0);
|
||||
s+=sprintf(s,"+HTC/:%d ", f&128 ? 1:0);
|
||||
return s-dst;
|
||||
}
|
||||
|
||||
|
||||
int cw_format_dot11_rates(char *dst, const uint8_t *src, int len)
|
||||
{
|
||||
int i;
|
||||
char * k="";
|
||||
char *s=dst;
|
||||
|
||||
for(i=0; i<len; i++){
|
||||
int rate = src[i] &0x7f;
|
||||
s+=sprintf(s,"%s%0.1f",k,dot11_rate2float(rate));
|
||||
k=", ";
|
||||
}
|
||||
return s-dst;
|
||||
}
|
||||
|
||||
|
||||
int cw_format_dot11_elem(char *dst, uint8_t id, const uint8_t *src, int len)
|
||||
{
|
||||
char *s = dst;
|
||||
s += sprintf(s,"elem(id=%d) ",id);
|
||||
|
||||
|
||||
switch(id){
|
||||
case DOT11_ELEM_SSID:
|
||||
s+=sprintf(s," ssid: %.*s",len,src);
|
||||
break;
|
||||
case DOT11_ELEM_SUPPORTED_RATES:
|
||||
s+=sprintf(s," Supported Rates:");
|
||||
s+=cw_format_dot11_rates(s,src,len);
|
||||
break;
|
||||
case DOT11_ELEM_EXTENDED_SUPPORTED_RATES:
|
||||
s+=sprintf(s," Extended Supported Rates");
|
||||
break;
|
||||
case DOT11_ELEM_POWER_CAPABILITY:
|
||||
s+=sprintf(s," Power Capability");
|
||||
break;
|
||||
case DOT11_ELEM_SUPPORTED_CHANNELS:
|
||||
s+=sprintf(s," Supported Channels");
|
||||
break;
|
||||
case DOT11_ELEM_SUPPORTED_OPERATING_CLASSES:
|
||||
s+=sprintf(s," Supported Operating Classes");
|
||||
break;
|
||||
case DOT11_ELEM_VENDOR_SPECIFIC:
|
||||
s+=sprintf(s," Vendor Specific");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
s+=sprintf(s,", len=%d",len);
|
||||
return s-dst;
|
||||
}
|
||||
|
||||
|
||||
int cw_format_dot11_hdr(char * dst, uint8_t * packet, int len)
|
||||
{
|
||||
char sock_buf[SOCK_ADDR_BUFSIZE];
|
||||
int preamble;
|
||||
char *s;
|
||||
int hlen, rid, wbid;
|
||||
int frag_id,frag_offs;
|
||||
int type = dot11_get_type_and_subtype(packet);
|
||||
|
||||
s = dst;
|
||||
s=dst;
|
||||
|
||||
if (incomming){
|
||||
if (cw_get_hdr_flag_f(packet)) {
|
||||
s += sprintf(s, "Fragment from %s",
|
||||
sock_addr2str_p(from,sock_buf));
|
||||
} else {
|
||||
s += sprintf(s, "From %s", sock_addr2str_p(from,sock_buf));
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (cw_get_hdr_flag_f(packet)) {
|
||||
s += sprintf(s, "Fragment to %s", sock_addr2str(from,sock_buf));
|
||||
} else {
|
||||
s += sprintf(s, "To %s", sock_addr2str(from,sock_buf));
|
||||
}
|
||||
}
|
||||
s += sprintf(s, " l=%d: ", len);
|
||||
|
||||
preamble = cw_get_hdr_preamble(packet);
|
||||
if (preamble == 01) {
|
||||
s += sprintf(s, " (encrypted)");
|
||||
return s - dst;
|
||||
}
|
||||
|
||||
if (len < 4)
|
||||
goto abort;
|
||||
|
||||
/*
|
||||
if (cw_get_hdr_flag_f(packet)){
|
||||
s+=sprintf(s," (fragmented)");
|
||||
}
|
||||
*/
|
||||
hlen = cw_get_hdr_hlen(packet);
|
||||
rid = cw_get_hdr_rid(packet);
|
||||
wbid = cw_get_hdr_wbid(packet);
|
||||
s += sprintf(s, " H:%d R:%02d W:%02d", hlen, rid, wbid);
|
||||
|
||||
|
||||
s += sprintf(s, " Flgs:");
|
||||
s += format_hdr_flags(s, packet);
|
||||
|
||||
if (len < 8)
|
||||
goto abort;
|
||||
frag_id = cw_get_hdr_fragid(packet);
|
||||
frag_offs = cw_get_hdr_fragoffset(packet);
|
||||
s += sprintf(s, " Frag/Offs:%d/%d", frag_id, frag_offs);
|
||||
|
||||
|
||||
if (cw_get_hdr_flag_m(packet)) {
|
||||
/* rmac is present, print the rmac */
|
||||
int rmac_len = cw_get_hdr_rmac_len(packet);
|
||||
int plen = rmac_len;
|
||||
if (rmac_len + 8 > len)
|
||||
plen = len - 8;
|
||||
if (rmac_len > 10)
|
||||
plen = 10;
|
||||
|
||||
s += sprintf(s, " R-MAC:");
|
||||
s += format_mac(s, cw_get_hdr_rmac_data(packet), plen);
|
||||
if (rmac_len > 10) {
|
||||
s += sprintf(s, " ... (len=%d)", rmac_len);
|
||||
}
|
||||
}
|
||||
|
||||
if (cw_get_hdr_flag_w(packet)) {
|
||||
/* print wireless specific info */
|
||||
int ws_len = cw_get_hdr_ws_len(packet);
|
||||
int plen = ws_len > 20 ? 20 : ws_len;
|
||||
s += sprintf(s, " WS:");
|
||||
s += format_hexu(s, cw_get_hdr_ws_data(packet), plen);
|
||||
if (ws_len > 20) {
|
||||
s += sprintf(s, " ... (len=%d)", ws_len);
|
||||
}
|
||||
}
|
||||
return s - dst;
|
||||
|
||||
|
||||
|
||||
abort:
|
||||
s += sprintf(s, " Incomplete...");
|
||||
return s - dst;
|
||||
s+=sprintf(s,"IEEE 802.11 - %s",dot11_get_frame_name(packet));
|
||||
s+=sprintf(s," da:");
|
||||
s+=format_mac(s,dot11_get_da(packet),6);
|
||||
s+=sprintf(s," sa:");
|
||||
s+=format_mac(s,dot11_get_sa(packet),6);
|
||||
s+=sprintf(s," bssid:");
|
||||
s+=format_mac(s,dot11_get_bssid(packet),6);
|
||||
s+=sprintf(s," seq: %d\n",dot11_get_seq(packet));
|
||||
s+=cw_format_dot11_fc_flags(s,packet);
|
||||
//
|
||||
/* switch (type){
|
||||
case DOT11_ASSOC_REQ:
|
||||
s+=sprintf(s,"\n ssid: %.*s",dot11_assoc_req_get_ssid_len(packet),
|
||||
dot11_assoc_req_get_ssid(packet)
|
||||
);
|
||||
break;
|
||||
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user