📄 tlv.h
字号:
/* * This piece of code is totally free. If any pitfalls found, * please feel free to contact me at jetmotor@21cn.com * THANKS A LOT! */#ifndef TLV_H_#define TLV_H_#include "types.h"#include "util.h"#include "mac.h"/* * generic macroes */#define PACK_TLV_U8(buf, t, v) do {PACK_UINT8((buf), (t)); PACK_UINT8((buf), 1); PACK_UINT8((buf), (v));} while (0)#define PACK_TLV_U16(buf, t, v) do {PACK_UINT8((buf), (t)); PACK_UINT8((buf), 2); PACK_UINT16((buf), (v));} while (0)#define PACK_TLV_U24(buf, t, v) do {PACK_UINT8((buf), (t)); PACK_UINT8((buf), 3); PACK_UINT24((buf), (v));} while (0)#define PACK_TLV_U32(buf, t, v) do {PACK_UINT8((buf), (t)); PACK_UINT8((buf), 4); PACK_UINT24((buf), (v));} while (0)#define PACK_TLV_BYTES_L0(buf, t, p, n) do {\ PACK_UINT8((buf), (t));\ PACK_UINT8((buf), (n));\ PACK_BYTES((buf), (p), (n));\ } while (0) /* n <= 127 */#define PACK_TLV_BYTES_L1(buf, t, p, n) do {\ PACK_UINT8((buf), (t));\ PACK_UINT8((buf), 0x81);\ PACK_UINT8((buf), (n));\ PACK_BYTES((buf), (p), (n));\ } /* 127 < n <= 255 */static inline UINT32 UNPACK_TLV_LEN(UINT8** buf){ UINT32 n; UINT8* p = *buf; if ((n = *p++) <= 127) {} else if (n == 0x81) n = UNPACK_UINT8(p); else if (n == 0x82) n = UNPACK_UINT16(p); else if (n == 0x83) n = UNPACK_UINT24(p); else if (n == 0x84) n = UNPACK_UINT32(p); *buf = p; return n;} /* * common encodings */#define PACK_COMMON_143(buf, p) do {} while (0) /* vendor specific information */#define PACK_COMMON_144(buf, v) do {PACK_TLV_U24((buf), 144, (v));} while (0) /* vendor ID encoding */#define PACK_COMMON_145_TYPE(buf) do {PACK_UINT8((buf), 145);} while (0) /* uplink service flow */#define PACK_COMMON_146_TYPE(buf) do {PACK_UINT8((buf), 146);} while (0) /* downlink service flow */#define PACK_COMMON_147(buf, v) do {PACK_TLV_U8((buf), 147, (v));} while (0) /* current transmit power */#define PACK_COMMON_148(buf, v) do {PACK_TLV_U8((buf), 148, (v));} while (0) /* mac version encoding */#define PACK_COMMON_149(buf, p) do {PACK_TLV_BYTES_L0((buf), 149, (p), 21);} while (0) /* HMAC tuple */#define PACK_COMMON_150(buf, p) do {} while (0) /* CMAC tuple */#define PACK_COMMON_151(buf, p) do {} while (0) /* short CMAC tuple *//* * service flow */#define PACK_SF_1(buf, v) do {PACK_TLV_U32((buf), 1, (v));} while (0) /* SFID */#define PACK_SF_2(buf, v) do {PACK_TLV_U16((buf), 2, (v));} while (0) /* CID */#define PACK_SF_3(buf, p, n) do {PACK_TLV_BYTES_L0((buf), 3, (p), (n));} while (0) /* service class name */#define PACK_SF_4(buf, v) do {PACK_TLV_U8((buf), 4, (v));} while (0) /* MBS service */#define PACK_SF_5(buf, v) do {PACK_TLV_U8((buf), 5, (v));} while (0) /* qos parameter set type */#define PACK_SF_6(buf, v) do {PACK_TLV_U8((buf), 6, (v));} while (0) /* traffic priority */#define PACK_SF_7(buf, v) do {PACK_TLV_U32((buf), 7, (v));} while (0) /* maximum sustained traffic rate */#define PACK_SF_8(buf, v) do {PACK_TLV_U32((buf), 8, (v));} while (0) /* maximum traffic burst */#define PACK_SF_9(buf, v) do {PACK_TLV_U32((buf), 9, (v));} while (0) /* minimum reserved traffic rate */#define PACK_SF_10(buf, v) do {PACK_TLV_U32((buf), 10, (v));} while (0) /* minimum tolerable traffic rate */#define PACK_SF_11(buf, v) do {PACK_TLV_U8((buf), 11, (v));} while (0) /* uplink grant scheduling type */#define PACK_SF_12(buf, v) do {PACK_TLV_U8((buf), 12, (v));} while (0) /* request/transmission policy */#define PACK_SF_13(buf, v) do {PACK_TLV_U32((buf), 13, (v));} while (0) /* tolerated jitter */#define PACK_SF_14(buf, v) do {PACK_TLV_U32((buf), 14, (v));} while (0) /* maximum latency */#define PACK_SF_15(buf, v) do {PACK_TLV_U8((buf), 15, (v));} while (0) /* fixed-length versus variable-length SDU indicator */#define PACK_SF_16(buf, v) do {PACK_TLV_U8((buf), 16, (v));} while (0) /* SDU size */#define PACK_SF_17(buf, v) do {PACK_TLV_U8((buf), 17, (v));} while (0) /* target SAID */#define PACK_SF_26(buf, p) do {} while (0) /* ARQ TLVs for ARQ-enabled connections */#define PACK_SF_28(buf, p) do {} while (0) /* CS specific service flow encodings */#define PACK_SF_29(buf, v) do {PACK_TLV_U8((buf), 29, (v));} while (0) /* type of data delivery services */#define PACK_SF_30(buf, v) do {PACK_TLV_U16((buf), 30, (v));} while (0) /* SDU inter-arrival interval */#define PACK_SF_31(buf, v) do {PACK_TLV_U16((buf), 31, (v));} while (0) /* time base */#define PACK_SF_32(buf, v) do {PACK_TLV_U8((buf), 32, (v));} while (0) /* paging preference */#define PACK_SF_33(buf, p) do {PACK_TLV_BYTES_L0((buf), 33, (p), 8);} while (0) /* MBS zone identifier assignment */#define PACK_SF_34(buf, v) do {PACK_TLV_U8((buf), 34, (v));} while (0) /* traffic indication preference */#define PACK_SF_35(buf, p) do {PACK_TLV_BYTES_L0((buf), 35, (p), 6);} while (0) /* global service class name */#define PACK_SF_37(buf, v) do {PACK_TLV_U8((buf), 37, (v));} while (0) /* sn feedback enabled */#define PACK_SF_39(buf, p) do {} while (0) /* CID allocation for active BSs */#define PACK_SF_40(buf, v) do {PACK_TLV_U16((buf), 40, (v));} while (0) /* unsolicited grant interval */#define PACK_SF_41(buf, v) do {PACK_TLV_U16((buf), 41, (v));} while (0) /* unsolicited polling interval *//* weird: 11.13.36 PDU SN extended subheader for HARQ reordering use [145/146].42 as well */#define PACK_SF_42(buf, v) do {PACK_TLV_U8((buf), 42, (v));} while (0) /* FSN size */#define PACK_SF_43(buf, p) do {} while (0) /* MBS contents IDs */#define PACK_SF_44(buf, v) do {PACK_TLV_U8((buf), 44, (v));} while (0) /* harq service flows */#define PACK_SF_45(buf, p) do {} while (0) /* authorization token */#define PACK_SF_46(buf, p) do {} while (0) /* harq channel mapping */#define PACK_SF_143(buf, p) do {} while (0) /* vendor specific qos parameters *//* * register request & response */#define PACK_REG_1(buf, v) do {} while (0) /* ARQ parameters */#define PACK_REG_2(buf, v) do {PACK_TLV_U8((buf), 2, (v));} while (0) /* ss management support */#define PACK_REG_3(buf, v) do {PACK_TLV_U8((buf), 3, (v));} while (0) /* ip management mode */#define PACK_REG_4(buf, v) do {PACK_TLV_U8((buf), 4, (v));} while (0) /* ip version */#define PACK_REG_5(buf, v) do {PACK_TLV_U16((buf), 5, (v));} while (0) /* secondary management CID */#define PACK_REG_6(buf, v) do {PACK_TLV_U16((buf), 6, (v));} while (0) /* number of uplink transport CIDs supported */#define PACK_REG_7(buf, v) do {\ if (v & 0xffff0000) PACK_TLV_U32((buf), 7, (v));\ else PACK_TLV_U16((buf), 7, (v));\ } while (0) /* classification/phs options and SDU encapsulation support */#define PACK_REG_8(buf, v) do {PACK_TLV_U16((buf), 8, (v));} while (0) /* maximum number of classifiers */#define PACK_REG_9(buf, v) do {PACK_TLV_U8((buf), 9, (v));} while (0) /* phs support */#define PACK_REG_10(buf, v) do {PACK_TLV_U8((buf), 10, (v));} while (0) /* arq support */#define PACK_REG_11(buf, v) do {PACK_TLV_U8((buf), 11, (v));} while (0) /* DSx flow control */#define PACK_REG_13(buf, v) do {PACK_TLV_U8((buf), 13, (v));} while (0) /* mca flow control */#define PACK_REG_14(buf, v) do {PACK_TLV_U8((buf), 14, (v));} while (0) /* multicast polling group cid support */#define PACK_REG_15(buf, v) do {PACK_TLV_U16((buf), 15, (v));} while (0) /* number of downlink transport CIDs supported */#define PACK_REG_18(buf, v) do {PACK_TLV_BYTES_L0((buf), 18, (p), 6);} while (0) /* ss mac address */#define PACK_REG_20(buf, p1, p2) do {\ UINT8* l;\ PACK_UINT8((buf), 20);\ l = buf;\ if (p1) PACK_TLV_U16((buf), 1, *(p1));\ if (p2) PACK_TLV_U16((buf), 2, *(p2));\ *l = (buf) - (l + 1);\ } while (0) /* maximum mac data per frame support */#define PACK_REG_21(buf, v) do {PACK_TLV_U8((buf), 21, (v));} while (0) /* packing support */#define PACK_REG_22(buf, v) do {PACK_TLV_U8((buf), 22, (v));} while (0) /* mac extended rtPS support */#define PACK_REG_23(buf, v) do {PACK_TLV_U8((buf), 23, (v));} while (0) /* maximum number of bursts transmitted concurrently to the MS */#define PACK_REG_24(buf, p1, p2)\ do {\ UINT8* l;\ PACK_UINT8((buf), 24);\ l = buf;\ if (p1) PACK_TLV_U16((buf), 1, *(p1));\ if (p2) PACK_TLV_U24((buf), 2, *(p2));\ *l = (buf) - (l + 1);\ } while (0) /* CID update encodings */#define PACK_REG_25(buf, v) do {} while (0) /* compressed CID update encodings */#define PACK_REG_26(buf, v) do {PACK_TLV_U8((buf), 26, (v));} while (0) /* method for allocating IP address for the secondary management connection */#define PACK_REG_27(buf, v) do {PACK_TLV_U8((buf), 27, (v));} while (0) /* handover supported */#define PACK_REG_28(buf, v) do {PACK_TLV_U8((buf), 28, (v));} while (0) /* system resource retain time */#define PACK_REG_29(buf, v) do {PACK_TLV_U8((buf), 29, (v));} while (0) /* HO process optimization ms timer */#define PACK_REG_30(buf, v) do {PACK_TLV_U8((buf), 30, (v));} while (0) /* ms handover retransmission timer */#define PACK_REG_31(buf, v) do {PACK_TLV_U8((buf), 31, (v));} while (0) /* mobility features supported */#define PACK_REG_32(buf, v) do {PACK_TLV_U8((buf), 32, (v));} while (0) /* sleep mode recovery time */#define PACK_REG_33(buf, v) do {} while (0) /* ms prev ip addr */#define PACK_REG_34(buf, v) do {PACK_TLV_U8((buf), 34, (v));} while (0) /* skip addr acquisition */#define PACK_REG_35(buf, p1, p2) do {\ UINT8* l;\ PACK_UINT8((buf), 35);\ l = buf;\ if (p1) PACK_TLV_U16((buf), 1, *(p1));\ if (p2) PACK_TLV_U16((buf), 2, *(p2));\ *l = (buf) - (l + 1);\ } while (0) /* SAID update */#define PACK_REG_36(buf, v) do {PACK_TLV_U8((buf), 36, (v));} while (0) /* total number of provisioned service flow */#define PACK_REG_37(buf, v) do {PACK_TLV_U16((buf), 37, (v));} while (0) /* idle mode timeout */#define PACK_REG_38(buf, v) do {} while (0) /* SA TEK update */#define PACK_REG_39(buf, v) do {} while (0) /* GKEK parameters */#define PACK_REG_40(buf, v) do {PACK_TLV_U8((buf), 40, (v));} while (0) /* ARQ-ACK type */#define PACK_REG_41(buf, v) do {PACK_TLV_U8((buf), 41, (v));} while (0) /* MS HO connections parameters processing time */#define PACK_REG_42(buf, v) do {PACK_TLV_U8((buf), 42, (v));} while (0) /* MS HO TEK processing time */#define PACK_REG_43(buf, v) do {PACK_TLV_U24((buf), 43, (v));} while (0) /* mac header and extended subheader support */#define PACK_REG_44(buf, v) do {PACK_TLV_U8((buf), 44, (v));} while (0) /* sn reporting base */#define PACK_REG_45(buf, v) do {PACK_TLV_U8((buf), 45, (v));} while (0) /* paging interval length */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -