⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlv.h

📁 wimax BS simulation code,implemented under linux.
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * 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 + -