📄 hdr-802_16.h
字号:
/******************************************************************* * WiMAX module * * Copyright (C) 2008 Juliana Freitag Borin, Flavio Kubota and Nelson L. * S. da Fonseca - wimaxgroup@lrc.ic.unicamp.br * * This program is a free result: you can redistribute it and/or modify * it under the terms of the UOL Public License Version 1 or (at your * option) any later version. The license terms are available at * http://bolsapesquisa.uol.com.br/lpu.jhtm. * * This file contains: * -the 802_16 frame formats (i.e., headers) * -the map structure * -the upstream flow table structure * -All global enum and #defines needed by the code * * Revisions: * $A1 :10/2004 : Ack filtering * $A0: 2/17/2005: Added upstream rate control (Viraj ) * $A1: 3/10/05: Fixed support of max_concat_thresh * $A2: Add stat to track avg number IP packets per concat packet * $A3: Fixed jitter calculation * $A4: 9/13/05: (J. Freitag) sgrant_limit and lgrant_limit are not being used in any function of any class! * $A5: 3/15/06: (J. Freitag) included non-real-time service * $A6: 3/31/06: (J. Freitag) included downlink QoS services * $A7: 8/29/06: (J. Freitag) QoS parameters (latency and minimum bandwidth) for scheduling services * $A8: 8/30/06: (J. Freitag) included a new uplink scheduling algorithm * $A9: 9/15/06: (J. Freitag) included incremental bandwidth request * $A10: 11/13/06: (J. Freitag) included aggregate bandwidth request * $A11: 11/22/06: (J. Freitag) replaced u_char mac_param; by u_int16_t mac_param; in 802_16_frame_hdr * in order to permit bw requests greater than 255 slots * $A12: 04/27/07: (J. Freitag) included extended-real-time service * $A13: 08/13/07: (J. Freitag) included the T16 timeout defined in the 802.16 standard. ******************************************************************//*! \file hdr-802_16.h This file contains: \li \c the 802_16 frame formats (i.e., headers) \li \c the map structure \li \c the upstream flow table structure \li \c All global enum and #defines needed by the code */#ifndef ns_hdr_mac802_16_h#define ns_hdr_mac802_16_h #define EPSILON 0.0000000000005/*===============INCLUDE HEADER FILES====================*/#include <arp.h>#include <connector.h>#include <delay.h> #include <ll.h>#include <mac.h>#include "mac-802_16-timers.h"#include <marshall.h> #include <packet.h> #include <queue.h>#include <random.h>/*===============END INCLUDE HEADER FILES====================*//*================ENUM & CONSTANT DEFINITIONS================*/enum SchedType { UGS = 0x0000, RT_POLL = 0x0001, ERT_POLL = 0x0002, //$A12 NRT_POLL = 0x0003, //$A5 BEST_EFFORT = 0x0004 };enum PhsType { SUPRESS_ALL = 0x0000, SUPRESS_TCPIP = 0x0001, SUPRESS_UDPIP = 0x0002, SUPRESS_MAC = 0x0003, NO_SUPRESSION = 0x0004 };enum EventType { PKT_ARRIVAL = 0x0000, MAP_ARRIVAL = 0x0001, SEND_TIMER = 0x0002, REQ_TIMER = 0x0003, SEND_PKT = 0x0004, SEND_UREQ = 0x0006, CONTENTION_ON = 0x0007, CONTENTION_SLOTS = 0x0008, CONTENTION_BKOFF = 0x0009, UNLOCK_QUEUE = 0x00010,//$A0 PIGGYBACK_REQ = 0x00011 };#define UPSTREAM 0 #define DOWNSTREAM 1#define OFF 0#define ON 1#define BROADCAST_SID 1#define DATA_PKT 0 /* Packet passed from IFQ(Upper layers) */#define MGMT_PKT 1 /* Packet generated at 802_16 layer *//* Need to redefine it later */#define SUPRESS_ALL_SIZE 100#define SUPRESS_TCPIP_SIZE 40#define SUPRESS_UDPIP_SIZE 28#define SUPRESS_MAC_SIZE 28#define DATA_GRANT 0#define UREQ_GRANT 1#define CONTENTION_GRANT 2#define SM_GRANT 3#define ETHER_HDR_LEN ((ETHER_ADDR_LEN << 1) + ETHER_TYPE_LEN)#define MAC802_16_HDR_LEN 6#define MAX_NUM_IE 240 /* Max num of IEs in a MAP */#define MAX_GRANT 255 /* Max num of mini-slots that can be assigned per service-flow */#define MAX_RETRY 10#define SIZE_MGMT_HDR 24#define SIZE_MAP_HDR 4#define MANAGEMENT_MSG_PAYLOAD_SIZE 5 /*Size of payload of mgmt msgs */#define NUM_EXTENDED_HDR_ELEMENTS 2 /* Max num of EH elements in EH */#define MAX_NUM_DOWNFLOWS_PERSS 10 /* Max num of downstream flows a SS can create */#define MAX_NUM_UPFLOWS_PERSS 10 /* Max num of upstream flows a SS can create */#define NUM_802_16_LANS 5#define MAX_NUM_SS_NODES 500 /* Max num of SSs in a mac-domain*/#define MAX_NUM_RETRIES 15#define FRAG_ENABLE_BIT 8#define CONCAT_ENABLE_BIT 7#define FRAG_ON_BIT 6#define CONCAT_ON_BIT 5#define PIGGY_ENABLE_BIT 4#define NO_PIGGY_BIT 3#define PIGGY_NOT_SEND 2#define CONCAT_THRESHHOLD 1#define QUEUE_THRESHOLD 25#define UGSSTATES 4#define RTPOLLSTATES 6//$A12#define ERTPOLLSTATES 5//$A5#define NRTPOLLSTATES 7//$A0//#define BEFFORTSTATES 7#define BEFFORTSTATES 8//$A6#define DOWNSTATES 4#define UGS_IDLE 0#define UGS_DECISION 1#define UGS_TOSEND 2#define UGS_WAITFORMAP 3#define RTPOLL_IDLE 0#define RTPOLL_DECISION 1#define RTPOLL_TOSEND 2#define RTPOLL_WAITFORMAP 3#define RTPOLL_TOSENDREQ 4#define RTPOLL_REQSENT 5//$A12#define ERTPOLL_IDLE 0#define ERTPOLL_DECISION 1#define ERTPOLL_TOSEND 2#define ERTPOLL_WAITFORMAP 3#define ERTPOLL_TOSENDREQ 4//$A5#define NRTPOLL_IDLE 0#define NRTPOLL_DECISION 1#define NRTPOLL_TOSEND 2#define NRTPOLL_WAITFORMAP 3#define NRTPOLL_TOSENDREQ 4#define NRTPOLL_REQSENT 5#define NRTPOLL_CONTENTION 6#define BEFFORT_IDLE 0#define BEFFORT_DECISION 1#define BEFFORT_TOSEND 2#define BEFFORT_WAITFORMAP 3#define BEFFORT_TOSENDREQ 4#define BEFFORT_REQSENT 5#define BEFFORT_CONTENTION 6//$A0#define BEFFORT_RATECHECK 7//$A6#define DOWN_IDLE 0#define DOWN_DECISION 1#define DOWN_TOSEND 2#define DOWN_WAITFORMAP 3//$A13#define T16_TIMER 1 //in seconds/*================END ENUM & CONSTANT DEFINITIONS===================== */ /* ================================================================== FRAME STRUCTURE DECLARATIONS. ==================================================================*//*************************************************************************802_16 header format*************************************************************************//*! 802_16 header format */struct mac802_16_frame_hdr { u_char fc_type : 2; u_char fc_parm : 5; u_char ehdr_on : 1; //$A11 //u_char mac_param; u_int16_t mac_param; u_int16_t len;}; /*************************************************************************802_16 Extended header element*************************************************************************//*! 802_16 Extended header element */struct mac802_16_extended_header_element { u_char eh_type : 4; u_char eh_len : 4; u_int16_t eh_data[6];};/*=====================END FRAME STRUCTURE DECLARATIONS==================*//*===============NEW PACKET HEADERS FOR NS============*//************************************************************************* 802_16 packet header*************************************************************************//*! 802_16 packet header */struct hdr_mac802_16 { struct mac802_16_frame_hdr dshdr_; int dt_conv_overhead_; /* Overhead added to 802_16 pkt to account for data convergence layer*/ static int offset_; inline static int& offset() { return offset_; } inline static hdr_mac802_16* access(const Packet * p) { return (hdr_mac802_16*) p->access(offset_); } /* per-field member functions */ struct mac802_16_frame_hdr& dshdr() { return dshdr_; } int& dt_conv_overhead() { return dt_conv_overhead_; }};/*************************************************************************802_16 extended packet header*************************************************************************//*! 802_16 extended packet header */struct hdr_mac802_16extd { struct mac802_16_extended_header_element exthdr_[NUM_EXTENDED_HDR_ELEMENTS]; int num_hdr; /* Num of extended headers on */ static int offset_; inline static int& offset() { return offset_; } inline static hdr_mac802_16extd* access(const Packet * p) { return (hdr_mac802_16extd*) p->access(offset_); } /* per-field member functions */ inline int& num_hdr_() { return num_hdr; } struct mac802_16_extended_header_element* exthdr() { return exthdr_; } };/*************************************************************************802_16 management packet header*************************************************************************//*! 802_16 management packet header */struct hdr_mac802_16mgmt { int dstaddr; int srcaddr; u_char msg_payload_[MANAGEMENT_MSG_PAYLOAD_SIZE]; /* The last field will be used to carry either SYNC or RNG or REG msg */ u_char type; /* To distinguish between MAP & non-MAP messages */ static int offset_; inline static int& offset() { return offset_; } inline static hdr_mac802_16mgmt* access(const Packet * p) { return (hdr_mac802_16mgmt*) p->access(offset_); } /* per-field member functions */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -