亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dhcp.c

?? 本程序是一個RS232轉網口的。是一個透明傳輸的模塊
?? C
?? 第 1 頁 / 共 2 頁
字號:
*/
void DHCPRequest(void)
{
    if (ModelStatu == MODEL_CONFIG_STATU) {        //配置狀態下不去連接服務器
        return;
	}

    DHCPValueInit();                              //變量及各IP地址初始化

	EA = 0;
	DHCPReg.transactionid = initial_sequence_nr;  //我的交互ID 
	initial_sequence_nr += 64000L;
	EA = 1;

	DebugMsg(60);
    DHCP_Pack(OP_DHCPDISCOVER);        // 封裝發送廣播一個DHCPDISCOVER(DHCP發現)包,目的端口填67,        
	DHCPReg.state = DHCP_SELECT;       //進入SELECT狀態
}


/*
*****************************************************************************************************
*FUNC:   響應碼查詢是不是想要的信息
*NOTE: 
*****************************************************************************************************
*/
//******* DHCP 響應選項中可能包含的信息代碼 *******
#define DHCP_OPCODE_NUM  5
unsigned char code  DHCP_Opcode_Table[DHCP_OPCODE_NUM]=
{
    1,    //0:子網掩碼
    3,    //1:路由IP地址
	51,   //2:租期時間
    6,    //3:DNS服務器的IP,有可能是這樣的:6 08 0 1 2 3 4 5 6 7  //8字節IP為主副DNS IP  
	54    //4:服務器ip,指DHCP服務器
}; 


//******* 對應上面的表 *******
#define OP_CODE_MASKIP    0   //子網掩碼
#define OP_CODE_ROUTERS   1   //路由器IP
#define OP_CODE_USETIME   2   //租期時間
#define OP_CODE_DNS       3   //DNS服務器IP
#define OP_CODE_SEVERIP   4   //服務器IP

bit Find_Opcode_Table(unsigned char op_code,unsigned char *op_type)
{
    unsigned char i;

	for (i=0; i<DHCP_OPCODE_NUM; i++) {
        if (op_code == DHCP_Opcode_Table[i]) {
		    *op_type = i;
            return TRUE;
		}
	}
	return FALSE;
}


/*
*****************************************************************************************************
*FUNC: 解析接收到的 DHCP 偵里的各信息
*NOTE: 
*****************************************************************************************************
*/
#define OPTIONS_IP  255 
bit ParseOptions(unsigned char len,unsigned char type,
                 unsigned char xdata *psource,unsigned char xdata *pdest)
{
    unsigned char i;
    
    if (len != 4) {                                    //IP長度不能超過4
        return FALSE;
	}
	
    for (i=0; i<4; i++) {
        *pdest = *psource++;
		if ((type == OPTIONS_IP) && (*pdest > 255)) {   //IP不能大于255
            return FALSE;
	    }
        pdest++;
	}
    return TRUE;
}


/*
*****************************************************************************************************
*FUNC: 解析接收到的 DHCP 偵
*NOTE: dhcp_len為DHCP包的長度不包含UDP頭的8字節

    #define OP_DHCPDISCOVER  1
    #define OP_DHCPOFFER     2
    #define OP_DHCPREQUEST   3
    #define OP_DHCPDELINE    4
    #define OP_DHCPACK       5
    #define OP_DHCPNACK      6
    #define OP_DHCPRELEASE   7
    #define OP_DHCPINFORM    8
*****************************************************************************************************
*/
void ParseRxdDHCP(union netcard xdata *pRxdnet,unsigned int dhcp_len)
{
    unsigned int  options_len=0;   //選項長度,因其是可變長的
	unsigned int  i;
	unsigned char op_code;         //項目代碼 如53表示是包類型
    unsigned char op_len;          //項目代碼 對應的包長度
	unsigned char op_type;         //項目類型: 3為路由;1:子網掩碼.....
	unsigned char pack_type;       //包類型,8種狀態.

    if (pRxdnet->dhcpframe.op != 2) {                                //1:請求, 2:應答
        return;
	}
    if (pRxdnet->dhcpframe.transactionid != DHCPReg.transactionid) { //不是對應的包
        return;
	}

    for (i=0; i<6; i++) {                                     //16字節前6字節填是客戶硬件地址
        if (pRxdnet->dhcpframe.clientmac[i] != my_ethernet_address.bytes[i]){
		    return;                                           //判斷網卡地址是不是我的
		}
	}
	
	if (dhcp_len < 240) {                                     //236為DHCP封裝包OPTIONS前所有的長度
        return;
	}
	options_len = dhcp_len-240;                               //還要減去4字節的(OK)

    /*  
    //觀察續租返回包
    if ((DHCPReg.state == DHCP_RENEW ) || (DHCPReg.state == DHCP_REBIND))  {
		Uart0Putsl(pRxdnet->dhcpframe.options,options_len);
	}
	*/
                    	
    if (pRxdnet->dhcpframe.options[0] != 53) {                //包類型
        return;
	} else {
	    op_code   = 53;
	    op_len    = pRxdnet->dhcpframe.options[1];
        pack_type = pRxdnet->dhcpframe.options[2];
	}

	if (pack_type > 8) {                                      //DHCP 報文類型只有8種          
        return;
	}

	if ((pack_type == OP_DHCPACK) || (pack_type == OP_DHCPOFFER)) {   //是分配IP的應答包,此時OPTIONS里有想要的IP信息,做解析 
        if (ParseOptions(4,OPTIONS_IP,pRxdnet->dhcpframe.yourip,DHCPReg.myip.bytes) == FALSE) {
            return;
		} 
        for (i=3; i<options_len; ) {                     //i=3是去掉包類型,長度,碼值3字節,
            op_code = pRxdnet->dhcpframe.options[i++];   //碼
			if (op_code == 0xff) {                       //結束符 
                break;
			}
            op_len  = pRxdnet->dhcpframe.options[i++];   //長度
			if (Find_Opcode_Table(op_code,&op_type)) {   //內容,查找是不是我們希望要的碼
                switch (op_type) {                       //得到碼類型
                    case OP_CODE_MASKIP:                 //子網掩碼解析
                         if (ParseOptions(op_len,OPTIONS_IP,&(pRxdnet->dhcpframe.options[i]),DHCPReg.maskip.bytes) == FALSE) {
                             return;
		                 }
					     break;
                    case OP_CODE_ROUTERS:                //路由器IP解析
						 if (ParseOptions(op_len,OPTIONS_IP,&(pRxdnet->dhcpframe.options[i]),DHCPReg.gatewayip.bytes) == FALSE) {
                             return;
		                 }
					     break;
                    case OP_CODE_USETIME:                //租期時間解析
                         if (ParseOptions(op_len,0,&(pRxdnet->dhcpframe.options[i]),DHCPReg.timer100.bytes) == FALSE) {
                             return;
		                 }
					     break;
                    case OP_CODE_DNS:                   //DNS服務器IP解析,如果8字節為主副DNS IP
					     if ((op_len != 8) && (op_len != 4)) {
                             return;
						 }
						 if (op_len == 8) {             //分2次主副
						     op_len = 4;
                             if (ParseOptions(op_len,OPTIONS_IP,&(pRxdnet->dhcpframe.options[i+4]),DHCPReg.dns_s.bytes) == FALSE) {
                                 return;
		                     }
						 }
                         if (ParseOptions(op_len,OPTIONS_IP,&(pRxdnet->dhcpframe.options[i]),DHCPReg.dns_m.bytes) == FALSE) {
                             return;
		                 }
					     break;
					case OP_CODE_SEVERIP:
                         if (ParseOptions(op_len,OPTIONS_IP,&(pRxdnet->dhcpframe.options[i]),DHCPReg.severip.bytes) == FALSE) {
                             return;
		                 } 
					default:
					     break;
				}
			} 
			i+=op_len;                          //跳過內容長度
		}
	}

	switch (DHCPReg.state) {
        case DHCP_INIT:
             DHCP_Pack(OP_DHCPDISCOVER);        // 封裝發送廣播一個DHCPDISCOVER(DHCP發現)包,目的端口填67,        
			 DHCPReg.state = DHCP_SELECT;       //進入SELECT狀態
		     break;
        case DHCP_SELECT:  
		     if (pack_type == OP_DHCPOFFER) {   // 收集來自DHCP服務器的DHCPOFFER,客戶一般是對第一個到達的數據做出響應,
			     DebugMsg(61);
		         DHCP_Pack(OP_DHCPREQUEST);     // 為此客戶給服務器發一個DHCPREQUEST報文,
			     DHCPReg.state = DHCP_REQUEST;  //進入DHCP_REQUEST狀態
			 }
		     break;
        case DHCP_REQUEST:
			 if (pack_type == OP_DHCPACK) {     // 如果收到來自DHCP服務器的DHCPACK,客戶可以使用得到的IP
			     DebugMsg(62);
			     DHCPReg.state = DHCP_BOUND;    // 進入DHCP_BOUND狀態
			     (*DHCPReg.on_bound)();         //調用綁定函數,得到所須要的IP及開啟定時器
                 HintMsg(12,NULL);
			 }
		     break;
        case DHCP_BOUND:      // 內部租用定時器開始計時,等待續租時間到50%,或87%時間到,或100%時間到
		     break;
        case DHCP_RENEW:      // 在50%與87%續租狀態,如果收到來自DHCP服務器的DHCPACK,客戶可以繼續使用得到的IP
        case DHCP_REBIND:
			 if (pack_type == OP_DHCPACK) {     
			     DebugMsg(67);
			     DHCPReg.state = DHCP_BOUND;    // 重進入DHCP_BOUND狀態
			     (*DHCPReg.on_bound)();         //調用綁定函數,得到所須要的IP及開啟定時器
			 } else if (pack_type == OP_DHCPNACK) {    
			     DebugMsg(68);
			     (*DHCPReg.on_release)();       // 如果收到DHCPNACK,服務器不同意,客戶立即進入DHCP_INIT初始狀態
			 }
			                                    // 都不響應,繼續定時,狀態不變,判斷是否到達100%
		     break;
	}
}


/*
*****************************************************************************************************
*FUNC:  DHCP租用定時器計時判斷
*NOTE: 
*****************************************************************************************************
*/
#define REBIND_NUM   3 //發重綁定次數
unsigned char xdata RebindNum=REBIND_NUM;
void DHCPTimer(void)
{
   
    if ((bBound == FALSE) || (DHCPReg.state == DHCP_INIT) || (DHCPMode == FALSE)) {   //初始時沒計時 
        return;
	}

	if (DHCPReg.state == DHCP_REBIND) {       //連續  REBIND_NUM 次沒ACK 重新申請
	    if (RebindNum > 0) {
            RebindNum--; 
	    } else {
	        HintMsg(13,NULL);
            (*DHCPReg.on_release)();         //釋放該IP信息 
			return;
		}
	} else {
        RebindNum = REBIND_NUM;
	}


    if (DHCPReg.timer100.dwords > 0) {
        DHCPReg.timer100.dwords--;
	}
    if (DHCPReg.timer50.dwords > 0) {
        DHCPReg.timer50.dwords--;
	}
    if (DHCPReg.timer87.dwords > 0) {
        DHCPReg.timer87.dwords--;
	}

	if (DHCPReg.timer100.dwords > 0) {
        if ((DHCPReg.timer50.dwords == 0) 
		    && (DHCPReg.state != DHCP_RENEW) 
			&& (DHCPReg.state != DHCP_REBIND)){             //50%續租時間到達
		    DebugMsg(63);
			EA = 0;
	        DHCPReg.transactionid = initial_sequence_nr;    //我的交互ID 
	        initial_sequence_nr += 64000L;
	        EA = 1;
			DHCP_Pack(OP_DHCPREQUEST);   //發送DHCPREQUEST,此時該包報文中包含了一個客戶正在使用的IP,
			DHCPReg.state = DHCP_RENEW;  //后進入 DHCP_RENEW 狀態;
		}

		if (DHCPReg.timer87.dwords == 0) { //如果續租一直沒響應87%時間到
		    DebugMsg(66);
			EA = 0;
	        DHCPReg.transactionid = initial_sequence_nr;   //我的交互ID 
	        initial_sequence_nr += 64000L;
	        EA = 1;
            DHCPReg.state = DHCP_REBIND;                   //切換到重新綁定狀態
			DHCP_Pack(OP_DHCPREQUEST);                     //發包:向服務器廣播DHCPREQUEST報文
		}
	} else {
	    DebugMsg(69);
        (*DHCPReg.on_release)();                           //釋放該IP信息   
	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费aⅴ片在线观看| 国产尤物一区二区在线| 在线观看一区二区视频| 一区二区三区产品免费精品久久75| 国产馆精品极品| 久久久www成人免费毛片麻豆 | 精品卡一卡二卡三卡四在线| 国内精品在线播放| 亚洲精品一卡二卡| 欧美日韩一级黄| 看电影不卡的网站| 欧美极品aⅴ影院| 日本道精品一区二区三区| 亚洲欧美日韩人成在线播放| 国产自产v一区二区三区c| 亚洲精品在线免费观看视频| 粉嫩aⅴ一区二区三区四区五区| 中文字幕av一区二区三区免费看| 91丨porny丨蝌蚪视频| 日韩1区2区日韩1区2区| 亚洲激情图片qvod| 国产亚洲一本大道中文在线| 在线观看免费亚洲| a4yy欧美一区二区三区| 麻豆精品视频在线观看免费| 国产精品久久一级| 久久免费视频一区| 9191国产精品| 欧洲av一区二区嗯嗯嗯啊| 国产一区高清在线| 天天色 色综合| 亚洲一二三区不卡| 国产精品久久久久影院亚瑟| 日韩午夜在线播放| 制服丝袜av成人在线看| 91女神在线视频| www.一区二区| 国产成人自拍网| 精品一区二区在线视频| 另类调教123区| 久久精品国产亚洲aⅴ| 人禽交欧美网站| 美女诱惑一区二区| 国产成人综合网| 亚洲人成精品久久久久| 2024国产精品| 国产精品国产三级国产aⅴ入口| 国产精品免费网站在线观看| 日韩伦理av电影| 美国毛片一区二区三区| 国产suv精品一区二区883| 一本色道久久综合亚洲精品按摩| 波多野结衣中文字幕一区| 色婷婷av一区二区三区软件| 日韩欧美国产综合| 亚洲欧美国产毛片在线| 国产在线精品一区在线观看麻豆| 99久久精品国产一区二区三区| 欧美久久久久久蜜桃| 亚洲欧美日韩国产综合| 色综合av在线| 色偷偷成人一区二区三区91| 国产一区二区女| 国产成人午夜精品影院观看视频| 91小视频在线| 中文字幕 久热精品 视频在线| 亚洲一区二区三区影院| 午夜精品成人在线视频| 99在线视频精品| 久久久美女毛片| 精品亚洲欧美一区| 欧美自拍偷拍一区| 日韩一区中文字幕| 色婷婷亚洲婷婷| 国产精品视频一二| 九色|91porny| 欧美一卡二卡三卡四卡| 三级亚洲高清视频| 91久久人澡人人添人人爽欧美 | 欧美无砖砖区免费| 国产精品国产三级国产普通话99 | 精品久久久久久久人人人人传媒| 亚洲不卡一区二区三区| 欧美亚洲国产一区在线观看网站| 亚洲制服丝袜在线| 欧美一区二区三区四区在线观看| 亚洲成人免费在线| 欧美性xxxxx极品少妇| 日韩理论片网站| 在线综合+亚洲+欧美中文字幕| 亚洲成a天堂v人片| 精品国产乱码久久久久久图片 | 精品一区二区在线视频| 亚洲摸摸操操av| 欧美精品一二三| 青青草精品视频| 国产农村妇女精品| 色老头久久综合| 97精品视频在线观看自产线路二| 亚洲成人一二三| 欧美高清一级片在线观看| 一本大道av一区二区在线播放| 亚洲国产精品久久艾草纯爱| 欧美成人综合网站| 日本韩国欧美一区二区三区| 麻豆91在线看| 日本成人在线电影网| 亚洲人123区| 最新欧美精品一区二区三区| 欧美一区二区三区小说| 91免费小视频| 97久久精品人人做人人爽50路| 看电视剧不卡顿的网站| 亚洲成人中文在线| 国产盗摄一区二区| 亚洲一区二区av在线| 精品国产伦一区二区三区观看方式 | 国产精品私人影院| 精品国产麻豆免费人成网站| 日韩欧美激情一区| 久久免费偷拍视频| 久久精品视频一区| 久久亚区不卡日本| 国产欧美日韩激情| 久久精品日产第一区二区三区高清版| 在线精品视频一区二区三四 | 99久久免费视频.com| 色哟哟国产精品| 日韩美女在线视频| 久久伊人中文字幕| 亚洲欧洲日韩av| 日一区二区三区| 国产一区二区三区观看| 91麻豆蜜桃一区二区三区| 4438亚洲最大| 日韩午夜激情av| 欧美岛国在线观看| 中文字幕亚洲电影| 亚洲成人免费在线| 粉嫩13p一区二区三区| 99re成人精品视频| 精品人在线二区三区| 亚洲小说春色综合另类电影| 成人福利视频在线看| 日本精品视频一区二区| 91黄色激情网站| 久久综合狠狠综合久久综合88| 亚洲欧美视频一区| 国产不卡视频一区二区三区| 亚洲精品在线三区| 看电影不卡的网站| 欧美亚州韩日在线看免费版国语版| 2020国产精品自拍| 欧美aaa在线| 在线视频综合导航| 亚洲国产中文字幕| 欧美美女黄视频| 亚洲欧美色一区| 成人毛片视频在线观看| 日韩欧美一区在线| 亚洲最大色网站| 国产成人在线视频播放| 26uuuu精品一区二区| 蜜臀av在线播放一区二区三区| 欧洲一区二区av| 亚洲国产综合91精品麻豆| 91黄色免费看| 免费人成黄页网站在线一区二区| 欧美一区二区三区日韩| 精品在线一区二区| 中文成人av在线| 91在线免费播放| 一区二区三区国产| 欧美一二三四在线| 激情综合网天天干| 国产精品毛片无遮挡高清| 91丨九色丨黑人外教| 亚洲主播在线播放| 欧美一区二区三区免费视频| 亚洲国产乱码最新视频| 91精品久久久久久久91蜜桃 | 国产精品午夜在线观看| 51久久夜色精品国产麻豆| 久久激情五月激情| 亚洲日本在线观看| 久久中文娱乐网| 777久久久精品| 国产成人综合视频| 偷拍日韩校园综合在线| 国产精品色哟哟| 国产丝袜美腿一区二区三区| 欧美日本一区二区| 99久久国产综合色|国产精品| 天天射综合影视| 日韩激情视频在线观看| 午夜伦欧美伦电影理论片| 亚洲欧美国产77777| 中文字幕第一区第二区| 日韩一区二区中文字幕| 欧美日韩成人综合|