FreeCalypso > hg > fc-selenite
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-fad/ip/ip.h Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,505 @@ +/* ++---------------------------------------------------------------------------- +| Project : GSM-WAP (8444) +| Modul : IP ++---------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++---------------------------------------------------------------------------- +| Purpose : Definitions for the Protocol Stack Entity +| Internet Protocol ++---------------------------------------------------------------------------- +*/ + +#ifndef IP_H +#define IP_H + +/*-------------------------------------------------------------------------*/ + +#if defined WIN32 && ! defined _SIMULATION_ + #define _SIMULATION_ +#endif + +#ifdef _SIMULATION_ + #undef _TARGET_ +#else + #ifndef _TARGET_ + #define _TARGET_ + #endif +#endif + +/* Information for DTI library */ + +#define IP_DTI_DEF_INSTANCE 0 +#define IP_DTI_HL_INTERFACE 0 +#define IP_DTI_LL_INTERFACE 1 +#define IP_DTI_DEF_CHANNEL 0 + +#define IP_DTI_UPLINK_QUEUE_SIZE 0 +#define IP_DTI_DOWNLINK_QUEUE_SIZE 0 + +/*==== Types =======================================================*/ + +/* Instance management */ + +#ifdef OPTION_MULTI_INSTANCE + #define GET_INSTANCE(p) (ip_data_base + p->custom.route.inst_no) + #define IP_INSTANCES MAX_INSTANCES +#else + #define GET_INSTANCE(p) ip_data_base + #define IP_INSTANCES 1 +#endif + +/*==== Constants ============================================================*/ + +#define MAX_LAYER 1 /* Connected to layers */ + +/* States for send and receive packets */ + +/* Constants for the IP packet */ + +#define MIN_HEADER_LEN 5 /* Min IP header length in 32 bit words */ +#define MAX_PACKET_LEN 1500 /* Max packet len from higher layer */ + +/* Segmenting states and parameter */ + +#define NO_SEGMENTS 0 /* Normal packet */ +#define SEND_SEGMENT 1 /* Sending segments */ +#define READ_SEGMENT 2 /* Read segment */ +#define GO_ON_SEGMENTING 10 /* Fragmenting ok - go on */ +#define NO_SPACE_SEGMENTING 10 /* Not possible to sort cs. of less space */ +#define MAX_SEGMENTS 50 /* Max received segments */ +#define MAX_SEGM_SERVER 1 /* Max active server by rec. segments */ + +/* Errors */ + +#define NO_ERROR 0 /* No errors found */ +#define ERR_PACKET_LEN 1 /* Packet length error */ +#define CHANGE_PACKET_LEN 2 /* Length desc_list > total len indicated in header */ + +/* IP addresses */ + +#define MAX_ADDR_TYPES 15 /* Max field address-types */ +#define MCAST_ADDR 0 /* Multicast address or class D address */ +#define LINK_LAYER_BCAST 1 /* Link layer broadcast address */ +#define LOOP_BACK_ADDR 2 /* Loopback address */ +#define CLASS_E_ADDR 3 /* Class E address */ +#define NO_DEST_ADDR 4 /* No destination address */ +#define BCAST_ADDR_255 5 /* Broadcast address 255.255.255.255 */ +#define NETW_ADDR 6 /* Network address */ +#define CLASS_A_ADDR 7 /* Class A address */ +#define CLASS_B_ADDR 8 /* Class B address */ +#define CLASS_C_ADDR 9 /* Class C address */ +#define DEFAULT_R_ADDR 10 /* Default route address */ +#define BAD_UL_SRC_ADDR 11 /* Indicate bad uplink source address */ +#define BAD_DL_SRC_ADDR 12 /* Indicate bad downlink source address */ +#define BAD_UL_DEST_ADDR 13 /* Indicate bad uplink destination address */ +#define BAD_DL_DEST_ADDR 14 /* Indicate bad uplink destination address */ + +/* Only for testing */ + +#define TEST_SRC_ADDR 0x0a0b0c0d /* Source test address */ +#define TEST_DEST_ADDR 0x0a0b0c0e /* Destination test address */ + +/* Type of primitives */ + +#define P_DTI_READY 0 +#define P_DTI_DATA_REQ 1 +#define P_DTI_GETDATA_REQ 2 +#define P_DTI_DATA_IND 3 + +/* Bit offset for encoding/decoding */ + +#define ENCODE_OFFSET 0 + +/* Timer */ + +#define TREASSEMBLY 0 /* Reassembly timer */ + +/* Timeout for reassembly segments */ + +#define TIME_REASSEMBLY 30000 /* 30 - 60 seconds is the correct value */ + +/* Dynamic configuration numbers */ + +#define RESET 0 +#define FRAME_TRACE 6 + +/* State index for the entity process/services */ + +#define KER ker. +#define HILA hila. +#define LOLA lola. + +/* States of the entity process kernel */ + +#define DEACTIVATED 0 +#define ACTIVE_NC 1 /* Not configured */ +#define CONNECTED 2 + +/* States for send and receive packet services */ + +#define DOWN 0 /* State not active */ +#define CONNECTING 1 /* State is connecting */ +#define IDLE 2 /* State no incoming signals */ +#define SEND 3 /* State sending packet */ +#define WAIT 4 /* State waiting for packet */ + +/* For trace purposes */ + +#ifndef NTRACE + #define SERVICE_NAME_KER "KER" + #define SERVICE_NAME_HILA "HILA" + #define SERVICE_NAME_LOLA "LOLA" +#endif + +/*============ TYPES ======================================================*/ + +/* Global variable-structure for uplink */ + +typedef struct +{ + UBYTE state; /* State uplink */ +#ifndef NTRACE + char * name; + char * state_name; +#endif + T_DTI2_DATA_REQ * dti_data_req; /* Data primitive uplink */ + BOOL drop_packet; /* TRUE: not sending packet to lower layer */ + UBYTE ttl; /* Time to live */ + USHORT segment_id; /* Number of the segment packet */ + USHORT header_len; /* Header length */ + UBYTE state_segment; /* State segmenting uplink */ + ULONG next_segment_desc; /* Pointer to next segment desc */ + USHORT last_segment_pos; /* Last position for copy in next_segment_desc */ + USHORT segment_offset; /* Offset for segmenting */ + USHORT sended_segment_len; /* Sended segment length include header */ + USHORT list_len_segment; /* Listlength of the income datagram */ + UBYTE segment_prot; /* Protokoll higher layer by fragmenting */ + T_desc2 * first_desc_segment; /* First desc for sending */ + USHORT identity; /* Sets the identity */ +} T_HILA; + +/* Global variable-structure for downlink */ + +typedef struct +{ + UBYTE state; /* State downlink */ +#ifndef NTRACE + char * name; + char * state_name; +#endif + T_DTI2_DATA_IND * dti_data_ind; /* Inputbuffer from higher layer */ + T_DTI2_DATA_IND * data_ind_reassembly [MAX_SEGM_SERVER]; /* For receiving segments */ + BOOL drop_packet; /* TRUE: not sending packet to lower layer */ + USHORT header_len; /* Header length */ + UBYTE state_reassembly [MAX_SEGM_SERVER]; /* State segmenting uplink */ + BOOL got_first_segment [MAX_SEGM_SERVER]; /* Got first segment by reassembling */ + BOOL got_last_segment [MAX_SEGM_SERVER]; /* Got last segment */ + ULONG ip_source_addr_segment [MAX_SEGM_SERVER]; /* IP source address for segment */ + USHORT pos_server; /* Position of fragmenting server */ + USHORT id_reassemble [MAX_SEGM_SERVER]; /* Identity of the reassemble fragments */ + UBYTE prot_reassemble [MAX_SEGM_SERVER]; /* Protocol reassembly */ + UBYTE timer_reass_running [MAX_SEGM_SERVER]; /* Timer is running */ + ULONG sort_reass_array [2] [MAX_SEGMENTS]; /* Used to sort the incoming fragments */ +} T_LOLA; + +/* Entity data for each IP instance */ + +typedef struct +{ + UBYTE state; /* State variables for each process */ +#ifndef NTRACE + char * name; + char * state_name; +#endif + ULONG source_addr;/* Source IP address */ + ULONG dst_addr; /* Destination address */ + ULONG peer_addr; /* Destination address for routing */ + ULONG netmask; /* Netmask for the routing table */ + char entity_name_hl [IPA_ENTITY_NAME_LEN]; /* Entity name higher layer */ + char entity_name_ll [IPA_ENTITY_NAME_LEN]; /* Entity name lower layer */ + ULONG link_id_hl; + ULONG link_id_ll; + USHORT mtu; /* Maximum transfer unit */ + BOOL send_icmp; /* ICMP message shall be sent */ + T_DTI2_DATA_REQ * icmp_dti_data_req; /* For sending ICMP message to uplink */ +} T_KER; + +typedef struct +{ + T_HILA hila; /* Data for each higher layer */ + T_LOLA lola; /* Data for each lower layer */ + T_KER ker; +} T_IP_DATA; + +#ifdef GPRS + typedef enum + { + UNIT_INVALID = -1, + UNIT_SNDCP, + UNIT_ACI, + UNIT_UART, + UNIT_PPPS, + UNIT_PPPC, + UNIT_L2R, + UNIT_T30, + UNIT_IP, + UNIT_TRA, + UNIT_UDP, + UNIT_WAP, + UNIT_MTST, + UNIT_BLUETOOTH, + UNIT_NULL, + UNIT_MAX + } IP_UNIT_ID; +#endif + +/*==== EXPORT =====================================================*/ + +/* Data base */ + +extern DTI_HANDLE ip_hDTI; + +/* Instance data base */ + +extern T_IP_DATA ip_data_base [], * ip_data; + +/* DTI data base. The data base is allocated in function dti_init(). */ + +extern DTI_HANDLE udp_hDTI; + +#define ENTITY_DATA ip_data + +/* Prototypes timer */ + +#ifdef OPTION_MULTITHREAD + #define tim_init_timer _ENTITY_PREFIXED (tim_init_timer) + #define tim_set_timeout_flag _ENTITY_PREFIXED (tim_set_timeout_flag) + #define tim_handle_timeout _ENTITY_PREFIXED (tim_handle_timeout) + #define tim_flush_fifo _ENTITY_PREFIXED (tim_flush_fifo) + #define tim_reassembly _ENTITY_PREFIXED (tim_reassembly) +#endif + +BOOL tim_init_timer (void); + +/* Timer specific timeout handling routines */ + +void tim_reassembly (/* USHORT layer, USHORT segm_server */); + +/* Prototypes customer specific functions */ + +#ifdef OPTION_MULTITHREAD + #define csf_init_timer _ENTITY_PREFIXED (csf_init_timer) + #define csf_close_timer _ENTITY_PREFIXED (csf_close_timer) +#endif + +BOOL csf_init_timer (void); +void csf_close_timer (void); +void csf_stop_timer (USHORT index); +BOOL csf_timer_expired ( + USHORT index, + USHORT * layer, + USHORT * segm_server, + USHORT * timer +); + +/*==== Prototypes ==================================================*/ + +/* Prototypes + * + * IP KERNEL + * + * KERNEL primitive processing + */ + +#ifdef OPTION_MULTITHREAD + #define ker_ipa_activate_req _ENTITY_PREFIXED (ker_ipa_activate_req) + #define ker_ipa_deactivate_req _ENTITY_PREFIXED (ker_ipa_deactivate_req) + #define ker_ipa_config_req _ENTITY_PREFIXED (ker_ipa_config_req) + #define ker_ip_addr_req _ENTITY_PREFIXED (ker_ip_addr_req) + + #define sig_dti_ker_connection_opened_hl_ind \ + _ENTITY_PREFIXED (sig_dti_ker_connection_opened_hl_ind) + #define sig_dti_ker_connection_opened_ll_ind \ + _ENTITY_PREFIXED (sig_dti_ker_connection_opened_ll_ind) + #define sig_dti_ker_connection_closed_hl_ind \ + _ENTITY_PREFIXED (sig_dti_ker_connection_closed_hl_ind) + #define sig_dti_ker_connection_closed_ll_ind \ + _ENTITY_PREFIXED (sig_dti_ker_connection_closed_ll_ind) + #define sig_dti_ker_data_received_hl_ind \ + _ENTITY_PREFIXED (sig_dti_ker_data_received_hl_ind) + #define sig_dti_ker_tx_buffer_ready_ll_ind \ + _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_ready_ll_ind) + #define sig_dti_ker_tx_buffer_full_hl_ind \ + _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_full_hl_ind) + #define sig_dti_ker_data_received_ll_ind \ + _ENTITY_PREFIXED (sig_dti_ker_data_received_ll_ind) + #define sig_dti_ker_tx_buffer_ready_hl_ind \ + _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_ready_hl_ind) + #define sig_dti_ker_tx_buffer_full_ll_ind \ + _ENTITY_PREFIXED (sig_dti_ker_tx_buffer_full_ll_ind) + + #define pei_dti_dti_connect_req _ENTITY_PREFIXED (pei_dti_dti_connect_req) + #define pei_dti_dti_connect_cnf _ENTITY_PREFIXED (pei_dti_dti_connect_cnf) + #define pei_dti_dti_connect_ind _ENTITY_PREFIXED (pei_dti_dti_connect_ind) + #define pei_dti_dti_connect_res _ENTITY_PREFIXED (pei_dti_dti_connect_res) + #define pei_dti_dti_disconnect_req _ENTITY_PREFIXED (pei_dti_dti_disconnect_req) + #define pei_dti_dti_disconnect_ind _ENTITY_PREFIXED (pei_dti_dti_disconnect_ind) + #define pei_dti_dti_ready_ind _ENTITY_PREFIXED (pei_dti_dti_ready_ind) + #define pei_dti_dti_data_req _ENTITY_PREFIXED (pei_dti_dti_data_req) + #define pei_dti_dti_data_ind _ENTITY_PREFIXED (pei_dti_dti_data_ind) + #define pei_dti_dti_getdata_req _ENTITY_PREFIXED (pei_dti_dti_getdata_req) + + #ifdef _SIMULATION_ + #define pei_dti_dti_data_test_req _ENTITY_PREFIXED (pei_dti_dti_data_test_req) + #define pei_dti_dti_data_test_ind _ENTITY_PREFIXED (pei_dti_dti_data_test_ind) + #endif + + #define pei_sig_callback _ENTITY_PREFIXED (pei_sig_callback) + + #define ip_packet_validator _ENTITY_PREFIXED (ip_packet_validator) + #define check_ip_address _ENTITY_PREFIXED (check_ip_address) + #define chk_packet_len _ENTITY_PREFIXED (chk_packet_len) + #define ip_addr_int_to_byte _ENTITY_PREFIXED (ip_addr_int_to_byte) + #define build_ip_packet _ENTITY_PREFIXED (build_ip_packet) + #define init_ip _ENTITY_PREFIXED (init_ip) + #define sort_descs_id_up _ENTITY_PREFIXED (sort_descs_id_up) + #define reassemble_fragments _ENTITY_PREFIXED (reassemble_fragments) + #define config_down_ll _ENTITY_PREFIXED (config_down_ll) + #define terminate_ip _ENTITY_PREFIXED (terminate_ip) +#endif + +/* IPA SAP */ + +void ker_ipa_dti_req (T_IPA_DTI_REQ * ipa_dti_req); +void ker_ipa_config_req (T_IPA_CONFIG_REQ * ipa_config_req); + +/* IP SAP */ + +void ker_ip_addr_req (T_IP_ADDR_REQ * ip_addr_req); + +/* Wrapping functions for DTI library primitives */ + +void pei_dti_dti_connect_req (T_DTI2_CONNECT_REQ * dti_connect_req); +void pei_dti_dti_connect_cnf (T_DTI2_CONNECT_CNF * dti_connect_cnf); +void pei_dti_dti_connect_ind (T_DTI2_CONNECT_IND * dti_connect_ind); +void pei_dti_dti_connect_res (T_DTI2_CONNECT_RES * dti_connect_res); +void pei_dti_dti_disconnect_req (T_DTI2_DISCONNECT_REQ * dti_disconnect_req); +void pei_dti_dti_disconnect_ind (T_DTI2_DISCONNECT_IND * dti_disconnect_ind); +void pei_dti_dti_data_req (T_DTI2_DATA_REQ * dti_data_req); +void pei_dti_dti_getdata_req (T_DTI2_GETDATA_REQ * dti_getdata_req); +void pei_dti_dti_data_ind (T_DTI2_DATA_IND * dti_data_ind); +void pei_dti_dti_ready_ind (T_DTI2_READY_IND * dti_ready_ind); +#ifdef _SIMULATION_ + void pei_dti_dti_data_test_req (T_DTI2_DATA_TEST_REQ * dti_data_test_req); + void pei_dti_dti_data_test_ind (T_DTI2_DATA_TEST_IND * dti_data_test_ind); +#endif + +/* UP DTI */ + +void sig_dti_ker_data_received_hl_ind (T_DTI2_DATA_REQ * dti_data_req); +void sig_dti_ker_connection_opened_hl_ind (); +void sig_dti_ker_connection_closed_hl_ind (); +void sig_dti_ker_tx_buffer_ready_ll_ind (); +void sig_dti_ker_tx_buffer_full_hl_ind (); + +/* DN DTI */ + +void sig_dti_ker_data_received_ll_ind (T_DTI2_DATA_IND * dti_data_ind); +void sig_dti_ker_connection_opened_ll_ind (); +void sig_dti_ker_connection_closed_ll_ind (); +void sig_dti_ker_tx_buffer_ready_hl_ind (); +void sig_dti_ker_tx_buffer_full_ll_ind (); + +/* DTILIB callback function */ + +void pei_sig_callback ( + U8 instance, + U8 interfac, + U8 channel, + U8 reason, + T_DTI2_DATA_IND * dti_data_ind +); + +/* Functions in ip_kerf.c */ + +BOOL ip_packet_validator (T_desc_list2 * desc_list); +void build_ip_packet (BOOL uplink, UBYTE select); +void init_ip (void); +void terminate_ip (void); +void config_down_ll (void); +void check_ip_address ( + BOOL * addr_type_dest, + BOOL * addr_type_src, + ULONG dest_addr, + ULONG src_addr +); +void ip_addr_int_to_byte (UBYTE * b_values, ULONG ul_value); +UBYTE chk_packet_len (UBYTE * ip_header, T_desc_list2 * desc_list); +USHORT sort_descs_id_up ( + T_desc_list2 * desc_list, + ULONG sort_array[2][MAX_SEGMENTS] +); +void reassemble_fragments ( + T_DTI2_DATA_IND ** dti_data_ind, + T_LOLA * p_dl, + UBYTE * ip_header, + BOOL first_segment, + /* BOOL middle_segment, */ + BOOL last_segment /*,*/ + /* USHORT fragm_offset */ +); + +/* Communication handles */ + +#ifdef OPTION_MULTITHREAD + #define hCommMMI _ENTITY_PREFIXED (hCommMMI) + #define hCommDL _ENTITY_PREFIXED (hCommDL) + #define hCommIP _ENTITY_PREFIXED (hCommIP) + #define hCommHL _ENTITY_PREFIXED (hCommHL) +#endif + +extern T_HANDLE hCommMMI; /* ACI communication */ +extern T_HANDLE hCommDL; /* HL communication */ +extern T_HANDLE hCommIP; /* IP communication */ +extern T_HANDLE hCommHL; /* HL communication */ +extern T_HANDLE ip_handle; + +/* Entity common buffer for the decoded air interface message */ + +#ifdef OPTION_MULTITHREAD + #define _decodedMsg _ENTITY_PREFIXED (_decodedMsg) +#endif + +extern UBYTE _decodedMsg []; + +#ifndef NCONFIG + #ifdef OPTION_MULTITHREAD + #define partab _ENTITY_PREFIXED (partab) + #endif + extern KW_DATA partab []; +#endif + +#ifdef _SIMULATION_ + #define Sprintf sprintf +#endif + +/* Number of signals (maximal signalNum which occurs in pei_signal) */ + +#define MAX_SIGNALS 10 + +/*-------------------------------------------------------------------------*/ + +#endif /* IP_H */ + +/*-------------------------------------------------------------------------*/ +