📄 dhcp.h
字号:
#include "../public/public.h"
#define MAXPortNum2 32
#define UDP_SRC_PORT_OFFSET 34
#define PRINTFSNOOP if(dhcp_snoop_debug)printf
#define PRINTFOPTION82 if(dhcp_option82_debug)printf
#define PRINTFDHCP if(dhcp_option82_debug||dhcp_snoop_debug)printf
#define PPPOE_DISCOVERY 0x8863
#define VLAN_8021Q 0x8100
#define MAC_ADDRESS_LENTH 6
#define MIN_PACKET_LENTH 60
#define VLAN_TAG_LENTH 4
#define IP_PROTOCOL 0x0800
#define PROTOCOL_OFFSET 12
#define PPPOE_FIRST_TLV_OFFSET 20
#define PPPOE_HEADER_LENTH_OFFSET 18
#define PPPOE_PORT_INFO_TAG 0x0105
#define PPPOE_PORT_INFO_LENTH 3
#define IP_PROTOCOL_OFFSET 23
#define UDP_PROTOCOL 17
#define UDP_SRC_PORT_OFFSET 34
#define DHCP_DEST_PORT_UDP 67
#define FIRST_DHCP_OPTION_OFFSET 282
#define DHCP_MESSAGE_TYPE_OPTION 53
#define DHCP_82_TYPE_OPTION 82
#define DHCP_TYPE_DISCOVERY 1
#define DHCP_TYPE_OFFER 2
#define DHCP_TYPE_REQUEST 3
#define DHCP_TYPE_DECLINE 4
#define DHCP_TYPE_ACK 5
#define DHCP_TYPE_NAK 6
#define DHCP_TYPE_RELEASE 7
#define DHCP_TYPE_INFORM 8
#define MAX_DHCP_SLOT_BIND_BUF 7000
enum DHCP_MESSAGE_TYPE
{
DHCPDISCOVER = 1,
DHCPOFFER = 2,
DHCPREQUEST = 3,
DHCPDECLINE = 4,
DHCPACK = 5,
DHCPNAK = 6,
DHCPRELEASE = 7,
DHCPINFORM =8,
INVALID_DHCP_MESSAGE_TYPE = 0xff
};
extern int typepacket;
#define BEGIN_PARSE_PORT_LIST(portlist,portno) {short _slotno,_no1,_no2,_i,tmpno; unsigned int _index;char *_cur,*_p,*_p1; char _tmp[20],_tmp1[20],_tmp2[20],_tmp_before_sub[20],cslot,cportsel ; _cur = portlist; while (_cur){bzero(_tmp,20);bzero(_tmp1,20);bzero(_tmp2,20);bzero(_tmp_before_sub,20);_slotno = 0;_no1 = 0;_no2 = 0;_p = strchr(_cur,',');if(_p){strncpy(_tmp,_cur,_p - _cur);_cur = _p + 1;}else{strcpy(_tmp,_cur);_cur = NULL;} _p = strchr(_tmp,'-');if (_p){strncpy(_tmp_before_sub,_tmp,_p - _tmp); _p = _p +1;{_p1 = strchr(_tmp_before_sub,':');if(_p1){strncpy(_tmp1,_tmp_before_sub,_p1 - _tmp_before_sub);_p1 = _p1 + 1;_slotno = atoi(_tmp1);portno = atoi(_p1);cslot=_slotno&0xff;cportsel=portno&0xff;portno=cslot*(MAXPortNum2+1) + cportsel;}else{portno = -1; }_no1 = portno;}{_p1 = strchr(_p,':');if(_p1){strncpy(_tmp2,_p,_p1 - _p);_p1 = _p1 + 1;_slotno = atoi(_tmp2); portno = atoi(_p1);cslot=_slotno&0xff;cportsel=portno&0xff;portno = cslot*(MAXPortNum2+1) + cportsel; }else{portno = -1;}_no2 = portno;}} else{_p1 = strchr(_tmp,':'); if(_p1){strncpy(_tmp1,_tmp,_p1 - _tmp); _p1 = _p1 + 1; _slotno = atoi(_tmp1); portno = atoi(_p1);cslot=_slotno&0xff; cportsel=portno&0xff;portno=cslot*(MAXPortNum2+1) + cportsel;}else {portno = -1;} _no1 = portno;_no2 = portno; }if (_no1 > _no2){ tmpno = _no1; _no1 = _no2; _no2 = tmpno;}if(_no1 == -1||_no2 == -1){_no2 = -1;_no1 = -1;}for(_i = _no1; _i<=_no2; _i++){portno = _i;
#define END_PARSE_PORT_LIST() if(1==_i)_i+=15;} } }
typedef struct
{
short seq;
unsigned int ip;
char mac5;
char mac4;
char mac3;
char mac2;
char mac1;
char mac0;
short vlan;
unsigned short lease_time;
unsigned short lease_age;
unsigned char onu;
int reserve;
}dhcp_binding_item;
/*{eth|trunk} NAS_slot/NAS_subslot/NAS_port:XPI.XCI AccessNodeIdentifier/ANI_rack/ANI_frame/ANI_slot/ANI_subslot/ANI_port [MDU_ID/ONU_Slot/ONU_Subslot/Port_ID][: {atm/eth|trunk}/Port_XPI.Port_XCI] [LN|EP|GP]*/
typedef struct DHCP_OPTION82
{
short XPI; /*如接口类型为eth(或trunk),XPI对应于PVLAN,XPI为0~4095*/
short XCI; /*如接口类型为eth(或trunk),XCI对应于CVLAN,XCI为0~4095*/
char AccessNodeIdentifier[51]; /*接入节点标识(如OLT设备)*/
char ANI_rack; /*接入节点机架号(如支持紧耦合的OLT设备) 0~15*/
char ANI_frame; /*接入节点机框号 0~31*/
char ANI_slot; /*接入节点槽号 0~127*/
}dhcp_option82_gsw;
int dhcp_init(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -