FreeCalypso > hg > fc-tourmaline
view src/g23m-gprs/sndcp/sndcp.h @ 52:6d77f6e1670a
bug in the last commit
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 19 Oct 2020 05:27:40 +0000 |
parents | fa8dc04885d8 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GPRS (8441) | Modul : sndcp.h +----------------------------------------------------------------------------- | 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. | | These files implement Van Jacobson Compression algorithm which is taken from | University of California Berkley's Implementation. | | | "Copyright (c)1989 Regents of the University of California. | All rights reserved.Redistribution and use in source and binary forms are | permitted, provided that the above copyright notice and this paragraph are | duplicated in all such forms and that any documentation advertising materials, | and other materials related to such distributionand use acknowledge that the | software was developed by the University of California, Berkeley. | The name of the University may not be used to endorse or promote products | derived from this software without specific prior written permission. | THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, | INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND | FITNESS FOR A PARTICULAR PURPOSE" +----------------------------------------------------------------------------- | Purpose : Definitions for the Protocol Stack Entity | SNDCP +----------------------------------------------------------------------------- */ /*---- HISTORY --------------------------------------------------------------*/ #ifndef SNDCP_H #define SNDCP_H #ifndef _SNDCP_DTI_2_ #define _SNDCP_DTI_2_ #endif #ifndef SNDCP_UPM_INCLUDED #define SNDCP_UPM_INCLUDED #endif #include "prim.h" #ifdef SNDCP_2to1 #ifndef T_desc_list3 #define T_desc_list3 T_LL_desc_list3 #endif #ifndef T_ll_qos #define T_ll_qos T_PS_qos_r97 #endif #endif /* SNDCP_2to1 */ #ifdef TI_PS_FF_V42BIS #include "v42b_type.h" #endif /* TI_PS_FF_V42BIS */ /* * Compiler switch for tracing of user data, e.q. TCP/IP header and payload * Payload is traced only if config primitive TRACE_PACKET_ON was received. */ #ifdef SNDCP_TRACE_ALL /* * compiler switch for tracing of a buffer as hex-dump */ #define SNDCP_TRACE_BUFFER #endif /* SNDCP_TRACE_ALL */ /* * compiler switch for tracing of decoded TCP/IP datagram * Per default only the 40 bytes or only decoded TCPIP header is traced. * Payload is traced only if config primitive TRACE_PACKET_ON was received. */ #define SNDCP_TRACE_IP_DATAGRAM #define SNDCP_UL_PACKET (0x1) #define SNDCP_DL_PACKET (0x2) /* * defines the user of the vsi interface */ #define VSI_CALLER SNDCP_handle, /* * Macros */ /* * This is just a TEMPORARY define until the issues with OPTION_MULTITHREAD * are settled. This define SHOULD be contained in GSM.H. */ #undef _ENTITY_PREFIXED #define _ENTITY_PREFIXED(N) sndcp_##N /* * Customized Trace Macros */ #ifndef TRACE_EVENT_P16 #define TRACE_EVENT_P16(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16)\ vsi_o_event_ttrace(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16); #endif /* TRACE_EVENT_P16 */ #ifndef TRACE_EVENT_P14 #define TRACE_EVENT_P14(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)\ vsi_o_event_ttrace(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14); #endif /* TRACE_EVENT_P14 */ #ifndef TRACE_EVENT_P12 #define TRACE_EVENT_P12(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12)\ vsi_o_event_ttrace(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12); #endif /* TRACE_EVENT_P12 */ #ifndef TRACE_EVENT_P10 #define TRACE_EVENT_P10(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)\ vsi_o_event_ttrace(f,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); #endif /* TRACE_EVENT_P10 */ /* * The following macro is similar to PFREE_DESC2. Instead of doing * a PFREE(P) it does a MFREE(p). This macro is used to free primitives * like sn_data_req which are removed from SN SAP and added into this * header file. */ #define MFREE_PRIM(p) { MFREE_DESC2 ((p)->desc_list2.first); \ MFREE ((p)); \ } /* * Constants */ /* * Possible values for su->cia_state. */ #define CIA_IDLE 23 #define CIA_BUSY 23 /*29*/ /* * Maximum number of DTI links. */ #if defined (SNDCP_2to1) || defined (REL99)|| \ defined (_SIMULATION_) #define SNDCP_MAX_DTI_LINKS 16 #else #define SNDCP_MAX_DTI_LINKS 3 #endif /* * Maximum number of Van Jacobson header compressors. */ #define SNDCP_MAX_VJ_COUNT 1 /* * The default value for N201-I according to * GSM 4.64, version 6.51, table 9 * For test purposes a smaller value is used. */ #ifdef _SIMULATION_ #define N201_I_DEFAULT 70 #else /* _SIMULATION_ */ #define N201_I_DEFAULT 1503 #endif /* _SIMULATION_ */ /* * The default value for N201-U according to * GSM 4.64, version 6.51, table 9. * For test purposes a smaller value is used. */ #ifdef _SIMULATION_ #define N201_U_DEFAULT 70 #else /* _SIMULATION_ */ #define N201_U_DEFAULT 500 #endif /* _SIMULATION_ */ /* * N-PDU size */ #define SNDCP_N_PDU_SIZE 750 /* * The re-establishment time for GSM 4.65, 6.2.1.4. */ #ifdef _SIMULATION_ #define MG_RE_EST_TIME 3000 #else /* _SIMULATION_ */ #define MG_RE_EST_TIME 3000 #endif /* _SIMULATION_ */ /* * Bitoffset for encoding/decoding */ #define ENCODE_OFFSET (37 * 8) /* * Byteoffset for encoding/decoding */ #define ENCODE_OFFSET_BYTE 37 /* * return values for procedures mg_decode_xid, mg_check_cnf_xid. */ /* * Parsed XID is ok (used for format and/or content). */ #define MG_XID_OK 0 /* * Parsed XID block has incorrect content. */ #define MG_XID_BAD_CONTENT 1 /* * Parsed XID block was in bad format. */ #define MG_XID_BAD_FORMAT 2 /* * Other constants for service mg. */ /* * Maximal number of renegotiations in case of invalid cnf. */ #define MG_MAX_RENEGO 4 /* * Maximal number of compression entities: 32 each. */ #define MG_MAX_ENTITIES 32 /* * Maximum number of PCOMP values: 16. */ #define MG_MAX_PCOMP 16 /* * Maximum number of DCOMP values: 16. */ #define MG_MAX_DCOMP 16 /* * Possible values for service var 'mod_expects': */ #define MG_MOD_X_NONE 0xff #define MG_MOD_X_REL 1 #define MG_MOD_X_EST 2 #define MG_MOD_X_READY 0 /* * State of compression entity or dcomp/pcomp value */ #define MG_UNASSIGNED 23 /* * State of compression entity or dcomp/pcomp value */ #define MG_SELECTED 37 /* * State of compression entity or dcomp/pcomp value */ #define MG_ASSIGNED 47 /* * Possible field lengths in xid blocks in case of omitted parameters. * acc. to GSM 4.65, 6.6.2.1. * for p bit == 1 */ #define MG_DATA_P_0_NSAPIS_OM 0 #define MG_DATA_P_0_P0_OM 2 #define MG_DATA_P_0_P1_OM 3 #define MG_DATA_P_0_P2_OM 5 #define MG_HEADER_P_0_NSAPIS_OM 0 #define MG_HEADER_P_0_S0_M_1_OM 2 /* * The same for p bit == 0 */ #define MG_DATA_P_1_NSAPIS_OM 1 #define MG_DATA_P_1_P0_OM 3 #define MG_DATA_P_1_P1_OM 4 #define MG_DATA_P_1_P2_OM 6 #define MG_HEADER_P_1_NSAPIS_OM 1 #define MG_HEADER_P_1_S0_M_1_OM 3 /* * Is the 'nsapis' parameter in xid block for data or header entity? */ #define MG_XID_V42_NSAPIS 23 #define MG_XID_VJ_NSAPIS 19 /* * number of implemented instances of service nu */ #define NU_NUM_INC 16 /* * LLC operation modes */ #define SNDCP_ACK 17 #define SNDCP_UNACK 37 /* * Number of unacknowledged segment numbers (acc to GSM 4.65: 3) */ #ifdef _SIMULATION_ #define SNDCP_SEGMENT_NUMBERS_UNACK 25 #else #define SNDCP_SEGMENT_NUMBERS_UNACK 7 #endif /* _SIMULATION_ */ /* * Number of acknowledged segment numbers. This value is implementation * dependant. Here a bit mask of 32 is used in service sua to check the * confirmation status of a segmented N-PDU which then implies a maximum * number of 32. */ #define SNDCP_SEGMENT_NUMBERS_ACK 32 /* * Maximum Segment Number in a Single NPDU which SNDCP will assemble * in downlink. If SNDCP receives more than SNDCP_MAX_SEG_NUMBER segments * in one NPDU, SNDCP will discard the stored segments and will keep on * discarding the incoming segments till it receives the last segment. */ #define SNDCP_MAX_SEGMENT_NUMBER 100 /* * The resulting max value of the fully confirmed 32 segments mask. */ #define SNDCP_MAX_COMPLETE 4294967295 /* * The length of the queue for N-PDUs (in form of SN_UNITDATA_REQ prims). */ #define SN_UNITDATA_Q_LEN SNDCP_NUMBER_OF_NSAPIS /* * The length of the queue for N-PDUs (in form of SN_DATA_REQ prims). */ #define SN_DATA_Q_LEN SNDCP_NUMBER_OF_NSAPIS /* * The length of an SN Unitdata Pdu header, acc. to GSM 4.65 in bytes. * This SN-PDU is the first segment of an N-PDU. The octet for DCOMP and PCOMP * is included in the SN-UNITDATA PDU format. */ #define SN_UNITDATA_PDP_HDR_LEN_BIG 4 /* * The length of an SN Unitdata Pdu header, acc. to GSM 4.65 in bytes. * This SN-PDU is not the first segment of an N-PDU. The octet for DCOMP and * PCOMP is not included in SN-UNITDATA PDU format. */ #define SN_UNITDATA_PDP_HDR_LEN_SMALL 3 /* * The length of an SN Data Pdu header, acc. to GSM 4.65 in bytes. * This SN-PDU is the first segment of an N-PDU. The octet for DCOMP and PCOMP * is included in the SN-DATA PDU format. */ #define SN_DATA_PDP_HDR_LEN_BIG 3 /* * The length of an SN Data Pdu header, acc. to GSM 4.65 in bytes. * This SN-PDU is not the first segment of an N-PDU. The octet for DCOMP and * PCOMP is not included in the SN-DATA PDU PDU format. The octet with the * N-PDU number is not included in the SN-DATA PDU format. */ #define SN_DATA_PDP_HDR_LEN_SMALL 1 /* * Number of implemented instances of service su. */ #define SU_NUM_INC 4 /* * Number of implemented instances of service sua. */ #define SUA_NUM_INC 4 /* * number of implemented instances of service nd */ #define ND_NUM_INC 16 /* * number of implemented instances of service sd */ #define SD_NUM_INC 4 /* * number of implemented instances of service sda */ #define SDA_NUM_INC 4 /* * Maximum number of NSAPIs according to specification, implementation * independent. */ #define SNDCP_NUMBER_OF_NSAPIS 16 /* * Maximum number of LLC SAPIs according to specification, implementation * independent. */ #define SNDCP_NUMBER_OF_SAPIS 4 /* * Maximum N-pdu number in unacknowledged LLC operation mode */ #define MAX_NPDU_NUMBER_UNACK 4096 /* * Maximum N-pdu number in acknowledged LLC operation mode */ #define MAX_NPDU_NUMBER_ACK 256 /* * The implementation dependant length in bits for an XID block that * will be requested by the MS. */ #define SNDCP_XID_BLOCK_BIT_LEN 192 /* * Constants for filling the requested XID block. */ /* * The parameter type for version. */ #define SNDCP_XID_PARAM_TYPE_0 0 /* * Length of parameter type 0 in octets. */ #define SNDCP_XID_0_LEN 1 /* * Version number 0. */ #define SNDCP_XID_VERSION 0 /* * The parameter type for data compressors. */ #define SNDCP_XID_PARAM_TYPE_1 1 /* * Length of parameter type 1 in octets. * RES value 2 shorter because algorithm type and dcomp bytes omitted. */ #define SNDCP_XID_1_LEN 10 #define SNDCP_XID_1_LEN_RES 8 /* * P bit value 1. */ #define SNDCP_P_BIT_1 1 /* * P bit value 0. */ #define SNDCP_P_BIT_0 0 /* * Compressor entity 0. */ #define SNDCP_NTT_0 0 /* * the octet with | X | X | X | algorithm type. */ #define SNDCP_XID_V42 0 /* * Length of V42bis parameters in octets. * RES values 1 shorter because of omitted dcomp value. */ #define SNDCP_XID_V42_LEN 7 #define SNDCP_XID_V42_LEN_RES 6 /* * The octet with| DCOMP1 | X | will be set dynamically. * One default value. */ #define SNDCP_DCOMP1 1 /* * The two octets with applicable nsapis will be set dynamically. * default value is SNDCP_NSAPIS_DEFAULT like in case of header compression. */ /* * The direction octet will be set dynamically, values may be * SNSM_COMP_NEITHER_DIRECT, * SNSM_COMP_MS_SGSN_DIRECT, * SNSM_COMP_SGSN_MS_DIRECT, * SNSM_COMP_BOTH_DIRECT * Default: SNSM_COMP_BOTH_DIRECT */ #ifndef SNDCP_UPM_INCLUDED #define SNDCP_V42_DEFAULT_DIRECTION SNSM_COMP_BOTH_DIRECT #else #define SNDCP_V42_DEFAULT_DIRECTION NAS_DCOMP_BOTH_DIRECT #endif /* Compression parameters */ /* SNDCP_UPM_INCLUDED */ /* * The 2 P1 octets (max codewords) will be set dynamically. * Default value: 2048 */ #define SNDCP_V42_DEFAULT_P1 2048 /* * The P2 (max char num) octet will be set dynamically. * Default value: 20 */ #define SNDCP_V42_DEFAULT_P2 20 /* * The parameter type for header compressors. */ #define SNDCP_XID_PARAM_TYPE_2 2 /* * Length of parameter type 2 in octets * RES value 2 shorter because algorithm type and pcomp bytes omitted. */ #define SNDCP_XID_2_LEN_RES 5 #define SNDCP_XID_2_LEN 7 /* * The octet with | X | X | X | algorithm type. */ #define SNDCP_XID_VJ 0 /* * Length of VanJacobson parameters in octets. * RES value 1 shorter because pcomp byte omitted. */ #define SNDCP_XID_VJ_LEN 4 #define SNDCP_XID_VJ_LEN_RES 3 #define SNDCP_MAX_NUMBER_OF_VJ_SLOTS 16 /* * The octet with| PCOMP1 | PCOMP2 | will be set dynamically. * Two default values. */ #define SNDCP_PCOMP1 1 #define SNDCP_PCOMP2 2 /* * The two octets with applicable nsapis will be set dynamically. * Default value: 0 */ #define SNDCP_NSAPIS_DEFAULT 0 /* * The octet with S0 - 1 will be set dynamically. * Default value: 15 */ #define SNDCP_VJ_DEFAULT_S0_M_1 15 /* * "states" of nsapis and sapis that are stored in the arrays nsapi_state_ra * and sapi_state_ra */ #define MG_IDLE 0 /* * Waiting for LL_ESTABLISH_CNF. */ #define MG_EST 1 /* * Waiting for LL_XID_CNF. */ #define MG_XID 2 /* * Must send SNSM_ACTIVATE_RES. */ #define MG_ACT 4 /* * Waiting for LL_RELEASE_CNF. */ #define MG_REL 8 /* * Must send SNSM_DEACTIVATE_RES. */ #define MG_DEACT 0x10 /* * Waiting for SNSM_SEQUEMCE_IND. */ #define MG_SEQ 0x20 /* * A local LL_RELEASE_REQ must be sent after the end of the running sub * procedure. */ #define MG_REL_NEC_LOC 0x40 /* * An LL_XID_REQ must be sent after the end of the running sub procedure. */ #define MG_XID_NEC 0x80 /* * An LL_ESTABLISH_REQ must be sent after the end of the running sub procedure. */ #define MG_EST_NEC 0x100 /* * A non local LL_RELEASE_REQ must be sent after the end of the running sub * procedure. */ #define MG_REL_NEC_PEER 0x200 /* * A LL_ESTABLISH_IND is expected or received */ #define MG_EST_IND 0x400 /* * SNDCP got SN_DTI_REQ and the DTI information is stored ! */ #define MG_DTI_INFO 0x800 /* * Service definitions. Used to access service data with GET/SET_STATE. * * Services with multiple incarnation have to be defined as xxx-> * Services with only one incarnation have to be defined as xxx. */ #define CIA cia. #define MG mg. #define NU nu-> #define SU su-> #define SUA sua-> #define ND nd-> #define PD pd-> #define PDA pda-> #define SD sd-> #define SDA sda-> /* * workaround for init */ #define NU_0 nu-> #define NU_1 nu-> #define NU_2 nu-> #define NU_3 nu-> #define NU_4 nu-> #define NU_5 nu-> #define NU_6 nu-> #define NU_7 nu-> #define NU_8 nu-> #define NU_9 nu-> #define NU_10 nu-> #define NU_11 nu-> #define NU_12 nu-> #define NU_13 nu-> #define NU_14 nu-> #define NU_15 nu-> #define SU_0 su-> #define SU_1 su-> #define SU_2 su-> #define SU_3 su-> #define SUA_0 sua-> #define SUA_1 sua-> #define SUA_2 sua-> #define SUA_3 sua-> #define ND_0 nd-> #define ND_1 nd-> #define ND_2 nd-> #define ND_3 nd-> #define ND_4 nd-> #define ND_5 nd-> #define ND_6 nd-> #define ND_7 nd-> #define ND_8 nd-> #define ND_9 nd-> #define ND_10 nd-> #define ND_11 nd-> #define ND_12 nd-> #define ND_13 nd-> #define ND_14 nd-> #define ND_15 nd-> #define SD_0 sd-> #define SD_1 sd-> #define SD_2 sd-> #define SD_3 sd-> #define SDA_0 sda-> #define SDA_1 sda-> #define SDA_2 sda-> #define SDA_3 sda-> #define PD_0 pd-> #define PD_1 pd-> #define PD_2 pd-> #define PD_3 pd-> #define PDA_0 pda-> #define PDA_1 pda-> #define PDA_2 pda-> #define PDA_3 pda-> #ifdef NTRACE #undef SNDCP_TRACE_ALL /* if NTRACE is defined, SNDCP_TRACE_ALL should be disabled */ #endif /* * Service name definitions for trace purposes. */ #ifndef NTRACE #define SERVICE_NAME_CIA "CIA" #define SERVICE_NAME_MG "MG" #define SERVICE_NAME_ND_0 "ND_0" #define SERVICE_NAME_ND_1 "ND_1" #define SERVICE_NAME_ND_2 "ND_2" #define SERVICE_NAME_ND_3 "ND_3" #define SERVICE_NAME_ND_4 "ND_4" #define SERVICE_NAME_ND_5 "ND_5" #define SERVICE_NAME_ND_6 "ND_6" #define SERVICE_NAME_ND_7 "ND_7" #define SERVICE_NAME_ND_8 "ND_8" #define SERVICE_NAME_ND_9 "ND_9" #define SERVICE_NAME_ND_10 "ND_10" #define SERVICE_NAME_ND_11 "ND_11" #define SERVICE_NAME_ND_12 "ND_12" #define SERVICE_NAME_ND_13 "ND_13" #define SERVICE_NAME_ND_14 "ND_14" #define SERVICE_NAME_ND_15 "ND_15" #define SERVICE_NAME_NU_0 "NU_0" #define SERVICE_NAME_NU_1 "NU_1" #define SERVICE_NAME_NU_2 "NU_2" #define SERVICE_NAME_NU_3 "NU_3" #define SERVICE_NAME_NU_4 "NU_4" #define SERVICE_NAME_NU_5 "NU_5" #define SERVICE_NAME_NU_6 "NU_6" #define SERVICE_NAME_NU_7 "NU_7" #define SERVICE_NAME_NU_8 "NU_8" #define SERVICE_NAME_NU_9 "NU_9" #define SERVICE_NAME_NU_10 "NU_10" #define SERVICE_NAME_NU_11 "NU_11" #define SERVICE_NAME_NU_12 "NU_12" #define SERVICE_NAME_NU_13 "NU_13" #define SERVICE_NAME_NU_14 "NU_14" #define SERVICE_NAME_NU_15 "NU_15" #define SERVICE_NAME_SU_0 "SU_0" #define SERVICE_NAME_SU_1 "SU_1" #define SERVICE_NAME_SU_2 "SU_2" #define SERVICE_NAME_SU_3 "SU_3" #define SERVICE_NAME_SUA_0 "SUA_0" #define SERVICE_NAME_SUA_1 "SUA_1" #define SERVICE_NAME_SUA_2 "SUA_2" #define SERVICE_NAME_SUA_3 "SUA_3" #define SERVICE_NAME_SD_0 "SD_0" #define SERVICE_NAME_SD_1 "SD_1" #define SERVICE_NAME_SD_2 "SD_2" #define SERVICE_NAME_SD_3 "SD_3" #define SERVICE_NAME_SDA_0 "SDA_0" #define SERVICE_NAME_SDA_1 "SDA_1" #define SERVICE_NAME_SDA_2 "SDA_2" #define SERVICE_NAME_SDA_3 "SDA_3" #define SERVICE_NAME_PD_0 "PD_0" #define SERVICE_NAME_PD_1 "PD_1" #define SERVICE_NAME_PD_2 "PD_2" #define SERVICE_NAME_PD_3 "PD_3" #define SERVICE_NAME_PDA_0 "PDA_0" #define SERVICE_NAME_PDA_1 "PDA_1" #define SERVICE_NAME_PDA_2 "PDA_2" #define SERVICE_NAME_PDA_3 "PDA_3" #endif /* !NTRACE */ /* * 1 re-establishment timer for each sapi. */ #define TIMER_MAX 4 /* * State definitions for each service. */ #define CIA_DEFAULT 23 #define MG_DEFAULT 7 #define NU_UNACK_SU_RECEPTIVE 8 #define NU_UNACK_SU_NOT_RECEPTIVE 9 #define NU_ACK_SUA_RECEPTIVE 10 #define NU_ACK_SUA_NOT_RECEPTIVE 11 #define NU_SUS_SUA_RECEPTIVE 12 #define NU_SUS_SUA_NOT_RECEPTIVE 13 #define NU_REC_SUA_NOT_RECEPTIVE 14 #ifndef NCONFIG #define NU_SEND_UNACK_SU_RECEPTIVE 60 #define NU_SEND_UNACK_SU_NOT_RECEPTIVE 61 #define NU_SEND_ACK_SUA_RECEPTIVE 62 #define NU_SEND_ACK_SUA_NOT_RECEPTIVE 63 #define NU_SEND_SUS_SUA_RECEPTIVE 64 #define NU_SEND_SUS_SUA_NOT_RECEPTIVE 65 #define NU_SEND_REC_SUA_NOT_RECEPTIVE 66 #endif #define SU_LLC_NOT_RECEPTIVE 22 #define SU_LLC_RECEPTIVE 23 #define SU_LLC_RECEPTIVE_SUSPEND 24 #define SU_LLC_NOT_RECEPTIVE_SUSPEND 26 #define SUA_LLC_NOT_RECEPTIVE 82 #define SUA_LLC_RECEPTIVE 83 #define SUA_LLC_RECEPTIVE_SUSPEND 84 #define SUA_LLC_NOT_RECEPTIVE_SUSPEND 86 #define ND_DEFAULT 31 #define ND_RECOVER 37 #define ND_SUSPEND 41 #define SD_DEFAULT 44 #define SD_UNACK_DISCARD 45 #define SD_UNACK_RECEIVE_FIRST_SEGMENT 46 #define SD_UNACK_RECEIVE_SUBSEQUENT_SEGMENT 47 #define SD_UNACK_WAIT_NSAPI 48 #define PD_DEFAULT 50 #define PDA_DEFAULT 70 #define SDA_DEFAULT 64 #define SDA_ESTABLISH_REQUESTED 65 #define SDA_RECEIVE_FIRST_SEGMENT 66 #define SDA_RECEIVE_SUBSEQUENT_SEGMENT 67 #define SDA_WAIT_NSAPI 68 #define SDA_ACK_DISCARD 69 /*==== TYPES ======================================================*/ /* * Value constants for VAL_seg_pos */ #define SEG_POS_NONE (0x0) /* In between */ #define SEG_POS_FIRST (0x1) /* first */ #define SEG_POS_LAST (0x2) /* last */ #define SEG_POS_FIRST_LAST (0x3) /* both */ /* * Value constants for algo_type */ #define CIA_ALGO_V42 (0x0) /* V42bis algorithm */ /* * Value constants for comp_inst */ #define CIA_COMP_INST_V42_0 (0x0) /* first instance for V42bis */ /* * The following definitions was originally generated by CCD. * The definitions are not used as * primitive definitions anymore, only for SNDCP internal usage. */ typedef struct { U8 delay; /*<1> delay class */ U8 relclass; /*<1> Reliability class */ U8 peak; /*<1> peak throughput */ U8 preced; /*<1> Precedence class */ U8 mean; /*<1> main throughput */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ U8 _align2; /*<1> alignment */ } T_cia_qos; #ifndef __T_pdu_ref__ #define __T_pdu_ref__ typedef struct { U16 ref_npdu_num; /*<2> ref_npdu_num */ U8 ref_seg_num; /*<1> ref_seg_num */ U8 ref_nsapi; /*<1> ref_nsapi */ } T_pdu_ref; #endif typedef struct { U8 sapi; /*<1> service access point identifier */ U8 algo_type; /*<1> algorithm type */ U8 comp_inst; /*<1> compressor instance */ U8 packet_type; /*<1> Type of packet. */ T_pdu_ref pdu_ref; /*<8> to the segment to be confirmed */ T_desc_list2 desc_list2; /*<8> list of generic data descriptors */ } T_CIA_COMP_REQ; typedef struct { U8 sapi; /*<1> service access point identifier */ U8 algo_type; /*<1> algorithm type */ U8 comp_inst; /*<1> compressor instance */ U8 seg_pos; /*<1> First and/or last segment of N-PDU? */ U8 packet_type; /*<1> Type of packet. */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ U8 _align2; /*<1> alignment */ U32 tlli; /*<4> temporary logical link identifier */ T_cia_qos cia_qos; /*<8> quality of service */ T_pdu_ref pdu_ref; /*<8> to the segment to be confirmed */ T_desc_list3 desc_list3; /*<8> List of generic data descriptors */ } T_CIA_COMP_IND; typedef struct { U8 sapi; /*<1> service access point identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ U8 _align2; /*<1> alignment */ U32 tlli; /*<4> temporary logical link identifier */ T_pdu_ref pdu_ref; /*<8> to the segment to be confirmed */ U8 algo_type; /*<1> algorithm type */ U8 comp_inst; /*<1> compressor instance */ U8 seg_pos; /*<1> First and/or last segment of N-PDU? */ U8 pcomp; /*<1> from sn pdu */ T_sdu sdu; /*< > service data unit */ } T_CIA_DECOMP_REQ; typedef struct { U8 algo_type; /*<1> algorithm type */ U8 comp_inst; /*<1> compressor instance */ U8 pcomp; /*<1> from sn pdu */ U8 _align0; /*<1> alignment */ T_pdu_ref pdu_ref; /*<8> to the segment to be confirmed */ T_desc_list2 desc_list2; /*< > list of generic data descriptors */ } T_CIA_DECOMP_IND; /* The following definitions was originally generated by CCD. The definitions are not used as primitive definitions anymore, only for SNDCP internal usage. */ typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_desc_list2 desc_list2; /*<8> list of generic data descriptors */ } T_SN_DATA_REQ; typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_desc_list2 desc_list2; /*<8> list of generic data descriptors */ } T_SN_UNITDATA_REQ; typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_desc_list2 desc_list2; /*<8> list of generic data descriptors */ } T_SN_UNITDATA_IND; typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_desc_list2 desc_list2; /*<8> list of generic data descriptors */ } T_SN_DATA_IND; typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_sdu sdu; /*< > service data unit */ } T_SN_DATA_IND_TEST; typedef struct { U8 nsapi; /*<1> network layer sapi */ U8 p_id; /*<1> protocol identifier */ U8 _align0; /*<1> alignment */ U8 _align1; /*<1> alignment */ T_sdu sdu; /*< > service data unit */ } T_SN_UNITDATA_IND_TEST; /* * SNDCP global typedefs */ #ifdef SNDCP_UPM_INCLUDED typedef T_PS_qos_r97 T_snsm_qos; typedef T_SN_ACTIVATE_REQ T_SNSM_ACTIVATE_IND; #endif /*SNDCP_UPM_INCLUDED*/ /* * Structs used to store XID parameters. */ /* * Parameters for V42.bis data compression. */ typedef struct /* T_XID_V42_BLOCK */ { /* * Has V42 field been set in the block?. */ BOOL is_set; /* * P bit. */ UBYTE p_bit; /* * Entity number. */ UBYTE ntt; /* * Algorithm type. */ UBYTE algo_type; /* * The one DCOMP value needed for V42.bis. */ UBYTE dcomp; /* * Applicable nsapis set? */ BOOL nsapis_set; /* * Applicable nsapis (bit mask); */ USHORT nsapis; /* * Direction set? */ BOOL p0_set; /* * Direction */ UBYTE p0; /* * Max number of codewords set? */ BOOL p1_set; /* * Max number of codewords. */ USHORT p1; /* * Max char number set? */ BOOL p2_set; /* * Max char number. */ UBYTE p2; } T_XID_V42_BLOCK; /* * Used by VanJacobsen to store TCP-Headers */ typedef struct sndcp_tcp_header/* T_SNDCP_TCP_HEADER */ { /* TCP */ /* * Source Port */ USHORT th_sport; /* * Destination Port */ USHORT th_dport; /* * Sequence Number */ ULONG th_seq; /* * Acknowledgement Number */ ULONG th_ack; /* * Data Offset */ UBYTE th_off; /* * Flags: urg, ack, psh, rst, syn, fin */ UBYTE th_flags; /* * Window */ USHORT th_win; /* * Checksum */ USHORT th_sum; /* * Urgent Pointer */ USHORT th_urp; } T_SNDCP_TCP_HEADER; /* * Used by VanJacobsen to store IP-Headers */ typedef struct sndcp_ip_header/* T_SNDCP_IP_HEADER */ { /* IP */ /* * Protocol Verion, Header Length */ UBYTE ip_vhl; /* * Type of Service */ UBYTE ip_tos; /* * Total Length */ USHORT ip_len; /* * Packet ID */ USHORT ip_id; /* * Don't fragment, More fragments, Fragment Offset */ USHORT ip_off; /* * Time to live */ UBYTE ip_ttl; /* * Protocol */ UBYTE ip_p; /* * Header Checksum */ USHORT ip_sum; /* * Source Address */ ULONG ip_src; /* * Destination Address */ ULONG ip_dst; } T_SNDCP_IP_HEADER; /* * Parameters for VanJacobson header compression. */ typedef struct /* T_XID_VJ_BLOCK */ { /* * Has VJ field been set in the block?. */ BOOL is_set; /* * P bit. */ UBYTE p_bit; /* * Entity number. */ UBYTE ntt; /* * Algorithm type. */ UBYTE algo_type; /* * The first PCOMP value needed for Van Jacobson. */ UBYTE pcomp1; /* * The second PCOMP value needed for Van Jacobson. */ UBYTE pcomp2; /* * Applicable nsapis set? */ BOOL nsapis_set; /* * Applicable nsapis (bit mask); */ USHORT nsapis; /* * Direction. (Note: only for internal purposes, * not included in XID block) */ UBYTE direction; /* * Number of state slots minus set? */ UBYTE s0_m_1_set; /* * Number of state slots minus 1. */ UBYTE s0_m_1; } T_XID_VJ_BLOCK; typedef struct /* T_XID_BLOCK */ { BOOL version_set; UBYTE version; T_XID_V42_BLOCK v42; T_XID_VJ_BLOCK vj; } T_XID_BLOCK; /* * This is used to buffer N-PDUs in service nu. * * Instances of this struct are added to a dynamic list: */ typedef struct t /* T_NPDU_BUFFER */ { struct t* next; T_SN_DATA_REQ* sn_data_req; UBYTE npdu_number; } T_NPDU_BUFFER; /* * This is used to store information about segmented N-PDUs in service sua: * One T_SEG_INFO entry is for 1 segmented N-PDU. * a. How many segments have been sent from 1 N-PDU? * b. Which of these segments have been confirmed by the peer? * c. What is the "reference" struct? * d. Who is the affected NSAPI? * * Instances of this struct are added to a dynamic list: */ typedef struct tt /* T_SEG_INFO */ { struct tt* next; UBYTE number_of_segments; /* * An array of bit flags for 32 possible segments per N-PDU; * This restricts number of segments to 32. */ ULONG cnf_segments; UBYTE npdu_number; UBYTE nsapi; } T_SEG_INFO; /* * Constants and bit-masks used by header compression algorithm */ #define TH_FIN 0x01 /* FIN-Bit Mask */ #define TH_SYN 0x02 /* SYN-Bit Mask */ #define TH_RST 0x04 /* RST-Bit Mask */ #define TH_PUSH 0x08 /* PSH-Bit Mask */ #define TH_ACK 0x10 /* ACK-Bit Mask */ #define TH_URG 0x20 /* URG-Bit Mask */ #define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG) #define TCP_PUSH_BIT 0x10 /* PUSH-Bit Mask */ /* Bits in first octet of compressed packet, for what changed in a packet */ #define NEW_C 0x40 #define NEW_I 0x20 #define NEW_S 0x08 #define NEW_A 0x04 #define NEW_W 0x02 #define NEW_U 0x01 /* reserved, special-case values */ /* echoed interactive traffic */ #define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* unidirectional data */ #define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) #define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U) /* maximal change of values for sending compressed headers */ #define MAX_CHANGE 0xFFFE /* TCP-IP Protocol ID */ #define PROT_TCPIP 6 /* Position number of protocol type within a UBYTE buffer */ #define PR_TYPE_POS 9 /* Header Length Mask */ #define HL_MASK 0x0F /* tossing rcvd frames because of input err */ #define SLF_TOSS 1 /* Max. TCP/IP header length should really be 128 */ #define MAX_HDR_LEN 128 #define TMP_HDR_LEN 168 #define MAX_STATES SNDCP_MAX_NUMBER_OF_VJ_SLOTS /* packet types as defined in RFC 1144 */ #define TYPE_IP 0x40 #define TYPE_UNCOMPRESSED_TCP 0x70 #define TYPE_COMPRESSED_TCP 0x80 #define TYPE_ERROR 0x00 /* * "state" data for each active tcp conversation on the wire. This is * basically a copy of the entire IP/TCP header from the last packet * we saw from the conversation together with a small identifier * the transmit & receive ends of the line use to locate saved header. */ struct cstate { struct cstate *cs_next; /* next most recently used cstate (xmit only) */ USHORT cs_hlen; /* size of hdr (receive only) */ UBYTE cs_id; /* connection # associated with this state */ UBYTE cs_filler; UBYTE cs_hdr[MAX_HDR_LEN]; /* ip/tcp hdr from most recent packet */ T_SNDCP_IP_HEADER *cs_ip; /* ptr to ip/tcp hdr from most recent packet */ }; /* * all the state data for one serial line (we need one of these per line). */ struct slcompress { /* most recently used tstate */ struct cstate *last_cs; /* last rcvd conn. id */ UBYTE last_recv; /* last sent conn. id */ UBYTE last_xmit; USHORT flags; /* xmit connection states */ struct cstate tstate[MAX_STATES]; /* receive connection states */ struct cstate rstate[MAX_STATES]; /* buffer to store temporary received ip/tcp header */ UBYTE tcpip_hdr[TMP_HDR_LEN]; USHORT slots_to_use; }; /* * A struct comp_buf is used in the call cia_comp_vj and cia_decomp_vj because * that routine needs to modify both the start address and length if the * incoming packet is compressed/decompressed */ struct comp_buf { /* length of complete packet */ USHORT pack_len; /* length of header + some data passed to comp/decomp routine */ USHORT hdr_len; /* pointer to start of packet */ ULONG c_hdr; /* packet type */ UBYTE p_type; UBYTE filler; USHORT filler1; }; typedef struct /* T_CIA_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * Copy of mg.cur_xid_block. */ T_XID_BLOCK cur_xid_block; /* * all the state data for one serial line */ struct slcompress comp; #ifdef SNDCP_TRACE_ALL SHORT cia_decomp_ind_number[SNDCP_NUMBER_OF_NSAPIS]; #endif #ifdef TI_PS_FF_V42BIS T_V42B_DICO* enc; T_V42B_DICO* dec; U16 trabu[1500]; #endif /* TI_PS_FF_V42BIS */ /* * Currently assembled unacknowledged N-PDU downlink. */ T_CIA_DECOMP_IND* cur_cia_decomp_ind[SNDCP_NUMBER_OF_NSAPIS]; } T_CIA_DATA; typedef struct /* T_MG_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * XID parameters that show what the user requested. */ T_XID_BLOCK user_xid_block [SNDCP_NUMBER_OF_NSAPIS]; /* * XID parameters that are sent with LL_XID_REQ or LL_ESTABLISH_REQ. */ T_XID_BLOCK req_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * Confirmed XID parameters. */ T_XID_BLOCK cnf_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * Indicated XID parameters. */ T_XID_BLOCK ind_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * Responded XID parameters. */ T_XID_BLOCK res_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * Currently used XID parameters. */ T_XID_BLOCK cur_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * XID parameters that have not yet been requested, but are now needed, * e.g. when an establishment is pending and another SNSM_ACTIVATE_IND * comes in with compression required. */ T_XID_BLOCK new_xid_block [SNDCP_NUMBER_OF_SAPIS]; /* * index: sapi + data compression entity number, elements: state; * indicates the state of the given entity, one of MG_UNASSIGNED, * MG_SELECTED, MG_ASSIGNED UBYTE . */ UBYTE sapi_dntt_state_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_ENTITIES]; /* index: sapi + header compression entity number, elements: state; * indicates the state of the given entity, one of MG_UNASSIGNED, * MG_SELECTED, MG_ASSIGNED UBYTE . */ UBYTE sapi_pntt_state_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_ENTITIES]; /* * index: sapi + data compression entity number + nsapi, * elements: is nsapi conneted to given entity?; * indicates whether the NSAPI uses the given entity on the given SAPI. */ BOOL sapi_dntt_nsapi_set_ra [SNDCP_NUMBER_OF_SAPIS] [MG_MAX_ENTITIES] [SNDCP_NUMBER_OF_NSAPIS]; /* * index: sapi + header compression entity number + nsapi, * elements: is nsapi conneted to given entity?; * indictes whether the NSAPI uses the given entity on the given SAPI. */ BOOL sapi_pntt_nsapi_set_ra [SNDCP_NUMBER_OF_SAPIS] [MG_MAX_ENTITIES] [SNDCP_NUMBER_OF_NSAPIS]; /* * index: sapi + dcomp value, elements: state; * indicates the state of the given dcomp value, one of MG_UNASSIGNED, * MG_SELECTED, MG_ASSIGNED UBYTE . */ UBYTE sapi_dcomp_state_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_DCOMP]; /* * index: sapi + pcomp value, elements: state; * indicates the state of the given pcomp value, one of MG_UNASSIGNED, * MG_SELECTED, MG_ASSIGNED UBYTE . */ UBYTE sapi_pcomp_state_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_PCOMP]; /* * index: sapi + dcomp value, elements: data compression entity number; * indicates the entity to which the given dcomp value in the given SAPi * is assigned. */ UBYTE sapi_dcomp_dntt_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_DCOMP]; /* * index: sapi + pcomp value, elements: header compression entity number; * indicates the entity to which the given pcomp value in the given SAPi * is assigned. */ UBYTE sapi_pcomp_pntt_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_PCOMP]; /* * index: sapi, elements: number of renegotiations; */ UBYTE renego [SNDCP_NUMBER_OF_SAPIS]; /* * index: sapi + dntt value, elements: will the ntt be rejected? * For entities that are proposed by the network but cannot be set up. */ BOOL sapi_dntt_rej_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_ENTITIES]; /* * index: sapi + dntt value, elements: will the ntt be rejected? * For entities that are proposed by the network but cannot be set up. */ BOOL sapi_pntt_rej_ra [SNDCP_NUMBER_OF_SAPIS][MG_MAX_ENTITIES]; /* * What is expected in the course of a context modification? * Possible values: MG_MOD_X_NONE, MG_MOD_X_REL, MG_MOD_X_EST, MOD_X_READY. */ UBYTE mod_expects; /* * Bit_mask for all nsapis waiting with snsm_modify_res for est * and/or rel. */ USHORT waiting_nsapis; /* * Bit_mask for all nsapis currently suspended. */ USHORT suspended_nsapis; } T_MG_DATA; typedef struct /* T_NU_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected nsapi */ UBYTE nsapi; /* * The Send N-PDU number for unacknowledged data transfer. */ USHORT send_npdu_number_unack; /* * The Send N-PDU number for acknowledged data transfer. */ UBYTE send_npdu_number_ack; /* * The Receive N-PDU number for unacknowledged data transfer. */ UBYTE rec_npdu_number_ack; /* * Here the sent N-PDUs are stored. */ T_NPDU_BUFFER* first_buffered_npdu; /* * This is the next npdu buffer to be resent. */ T_NPDU_BUFFER* next_resend; /* * Is an SN_READY_IND pending? */ BOOL sn_ready_ind_pending; /* * Is an SN_UNITREADY_IND pending? */ BOOL sn_unitready_ind_pending; /* * Is an SN_SWITCH_CNF expected? */ BOOL sn_switch_cnf_expected; #ifdef SNDCP_UPM_INCLUDED /* * Is an SN_DTI_CNF expected? */ BOOL sn_dti_cnf_expected; #endif /* SNDCP_UPM_INCLUDED */ /* * Is DTI connection opened? */ BOOL connection_is_opened; /* * This flag indicates if config prim "DISCARD" or "RESUME" * for certain NSAPI was received. TRUE means "DISCARD" was received. * FALSE is the default state and will be set if "RESUME" was received. */ BOOL discard; /* * This variables are needed for statistics showing how much data was * discarded and how much sent. */ ULONG sent_data; ULONG discarded_data; } T_NU_DATA; typedef struct /* T_SU_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * The affected sapi. */ UBYTE sapi; /* * The max segment size for unacknowledged data transfer. */ USHORT n201_u; /* * An array with one T_SN_UNITDATA_REQ* per NSAPI. It is ensured by the flow * control with service nu that only one sn_unitdata_req per nsapi may be * present. This array works like a queue with a read and a write pointer. */ T_SN_UNITDATA_REQ* sn_unitdata_q [SN_UNITDATA_Q_LEN]; /* * An array with the N-PDU numbers for the above sn_unitdata_req primitives. */ USHORT npdu_number_q [SN_UNITDATA_Q_LEN]; /* * The read pointer for sn_unitdata_q. */ UBYTE sn_unitdata_q_read; /* * The write pointer for sn_unitdata_q. */ UBYTE sn_unitdata_q_write; #ifdef _SNDCP_DTI_2_ /* * An Array with a number of T_LL_UNITDESC_REQ* to store all segments of * 1 N-PDU after they have been received from cia. */ T_LL_UNITDESC_REQ* ll_unitdesc_q [SNDCP_SEGMENT_NUMBERS_UNACK]; /* * The read pointer for ll_unitdesc_q. */ U8 ll_unitdesc_q_read; /* * The write pointer for ll_unitdesc_q. */ U8 ll_unitdesc_q_write; #else /* _SNDCP_DTI_2_ */ /* * An Array with a number of T_LL_UNITDATA_REQ* to store all segments of * 1 N-PDU after they have been received from cia. */ T_LL_UNITDATA_REQ* ll_unitdata_q [SNDCP_SEGMENT_NUMBERS_UNACK]; /* * The read pointer for ll_unitdata_q. */ UBYTE ll_unitdata_q_read; /* * The write pointer for ll_unitdata_q. */ UBYTE ll_unitdata_q_write; #endif /* _SNDCP_DTI_2_ */ /* * In what state is cia? * Set to CIA_IDLE at init time and when last segment of N-PDU has been sent * to LLC. * Set to CIA_BUSY whenever sig_su_cia_cia_comp_req is sent. */ UBYTE cia_state; } T_SU_DATA; typedef struct /* T_SUA_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * The affected sapi. */ UBYTE sapi; /* * The max segment size for acknowledged data transfer. */ USHORT n201_i; /* * An array with one T_SN_DATA_REQ* per NSAPI. It is ensured by the flow * control with service nu that only one sn_data_req per nsapi may be * present. This array works like a queue with a read and a write pointer. */ T_SN_DATA_REQ* sn_data_q [SN_DATA_Q_LEN]; /* * An array with the N-PDU numbers for the above sn_data_req primitives. */ UBYTE npdu_number_q [SN_DATA_Q_LEN]; /* * The read pointer for sn_data_q. */ UBYTE sn_data_q_read; /* * The write pointer for sn_data_q. */ UBYTE sn_data_q_write; /* * Information about the outgoing segments, first element in dynamic list. */ T_SEG_INFO* first_seg_info; #ifdef _SNDCP_DTI_2_ /* * An Array with a number of T_LL_DESC_REQ* to store all * segments of 1 N-PDU after they have been received from cia. */ T_LL_DESC_REQ* ll_desc_q [SNDCP_SEGMENT_NUMBERS_ACK]; /* * The read pointer for ll_desc_q. */ U8 ll_desc_q_read; /* * The write pointer for ll_desc_q. */ U8 ll_desc_q_write; #else /* _SNDCP_DTI_2_ */ /* * An Array with a number of T_LL_DATA_REQ* to store all * segments of 1 N-PDU after they have been received from cia. */ T_LL_DATA_REQ* ll_data_q [SNDCP_SEGMENT_NUMBERS_ACK]; /* * The read pointer for ll_data_q. */ UBYTE ll_data_q_read; /* * The write pointer for ll_data_q. */ UBYTE ll_data_q_write; #endif /* _SNDCP_DTI_2_ */ /* * In what state is cia? * Set to CIA_IDLE at init time and when last segment of N-PDU has been sent * to LLC. * Set to CIA_BUSY whenever sig_sua_cia_cia_comp_req is sent. */ UBYTE cia_state; } T_SUA_DATA; typedef struct /* T_ND_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected nsapi */ UBYTE nsapi; /* * Receive npdu number for recovery state. */ UBYTE npdu_num; } T_ND_DATA; typedef struct /* T_PD_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected sapi */ UBYTE sapi; } T_PD_DATA; typedef struct /* T_PDA_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected sapi */ UBYTE sapi; } T_PDA_DATA; typedef struct /* T_SD_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected sapi */ UBYTE sapi; /* * TRUE if an LL_GETUNITDATA_REQ is pending, FALSE else */ BOOL llc_may_send; /* * The SN_UNITDATA_IND that iscurrently being assembled. */ T_SN_UNITDATA_IND* cur_sn_unitdata_ind[SNDCP_NUMBER_OF_NSAPIS]; /* * Is the affected NSAPI receptive? */ BOOL nsapi_rec_ra[SNDCP_NUMBER_OF_NSAPIS]; } T_SD_DATA; typedef struct /* T_SDA_DATA */ { UBYTE state; /* * Required for state traces. */ #ifndef NTRACE char *name; char *state_name; #endif /* * the affected sapi */ UBYTE sapi; /* * TRUE if an LL_GETDATA_REQ is pending, FALSE else */ BOOL llc_may_send; /* * The SN_DATA_IND that iscurrently being assembled. */ T_SN_DATA_IND* cur_sn_data_ind[SNDCP_NUMBER_OF_NSAPIS]; /* * Is the affected NSAPI receptive? */ BOOL nsapi_rec_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * The N-PDU number of the current uncompressed N-PDU. */ UBYTE uncomp_npdu_num; } T_SDA_DATA; typedef struct /* T_SNDCP_DATA */ { /* * Entity global arrays for organizing purposes */ /* * index: nsapi, elements: qos; * indicating the quality of service for the given NSAPI. */ T_snsm_qos nsapi_qos_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * index: nsapi, elements: flags; * indicating whether the given NSAPI (0..15) is currently in use or not. */ BOOL nsapi_used_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * index: nsapi, elements: flags; * indicating the sapi that is used by a certain nsapi. */ UBYTE nsapi_sapi_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * index: nsapi, elements: the radio priority to be used in lower layers; * indicating the radio priority to be used in LL_(UNIT-)DATA_REQ prims. */ UBYTE nsapi_prio_ra[SNDCP_NUMBER_OF_NSAPIS]; #ifdef REL99 /* * index: nsapi, elements: the packet flwo identifier to be used in lower layers; * indicating the packet flwo identifier to be used in LL_(UNIT-)DATA_REQ prims. */ U16 nsapi_pktflowid_ra[SNDCP_NUMBER_OF_NSAPIS]; #endif /*REL99*/ /* * index: sapi, elements: LLC acknowledged? * indicating acknowledged (TRUE) or unacknowledged (FALSE) LLC operation * mode of the given LLC SAPI. */ BOOL sapi_ack_ra[SNDCP_NUMBER_OF_SAPIS]; /* * index: nsapi, elements: LLC acknowledged? * indicating acknowledged (TRUE) or unacknowledged (FALSE) LLC operation * mode of the given NSAPI. */ BOOL nsapi_ack_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * index: sapi, elements: the state; * indicating one of MG_EST, MG_REL etc... */ USHORT sapi_state_ra[SNDCP_NUMBER_OF_SAPIS]; /* * index: nsapi, elements: the state; * indicating one of MG_EST, MG_REL etc... */ USHORT nsapi_state_ra[SNDCP_NUMBER_OF_NSAPIS]; /* * How many Van Jacobson compressors have been set up? * Must not be bigger than SNDCP_MAX_VJ_COUNT. */ UBYTE vj_count; /* * SNDCP sends an LL_XID_REQ at each context activation. * This may switched off by setting this variable to FALSE. */ BOOL always_xid; #ifndef NCONFIG /* * In case of config primitive SEND_UNITDATA this variable indicates the * number of octets to be sent. */ U32 data_count[SNDCP_NUMBER_OF_NSAPIS]; /* * Number of milliseconds to delay each SSM_ACTIVATE_IND after config prim DELAY. */ USHORT millis; #endif #define _SNDCP_MEAN_TRACE_ #ifdef _SNDCP_MEAN_TRACE_ /* * Used for tracing mean throughput up and down SN SAP. */ /* * Time in ms. */ T_TIME start_time_uplink_ack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME start_time_uplink_unack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME start_time_downlink_ack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME start_time_downlink_unack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME cur_time_uplink_ack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME cur_time_uplink_unack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME cur_time_downlink_ack [SNDCP_NUMBER_OF_NSAPIS]; T_TIME cur_time_downlink_unack [SNDCP_NUMBER_OF_NSAPIS]; /* * Number of transferred octets. * Skipped octets after config prim DISCARD are skipped. */ ULONG cur_num_uplink_ack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_num_uplink_unack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_num_downlink_ack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_num_downlink_unack [SNDCP_NUMBER_OF_NSAPIS]; /* * Number of transferred packets. * Skipped packets after config prim DISCARD are skipped. */ ULONG cur_pac_uplink_ack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_pac_uplink_unack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_pac_downlink_ack [SNDCP_NUMBER_OF_NSAPIS]; ULONG cur_pac_downlink_unack [SNDCP_NUMBER_OF_NSAPIS]; /* * Direction and ack_mode parameters. */ #define SNDCP_MEAN_UP 1 #define SNDCP_MEAN_DOWN 2 #define SNDCP_MEAN_ACK 3 #define SNDCP_MEAN_UNACK 4 #endif /* _SNDCP_MEAN_TRACE_ */ #ifndef SNDCP_UPM_INCLUDED #define SNDCP_INTERFACE_ACK 1 #endif #define SNDCP_INTERFACE_UNACK 0 #ifdef _SNDCP_DTI_2_ DTI_HANDLE hDTI; #else /* _SNDCP_DTI_2_*/ DTI_HANDLE* hDTI; #endif /* _SNDCP_DTI_2_*/ U32 nsapi_linkid_ra [SNDCP_NUMBER_OF_NSAPIS]; U8* nsapi_neighbor_ra [SNDCP_NUMBER_OF_NSAPIS]; U8 nsapi_interface_ra [SNDCP_NUMBER_OF_NSAPIS]; /* * Possible values from dti.h: HOME or NEIGHBOR * Do not use SN or SNSM values. */ BOOL nsapi_direction_ra [SNDCP_NUMBER_OF_NSAPIS]; #ifdef FLOW_TRACE BOOL flow_control_ra [5][2][2]; #endif /* FLOW_TRACE */ /* * Service data structures * * Services with multiple incarnations require an array of structures * named xxx_base[] with xxx = service abbrevation, and additionally a * pointer named *xxx, which will be accessed instead of xxx_base. * * Services with only one incarnation just have to declare one structure * named xxx (no need for xxx_base[] and *xxx). * * The differentiation between the two access possibilites is made with * the defines of the service names above (SNDCP_SERVICE_XXX). */ T_CIA_DATA cia; T_MG_DATA mg; T_PD_DATA pd_base[SD_NUM_INC]; T_PD_DATA *pd; T_PDA_DATA pda_base[SD_NUM_INC]; T_PDA_DATA *pda; T_NU_DATA nu_base[NU_NUM_INC]; T_NU_DATA *nu; T_SU_DATA su_base[SU_NUM_INC]; T_SU_DATA *su; T_SUA_DATA sua_base[SUA_NUM_INC]; T_SUA_DATA *sua; T_ND_DATA nd_base[ND_NUM_INC]; T_ND_DATA *nd; T_SD_DATA sd_base[SD_NUM_INC]; T_SD_DATA *sd; T_SDA_DATA sda_base[SDA_NUM_INC]; T_SDA_DATA *sda; /* * Receiving states.(Regarding to 3GPP 04.65, capture 6.7.1.2) * index: NSAPI number, elements: SD/SDA receiving states relaiting to NSAPI. * One SAPI can receive SN-PDU's for diffent NSAPI's used currently on * this SAPI. In this case SD/SDA services have to have different receiving * states for each on this SAPI achtive NSAPI. */ UBYTE rec_states[SNDCP_NUMBER_OF_NSAPIS]; /* * Reference to pdu. */ T_pdu_ref cur_pdu_ref[SNDCP_NUMBER_OF_NSAPIS]; /* * The dcomp value in the first segment of the currently reassembled N-PDU. */ UBYTE cur_dcomp[SNDCP_NUMBER_OF_NSAPIS]; /* * The pcomp value in the first segment of the currently reassembled N-PDU. */ UBYTE cur_pcomp[SNDCP_NUMBER_OF_NSAPIS]; /* * First and/or last segment? */ UBYTE cur_seg_pos[SNDCP_NUMBER_OF_NSAPIS]; /* * Has the currently reassembled n-pdu a big header? */ BOOL big_head[SNDCP_NUMBER_OF_NSAPIS]; /* * Global variable indicating if the config primitive * TRACE_HEADER_ON has been received and the IP header * will be traced */ BOOL trace_ip_header; /* * Global variable indicating if the config primitive * TRACE_PACKET_ON has been received and the complete * IP packets (Header+Payload) will traced */ BOOL trace_ip_datagram; /* * Global variable indicating if the config primitive * TRACE_IP_BIN has been received and the complete * IP packets (Header+Payload) will be exported via BIN TRACE */ BOOL trace_ip_bin; /* * This flag indicates if IP filter is activated or not. Per default * the IP filter is disabled and the state is set to FALSE. * TRUE means "IP_FILTER_ON" was received and filter is activated. */ BOOL ip_filter; /* * This Counter indicates the Current Segment Number in single NPDU * which is being assembled currently. * This Counter Value is introduced to encounter the PARTITION * Problem which we may face when there are more than 100 segments in * one NPDU are received in downlink. */ U8 cur_segment_number[SNDCP_NUMBER_OF_NSAPIS]; /* Flag to indicate if flow control is received before NSAPI is used. * If the flow control is received the corresponding bit for the NSAPI * is set in the variable */ USHORT nsapi_rcv_rdy_b4_used; U8 nsapi; BOOL tcp_flow; } T_SNDCP_DATA; /*==== EXPORT =====================================================*/ /* * Entity data base */ #ifdef SNDCP_PEI_C T_SNDCP_DATA sndcp_data_base, *sndcp_data; #else EXTERN T_SNDCP_DATA sndcp_data_base, *sndcp_data; #endif #define ENTITY_DATA sndcp_data /* * Communication handles */ #define hCommMMI _ENTITY_PREFIXED(hCommMMI) #ifdef SNDCP_UPM_INCLUDED #define hCommUPM _ENTITY_PREFIXED(hCommUPM) #else #define hCommSM _ENTITY_PREFIXED(hCommSM) #endif /*#ifdef SNDCP_UPM_INCLUDED*/ #define hCommLLC _ENTITY_PREFIXED(hCommLLC) #ifdef SNDCP_PEI_C T_HANDLE hCommMMI = VSI_ERROR; /* T_HANDLE hCommSM = VSI_ERROR; */ #ifdef SNDCP_UPM_INCLUDED T_HANDLE hCommUPM = VSI_ERROR; #endif /*SNDCP_UPM_INCLUDED*/ T_HANDLE hCommLLC = VSI_ERROR; T_HANDLE SNDCP_handle; /* * make the pei_create function unique */ #define pei_create _ENTITY_PREFIXED(pei_create) #else EXTERN T_HANDLE hCommMMI; /*EXTERN T_HANDLE hCommSM; */ #ifdef SNDCP_UPM_INCLUDED EXTERN T_HANDLE hCommUPM; #endif EXTERN T_HANDLE hCommLLC; EXTERN T_HANDLE SNDCP_handle; #endif /* SNDCP_PEI_C */ #endif /* SNDCP_H */