/******************************************************************************* ** ** Cabletron Systems Incorporated ** Post Office Box 5005 ** Rochester, NH 03866-5005 ** (c) Copyright Cabletron Systems Inc. 1999 ** ** Workfile: %M% ** Logfile: %P% ** Original Author: Todd Crowley ** SCCS Delta ID: %I% ** Last Delta Date/Time: %G% %U% ** *******************************************************************************/ #ifndef LFAP_H_ #define LFAP_H_ #ifdef __cplusplus extern "C" { #endif #ifdef LFAP_STANDALONE #include "ssr_structs.h" #endif /* system dependent header files, typedefs, and macros */ #include "LfapSysDepend.h" /* All global symbols (functions, variables, etc...) need to * have a version extension. This allows us to support multiple * versions in one image. You can use the "nm" tool to search * for global symbols. * * All known globals are listed here. */ #define initLfapAR initLfapARv5 #define decodeNextRecordLfapAR decodeNextRecordLfapARv5 #define verifyLfapAR verifyLfapARv5 #define encodeCompletedLfapAR encodeCompletedLfapARv5 #define encodeRecordLfapAR encodeRecordLfapARv5 #define encodeFixedLfapAR encodeFixedLfapARv5 #define setFASIpAddrLfapAR setFASIpAddrLfapARv5 #define setFlowIdLfapAR setFlowIdLfapARv5 #define setComponentLfapAR setComponentLfapARv5 #define initRcvdLfapAR initRcvdLfapARv5 #define setCommandLfapAR setCommandLfapARv5 #define initLfapARcommand initLfapARcommandv5 #define resetLfapAR resetLfapARv5 #define initLfapFAR initLfapFARv5 #define verifyLfapFAR verifyLfapFARv5 #define encodeCompletedLfapFAR encodeCompletedLfapFARv5 #define setClientDataLfapFAR setClientDataLfapFARv5 #define setTosLfapFAR setTosLfapFARv5 #define setProtocolLfapFAR setProtocolLfapFARv5 #define setSrcPortLfapFAR setSrcPortLfapFARv5 #define setDestAddrLfapFAR setDestAddrLfapFARv5 #define setSrcAddrLfapFAR setSrcAddrLfapFARv5 #define setTimeLfapFAR setTimeLfapFARv5 #define setComponentLfapFAR setComponentLfapFARv5 #define initRcvdLfapFAR initRcvdLfapFARv5 #define setFlowIdLfapFAR setFlowIdLfapFARv5 #define initLfapFARflowId initLfapFARflowIdv5 #define resetLfapFAR resetLfapFARv5 #define setCheckpointLfapFAR setCheckpointLfapFARv5 #define setCxnPriorityLfapFAR setCxnPriorityLfapFARv5 #define setEgressPortLfapFAR setEgressPortLfapFARv5 #define setIngressPortLfapFAR setIngressPortLfapFARv5 #define setSrcCCEAddrLfapFAR setSrcCCEAddrLfapFARv5 #define setSrcDestASLfapFAR setSrcDestASLfapFARv5 #define setCoSLfapFAR setCoSLfapFARv5 #define getDestPortLfapFAR getDestPortLfapFARv5 #define setDestASLfapFAR setDestASLfapFARv5 #define setLDPFECLfapFAR setLDPFECLfapFARv5 #define setMplsLabelLfapFAR setMplsLabelLfapFARv5 #define setNextHopAddrLfapFAR setNextHopAddrLfapFARv5 #define setSrcASLfapFAR setSrcASLfapFARv5 #define setVlanIDLfapFAR setVlanIDLfapFARv5 #define resetLfapARA resetLfapARAv5 #define initLfapARA initLfapARAv5 #define initLfapARAfromAR initLfapARAfromARv5 #define initRcvdLfapARA initRcvdLfapARAv5 #define setComponentLfapARA setComponentLfapARAv5 #define setFailCodeLfapARA setFailCodeLfapARAv5 #define setFlowIdLfapARA setFlowIdLfapARAv5 #define setFlowPrefixLfapARA setFlowPrefixLfapARAv5 #define encodeFixedLfapARA encodeFixedLfapARAv5 #define encodeRecordLfapARA encodeRecordLfapARAv5 #define encodeCompletedLfapARA encodeCompletedLfapARAv5 #define decodeNextRecordLfapARA decodeNextRecordLfapARAv5 #define verifyLfapARA verifyLfapARAv5 #define setTimeLfapARA setTimeLfapARAv5 #define resetLfapFUN resetLfapFUNv5 #define initLfapFUN initLfapFUNv5 #define initLfapFUNflowId initLfapFUNflowIdv5 #define initRcvdLfapFUN initRcvdLfapFUNv5 #define setComponentLfapFUN setComponentLfapFUNv5 #define setFlowIdLfapFUN setFlowIdLfapFUNv5 #define setStateLfapFUN setStateLfapFUNv5 #define setTimeLfapFUN setTimeLfapFUNv5 #define setByteCountLfapFUN setByteCountLfapFUNv5 #define setPacketCountLfapFUN setPacketCountLfapFUNv5 #define encodeFixedLfapFUN encodeFixedLfapFUNv5 #define encodeRecordLfapFUN encodeRecordLfapFUNv5 #define encodeCompletedLfapFUN encodeCompletedLfapFUNv5 #define decodeNextRecordLfapFUN decodeNextRecordLfapFUNv5 #define verifyLfapFUN verifyLfapFUNv5 #define encodeCompletedLfapVR encodeCompletedLfapVRv5 #define initLfapVR initLfapVRv5 #define initRcvdLfapVR initRcvdLfapVRv5 #define resetLfapVR resetLfapVRv5 #define verifyLfapVR verifyLfapVRv5 #define encodeCompletedLfapVRA encodeCompletedLfapVRAv5 #define initLfapVRA initLfapVRAv5 #define initLfapVRAfromVR initLfapVRAfromVRv5 #define initRcvdLfapVRA initRcvdLfapVRAv5 #define resetLfapVRA resetLfapVRAv5 #define verifyLfapVRA verifyLfapVRAv5 #define decodeNextRecordLfapCR decodeNextRecordLfapCRv5 #define encodeCompletedLfapCR encodeCompletedLfapCRv5 #define encodeFixedLfapCR encodeFixedLfapCRv5 #define encodeRecordLfapCR encodeRecordLfapCRv5 #define initLfapCR initLfapCRv5 #define initRcvdLfapCR initRcvdLfapCRv5 #define resetLfapCR resetLfapCRv5 #define setComponentLfapCR setComponentLfapCRv5 #define setFASIpAddrLfapCR setFASIpAddrLfapCRv5 #define verifyLfapCR verifyLfapCRv5 #define encodeCompletedLfapCAN encodeCompletedLfapCANv5 #define initLfapCAN initLfapCANv5 #define initRcvdLfapCAN initRcvdLfapCANv5 #define resetLfapCAN resetLfapCANv5 #define verifyLfapCAN verifyLfapCANv5 #define encodeCompletedLfapCRN encodeCompletedLfapCRNv5 #define initLfapCRN initLfapCRNv5 #define initRcvdLfapCRN initRcvdLfapCRNv5 #define resetLfapCRN resetLfapCRNv5 #define verifyLfapCRN verifyLfapCRNv5 #define encodeCompletedLfapKA encodeCompletedLfapKAv5 #define initLfapKA initLfapKAv5 #define initRcvdLfapKA initRcvdLfapKAv5 #define resetLfapKA resetLfapKAv5 #define verifyLfapKA verifyLfapKAv5 #define decodeNextRecordLfapDR decodeNextRecordLfapDRv5 #define encodeCompletedLfapDR encodeCompletedLfapDRv5 #define encodeFixedLfapDR encodeFixedLfapDRv5 #define encodeRecordLfapDR encodeRecordLfapDRv5 #define initLfapDR initLfapDRv5 #define initRcvdLfapDR initRcvdLfapDRv5 #define resetLfapDR resetLfapDRv5 #define setComponentLfapDR setComponentLfapDRv5 #define setFASIpAddrLfapDR setFASIpAddrLfapDRv5 #define verifyLfapDR verifyLfapDRv5 #define encodeCompletedLfapFER encodeCompletedLfapFERv5 #define initLfapFER initLfapFERv5 #define initRcvdLfapFER initRcvdLfapFERv5 #define resetLfapFER resetLfapFERv5 #define verifyLfapFER verifyLfapFERv5 #define printLfapList printLfapListv5 #define printLFAPStats printLFAPStatsv5 #define PRINT_LFAP_MESSAGE PRINT_LFAP_MESSAGEv5 #define print_lfap_msg print_lfap_msgv5 #define freeLfapMsg freeLfapMsgv5 #define getNextLfapMsgId getNextLfapMsgIdv5 #define setLfapMsgId setLfapMsgIdv5 #define setLfapMsgStatus setLfapMsgStatusv5 #define lfap_buffer_alloc lfap_buffer_allocv5 #define lfap_buffer_extract lfap_buffer_extractv5 #define lfap_buffer_free lfap_buffer_freev5 #define lfap_buffer_init lfap_buffer_initv5 #define lfap_buffer_insert lfap_buffer_insertv5 #define lfap_buffer_reset lfap_buffer_resetv5 #define lfap_decode_msglen lfap_decode_msglenv5 #define lfap_get_header lfap_get_headerv5 #define lfap_get_IE lfap_get_IEv5 #define lfap_next_record lfap_next_recordv5 #define lfap_add_IE lfap_add_IEv5 #define lfap_begin_fixed lfap_begin_fixedv5 #define lfap_begin_message lfap_begin_messagev5 #define lfap_begin_multiple lfap_begin_multiplev5 #define lfap_begin_record lfap_begin_recordv5 #define lfap_end_fixed lfap_end_fixedv5 #define lfap_end_message lfap_end_messagev5 #define lfap_end_multiple lfap_end_multiplev5 #define lfap_end_record lfap_end_recordv5 #define lfap_init_decode lfap_init_decodev5 #define lfap_init_encode lfap_init_encodev5 #define _encode_vtbl _encode_vtblv5 #define _decode_vtbl _decode_vtblv5 #define initLfapNode initLfapNodev5 #define copyLfapNode copyLfapNodev5 #define nextLfapNode nextLfapNodev5 #define clearLfapNode clearLfapNodev5 #define lfapNodeInfo lfapNodeInfov5 #define initLfapList initLfapListv5 #define setLfapList setLfapListv5 #define copyLfapList copyLfapListv5 #define lfapListAt lfapListAtv5 #define lfapListFirst lfapListFirstv5 #define lfapListLast lfapListLastv5 #define lfapListAppend lfapListAppendv5 #define lfapListPrepend lfapListPrependv5 #define lfapListInsertAt lfapListInsertAtv5 #define lfapListInsertAfter lfapListInsertAfterv5 #define lfapListFindRef lfapListFindRefv5 #define lfapListRemoveRef lfapListRemoveRefv5 #define removeNextLfapNode removeNextLfapNodev5 #define lfapListGet lfapListGetv5 #define clearLfapList clearLfapListv5 #define clearAndDestroyLfapList clearAndDestroyLfapListv5 #define lastLfapNode lastLfapNodev5 #define tailLfapNode tailLfapNodev5 #define firstLfapNode firstLfapNodev5 #define getFirstLfapNode getFirstLfapNodev5 #define findLfapNode findLfapNodev5 #define previousLfapNode previousLfapNodev5 #define appendLfapNode appendLfapNodev5 #define initLfapIter initLfapIterv5 #define initLfapIterList initLfapIterListv5 #define incLfapIter incLfapIterv5 #define plusLfapIter plusLfapIterv5 #define keyItemLfapIter keyItemLfapIterv5 #define removeItemLfapIter removeItemLfapIterv5 #define resetLfapIter resetLfapIterv5 #define resetLfapIterList resetLfapIterListv5 #define lfapListIsEmpty lfapListIsEmptyv5 #define lfapListEntries lfapListEntriesv5 #if !defined(NEEDPROTOS) && (defined(__STDC__) || defined(__cplusplus)) #define NEEDPROTOS 1 #endif /* well-known port used for lfap connections */ #define LFAP_PORT 3145 /* version of lfap implemented by this library */ #define LFAP_VERSION 5 typedef enum { LFAP_IP_FLOW = 1, LFAP_MPLS_FLOW } lfap_flow_type_e; /* * Op Codes - check removeLfapMsgs_ in LfapFlowMgr.c when adding new ones */ #define LFAP_VR_OPCODE 0x01 #define LFAP_VRA_OPCODE 0x02 #define LFAP_CR_OPCODE 0x03 #define LFAP_CAN_OPCODE 0x04 #define LFAP_CRN_OPCODE 0x05 #define LFAP_FER_OPCODE 0x06 #define LFAP_FAR_OPCODE 0x07 #define LFAP_FUN_OPCODE 0x08 #define LFAP_AR_OPCODE 0x09 #define LFAP_ARA_OPCODE 0x0A #define LFAP_KA_OPCODE 0x0B #define LFAP_DR_OPCODE 0x0C #define LFAP_MAX_OPCODE 0x0D /* * Status Codes */ #define LFAP_MSG_SUCCESS 0x01 #define LFAP_MSG_VERSION 0x02 #define LFAP_MSG_CORRUPTED 0x03 /* * Type Codes for IE's * WARNING - order must be maintained or change DECLARE_VIRTUAL macro * to be consistent. */ /* From LFAP V5 Transport Protocol Specification */ #define LFAP_TRANSPORT_FAS_IP 1 #define LFAP_TRANSPORT_MULTIPLE_RECORD 2 /* From LFAP V5 Data Specification */ #define LFAP_FLOW_ID 65 #define LFAP_SRC_ADDR 66 #define LFAP_DST_ADDR 67 #define LFAP_FLOW_QUALIFIER 68 #define LFAP_TIME 69 #define LFAP_UTC_TIME 70 #define LFAP_DELTA_TIME 71 /* NOT YET IMPLEMENTED */ #define LFAP_CLASS_OF_SERVICE 72 #define LFAP_SRC_CCE_ADDR 73 #define LFAP_CLIENT_DATA 74 #define LFAP_COMMAND_CODE 75 #define LFAP_IE_LIST 76 /* NOT YET IMPLEMENTED */ #define LFAP_FAS_IP_ADDR 77 #define LFAP_FAIL_CODE 78 #define LFAP_FLOW_ID_PREFIX 79 #define LFAP_FLOW_STATE 80 #define LFAP_BYTES_TOTAL 81 #define LFAP_BYTES_DELTA 82 #define LFAP_PACKETS_TOTAL 83 #define LFAP_PACKETS_DELTA 84 #define LFAP_PROTOCOL_ID 85 #define LFAP_SRC_PORT_UDP 86 #define LFAP_SRC_PORT_TCP 87 #define LFAP_SRC_SOCKET_IPX 88 #define LFAP_SRC_AS 89 #define LFAP_DEST_AS 90 #define LFAP_INGRESS_PORT 91 #define LFAP_EGRESS_PORT 92 #define LFAP_VLAN_ID 93 #define LFAP_MPLS_IN_LABEL 94 #define LFAP_MPLS_OUT_LABEL 95 #define LFAP_NEXT_HOP_ADDR 96 #define LFAP_LDP_FEC 97 /* None if the IEs below are implemented yet */ #define LFAP_INGRESS_ATM_INTF 98 #define LFAP_EGRESS_ATM_INTF 99 #define LFAP_INGRESS_FRAME_RELAY_INTF 100 #define LFAP_EGRESS_FRAME_RELAY_INTF 101 #define LFAP_TCP_CONTROL_BITS 102 #define LFAP_NEXT_HOP_AS 103 #define LFAP_SRC_ADDR_MASK 104 #define LFAP_DST_ADDR_MASK 105 #define LFAP_SRC_BGP_COMMUNITY 106 #define LFAP_DST_BGP_COMMUNITY 107 #define LFAP_TRAFFIC_INDEX 108 #define LFAP_SRC_VIRTUAL_ADDR 109 #define LFAP_SRC_VIRTUAL_PORT 110 #define LFAP_DST_VIRTUAL_ADDR 111 #define LFAP_DST_VIRTUAL_PORT 112 #define LFAP_VENDOR_IE 113 #define LFAP_FLOW_LABEL 114 #define LFAP_IP_FRAGMENT_ID 115 #define LFAP_MAX_IE_CODE 116 #define LFAP_NO_VLAN_ID 0xFFFF /* * Flow Qualifier IDs */ #define LFAP_CHECKPOINT_ID 0x0001 #define LFAP_CXN_PRIORITY_ID 0x0002 /* * Flow Qualifier Values */ #define LFAP_CHECKPOINT_HOURLY 0x0001 #define LFAP_CHECKPOINT_DAILY 0x0002 #define LFAP_CHECKPOINT_WEEKLY 0x0003 #define LFAP_CHECKPOINT_5_MINUTE 0x0004 #define LFAP_CHECKPOINT_15_MINUTE 0x0005 #define LFAP_CHECKPOINT_USER_1 0x0006 #define LFAP_CHECKPOINT_USER_2 0x0007 #define LFAP_CXN_PRIORITY_PREMIUM 0x0064 #define LFAP_CXN_PRIORITY_HIGH 0x00c8 #define LFAP_CXN_PRIORITY_MEDIUM 0x012c #define LFAP_CXN_PRIORITY_LOW 0x0190 /* * Command Codes */ #define LFAP_RETURN_INDICATED_FLOWS 0x00000001 #define LFAP_RETURN_FLOW_PREFIX 0x00000002 #define LFAP_RETURN_TIME 0x00000003 #define LFAP_REQUESTED_IEs 0x00000004 #define LFAP_LIST_OF_FASS 0x00000005 /* The following are left over from LFAP V4, they should beremoved at some point */ #define LFAP_CONNECTION_ACCEPTED 0x00000006 #define LFAP_CONNECTION_REJECTED 0x00000007 #define LFAP_DISCONNECT 0x00000008 #define LFAP_KEEPALIVE 0x00000009 #define LFAP_MAX_CMD_CODE 0x0000000A /* * FAS IP Address Family Numbers */ #define LFAP_IP_VERSION_4 0x0001 #define LFAP_IP_VERSION_6 0x0002 /* * Flow Failure Code */ #define LFAP_NO_SUCH_FLOW 0x00000001 /* * Flow State Codes */ #define LFAP_INACTIVE 0x00000001 #define LFAP_ACTIVE 0x00000002 /* * LFAP Success/Error Codes */ #define LFAP_SUCCESS 0 #define LFAP_ERROR -1 #define LFAP_FAILURE -2 /* * Additional error codes returned by the API encoding/decoding routines */ #define LFAP_INVAL 0xff00 #define LFAP_MSGSIZE 0xff01 #define LFAP_NODATA 0xff02 #define LFAP_NOMEM 0xff03 #define LFAP_NOTEMPTY 0xff04 /* * structure representing the user-supplied fields of an LFAP message header */ typedef struct lfapheader { lfapui8_t opcode; lfapui8_t status; lfapui16_t msgid; } LFAPHeader; /* encoded size of lfap header in bytes */ #define LFAP_HEADER_SIZE 8 /* maximum size of an lfap message */ #define LFAP_MAX_MSGSIZE 0xffff /* * structure representing a Flow Identifier */ typedef struct lfapflowid { lfapui16_t type; lfapui32_t fas_id[2]; lfapui32_t cce_id; } LFAPFlowID; /* * structure representing an address */ typedef struct lfapaddr { lfapui16_t type; lfapui16_t family; lfapui16_t len; char *val; } LFAPAddress; /* * structure representing a 64-bit unsigned integer */ typedef struct lfapuint64 { lfapui32_t hi_val; lfapui32_t lo_val; } LFAPUInt64; /* * structure representing a count of data sent and received (units unspecified) */ typedef struct lfapdatacount { lfapui16_t type; LFAPUInt64 dc_rcvd; LFAPUInt64 dc_sent; } LFAPDataCount; /* * structure representing an arbitrary octet string */ typedef struct lfapoctetstr { lfapui16_t type; lfapui16_t len; char *val; } LFAPOctetStr; /* * structure representing a flow qualifier */ typedef struct lfapqualifier { lfapui16_t id; lfapui16_t len; char *val; } LFAPQualifier; /* * structure representing a list of flow qualifiers */ typedef struct lfapqualifierlist { lfapui16_t type; lfapui16_t items; #define LFAP_MAX_QUALIFIERS (5) LFAPQualifier q_list[LFAP_MAX_QUALIFIERS]; } LFAPQualifierList; /* * structure representing a 32-bit integer IE */ typedef struct lfapuint32 { lfapui16_t type; lfapui32_t val; } LFAPUInt32; /* * structure representing a two 16-bit integer IE */ typedef struct lfapuint16x2 { lfapui16_t type; lfapui16_t val[2]; } LFAPUInt16x2; /* * structure representing a 24-bit reserved integer followed * by a 8 bit value. * * WARNING - If change this struct then change next struct too */ typedef struct lfaprsvduint8 { lfapui16_t type; lfapui32_t reserved:24; lfapui32_t val:8; } LFAPRsvdUint8; /* For use with encode decode routines be careful different types cause different aligment. so use the same ones as above */ typedef struct { lfapui16_t type; lfapui32_t reserved_val; } LFAP_encode_decode_RsvdUint8; /* * structure representing a 16-bit reserved integer followed * by a 16 bit value. */ typedef struct lfaprsvduint16 { lfapui16_t type; lfapui16_t reserved; lfapui16_t val; } LFAPRsvdUint16; /* * structure representing a 8-bit reserved integer followed * by a 24 bit value. * * WARNING - If change this struct then change next struct too */ typedef struct lfaprsvduint24 { lfapui16_t type; lfapui32_t reserved:8; lfapui32_t val:24; } LFAPRsvdUint24; /* For use with encode decode routines be careful different types cause different aligment. so use the same ones as above */ typedef struct { lfapui16_t type; lfapui32_t reserved_val; } LFAP_encode_decode_RsvdUint24; /* * structure representing a 12-bit reserved integer followed * by a 20 bit value. */ typedef struct lfapmplslabel { lfapui16_t type; lfapui32_t reserved:12; lfapui32_t val:20; } LFAPMplsLabel; /* * structure representing an LDP FEC (rfc 3036) */ typedef struct lfapldpfec { lfapui16_t type; union { lfapui8_t fecType; #define LFAP_LDP_PREFIX_FEC 2 #define LFAP_LDP_HOST_FEC 3 #define LFAP_LDP_VC_FEC 128 struct { lfapui8_t fecType; char *buf; } unknown; struct lfapLdpFECPrefix_s { lfapui32_t fecType:8; lfapui32_t family:16; lfapui32_t len:8; lfapui32_t addr; } prefix; struct lfapLdpFECHost_s { lfapui32_t fecType:8; lfapui32_t family:16; lfapui32_t len:8; lfapui32_t addr[3]; } host; /* From draft-martini-l2circuit-trans-mpls-07.txt */ struct lfapLdpFECVC_s { lfapui32_t fecType:8; lfapui32_t type:16; #define LFAP_LDP_VC_FRAME_RELAY 1 #define LFAP_LDP_VC_ATM_AAL5 2 #define LFAP_LDP_VC_ATM_TRANSPARENT 3 #define LFAP_LDP_VC_ETHERNET_VLAN 4 #define LFAP_LDP_VC_ETHERNET 5 #define LFAP_LDP_VC_HDLC 6 #define LFAP_LDP_VC_PPP 7 #define LFAP_LDP_VC_CEM 8 #define LFAP_LDP_VC_ATM_VCC 9 #define LFAP_LDP_VC_ATM_VPC 10 #define LFAP_MAX_LDP_FEC_TYPE 11 lfapui32_t len:8; lfapui32_t groupID; lfapui32_t VCID; /* Note - Interface parameters are currently ignored */ } vc; }fec; } LFAPLDPFEC; /* * structure representing an Class of Service IE */ typedef struct lfapcos_e { lfapui16_t type; lfapbit32_t RT :2; lfapbit32_t CoS_type :6; /* see types below */ lfapbit32_t val :24; } LFAPClassOfService; typedef enum { LFAP_COS_TYPE_IPV4 = 1, LFAP_COS_TYPE_IPV6 = 2, LFAP_COS_TYPE_MPLS = 3, LFAP_COS_TYPE_VLAN = 4, LFAP_COS_MAX_TYPES = 4, LFAP_COS_TRANSMITTED = 1, LFAP_COS_RECEIVED = 2, LFAP_COS_RT = 2, LFAP_COS_INVALID = 0xFFFFFFFF } CoS_Types_t; /* * structure representing a Flow Identifier Prefix */ typedef struct lfapflowidprefix { lfapui16_t type; lfapui32_t fas_id[2]; } LFAPFlowIDPrefix; /* typedef for representing time stamps */ typedef LFAPUInt32 LFAPTime; /* typedef for representing flow states */ typedef LFAPUInt32 LFAPFlowState; /* typedef for representing failure codes */ typedef LFAPUInt32 LFAPFlowFailure; /* typedef for representing command codes */ typedef LFAPUInt32 LFAPCommand; /* typedef for representing a flow qualifier OID list */ typedef LFAPOctetStr LFAPQualifierOID; /* typedef for representing protocol id */ typedef LFAPOctetStr LFAPProtocolId; /* * structure representing a buffer used for encoding/decoding LFAP messages */ typedef struct lfapbuffer { /* start of the buffer/message */ lfapui8_t *buf; /* cursor used for parsing */ int off; /* end of the message */ int msglen; /* end of the buffer */ int buflen; /* struct for parsing the records of a multiple record IE */ struct { int beg; int off; int end; } mlt; /* struct for parsing the format specifier of a multiple record IE */ struct { int beg; int off; int end; } form; /* reserved for user specific data */ void *opt; /* last error code generated while encoding/decoding this buffer */ int err; } LFAPBuffer; #define SIZEOF_LFAP_BUFFER sizeof(LFAPBuffer) /* * structure representing an arbitrary information element */ typedef union { LFAPAddress addr_ie; LFAPDataCount dataCount_ie; LFAPFlowID fid_ie; LFAPOctetStr octetStr_ie; LFAPQualifierList qual_ie; LFAPUInt32 i32_ie; LFAPUInt16x2 i16_ie; LFAPRsvdUint8 rsvd_ui8; LFAPRsvdUint16 rsvd_ui16; LFAPRsvdUint24 rsvd_ui24; LFAPClassOfService CoS; LFAPMplsLabel mplsLabel; LFAPLDPFEC ldp; /* used when FEC type is known */ LFAPFlowIDPrefix pfx; lfapui16_t type; } LFAPIE; /* * Macros for retrieving items from an LFAPBuffer */ /* macro for retrieving an encoded message from an LFAPBuffer */ #define lfap_buffer_get_msg(lbuf) ((lbuf)->buf) /* macro for retrieving the length of a message encoded in an LFAPBuffer */ #define lfap_buffer_get_msglen(lbuf) ((lbuf)->msglen) /* macro for retrieving the last error code associated with an LFAPBuffer */ #define lfap_buffer_get_error(lbuf) ((lbuf)->err) #ifndef NEEDPROTOS extern int lfap_begin_message(); extern int lfap_end_message(); extern int lfap_begin_multiple(); extern int lfap_end_multiple(); extern int lfap_begin_fixed(); extern int lfap_end_fixed(); extern int lfap_begin_record(); extern int lfap_end_record(); extern int lfap_add_IE(); extern int lfap_decode_msglen(void *buf); extern int lfap_get_header(); extern int lfap_get_IE(LFAPBuffer *lbuf, LFAPIE *ie); extern int lfap_next_record(LFAPBuffer *lbuf); extern int lfap_buffer_init(); extern void lfap_buffer_reset(); extern lfapui8_t* lfap_buffer_extract(); extern lfapui8_t* lfap_buffer_insert(); typedef int (*lfap_buffer_alloc_t)(); typedef void (*lfap_buffer_free_t) (); #else /* NEEDPROTOS */ #include "LfapProto.h" typedef int (*lfap_buffer_alloc_t)(LFAPBuffer *lbuf, int nybte); typedef void (*lfap_buffer_free_t) (LFAPBuffer *lbuf); #endif /* NEEDPROTOS */ /* * User-definable routines for allocating and freeing buffers. */ extern lfap_buffer_alloc_t lfap_buffer_alloc; extern lfap_buffer_free_t lfap_buffer_free; #ifdef __cplusplus } #endif #endif /* LFAP_H_ */