diff options
author | Ben Hilburn <ben.hilburn@ettus.com> | 2014-02-04 11:04:07 -0800 |
---|---|---|
committer | Ben Hilburn <ben.hilburn@ettus.com> | 2014-02-04 11:04:07 -0800 |
commit | 178ac3f1c9950d383c8f64b3df464c0f943c4a23 (patch) | |
tree | 318ed621a7b59b7d34d4ce6e4a92f73f0bcef509 /tools/uhd_dump/uhd_dump.h | |
parent | 2718ac110fa931cc29daf7cb3dc5ab6230ee02ab (diff) | |
download | uhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.tar.gz uhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.tar.bz2 uhd-178ac3f1c9950d383c8f64b3df464c0f943c4a23.zip |
Merging USRP X300 and X310 support!!
Diffstat (limited to 'tools/uhd_dump/uhd_dump.h')
-rw-r--r-- | tools/uhd_dump/uhd_dump.h | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/tools/uhd_dump/uhd_dump.h b/tools/uhd_dump/uhd_dump.h new file mode 100644 index 000000000..2c36f9a39 --- /dev/null +++ b/tools/uhd_dump/uhd_dump.h @@ -0,0 +1,238 @@ + +#ifndef _UHD_DUMP_H_ +#define _UHD_DUMP_H_ + + + +#define FALSE 0 +#define TRUE 1 +#define UNKNOWN 2 + +// Define directions for Host->USRP & USRP->Host +#define H2U 0 +#define U2H 1 + +// Endpoint encodings for USRP3 from SID LSB's +#define RADIO 0 +#define RADIO_CTRL 1 +#define SRC_FLOW_CTRL 2 +#define RESERVED 3 + +/* // VRT Type definitions */ +/* #define IF_DATA_NO_SID 0 */ +/* #define IF_DATA_WITH_SID 1 */ +/* #define EXT_DATA_NO_SID 2 */ +/* #define EXT_DATA_WITH_SID 3 */ +/* #define IF_CONTEXT 4 */ +/* #define EXT_CONTEXT 5 */ + +// CHDR bit masks +#define EXT_CONTEXT 1<<31 +#define HAS_TIME 1<<29 +#define EOB 1<<28 +#define SIZE (1<<16)-1 + + +// UDP used as source for all CHDR comms. +#define CHDR_PORT 49153 + +typedef unsigned char bool; +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +typedef unsigned long u64; + +union ip_addr_decoder { + unsigned long s_addr; + unsigned char octet[4]; +}; + +/* +Ethernet header structure +*/ + +struct ethernet_header { + u8 eth_dst[6]; // MAC addr of destination + u8 eth_src[6]; // MAC addr of source + u16 eth_typ; // Payload protocol type +}; + +#define ETH_SIZE 14 + +/* + IP Header strcture + NOTE: Network byte order (Big Endian) +*/ + +struct ip_header { + u8 ip_vhl; // [7:4] Version, [3:0] Header Length + u8 ip_tos; // Type of Service/DIff Serv/ECN + u16 ip_len; // Total Length + u16 ip_id; // Identification + u16 ip_off; // [15:14] Flags, [13:0] Fragment Offset + u8 ip_ttl; // Time To Live + u8 ip_pro; // Protocol + u16 ip_sum; // Checksum + struct in_addr ip_src; // IP Source address + struct in_addr ip_dst; // IP Destination address +}; + +#define IP_SIZE 20 + +/* + UDP Header Structure + NOTE: Network byte order (Big Endian) +*/ + +struct udp_header { + u16 udp_src; // Source Port + u16 udp_dst; // Destination Port + u16 udp_len; // Length + u16 udp_sum; // Checksum +}; + +#define UDP_SIZE 8 + +/* /\* */ +/* VITA49 VRLP Header */ +/* NOTE: Network byte order (Big Endian) */ +/* *\/ */ + +/* struct vrlp_header { */ +/* u32 vrlp_start; // Hardcoded to ASCII "VRLP" */ +/* u32 vrlp_size; // [31:20] Frame Count, [19:0] Frame Size */ +/* }; */ + +/* #define VRLP_SIZE 8 */ + +/* #define VRLP_SEQID(x) (((x & 0xff)<<4) | ((x & 0xf000) >> 12)) */ + +/* /\* */ +/* VITA49 VRLP Trailer */ +/* NOTE: Network byte order (Big Endian) */ +/* *\/ */ + +/* struct vrlp_trailer { */ +/* u32 vrlp_end; // Hardcoded to ASCII "VEND" */ +/* }; */ + +/* #define VRLP_TRAILER_SIZE 4 */ + +/* /\* */ +/* VITA49 VRT Header */ +/* NOTE: Network byte order (Big Endian) */ +/* *\/ */ + +/* struct vrt_header { */ +/* u8 vrt_type; // [7:4] type, [3] Class ID flag, [2] Trailer flag, [1] SOB, [0] EOB */ +/* u8 vrt_count; // [7:6] TSI, [5:4] TSF, [3:0] Packet Count modulo 16 */ +/* u16 vrt_size; // Number of 32bit words in VRT packet including headers and payload. */ +/* u32 vrt_sid; // Stream ID */ +/* }; */ + +/* #define VRT_SIZE 8 */ + + +/* +Ettus Research CHDR header +NOTE: Little endian byte order (must be unswizzled) +*/ + +struct chdr_header { + u32 chdr_type;// [31] Ext Context, [30] RSVD, [29] Has_time, [28] EOB], [27:16] SEQ_ID, [15:0] Size + u32 chdr_sid; // Stream ID +}; + +#define CHDR_SIZE 8 + +/* +Break down SID into CHDR defined fields +*/ +struct chdr_sid { + u8 src_device; + u8 src_endpoint; + u8 dst_device; + u8 dst_endpoint; +}; + +struct radio_ctrl_payload { + u32 addr; + u32 data; +}; + +struct radio_response { + u64 data; +}; + +struct tx_response { + u32 error_code; + u32 seq_id; +}; + +#define TX_ACK 0x00 +#define TX_EOB 0x01 +#define TX_UNDERRUN 0x02 +#define TX_SEQ_ERROR 0x04 +#define TX_TIME_ERROR 0x08 +#define TX_MIDBURST_SEQ_ERROR 0x20 + +struct src_flow_ctrl { + u32 unused; + u32 seq_id; +}; + +struct vita_time { + u64 time; +}; + +#define VITA_TIME_SIZE 8 +#define RADIO_CTRL_SIZE 8 +#define RADIO_RESPONSE_SIZE 4 + + +/* + Packet storage +*/ + +struct pbuf { + struct pbuf *next; + struct pbuf *last; + struct timeval ts; + int size; // Size stored in pcap file + int orig_size; // Original capture size on the wire + char *payload; +}; + +struct pbuf_info { + struct pbuf *start; + struct pbuf *current; + struct pbuf *end; +}; + +struct radio_ctrl_names { + u32 addr; + char *name; +}; + + +// +// Prototypes +// + +unsigned long swaplong (unsigned long); +unsigned int swapint (unsigned int); +unsigned short swapshort (unsigned short); +char *format_gmt(const struct timeval *, char *); +double timeval2double(struct timeval *); +double relative_time(struct timeval *, struct timeval *); +void get_packet(struct pbuf_info * , const struct pcap_pkthdr *, const u_char *); +void get_start_time(struct timeval * , const struct pcap_pkthdr *, const u_char *); +void get_udp_port_from_file(u16, const char *, struct pbuf_info *, struct timeval *); +void get_everything_from_file(const char *, struct pbuf_info *, struct timeval *); +void get_connection_endpoints( struct pbuf_info *, struct in_addr *, struct in_addr *); +void print_direction(const struct pbuf_info *, const struct in_addr *, const struct in_addr *); +void print_size( const struct pbuf_info *); +void print_sid( const struct pbuf_info *); +void print_vita_header( const struct pbuf_info *, const struct in_addr *); + +#endif |