comparison src/g23m-fad/ip/ip.h @ 1:d393cd9bb723

src/g23m-*: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:40:46 +0000
parents
children
comparison
equal deleted inserted replaced
0:b6a5e36de839 1:d393cd9bb723
1 /*
2 +----------------------------------------------------------------------------
3 | Project : GSM-WAP (8444)
4 | Modul : IP
5 +----------------------------------------------------------------------------
6 | Copyright 2002 Texas Instruments Berlin, AG
7 | All rights reserved.
8 |
9 | This file is confidential and a trade secret of Texas
10 | Instruments Berlin, AG
11 | The receipt of or possession of this file does not convey
12 | any rights to reproduce or disclose its contents or to
13 | manufacture, use, or sell anything it may describe, in
14 | whole, or in part, without the specific written consent of
15 | Texas Instruments Berlin, AG.
16 +----------------------------------------------------------------------------
17 | Purpose : Definitions for the Protocol Stack Entity
18 | Internet Protocol
19 +----------------------------------------------------------------------------
20 */
21
22 #ifndef IP_H
23 #define IP_H
24
25 /*-------------------------------------------------------------------------*/
26
27 #if defined WIN32 && ! defined _SIMULATION_
28 #define _SIMULATION_
29 #endif
30
31 #ifdef _SIMULATION_
32 #undef _TARGET_
33 #else
34 #ifndef _TARGET_
35 #define _TARGET_
36 #endif
37 #endif
38
39 /* Information for DTI library */
40
41 #define IP_DTI_DEF_INSTANCE 0
42 #define IP_DTI_HL_INTERFACE 0
43 #define IP_DTI_LL_INTERFACE 1
44 #define IP_DTI_DEF_CHANNEL 0
45
46 #define IP_DTI_UPLINK_QUEUE_SIZE 0
47 #define IP_DTI_DOWNLINK_QUEUE_SIZE 0
48
49 /*==== Types =======================================================*/
50
51 /* Instance management */
52
53 #ifdef OPTION_MULTI_INSTANCE
54 #define GET_INSTANCE(p) (ip_data_base + p->custom.route.inst_no)
55 #define IP_INSTANCES MAX_INSTANCES
56 #else
57 #define GET_INSTANCE(p) ip_data_base
58 #define IP_INSTANCES 1
59 #endif
60
61 /*==== Constants ============================================================*/
62
63 #define MAX_LAYER 1 /* Connected to layers */
64
65 /* States for send and receive packets */
66
67 /* Constants for the IP packet */
68
69 #define MIN_HEADER_LEN 5 /* Min IP header length in 32 bit words */
70 #define MAX_PACKET_LEN 1500 /* Max packet len from higher layer */
71
72 /* Segmenting states and parameter */
73
74 #define NO_SEGMENTS 0 /* Normal packet */
75 #define SEND_SEGMENT 1 /* Sending segments */
76 #define READ_SEGMENT 2 /* Read segment */
77 #define GO_ON_SEGMENTING 10 /* Fragmenting ok - go on */
78 #define NO_SPACE_SEGMENTING 10 /* Not possible to sort cs. of less space */
79 #define MAX_SEGMENTS 50 /* Max received segments */
80 #define MAX_SEGM_SERVER 1 /* Max active server by rec. segments */
81
82 /* Errors */
83
84 #define NO_ERROR 0 /* No errors found */
85 #define ERR_PACKET_LEN 1 /* Packet length error */
86 #define CHANGE_PACKET_LEN 2 /* Length desc_list > total len indicated in header */
87
88 /* IP addresses */
89
90 #define MAX_ADDR_TYPES 15 /* Max field address-types */
91 #define MCAST_ADDR 0 /* Multicast address or class D address */
92 #define LINK_LAYER_BCAST 1 /* Link layer broadcast address */
93 #define LOOP_BACK_ADDR 2 /* Loopback address */
94 #define CLASS_E_ADDR 3 /* Class E address */
95 #define NO_DEST_ADDR 4 /* No destination address */
96 #define BCAST_ADDR_255 5 /* Broadcast address 255.255.255.255 */
97 #define NETW_ADDR 6 /* Network address */
98 #define CLASS_A_ADDR 7 /* Class A address */
99 #define CLASS_B_ADDR 8 /* Class B address */
100 #define CLASS_C_ADDR 9 /* Class C address */
101 #define DEFAULT_R_ADDR 10 /* Default route address */
102 #define BAD_UL_SRC_ADDR 11 /* Indicate bad uplink source address */
103 #define BAD_DL_SRC_ADDR 12 /* Indicate bad downlink source address */
104 #define BAD_UL_DEST_ADDR 13 /* Indicate bad uplink destination address */
105 #define BAD_DL_DEST_ADDR 14 /* Indicate bad uplink destination address */
106
107 /* Only for testing */
108
109 #define TEST_SRC_ADDR 0x0a0b0c0d /* Source test address */
110 #define TEST_DEST_ADDR 0x0a0b0c0e /* Destination test address */
111
112 /* Type of primitives */
113
114 #define P_DTI_READY 0
115 #define P_DTI_DATA_REQ 1
116 #define P_DTI_GETDATA_REQ 2
117 #define P_DTI_DATA_IND 3
118
119 /* Bit offset for encoding/decoding */
120
121 #define ENCODE_OFFSET 0
122
123 /* Timer */
124
125 #define TREASSEMBLY 0 /* Reassembly timer */
126
127 /* Timeout for reassembly segments */
128
129 #define TIME_REASSEMBLY 30000 /* 30 - 60 seconds is the correct value */
130
131 /* Dynamic configuration numbers */
132
133 #define RESET 0
134 #define FRAME_TRACE 6
135
136 /* State index for the entity process/services */
137
138 #define KER ker.
139 #define HILA hila.
140 #define LOLA lola.
141
142 /* States of the entity process kernel */
143
144 #define DEACTIVATED 0
145 #define ACTIVE_NC 1 /* Not configured */
146 #define CONNECTED 2
147
148 /* States for send and receive packet services */
149
150 #define DOWN 0 /* State not active */
151 #define CONNECTING 1 /* State is connecting */
152 #define IDLE 2 /* State no incoming signals */
153 #define SEND 3 /* State sending packet */
154 #define WAIT 4 /* State waiting for packet */
155
156 /* For trace purposes */
157
158 #ifndef NTRACE
159 #define SERVICE_NAME_KER "KER"
160 #define SERVICE_NAME_HILA "HILA"
161 #define SERVICE_NAME_LOLA "LOLA"
162 #endif
163
164 /*============ TYPES ======================================================*/
165
166 /* Global variable-structure for uplink */
167
168 typedef struct
169 {
170 UBYTE state; /* State uplink */
171 #ifndef NTRACE
172 char * name;
173 char * state_name;
174 #endif
175 T_DTI2_DATA_REQ * dti_data_req; /* Data primitive uplink */
176 BOOL drop_packet; /* TRUE: not sending packet to lower layer */
177 UBYTE ttl; /* Time to live */
178 USHORT segment_id; /* Number of the segment packet */
179 USHORT header_len; /* Header length */
180 UBYTE state_segment; /* State segmenting uplink */
181 ULONG next_segment_desc; /* Pointer to next segment desc */
182 USHORT last_segment_pos; /* Last position for copy in next_segment_desc */
183 USHORT segment_offset; /* Offset for segmenting */
184 USHORT sended_segment_len; /* Sended segment length include header */
185 USHORT list_len_segment; /* Listlength of the income datagram */
186 UBYTE segment_prot; /* Protokoll higher layer by fragmenting */
187 T_desc2 * first_desc_segment; /* First desc for sending */
188 USHORT identity; /* Sets the identity */
189 } T_HILA;
190
191 /* Global variable-structure for downlink */
192
193 typedef struct
194 {
195 UBYTE state; /* State downlink */
196 #ifndef NTRACE
197 char * name;
198 char * state_name;
199 #endif
200 T_DTI2_DATA_IND * dti_data_ind; /* Inputbuffer from higher layer */
201 T_DTI2_DATA_IND * data_ind_reassembly [MAX_SEGM_SERVER]; /* For receiving segments */
202 BOOL drop_packet; /* TRUE: not sending packet to lower layer */
203 USHORT header_len; /* Header length */
204 UBYTE state_reassembly [MAX_SEGM_SERVER]; /* State segmenting uplink */
205 BOOL got_first_segment [MAX_SEGM_SERVER]; /* Got first segment by reassembling */
206 BOOL got_last_segment [MAX_SEGM_SERVER]; /* Got last segment */
207 ULONG ip_source_addr_segment [MAX_SEGM_SERVER]; /* IP source address for segment */
208 USHORT pos_server; /* Position of fragmenting server */
209 USHORT id_reassemble [MAX_SEGM_SERVER]; /* Identity of the reassemble fragments */
210 UBYTE prot_reassemble [MAX_SEGM_SERVER]; /* Protocol reassembly */
211 UBYTE timer_reass_running [MAX_SEGM_SERVER]; /* Timer is running */
212 ULONG sort_reass_array [2] [MAX_SEGMENTS]; /* Used to sort the incoming fragments */
213 } T_LOLA;
214
215 /* Entity data for each IP instance */
216
217 typedef struct
218 {
219 UBYTE state; /* State variables for each process */
220 #ifndef NTRACE
221 char * name;
222 char * state_name;
223 #endif
224 ULONG source_addr;/* Source IP address */
225 ULONG dst_addr; /* Destination address */
226 ULONG peer_addr; /* Destination address for routing */
227 ULONG netmask; /* Netmask for the routing table */
228 char entity_name_hl [IPA_ENTITY_NAME_LEN]; /* Entity name higher layer */
229 char entity_name_ll [IPA_ENTITY_NAME_LEN]; /* Entity name lower layer */
230 ULONG link_id_hl;
231 ULONG link_id_ll;
232 USHORT mtu; /* Maximum transfer unit */
233 BOOL send_icmp; /* ICMP message shall be sent */
234 T_DTI2_DATA_REQ * icmp_dti_data_req; /* For sending ICMP message to uplink */
235 } T_KER;
236
237 typedef struct
238 {
239 T_HILA hila; /* Data for each higher layer */
240 T_LOLA lola; /* Data for each lower layer */
241 T_KER ker;
242 } T_IP_DATA;
243
244 #ifdef GPRS
245 typedef enum
246 {
247 UNIT_INVALID = -1,
248 UNIT_SNDCP,
249 UNIT_ACI,
250 UNIT_UART,
251 UNIT_PPPS,
252 UNIT_PPPC,
253 UNIT_L2R,
254 UNIT_T30,
255 UNIT_IP,
256 UNIT_TRA,
257 UNIT_UDP,
258 UNIT_WAP,
259 UNIT_MTST,
260 UNIT_BLUETOOTH,
261 UNIT_NULL,
262 UNIT_MAX
263 } IP_UNIT_ID;
264 #endif
265
266 /*==== EXPORT =====================================================*/
267
268 /* Data base */
269
270 extern DTI_HANDLE ip_hDTI;
271
272 /* Instance data base */
273
274 extern T_IP_DATA ip_data_base [], * ip_data;
275
276 /* DTI data base. The data base is allocated in function dti_init(). */
277
278 extern DTI_HANDLE udp_hDTI;
279
280 #define ENTITY_DATA ip_data
281
282 /* Prototypes timer */
283
284 #ifdef OPTION_MULTITHREAD
285 #define tim_init_timer _ENTITY_PREFIXED (tim_init_timer)
286 #define tim_set_timeout_flag _ENTITY_PREFIXED (tim_set_timeout_flag)
287 #define tim_handle_timeout _ENTITY_PREFIXED (tim_handle_timeout)
288 #define tim_flush_fifo _ENTITY_PREFIXED (tim_flush_fifo)
289 #define tim_reassembly _ENTITY_PREFIXED (tim_reassembly)
290 #endif
291
292 BOOL tim_init_timer (void);
293
294 /* Timer specific timeout handling routines */
295
296 void tim_reassembly (/* USHORT layer, USHORT segm_server */);
297
298 /* Prototypes customer specific functions */
299
300 #ifdef OPTION_MULTITHREAD
301 #define csf_init_timer _ENTITY_PREFIXED (csf_init_timer)
302 #define csf_close_timer _ENTITY_PREFIXED (csf_close_timer)
303 #endif
304
305 BOOL csf_init_timer (void);
306 void csf_close_timer (void);
307 void csf_stop_timer (USHORT index);
308 BOOL csf_timer_expired (
309 USHORT index,
310 USHORT * layer,
311 USHORT * segm_server,
312 USHORT * timer
313 );
314
315 /*==== Prototypes ==================================================*/
316
317 /* Prototypes
318 *
319 * IP KERNEL
320 *
321 * KERNEL primitive processing
322 */
323
324 #ifdef OPTION_MULTITHREAD
325 #define ker_ipa_activate_req _ENTITY_PREFIXED (ker_ipa_activate_req)
326 #define ker_ipa_deactivate_req _ENTITY_PREFIXED (ker_ipa_deactivate_req)
327 #define ker_ipa_config_req _ENTITY_PREFIXED (ker_ipa_config_req)
328 #define ker_ip_addr_req _ENTITY_PREFIXED (ker_ip_addr_req)
329
330 #define sig_dti_ker_connection_opened_hl_ind \
331 _ENTITY_PREFIXED (sig_dti_ker_connection_opened_hl_ind)
332 #define sig_dti_ker_connection_opened_ll_ind \
333 _ENTITY_PREFIXED (sig_dti_ker_connection_opened_ll_ind)
334 #define sig_dti_ker_connection_closed_hl_ind \
335 _ENTITY_PREFIXED (sig_dti_ker_connection_closed_hl_ind)
336 #define sig_dti_ker_connection_closed_ll_ind \
337 _ENTITY_PREFIXED (sig_dti_ker_connection_closed_ll_ind)
338 #define sig_dti_ker_data_received_hl_ind \
339 _ENTITY_PREFIXED (sig_dti_ker_data_received_hl_ind)
340 #define sig_dti_ker_tx_buffer_ready_ll_ind \
341 _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_ready_ll_ind)
342 #define sig_dti_ker_tx_buffer_full_hl_ind \
343 _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_full_hl_ind)
344 #define sig_dti_ker_data_received_ll_ind \
345 _ENTITY_PREFIXED (sig_dti_ker_data_received_ll_ind)
346 #define sig_dti_ker_tx_buffer_ready_hl_ind \
347 _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_ready_hl_ind)
348 #define sig_dti_ker_tx_buffer_full_ll_ind \
349 _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_full_ll_ind)
350
351 #define pei_dti_dti_connect_req _ENTITY_PREFIXED (pei_dti_dti_connect_req)
352 #define pei_dti_dti_connect_cnf _ENTITY_PREFIXED (pei_dti_dti_connect_cnf)
353 #define pei_dti_dti_connect_ind _ENTITY_PREFIXED (pei_dti_dti_connect_ind)
354 #define pei_dti_dti_connect_res _ENTITY_PREFIXED (pei_dti_dti_connect_res)
355 #define pei_dti_dti_disconnect_req _ENTITY_PREFIXED (pei_dti_dti_disconnect_req)
356 #define pei_dti_dti_disconnect_ind _ENTITY_PREFIXED (pei_dti_dti_disconnect_ind)
357 #define pei_dti_dti_ready_ind _ENTITY_PREFIXED (pei_dti_dti_ready_ind)
358 #define pei_dti_dti_data_req _ENTITY_PREFIXED (pei_dti_dti_data_req)
359 #define pei_dti_dti_data_ind _ENTITY_PREFIXED (pei_dti_dti_data_ind)
360 #define pei_dti_dti_getdata_req _ENTITY_PREFIXED (pei_dti_dti_getdata_req)
361
362 #ifdef _SIMULATION_
363 #define pei_dti_dti_data_test_req _ENTITY_PREFIXED (pei_dti_dti_data_test_req)
364 #define pei_dti_dti_data_test_ind _ENTITY_PREFIXED (pei_dti_dti_data_test_ind)
365 #endif
366
367 #define pei_sig_callback _ENTITY_PREFIXED (pei_sig_callback)
368
369 #define ip_packet_validator _ENTITY_PREFIXED (ip_packet_validator)
370 #define check_ip_address _ENTITY_PREFIXED (check_ip_address)
371 #define chk_packet_len _ENTITY_PREFIXED (chk_packet_len)
372 #define ip_addr_int_to_byte _ENTITY_PREFIXED (ip_addr_int_to_byte)
373 #define build_ip_packet _ENTITY_PREFIXED (build_ip_packet)
374 #define init_ip _ENTITY_PREFIXED (init_ip)
375 #define sort_descs_id_up _ENTITY_PREFIXED (sort_descs_id_up)
376 #define reassemble_fragments _ENTITY_PREFIXED (reassemble_fragments)
377 #define config_down_ll _ENTITY_PREFIXED (config_down_ll)
378 #define terminate_ip _ENTITY_PREFIXED (terminate_ip)
379 #endif
380
381 /* IPA SAP */
382
383 void ker_ipa_dti_req (T_IPA_DTI_REQ * ipa_dti_req);
384 void ker_ipa_config_req (T_IPA_CONFIG_REQ * ipa_config_req);
385
386 /* IP SAP */
387
388 void ker_ip_addr_req (T_IP_ADDR_REQ * ip_addr_req);
389
390 /* Wrapping functions for DTI library primitives */
391
392 void pei_dti_dti_connect_req (T_DTI2_CONNECT_REQ * dti_connect_req);
393 void pei_dti_dti_connect_cnf (T_DTI2_CONNECT_CNF * dti_connect_cnf);
394 void pei_dti_dti_connect_ind (T_DTI2_CONNECT_IND * dti_connect_ind);
395 void pei_dti_dti_connect_res (T_DTI2_CONNECT_RES * dti_connect_res);
396 void pei_dti_dti_disconnect_req (T_DTI2_DISCONNECT_REQ * dti_disconnect_req);
397 void pei_dti_dti_disconnect_ind (T_DTI2_DISCONNECT_IND * dti_disconnect_ind);
398 void pei_dti_dti_data_req (T_DTI2_DATA_REQ * dti_data_req);
399 void pei_dti_dti_getdata_req (T_DTI2_GETDATA_REQ * dti_getdata_req);
400 void pei_dti_dti_data_ind (T_DTI2_DATA_IND * dti_data_ind);
401 void pei_dti_dti_ready_ind (T_DTI2_READY_IND * dti_ready_ind);
402 #ifdef _SIMULATION_
403 void pei_dti_dti_data_test_req (T_DTI2_DATA_TEST_REQ * dti_data_test_req);
404 void pei_dti_dti_data_test_ind (T_DTI2_DATA_TEST_IND * dti_data_test_ind);
405 #endif
406
407 /* UP DTI */
408
409 void sig_dti_ker_data_received_hl_ind (T_DTI2_DATA_REQ * dti_data_req);
410 void sig_dti_ker_connection_opened_hl_ind ();
411 void sig_dti_ker_connection_closed_hl_ind ();
412 void sig_dti_ker_tx_buffer_ready_ll_ind ();
413 void sig_dti_ker_tx_buffer_full_hl_ind ();
414
415 /* DN DTI */
416
417 void sig_dti_ker_data_received_ll_ind (T_DTI2_DATA_IND * dti_data_ind);
418 void sig_dti_ker_connection_opened_ll_ind ();
419 void sig_dti_ker_connection_closed_ll_ind ();
420 void sig_dti_ker_tx_buffer_ready_hl_ind ();
421 void sig_dti_ker_tx_buffer_full_ll_ind ();
422
423 /* DTILIB callback function */
424
425 void pei_sig_callback (
426 U8 instance,
427 U8 interfac,
428 U8 channel,
429 U8 reason,
430 T_DTI2_DATA_IND * dti_data_ind
431 );
432
433 /* Functions in ip_kerf.c */
434
435 BOOL ip_packet_validator (T_desc_list2 * desc_list);
436 void build_ip_packet (BOOL uplink, UBYTE select);
437 void init_ip (void);
438 void terminate_ip (void);
439 void config_down_ll (void);
440 void check_ip_address (
441 BOOL * addr_type_dest,
442 BOOL * addr_type_src,
443 ULONG dest_addr,
444 ULONG src_addr
445 );
446 void ip_addr_int_to_byte (UBYTE * b_values, ULONG ul_value);
447 UBYTE chk_packet_len (UBYTE * ip_header, T_desc_list2 * desc_list);
448 USHORT sort_descs_id_up (
449 T_desc_list2 * desc_list,
450 ULONG sort_array[2][MAX_SEGMENTS]
451 );
452 void reassemble_fragments (
453 T_DTI2_DATA_IND ** dti_data_ind,
454 T_LOLA * p_dl,
455 UBYTE * ip_header,
456 BOOL first_segment,
457 /* BOOL middle_segment, */
458 BOOL last_segment /*,*/
459 /* USHORT fragm_offset */
460 );
461
462 /* Communication handles */
463
464 #ifdef OPTION_MULTITHREAD
465 #define hCommMMI _ENTITY_PREFIXED (hCommMMI)
466 #define hCommDL _ENTITY_PREFIXED (hCommDL)
467 #define hCommIP _ENTITY_PREFIXED (hCommIP)
468 #define hCommHL _ENTITY_PREFIXED (hCommHL)
469 #endif
470
471 extern T_HANDLE hCommMMI; /* ACI communication */
472 extern T_HANDLE hCommDL; /* HL communication */
473 extern T_HANDLE hCommIP; /* IP communication */
474 extern T_HANDLE hCommHL; /* HL communication */
475 extern T_HANDLE ip_handle;
476
477 /* Entity common buffer for the decoded air interface message */
478
479 #ifdef OPTION_MULTITHREAD
480 #define _decodedMsg _ENTITY_PREFIXED (_decodedMsg)
481 #endif
482
483 extern UBYTE _decodedMsg [];
484
485 #ifndef NCONFIG
486 #ifdef OPTION_MULTITHREAD
487 #define partab _ENTITY_PREFIXED (partab)
488 #endif
489 extern KW_DATA partab [];
490 #endif
491
492 #ifdef _SIMULATION_
493 #define Sprintf sprintf
494 #endif
495
496 /* Number of signals (maximal signalNum which occurs in pei_signal) */
497
498 #define MAX_SIGNALS 10
499
500 /*-------------------------------------------------------------------------*/
501
502 #endif /* IP_H */
503
504 /*-------------------------------------------------------------------------*/
505