SDOCM00113322: kernel RX UDP/TCP checksum offload to NETCP breaks user space tranport...
[keystone-rtos/netapi.git] / ti / runtime / netapi / test / net_test_utils.h
1 #ifndef __NET_TEST_UTIL_H__
2 #define __NET_TEST_UTIL_H__
5 #include "trie.h"
6 //#include "net_test.h"
7 #include "ti/runtime/netapi/netapi.h"
8 #include "net_test_sa_utils.h"
10 #define MAX_SEC_INDEX          64
11 #define NET_TEST_MAX_MAC                64
12 #define NET_TEST_MAX_IP                 64
13 #define NET_TEST_MAX_FP_THREAD 5
14 #define NET_TEST_MAX_SP_THREAD 5
15 #define MAX_LINE_LENGTH 512
16 #define MAX_ROUTES 16
18 #define TEMP_STR_LEN 32
20 #define BE(x) ( (((x)&0xff000000)>>24) | (((x)&0xff0000)>>8) | (((x)&0xff00)<<8) | (((x)&0xff)<<24)  )
22 /* The input strings requirEd for parsing certain configuration
23  * paremeters from the config file */
24 #define netTest_INIT_CONFIG_IPSEC_MODE_RX          "ipsec_mode_rx"
25 #define netTest_INIT_CONFIG_IPSEC_MODE_TX           "ipsec_mode_tx"
26 #define netTest_INIT_CONFIG_IPSEC_IF_NO             "ipsec_if"
27 #define netTest_INIT_CONFIG_DSP_MAC                 "dsp_mac"
28 #define netTest_INIT_CONFIG_DSP_IP                  "dsp_ip"
29 #define netTest_INIT_CONFIG_STATIC_LOOPBACK_PORT    "dest_udp_port_config"
30 #define netTest_CONFIG_STRING_LEN 512
32 //IPSEC MODE(only choose one rx and one tx)
33 #define IPSEC_MODE_RX_INFLOW            1
34 #define IPSEC_MODE_TX_INFLOW            2
35 #define IPSEC_MODE_RX_SIDEBAND          3
36 #define IPSEC_MODE_TX_SIDEBAND          4
38 #define netTest_PKT_LEN 1400
40 #define NET_TEST_SP_THREAD_MASK 0xF0000000
41 #define NET_TEST_THREAD_NUM_MASK 0x000000FF
43 typedef struct {
44     unsigned char           mac[NET_TEST_MAX_MAC][6];
45     uint8_t                 num_macs;
46     uint8_t                 switch_port[NET_TEST_MAX_MAC];
47     nwalIpAddr_t            ip[NET_TEST_MAX_IP];
48     uint8_t                 num_ips;
49     uint8_t                 attach_iface[NET_TEST_MAX_IP];
50     nwalIpAddr_t            local_ipsec_ip;
51     nwalIpAddr_t            remote_ipsec_ip;
52     uint8_t                 ipsec_mode_rx;
53     uint8_t                 ipsec_mode_tx;
54     int                     ipsec_if_no;
55     int                     dest_udp_port_config;
56     uint8_t                 fp_proc_start[NET_TEST_MAX_FP_THREAD];
57     uint8_t                 fp_proc_end[NET_TEST_MAX_FP_THREAD];
58     uint32_t                fp_thread_num[NET_TEST_MAX_FP_THREAD];
59     uint8_t                 num_fp_threads;
60     uint8_t                 sp_proc_start[NET_TEST_MAX_SP_THREAD];
61     uint8_t                 sp_proc_end[NET_TEST_MAX_SP_THREAD];
62     uint32_t                sp_thread_num[NET_TEST_MAX_SP_THREAD];
63     uint8_t                 num_sp_threads;
64     
65     uint8_t                 auth_key[MAX_SEC_INDEX][36];
66     uint8_t                 encr_key[MAX_SEC_INDEX][36];
67     uint32_t                tunnel_id[MAX_SEC_INDEX];
68     NETAPI_SEC_SA_INFO_T    sa[MAX_SEC_INDEX];
69     uint8_t                 num_sa;
70     nwalSecKeyParams_t      key_params[MAX_SEC_INDEX];
71     uint8_t                 dsp_mac;
72     uint8_t                 dsp_ip;
74 } netTestConfig_t;
76 typedef struct
77 {
78     char    dir[netTest_CONFIG_STRING_LEN];
79     char    spi[netTest_CONFIG_STRING_LEN];
80     char    proto[netTest_CONFIG_STRING_LEN];
81     char    saMode[netTest_CONFIG_STRING_LEN];
82     char    ipType[netTest_CONFIG_STRING_LEN];
83     char    src[netTest_CONFIG_STRING_LEN];
84     char    dst[netTest_CONFIG_STRING_LEN];
85     char    replayWindow[netTest_CONFIG_STRING_LEN];
86     char    authMode[netTest_CONFIG_STRING_LEN];
87     char    cipherMode[netTest_CONFIG_STRING_LEN];
88     char    esnLo[netTest_CONFIG_STRING_LEN];
89     char    esnHi[netTest_CONFIG_STRING_LEN];
90     char    encKeySize[netTest_CONFIG_STRING_LEN];
91     char    macKeySize[netTest_CONFIG_STRING_LEN];
92     char    auth_key[netTest_CONFIG_STRING_LEN];
93     char    encr_key[netTest_CONFIG_STRING_LEN];
94     char    tunnel_id[netTest_CONFIG_STRING_LEN];
95 } netTestConfigSA_t;
97 typedef struct{
98     char mac[NET_TEST_MAX_MAC][netTest_CONFIG_STRING_LEN];
99     char switch_port[NET_TEST_MAX_MAC][netTest_CONFIG_STRING_LEN];
100     char ip[NET_TEST_MAX_IP][netTest_CONFIG_STRING_LEN];
101     char attach_iface [NET_TEST_MAX_MAC][netTest_CONFIG_STRING_LEN];
102     char ipsec_mode_rx[netTest_CONFIG_STRING_LEN];
103     char ipsec_mode_tx[netTest_CONFIG_STRING_LEN];
104     char routes[MAX_ROUTES][netTest_CONFIG_STRING_LEN];
105     char ports[MAX_ROUTES][netTest_CONFIG_STRING_LEN];
106     char dst_ips[MAX_ROUTES][netTest_CONFIG_STRING_LEN];
107     char paths[MAX_ROUTES][netTest_CONFIG_STRING_LEN];
108     char ipsec_if_no[netTest_CONFIG_STRING_LEN];
109     char fp_thread_num[NET_TEST_MAX_FP_THREAD][netTest_CONFIG_STRING_LEN];
110     char sp_thread_num[NET_TEST_MAX_SP_THREAD][netTest_CONFIG_STRING_LEN];
111     char sp[NET_TEST_MAX_SP_THREAD][netTest_CONFIG_STRING_LEN];
112     char fp[NET_TEST_MAX_FP_THREAD][netTest_CONFIG_STRING_LEN];
113     char tunnel_id[netTest_CONFIG_STRING_LEN];
114     netTestConfigSA_t sa_config[MAX_SEC_INDEX][netTest_CONFIG_STRING_LEN];
115     char dsp_mac[netTest_CONFIG_STRING_LEN];
116     char dsp_ip[netTest_CONFIG_STRING_LEN];
117     char dest_udp_port_config[netTest_CONFIG_STRING_LEN];
118 } netTestConfigFile_t;
120 typedef struct {
121     int iface;
122     int ipcsum;
123     int l4csum;
124 } LastPktInfo_t;
127 //#define netTestSA_t netTestSA_t
129 typedef struct our_route_t
131    int out_port;
132    unsigned char out_mac[14];
133    netTestSA_t * sec_ptr;
134 } OUR_ROUTE_T;
136 typedef struct {
137     long itx;  //initially generated
138     long itx2;
139     long rx;
140     long tx;
141     long n_bad;
142     long n_new;
143     long n_class0_rx;   //count of pkts classified 
144     long n_class1_rx;   //count of pkts classified 
145     long n_class2_rx;   //count of pkts classified 
146     long n_t1;
147     long n_t2;
148     long n_t3;
149     long sec_tx;
150     long sec_rx;
151     long sb_tx;
152     long sb_rx;
153     long secp_rx;
154     long n_auth_ok;
155     unsigned long long  app_cycles;
156     unsigned long long  send_cycles;
157     unsigned long long  tx_cache_cycles;
158     unsigned long long total_decrypt_time;
159     unsigned long long total_encrypt_time;
160     long rx_min;
161     long tx_min;
162     long if_rx[TUNE_NETAPI_MAX_NUM_MAC];
163     long  core_rx;
164     long  n_stats_cb;
165     long  ip;
166     long exceptionPktsFrag;
167     long exceptionPktsOther;
168 } netTestStats_T;
170 typedef struct
172     long ip[5];
173     long udp[2];
174 } netTestHead_T;
181 void house(NETAPI_SCHED_HANDLE_T *s);
182 void netTest_utilCreateInterfaces(uint8_t num_macs, uint8_t num_ips, Bool match_action_host);
183 void netTest_utilDeleteInterfaces(uint8_t num_macs, uint8_t num_ips);
185 int netTest_utilCheckHeader(netTestHead_T * p_head, PKTIO_METADATA_T * p_meta);
186 void netTest_utilMySig(int x);
187 unsigned long netTest_utilPeek(unsigned long * p);
188 void netTest_utilDumpDescr(unsigned long *p, int n);
189 void netTest_utilDumpHeader(unsigned long *p, int n, int a, int r);
190 void   netTest_utilDumpBuffer(unsigned long * buf,uint32_t buf_length);
191 long netTest_utilHtonl(long x);
192 unsigned char netTest_utilHex2Dec(char *p_s);
193 uint16_t netTest_utilOnesComplementAdd (uint16_t v1, uint16_t v2);
194 uint16_t netTest_utilOnesCompChkSum (uint8_t *p, uint32_t nwords);
195 uint16_t netTest_utilGetIPv4PsudoChkSum (uint8_t *data, uint16_t payloadLen);
196 void netTest_utilPrintIPSecStats(Sa_IpsecStats_t     *p_saIpsecStats, nwal_saAALG auth, nwal_saEALG cipher);
197 void netTest_utilPrintDataModeStats(Sa_DataModeStats_t     *p_saDataModeStats, nwal_saAALG auth, nwal_saEALG cipher);
198 void netTest_utilStatsCbMt(NETAPI_T h, paSysStats_t* pPaStats);
199 void netTest_utilsStatsCb(NETAPI_T h, paSysStats_t* pPaStats);
202 void netTest_utilParseOneMac(char * p_mac_str, unsigned char *p_mac);
203 void netTest_utilParseOneKey(char *p_key_str, unsigned char *p_key);
204 void netTest_utilParseOneIP(char * p_ip_addr_str, unsigned char * p_ip);
205 void netTest_utilParseMac(netTestConfigFile_t *pConfig);
206 void netTest_utilParseIP(netTestConfigFile_t *pConfig);
207 void netTest_utilParseThreadParams(netTestConfigFile_t *pConfig);
208 void netTest_utilParseIpsecMode(netTestConfigFile_t *pConfig);
209 void netTest_utilParseAuthMode(char *auth_mode_str, nwal_saAALG *auth_mode);
210 void netTest_utilParseEncryptMode(char *ency_mode_str, nwal_saEALG*encr_mode);
211 void netTest_utilParseProto(char *proto_str, nwal_IpSecProto *proto);
212 void netTest_utilParseSaMode(char *mode_str, nwal_saMode *mode);
213 void netTest_utilParseIPType(char *ip_type_str, nwal_IpType *ipType);
214 void netTest_utilParseSADir(char* dir_str, nwal_SaDir *dir);
215 void netTest_utilParseSA(netTestConfigFile_t *pConfig);
216 void netTest_utilParseRoutes(netTestConfigFile_t* pConfig, OUR_ROUTE_T* routes, Trie** our_router);
217 void netTest_utilProcessConfigFile(FILE* fpr, netTestConfigFile_t* pConfig);
218 void recv_cb(struct PKTIO_HANDLE_Tag * channel, Ti_Pkt* p_recv[],
219                          PKTIO_METADATA_T meta[], int n_pkts,
220                          uint64_t ts );
222 void parse_simple_param_u8(char* input_str, uint8_t *val);
223 void parse_simple_param_u16(char* input_str, uint16_t *val);
224 void parse_simple_param_u32(char* input_str, uint32_t *val);
227 #endif