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

📄 dhcp.h

📁 dhcp snooping for vxworks
💻 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 + -