1 | //Struct representing raw Ethernet header + packet contents |
---|
2 | typedef struct { |
---|
3 | //Standard 14-byte Ethernet header (dest/src MAC addresses + EtherType) |
---|
4 | unsigned char dstAddr[6]; |
---|
5 | unsigned char srcAddr[6]; |
---|
6 | unsigned short ethType; |
---|
7 | //total number of bytes in pkt, including this header |
---|
8 | unsigned short pktLength; |
---|
9 | //number of warpnet structs that follow |
---|
10 | unsigned char numStructs; |
---|
11 | //Sequence number to match packets to ACKs |
---|
12 | unsigned char seqNum; |
---|
13 | } warpnetEthernetPktHeader; |
---|
14 | |
---|
15 | typedef struct { |
---|
16 | unsigned char controllerID; |
---|
17 | unsigned char controllerGrp; |
---|
18 | unsigned char access; |
---|
19 | unsigned char reserved0; |
---|
20 | } warpnetControllerGroup; |
---|
21 | |
---|
22 | typedef struct { |
---|
23 | unsigned char structID; |
---|
24 | unsigned char nodeID; |
---|
25 | unsigned short numStructs; |
---|
26 | unsigned int trialIndex; |
---|
27 | unsigned char innerStructs[1500]; |
---|
28 | } warpnetConcatStruct; |
---|
29 | |
---|
30 | typedef struct { |
---|
31 | unsigned char structID; |
---|
32 | unsigned char nodeID; |
---|
33 | unsigned short sequenceNumber; |
---|
34 | unsigned char pktType; |
---|
35 | unsigned char srcNode; |
---|
36 | unsigned char destNode; |
---|
37 | unsigned char relNode; |
---|
38 | unsigned char phystatus; |
---|
39 | unsigned char macstate; |
---|
40 | unsigned short rssi; |
---|
41 | unsigned short gain; |
---|
42 | unsigned short timeStampHigh; |
---|
43 | unsigned int timeStampLow; |
---|
44 | unsigned int packetDetCount; |
---|
45 | } warpnetRTObserve; |
---|
46 | |
---|
47 | typedef struct { |
---|
48 | unsigned char structID; |
---|
49 | unsigned char nodeID; |
---|
50 | unsigned short seqNum; |
---|
51 | unsigned char pktType; |
---|
52 | unsigned char rxStatus; |
---|
53 | unsigned char includedData; //bitwise OR of RXPHYDUMP_INCLUDE_* |
---|
54 | unsigned char reserved0; |
---|
55 | unsigned short rssi; |
---|
56 | unsigned short rxGains; |
---|
57 | unsigned int cfoEst_coarse; |
---|
58 | unsigned int cfoEst_pilots; |
---|
59 | } warpnetRxPHYdump; |
---|
60 | |
---|
61 | typedef struct { |
---|
62 | char structID; |
---|
63 | char nodeID; |
---|
64 | short cmdID; |
---|
65 | } warpnetAck; |
---|
66 | |
---|
67 | typedef struct { |
---|
68 | char structID; |
---|
69 | char nodeID; |
---|
70 | char cmdID; |
---|
71 | char cmdParam; |
---|
72 | } warpnetCommand; |
---|
73 | |
---|
74 | typedef struct { |
---|
75 | unsigned char structID; |
---|
76 | unsigned char nodeID; |
---|
77 | |
---|
78 | unsigned short fileSuffix; |
---|
79 | |
---|
80 | unsigned int param0; |
---|
81 | unsigned int param1; |
---|
82 | unsigned int param2; |
---|
83 | unsigned int param3; |
---|
84 | } warpnetLogParams; |
---|
85 | |
---|
86 | #define STRUCTID_OBSERVE_BER 0x24 |
---|
87 | #define STRUCTID_OBSERVE_BER_REQ 0x25 |
---|
88 | |
---|
89 | #define STRUCTID_COMMAND 0x17 |
---|
90 | #define STRUCTID_COMMAND_ACK 0x18 |
---|
91 | |
---|
92 | #define STRUCTID_RTOBSERVE 0x1B |
---|
93 | #define STRUCTID_CONCAT 0x1C |
---|
94 | #define STRUCTID_RXPHYDUMP 0x1E |
---|
95 | |
---|
96 | #define STRUCTID_LOGPARAMS 0x32 |
---|
97 | #define STRUCTID_LOGPARAMS_ACK 0x33 |
---|
98 | |
---|
99 | #define WARPNET_ETHTYPE_SVR2NODE 0x9090 |
---|
100 | #define WARPNET_ETHTYPE_NODE2SVR 0x9191 |
---|
101 | #define WARPNET_ETHTYPE_NODE2COPROC 0x9393 |
---|
102 | #define WARPNET_ETHTYPE_NODE2BER 0x9494 |
---|
103 | |
---|
104 | //Rx PHY Dump magic numbers |
---|
105 | #define RXPHYDUMP_INCLUDE_EVMPERSC 0x1 |
---|
106 | #define RXPHYDUMP_INCLUDE_EVMPERSYM 0x2 |
---|
107 | #define RXPHYDUMP_INCLUDE_CHANESTAA 0x4 |
---|
108 | #define RXPHYDUMP_INCLUDE_CHANESTBA 0x8 |
---|
109 | |
---|
110 | #define RXPHYDUMP_SIZE_EVMPERSC (4*64) |
---|
111 | #define RXPHYDUMP_SIZE_CHANEST (4*64) |
---|
112 | |
---|
113 | //EVMPERSYM should be 4*256 bytes; the PHY has storage for 256 OFDM symbol's worth of EVM |
---|
114 | // It's set to 128 here so EVMPERSYM+EVMPERSC+CHANESTAA+CHANESTBA can all fit in one MTU |
---|
115 | //#define RXPHYDUMP_SIZE_EVMPERSYM (4*256) |
---|
116 | #define RXPHYDUMP_SIZE_EVMPERSYM (4*128) |
---|
117 | |
---|
118 | //Compile-time limits on numbers of nodes and controllers |
---|
119 | #define MAX_NUMWARPNODES 4 |
---|
120 | |
---|
121 | //Maximum size of network buffers |
---|
122 | #define MAX_ETHPKTSIZE 1550 |
---|
123 | |
---|
124 | int LogRxPHYDump(warpnetRxPHYdump* ptr_rxPHYdumpStruct, FILE* logFile); |
---|
125 | int LogRTobserve(warpnetRTObserve* ptr_rtObserve, unsigned int trialIndex, FILE* logFile); |
---|
126 | void SendStructToServer(warpnetControllerGroup* theGroupStruct, void *theStruct); |
---|
127 | void ProcessServerMessage(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); |
---|
128 | void pcap_pktRx_handler(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); |
---|
129 | void ProcessWARPnodeMessage(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); |
---|
130 | int SetupLogFiles(); |
---|
131 | int SetupPCAP(); |
---|