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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dhcp.c

?? 基于tcp/ip的一個(gè)以太網(wǎng)編程的例子程序
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*********************************************************************
 *
 *                  DHCP Module for Microchip TCP/IP Stack
 *
 *********************************************************************
 * FileName:        DHCP.c
 * Dependencies:    StackTsk.h
 *                  UDP.h
 * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F
 * Complier:        Microchip C18 v3.02 or higher
 *					Microchip C30 v2.01 or higher
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * This software is owned by Microchip Technology Inc. ("Microchip") 
 * and is supplied to you for use exclusively as described in the 
 * associated software agreement.  This software is protected by 
 * software and other intellectual property laws.  Any use in 
 * violation of the software license may subject the user to criminal 
 * sanctions as well as civil liability.  Copyright 2006 Microchip
 * Technology Inc.  All rights reserved.
 *
 * This software is provided "AS IS."  MICROCHIP DISCLAIMS ALL 
 * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED 
 * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND 
 * INFRINGEMENT.  Microchip shall in no event be liable for special, 
 * incidental, or consequential damages.
 *
 *
 * Author               Date    Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Nilesh Rajbharti     3/21/01  Original        (Rev 1.0)
 * Nilesh Rajbharti     7/10/02  Explicitly initialized tempIPAddress
 *                                               (Rev 2.11)
 * Nilesh Rajbharti     5/16/03 Increased DHCP_TIMEOUT to 2 seconds.
 * Nilesh Rajbharti     5/16/03 Fixed SM_DHCP_BROADCAST logic
 *                              where UDPPut was called before setting
 *                              active socket.
 * Robert Sloan         5/29/03 Improved DHCP State machine to handle
 *                              NAK and renew existing IP address.
 * Nilesh Rajbharti     8/15/03 Modified _DHCPRecieve() to check for
 *                              chaddr field before accpting the packet.
 *                              Fixed DHCPTask() where it would not
 *                              reply to first OFFER.
 * Nilesh Rajbharti     3/1/04  Used tickDiff in DHCPTask() "bind"
 *                              state to adjust for irregular TICK_SECOND
 *                              Without this logic, actual lease time count
 *                              down may be incorrect.
 * Howard Schlunder		5/11/06	Fixed tickDiff usage, reducing 
 *								accumulated timing error.  Fixed DHCP 
 *								state machine requesting IP 0.0.0.0 
 *								after lease expiration.
 * Howard Schlunder		6/01/06	Added DHCPState.bits.bOfferReceived flag to 
 *								allow operation on networks with multiple
 *								DHCP servers offering multiple addresses
 * Howard Schlunder		8/01/06 Added DNS server option to DHCP request, 
 *								untested Host Name option to DHCP request
 ********************************************************************/
#define THIS_IS_DHCP

#include "..\Include\StackTsk.h"

#if defined(STACK_USE_DHCP)

#include "..\Include\DHCP.h"
#include "..\Include\UDP.h"
#include "..\Include\Tick.h"


#if defined(STACK_USE_SLIP)
    #error DHCP module is not available when SLIP is used.
#endif


#define DHCP_TIMEOUT                    (TICK)(2L * TICK_SECOND)


#define DHCP_CLIENT_PORT                (68u)
#define DHCP_SERVER_PORT                (67u)

#define BOOT_REQUEST                    (1u)
#define BOOT_REPLY                      (2u)
#define HW_TYPE                         (1u)
#define LEN_OF_HW_TYPE                  (6u)

#define DHCP_MESSAGE_TYPE               (53u)
#define DHCP_MESSAGE_TYPE_LEN           (1u)

#define DHCP_UNKNOWN_MESSAGE            (0u)

#define DHCP_DISCOVER_MESSAGE           (1u)
#define DHCP_OFFER_MESSAGE              (2u)
#define DHCP_REQUEST_MESSAGE            (3u)
#define DHCP_DECLINE_MESSAGE            (4u)
#define DHCP_ACK_MESSAGE                (5u)
#define DHCP_NAK_MESSAGE                (6u)
#define DHCP_RELEASE_MESSAGE            (7u)

#define DHCP_SERVER_IDENTIFIER          (54u)
#define DHCP_SERVER_IDENTIFIER_LEN      (4u)

#define DHCP_PARAM_REQUEST_LIST         (55u)
#define DHCP_PARAM_REQUEST_LIST_LEN     (4u)
#define DHCP_PARAM_REQUEST_IP_ADDRESS       (50u)
#define DHCP_PARAM_REQUEST_IP_ADDRESS_LEN   (4u)
#define DHCP_SUBNET_MASK                (1u)
#define DHCP_ROUTER                     (3u)
#define DHCP_DNS						(6u)
#define DHCP_HOST_NAME					(12u)
#define DHCP_IP_LEASE_TIME              (51u)
#define DHCP_END_OPTION                 (255u)

#define HALF_HOUR                       (WORD)((WORD)60 * (WORD)30)

SM_DHCP  smDHCPState = SM_DHCP_INIT_FIRST_TIME;
static UDP_SOCKET DHCPSocket = INVALID_UDP_SOCKET;


DHCP_STATE DHCPState = { 0x00 };

static DWORD_VAL DHCPServerID;
static DWORD_VAL DHCPLeaseTime;

static IP_ADDR tempIPAddress;
static IP_ADDR tempGateway;
static IP_ADDR tempMask;
#if defined(STACK_USE_DNS)
static IP_ADDR tempDNS;
#endif
//static BYTE tempHostName[16];

static union
{
	struct
	{
		char IPAddress:1;
		char Gateway:1;
		char Mask:1;
		char DNS:1;
		char HostName:1;
	} bits;
	BYTE Val;
} ValidValues;

static BYTE _DHCPReceive(void);
static void _DHCPSend(BYTE messageType);

BYTE DHCPBindCount = 0;

// Uncomment following line if DHCP transactions are to be displayed on
// RS-232 - for debug purpose only.
//#define DHCP_DEBUG_MODE

#if defined(DHCP_DEBUG_MODE)
static USARTPut(BYTE c)
{
    while( !TXSTA_TRMT);
    TXREG = c;
}
#else

#define USARTPut(a)

#endif


void DHCPReset(void)
{
    // Do not reset DHCP if it was previously disabled.
    if ( smDHCPState == SM_DHCP_DISABLED )
        return;

    if ( DHCPSocket != INVALID_UDP_SOCKET )
        UDPClose(DHCPSocket);
    DHCPSocket = INVALID_UDP_SOCKET;

    smDHCPState = SM_DHCP_INIT_FIRST_TIME;
    DHCPBindCount = 0;

    DHCPState.bits.bIsBound = FALSE;
}

/*********************************************************************
 * Function:        void DHCPTask(void)
 *
 * PreCondition:    DHCPInit() is already called AND
 *                  IPGetHeader() is called with
 *                  IPFrameType == IP_PROT_UDP
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Fetches pending UDP packet from MAC receive buffer
 *                  and dispatches it appropriate UDP socket.
 *                  If not UDP socket is matched, UDP packet is
 *                  silently discarded.
 *
 * Note:            Caller must make sure that MAC receive buffer
 *                  access pointer is set to begining of UDP packet.
 *                  Required steps before calling this function is:
 *
 *                  If ( MACIsRxReady() )
 *                  {
 *                      MACGetHeader()
 *                      If MACFrameType == IP
 *                          IPGetHeader()
 *                          if ( IPFrameType == IP_PROT_UDP )
 *                              Call DHCPTask()
 *                  ...
 ********************************************************************/
void DHCPTask(void)
{
    NODE_INFO DHCPServerNode;
    static TICK lastTryTick;
    BYTE DHCPRecvReturnValue;
    TICK tickDiff;

    switch(smDHCPState)
    {
	case SM_DHCP_INIT_FIRST_TIME:
        tempIPAddress.Val = 0x0;
//        smDHCPState = SM_DHCP_INIT;			// State automatically changes
        /* No break */

    case SM_DHCP_INIT:
        DHCPServerNode.MACAddr.v[0] = 0xff;
        DHCPServerNode.MACAddr.v[1] = 0xff;
        DHCPServerNode.MACAddr.v[2] = 0xff;
        DHCPServerNode.MACAddr.v[3] = 0xff;
        DHCPServerNode.MACAddr.v[4] = 0xff;
        DHCPServerNode.MACAddr.v[5] = 0xff;
        DHCPServerNode.IPAddr.Val = 0xffffffff;
        DHCPSocket = UDPOpen(DHCP_CLIENT_PORT,
                             &DHCPServerNode,
                             DHCP_SERVER_PORT);
        lastTryTick = TickGet();
        smDHCPState = SM_DHCP_RESET_WAIT;
        /* No break */

    case SM_DHCP_RESET_WAIT:
        if ( TickGetDiff(TickGet(), lastTryTick) >= (TICK_SECOND/(TICK)5) )
            smDHCPState = SM_DHCP_BROADCAST;
        break;

    case SM_DHCP_BROADCAST:
	    // Assume default IP Lease time of 60 seconds.
	    // This should be minimum possible to make sure that if
	    // server did not specify lease time, we try again after this minimum time.
	    DHCPLeaseTime.Val = 60;

        // If we have already obtained some IP address, renew it.
        if(DHCPState.bits.bIsBound)
        {
            smDHCPState = SM_DHCP_REQUEST;
        }
        else if ( UDPIsPutReady(DHCPSocket) )
        {
            // To minimize code requirement, user must make sure that
            // above call will be successful by making at least one
            // UDP socket available.
            // Usually this will be the case, given that DHCP will be
            // the first one to use UDP socket.
            // Also, we will not check for transmitter readiness,
            // we assume it to be ready.
            _DHCPSend(DHCP_DISCOVER_MESSAGE);
			ValidValues.Val = 0x00;

            // DEBUG
            USARTPut('\n');
            USARTPut('\r');
            USARTPut('D');

            lastTryTick = TickGet();
            smDHCPState = SM_DHCP_DISCOVER;
        }

        break;


    case SM_DHCP_DISCOVER:
        if ( TickGetDiff(TickGet(), lastTryTick) >= DHCP_TIMEOUT )
        {
            smDHCPState = SM_DHCP_BROADCAST;
            //return;
        }

        if ( UDPIsGetReady(DHCPSocket) )
        {
            // DEBUG
            USARTPut('R');

            if ( _DHCPReceive() == DHCP_OFFER_MESSAGE )
            {
                // DEBUG
                USARTPut('O');

                smDHCPState = SM_DHCP_REQUEST;
            }
            else
                break;
        }
        else
            break;



    case SM_DHCP_REQUEST:
        if ( UDPIsPutReady(DHCPSocket) )
        {
            _DHCPSend(DHCP_REQUEST_MESSAGE);

            lastTryTick = TickGet();
            smDHCPState = SM_DHCP_BIND;
        }
        break;

    case SM_DHCP_BIND:
        if ( UDPIsGetReady(DHCPSocket) )
        {
            DHCPRecvReturnValue = _DHCPReceive();
            if ( DHCPRecvReturnValue == DHCP_NAK_MESSAGE )
            {
               	// (RSS) NAK recieved.  DHCP server didn't like our DHCP Request (format wrong/IP address allocated to someone else/outside IP pool)
				USARTPut('n');
				DHCPReset();						// Start all over again
				return;
            }
            else if ( DHCPRecvReturnValue == DHCP_ACK_MESSAGE )
            {
                // DEBUG
                USARTPut('B');

                // Once DCHP is successful, release the UDP socket
                // This will ensure that UDP layer discards any further DHCP related packets.
                UDPClose(DHCPSocket);
                DHCPSocket = INVALID_UDP_SOCKET;

                lastTryTick = TickGet();
                smDHCPState = SM_DHCP_BOUND;

				if(ValidValues.bits.IPAddress)
	                AppConfig.MyIPAddr = tempIPAddress;
				if(ValidValues.bits.Mask)
					AppConfig.MyMask = tempMask;
				if(ValidValues.bits.Gateway)
					AppConfig.MyGateway = tempGateway;
#if defined(STACK_USE_DNS)
				if(ValidValues.bits.DNS)
					AppConfig.PrimaryDNSServer = tempDNS;
#endif
//				if(ValidValues.bits.HostName)
//					memcpy(AppConfig.NetBIOSName, (void*)tempHostName, sizeof(AppConfig.NetBIOSName));

                DHCPState.bits.bIsBound = TRUE;

                DHCPBindCount++;

                return;
            }
        }
        else if ( TickGetDiff(TickGet(), lastTryTick) >= DHCP_TIMEOUT )
        {
            USARTPut('t');
            smDHCPState = SM_DHCP_BROADCAST;
        }
        break;

    case SM_DHCP_BOUND:
        // Keep track of how long we use this IP configuration.
        // When lease period expires, renew the configuration.
        tickDiff = TickGetDiff(TickGet(), lastTryTick);

        if(tickDiff >= TICK_SECOND)
        {
			do 
			{
	            DHCPLeaseTime.Val--;
				tickDiff -= TICK_SECOND;
	            if(DHCPLeaseTime.Val == 0u)
	            	smDHCPState = SM_DHCP_INIT;
			} while(tickDiff >= TICK_SECOND);
            lastTryTick = TickGet() - tickDiff;
        }
    }
}



/*********************************************************************
        DHCP PACKET FORMAT AS PER RFC 1541

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     op (1)    |   htype (1)   |   hlen (1)    |   hops (1)    |
   +---------------+---------------+---------------+---------------+
   |                            xid (4)                            |
   +-------------------------------+-------------------------------+
   |           secs (2)            |           flags (2)           |
   +-------------------------------+-------------------------------+
   |                          ciaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          yiaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          siaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          giaddr  (4)                          |
   +---------------------------------------------------------------+
   |                                                               |
   |                          chaddr  (16)                         |
   |                                                               |
   |                                                               |
   +---------------------------------------------------------------+

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费视频一区二区| 久久99这里只有精品| 粉嫩av亚洲一区二区图片| 国产亚洲成aⅴ人片在线观看| 国产剧情av麻豆香蕉精品| 国产精品亲子乱子伦xxxx裸| 91蜜桃视频在线| 日韩成人一区二区| 国产喂奶挤奶一区二区三区| 欧美精品一区视频| 91视频91自| 一本色道久久综合狠狠躁的推荐| 日本免费新一区视频| 亚洲成av人影院在线观看网| 久久久精品免费网站| 欧美日韩精品专区| 国产成人啪午夜精品网站男同| 午夜精品爽啪视频| 国产精品美女久久久久久久久| 国产精品丝袜黑色高跟| 日韩一区在线看| 欧美一区二区不卡视频| 97精品久久久午夜一区二区三区| 麻豆国产欧美一区二区三区| 亚洲国产日韩a在线播放| 中文字幕成人av| 国产亚洲一区二区三区在线观看| 国产欧美一区二区精品性 | 91麻豆精品久久久久蜜臀| 大白屁股一区二区视频| 麻豆精品久久精品色综合| 国产一区二区三区电影在线观看 | 懂色av噜噜一区二区三区av| 成人动漫在线一区| 久久成人麻豆午夜电影| 国产成人精品影视| 欧美性大战久久久| 色综合久久久久久久久久久| 欧美欧美欧美欧美首页| 久久久久久9999| 一区二区三区中文字幕| 日本一区二区三级电影在线观看| 1024亚洲合集| 免费在线视频一区| 日韩精品一级中文字幕精品视频免费观看 | 欧美一区二区三区四区高清| 久久综合久久鬼色中文字| 日韩欧美成人一区二区| 欧美老肥妇做.爰bbww视频| 欧美综合一区二区三区| 精品国产免费久久| 亚洲欧美电影院| 亚洲高清不卡在线| 国产精品资源在线观看| 欧美性色黄大片| 久久亚洲精华国产精华液 | 午夜精品影院在线观看| 国产成人免费视频网站| 欧美一区二区三区小说| 国产精品免费av| 久久av老司机精品网站导航| 91福利小视频| 在线观看精品一区| 国产亚洲va综合人人澡精品 | 国产在线精品不卡| 色婷婷久久久久swag精品| 欧美精品一区二区三区很污很色的 | 成人av电影在线网| 欧美第一区第二区| 一区二区免费看| 成人理论电影网| 欧美大胆一级视频| 亚洲mv在线观看| 91网站视频在线观看| 久久久.com| 久久av资源网| 欧美一区二区三区四区视频| 亚洲小说春色综合另类电影| 99在线精品一区二区三区| 色一情一乱一乱一91av| 国产亚洲一二三区| 激情综合网最新| 99综合影院在线| 欧美激情在线免费观看| 久久精品理论片| 91精品在线一区二区| 亚洲韩国精品一区| 91成人在线免费观看| 国产精品视频一二三| 国产精品一品视频| 欧美精品一区二区在线播放 | 91免费观看视频| 国产精品国产三级国产专播品爱网| 亚洲精品写真福利| 美洲天堂一区二卡三卡四卡视频| 欧洲日韩一区二区三区| 一区二区三区在线不卡| 色综合亚洲欧洲| 精品区一区二区| 亚洲美女视频在线观看| 99国产精品视频免费观看| 欧美精彩视频一区二区三区| 国产1区2区3区精品美女| 国产亚洲精品aa午夜观看| 国产风韵犹存在线视精品| 国产欧美日韩另类视频免费观看| 国产一区久久久| 国产女同性恋一区二区| 成人av在线一区二区| 国产精品理伦片| 91免费观看视频| 亚洲午夜电影网| 制服丝袜中文字幕亚洲| 日本欧洲一区二区| 日韩精品一区二| 国产精品影音先锋| 国产精品久99| 色综合久久中文字幕综合网| 亚洲最新在线观看| 91.xcao| 国产在线精品一区二区不卡了| 久久一夜天堂av一区二区三区| 国产福利精品一区二区| 亚洲欧洲99久久| 欧亚洲嫩模精品一区三区| 石原莉奈在线亚洲三区| 精品国产一区二区亚洲人成毛片 | 91网址在线看| 日韩经典中文字幕一区| 日韩女优制服丝袜电影| 国产精品2024| 亚洲美女电影在线| 在线不卡中文字幕播放| 韩国精品一区二区| 日韩欧美国产不卡| 国产99一区视频免费| 自拍偷自拍亚洲精品播放| 国产精品99久久久| 亚洲精品欧美在线| 欧美一区二区三区日韩视频| 国产激情精品久久久第一区二区| 欧美激情一区二区三区在线| 欧洲一区二区av| 精品一区二区三区久久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人aa视频在线观看| 亚洲一区免费观看| 91久久精品网| 麻豆91免费观看| 亚洲欧洲av在线| 日韩免费视频一区| 91在线国内视频| 美女国产一区二区| 亚洲婷婷综合久久一本伊一区| 在线不卡一区二区| 99精品在线观看视频| 青青草国产成人av片免费| 一区在线中文字幕| 精品久久久久久综合日本欧美| 91久久精品一区二区三| 国产精品2024| 免费人成在线不卡| 夜夜揉揉日日人人青青一国产精品| 欧美精品一区二区三区久久久 | 国产精品国产三级国产有无不卡| 欧美久久久久久久久久| 粉嫩欧美一区二区三区高清影视 | 97精品国产97久久久久久久久久久久| 免费视频最近日韩| 亚洲午夜在线视频| 国产精品三级av在线播放| 欧美一区二区视频在线观看| 91伊人久久大香线蕉| 国产一区二区三区在线观看精品 | 午夜久久久久久久久| 亚洲人成精品久久久久久| 精品国产乱码久久久久久闺蜜| 色婷婷久久久久swag精品 | 久久视频一区二区| 91精品国产乱| 欧美亚洲国产一区二区三区| thepron国产精品| 国产揄拍国内精品对白| 日韩成人免费电影| 一区二区三区成人在线视频| 国产精品久久福利| 欧美国产综合色视频| 精品99999| 日韩免费观看高清完整版 | 国产拍欧美日韩视频二区| 日韩欧美在线综合网| 大美女一区二区三区| 久久国产成人午夜av影院| 日韩av一二三| 日韩中文欧美在线| 日韩一区欧美二区| 香蕉成人伊视频在线观看| 一区二区三区在线视频观看58| **网站欧美大片在线观看| 国产精品久久久久一区二区三区共|