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

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

?? autonet.c

?? wince3.0的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
                    //
                    SetDhcpConfig(pDhcp);
    
					pDhcp->IPAddr = IPAddr;
                    TakeNetDown(pDhcp, FALSE, TRUE);  // FALSE == retain IPAddr from the DHCPOFFER

                    RequestDHCPAddr(pDhcp->Name, pDhcp->Nte, pDhcp->NteContext, 
						pDhcp->PhysAddr, ETH_ADDR_LEN);

					CTEFreeLock(&pDhcp->Lock, 0);
					FreeDhcpInfo(pDhcp);

                    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-ProcessAutoIP\n"));
                    return;
                } else {
                    //
                    // No DHCP server on this net, reschedule this timer to keep checking.
                    //
                    StartAutoIPTimer(pDhcp);
                }
            } else {
                DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - DhcpInitSock failed!\n"));
            }
        } else {
            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - SetDHCPNTE failed!\n"));
        }
        CTEFreeLock(&v_GlobalListLock, 0);
        CTEFreeLock(&pDhcp->Lock, 0);

    } else {
		CTEFreeLock(&v_GlobalListLock, 0);
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ProcessAutoIP - FindDhcp failed!\n"));
    }
    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-ProcessAutoIP\n"));
}   // ProcessAutoIP


extern DhcpInfo	*v_pCurrent;

//
// This function is called by the IP component to indicate the status of a gratuitous ARP
// (i.e. "no response" is good. A response usually implies an IP address conflict)
//
void
ARPResult(
    IPAddr IPAddr,
    uint Result
    )
{
    DhcpInfo	*pDhcp;
#ifdef DEBUG
    TCHAR Addr[32];
#endif

    DEBUGMSG(ZONE_AUTOIP, (L"DHCP:+ARPResult\n"));

    CTEGetLock(&v_GlobalListLock, 0);
    if (pDhcp = v_pCurrent) {
        if (pDhcp->IPAddr == IPAddr) {
            pDhcp->ARPResult = Result;
            if (pDhcp->ARPEvent) {
                DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ARPResult - setting event\n"));
                SetEvent(pDhcp->ARPEvent);
            }
        } else {
            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ARPResult - IPAddress %s != Current IPAddress\n", AddrToString(IPAddr, Addr)));
        }
    } else {
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:ARPResult - v_pCurrent == NULL\n"));
    }
    CTEFreeLock(&v_GlobalListLock, 0);
    
    DEBUGMSG(ZONE_AUTOIP, (L"DHCP:-ARPResult\n"));
}   // AutoIP_ARPResult


#define GRAND_HASHING_RETRIES 5 

//================================================================================
//  GrandHashing does all the work.  It updates seed and returns an ip address
//  is in the specified subnet (with required mask) based on the random # and the
//  hardware address.
//================================================================================
uint                            //  Ip address o/p after hashing
GrandHashing(
    IN      uchar * HwAddress,  //  Hardware addres of the card
    IN      uint    HwLen,      //  Hardware length
    IN OUT  uint *  Seed,       //  In: orig value, Out: final value
    IN      uint    Mask,       //  Subnet mask to generate ip addr in
    IN      uint    Subnet      //  Subnet address to generate ip addr in
    )
{
    DWORD   Hash, Shift;
    uint    Result;
    int     cRetries;
    uchar * Addr;
    uint    Len;

    if (*Seed == 0) {
        *Seed = (uint)CeGetRandomSeed();
    }

    for (cRetries = GRAND_HASHING_RETRIES; cRetries; cRetries--) {
        Addr = HwAddress;
        Len = HwLen;
        *Seed = (*Seed)*1103515245 + 12345 ;//  Random # generator as in K&R
        Hash = (*Seed) >> 16 ;
        Hash <<= 16;
        *Seed = (*Seed)*1103515245 + 12345 ;//  Random # generator as in K&R
        Hash += (*Seed) >> 16;
    
        // Now Hash contains the 32 bit Random # we need.
        Shift = Hash % sizeof(uint) ;      //  Decide the # of bytes to shift hw-address
    
        while( Len -- ) {
            Hash += (*Addr++) << (8 * Shift);
            Shift = (Shift + 1 )% sizeof(uint);
        }

        Result = Hash & ~Mask;

        // Check for bcast addresses
        if (Result && (Result != ~Mask)) {
            return Result | Subnet;       //  Now restrict hash to be in required subnet
        }
    }

    // In the highly unlikely case that 5 consecutive hashes yielded bcast addresses,
    // return a non-bcast address
    return (GRAND_HASHING_RETRIES & ~Mask) | Subnet;
}


//
// This function is called when the DHCP client has not received any response from a DHCP server
//
STATUS
AutoIP(
    DhcpInfo *pDhcp
    )
{
    uint i;
    uint Result;
    uint Seed;
    uint HwLen;
    uint AttemptedAddress;
    uint Mask;
    uint Subnet;
    uchar * HwAddress;
    uint SaveIPAddr;
    uint AutoInterval;
#ifdef DEBUG
    TCHAR Addr[32];
#endif

    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:+AutoIP\n"));

    pDhcp->SFlags &= ~DHCPSTATE_AUTO_CFG_IP;    // IPAddr not autoconfigured.

    // If there is no DHCP server out there and we have a valid IPAddr, ping the default
    // gateway to make sure we are still on the same subnet.
    if (CouldPingGateway(pDhcp)) {
        DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-AutoIP - Still on DHCP server subnet\n"));
        return DHCP_SUCCESS;
    }

    Mask      = pDhcp->AutoMask;
    Subnet    = pDhcp->AutoSubnet;
    HwAddress = pDhcp->PhysAddr;
    HwLen     = sizeof(pDhcp->PhysAddr);
    Seed      = pDhcp->AutoSeed;
    SaveIPAddr = pDhcp->IPAddr;
    Result = ERROR_GEN_FAILURE;

    //
    // Tell tcpstk we are doing DHCP + AutoCfg
    //
    if (!(*pfnSetDHCPNTE)(pDhcp->NteContext, NULL, NULL, &Seed)) {
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:AutoIP - SetDHCPNTE failed!\n"));
        goto ai_exit;
    }

    if (pDhcp->AutoIPAddr) {
        //
        // Use our previously autoconfigured IP address
        //
        AttemptedAddress = pDhcp->AutoIPAddr;
    } else {
        AttemptedAddress = GrandHashing( HwAddress, HwLen, &Seed, Mask, Subnet );
    }

    i = DHCP_IPAUTOCONFIGURATION_ATTEMPTS;

    do {
        if (pDhcp->SFlags & DHCPSTATE_SAW_DHCP_SRV) {
            //
            // If we ever see a DHCP server on our net, then abort IP autoconfiguration immediately
            //
            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:AutoIP:DHCP server on net. Aborting autoconfig\n"));
            goto ai_exit;
        }

        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:AutoIP:Trying autoconfig address: %s\n", AddrToString(AttemptedAddress, Addr)));

        if ((AttemptedAddress & DHCP_RESERVED_AUTOCFG_MASK) == DHCP_RESERVED_AUTOCFG_SUBNET) {
            // address is in reserved range, dont use it..
            goto ai_next;
        } 

        pDhcp->ARPResult = ERROR_SUCCESS;
        pDhcp->IPAddr = AttemptedAddress;
        ResetEvent(pDhcp->ARPEvent);

        //
        // Among other things, setting the NTE addr causes ARP to probe for existence of this IP addr.
        // Just wait a few seconds to see if it is a dup.
        //
        if ((*pfnIPSetNTEAddr)((ushort)pDhcp->NteContext, NULL, pDhcp->IPAddr, Mask, 0)) {
            WaitForSingleObject(pDhcp->ARPEvent, ARP_RESPONSE_WAIT);
            if (ERROR_SUCCESS == pDhcp->ARPResult) {
                AutoInterval = pDhcp->AutoInterval; // Remember interval
                pDhcp->AutoInterval = 2;            // Send an additional DHCP discover right away.
                pDhcp->AutoIPAddr   = AttemptedAddress;
                pDhcp->AutoSeed     = Seed;    
                pDhcp->SubnetMask   = Mask;
                pDhcp->SFlags |= DHCPSTATE_AUTO_CFG_IP;     // IPAddr is autoconfigured.
                StartAutoIPTimer(pDhcp);
                pDhcp->AutoInterval = AutoInterval; // Restore interval
                CallAfd(AddInterface)(pDhcp->Name, pDhcp->Nte, 
                	pDhcp->NteContext, 0, pDhcp->IPAddr, 
                    pDhcp->SubnetMask, 0, pDhcp->DNS, 0, pDhcp->WinsServer); 
                NotifyXxxChange(g_hAddrChangeEvent);
                Result = DHCP_SUCCESS;
                break;
            } else {
                //
                // Tell IP to stop using the address and mark this NTE for another try
                //
                (*pfnIPSetNTEAddr)((ushort)pDhcp->NteContext, NULL, 0, 0, 0);
                (*pfnSetDHCPNTE)(pDhcp->NteContext, NULL, NULL, &Seed);
            }
        } else {
            DEBUGMSG(ZONE_AUTOIP, (L"DHCP:AutoIP - IPSetNTEAddr failed!\n"));
            goto ai_exit;
        }
        
ai_next:
        AttemptedAddress = GrandHashing( HwAddress, HwLen, &Seed, Mask, Subnet );
        i --;

    } while (i);

    if (0 == i) {                      //  Tried everything and still could not match
        (*pfnIPSetNTEAddr)((ushort)pDhcp->NteContext, NULL, 0, 0, 0);
        DEBUGMSG(ZONE_AUTOIP, (L"DHCP:AutoIP - Gave up autoconfiguration\n"));
    }

ai_exit:
    if (Result) {
        pDhcp->IPAddr = SaveIPAddr;
    }
    ClearDHCPNTE(pDhcp);
    DEBUGMSG(ZONE_FUNCTION|ZONE_AUTOIP, (L"DHCP:-AutoIP %d\n", Result));
    return Result;
}   // AutoIP



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区二区三区视频在线| 最新久久zyz资源站| 欧美日韩一区二区欧美激情| 91在线高清观看| 色狠狠av一区二区三区| 色婷婷久久综合| 色老综合老女人久久久| 欧美性猛交xxxx乱大交退制版| 色美美综合视频| 欧美三级在线播放| 日韩欧美国产成人一区二区| 欧美成人女星排行榜| 精品少妇一区二区三区在线播放| 欧美久久久久久久久中文字幕| 欧美午夜在线一二页| 在线免费观看日本一区| 欧美日韩情趣电影| 777午夜精品视频在线播放| 日韩精品专区在线影院观看 | 香蕉成人啪国产精品视频综合网| 亚洲国产日韩综合久久精品| 久久综合综合久久综合| 国产一区中文字幕| 日本精品一区二区三区四区的功能| 欧美精品一区二区三| 91视频国产观看| 欧美日韩精品一区二区三区蜜桃| 日韩女同互慰一区二区| 日本一区二区在线不卡| 夜夜爽夜夜爽精品视频| 久久99久久精品欧美| 性感美女久久精品| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品伦一区二区三级视频| 又紧又大又爽精品一区二区| 男男视频亚洲欧美| 99视频精品免费视频| 日韩女优毛片在线| 亚洲国产一二三| 国产成人av一区| 欧美日韩国产综合视频在线观看 | 国产91在线看| 欧美一区二区三区四区高清| 中文字幕欧美日韩一区| 蜜臀va亚洲va欧美va天堂| 99久久精品免费精品国产| 日韩亚洲国产中文字幕欧美| 中文字幕一区二区5566日韩| 蜜桃av噜噜一区| 欧美日韩一区二区在线观看视频 | 精品国产百合女同互慰| 亚洲国产欧美一区二区三区丁香婷 | 欧美精品一区男女天堂| 亚洲一区二区精品3399| 成人免费黄色在线| 精品国产成人在线影院| 青青草原综合久久大伊人精品优势| 91免费看片在线观看| 国产午夜精品一区二区三区视频| 日本最新不卡在线| 欧美久久久影院| 亚洲一区免费在线观看| 色吊一区二区三区| 亚洲欧洲在线观看av| 99国产一区二区三精品乱码| 国产日韩欧美精品综合| 久久精品国产久精国产爱| 欧美理论在线播放| 亚洲自拍另类综合| 日本福利一区二区| 亚洲国产精品一区二区久久恐怖片| 国产精华液一区二区三区| 精品国产一区二区三区四区四 | 欧美哺乳videos| 免费人成在线不卡| 欧美xxx久久| 精品一区二区国语对白| 久久一夜天堂av一区二区三区| 亚洲bt欧美bt精品| 欧美二区乱c少妇| 看片的网站亚洲| 欧美不卡在线视频| 国产精品资源在线观看| 欧美激情在线看| 99久久综合狠狠综合久久| 亚洲免费观看视频| 欧美日韩在线播| 美女视频网站久久| 久久在线免费观看| 成人午夜视频网站| 国产精品久久久久一区二区三区| 99这里只有精品| 亚洲乱码中文字幕| 欧美男生操女生| 久久国内精品视频| 久久奇米777| 成人小视频在线| 综合久久一区二区三区| 欧美三日本三级三级在线播放| 日本人妖一区二区| 久久久久久久久99精品| 91性感美女视频| 日韩黄色小视频| 久久久久久久久97黄色工厂| 99re热这里只有精品视频| 天天综合天天综合色| 国产婷婷一区二区| 精品婷婷伊人一区三区三| 久久99精品久久久久| 亚洲欧美偷拍卡通变态| 日韩三级精品电影久久久 | 欧美亚州韩日在线看免费版国语版| 蜜臀av一区二区在线观看| 国产精品美女久久久久久久久| 97成人超碰视| 久草中文综合在线| 亚洲综合免费观看高清完整版| 欧美日韩一本到| 亚洲一区二区成人在线观看| 日韩精品一区二区三区视频 | 91视频www| 国产一区二区三区精品视频| 亚洲图片自拍偷拍| 国产午夜精品美女毛片视频| 色伊人久久综合中文字幕| 久久精品国产在热久久| 中文字幕欧美一| 日韩一区二区三区精品视频| 欧洲人成人精品| 国产激情一区二区三区| 久久精品久久精品| 丝袜脚交一区二区| 亚洲亚洲人成综合网络| 亚洲视频一区在线| 国产精品色哟哟网站| www激情久久| 欧美成人一区二区三区在线观看| 欧美男男青年gay1069videost| 91在线视频在线| 丰满放荡岳乱妇91ww| 国产精品一区二区在线观看网站| 美腿丝袜亚洲三区| 久久精品噜噜噜成人88aⅴ| 亚洲成人黄色小说| 亚洲mv在线观看| 亚洲欧洲国产专区| 国产精品久久夜| 国产精品国产三级国产aⅴ中文| 久久青草欧美一区二区三区| 91精品在线麻豆| 欧美三级三级三级| 91福利社在线观看| 成人自拍视频在线| 国产精品1024久久| 国产盗摄一区二区| 成人污视频在线观看| 国产成人在线视频播放| 久久99精品久久久| 久久成人麻豆午夜电影| 免费成人你懂的| 久久国产日韩欧美精品| 激情欧美一区二区| 国产一区二区精品在线观看| 麻豆精品一二三| 理论片日本一区| 国产精品一级二级三级| 成人福利视频在线看| 99久久久久久| 欧美日韩在线播放三区| 日韩一卡二卡三卡国产欧美| 精品日本一线二线三线不卡| 91精品国产色综合久久| 国产精品不卡在线观看| 亚洲综合视频在线观看| 日本美女一区二区| 日韩av在线发布| 国产传媒一区在线| 欧美自拍丝袜亚洲| 精品国产亚洲在线| 中文字幕欧美三区| 亚洲国产欧美在线| 国产做a爰片久久毛片| av日韩在线网站| 日韩色在线观看| 国产精品国产三级国产普通话99 | 欧美日韩一本到| 精品久久久久久久久久久久久久久 | 91搞黄在线观看| 日韩精品中文字幕在线一区| 国产婷婷色一区二区三区在线| 一区二区三区四区激情| 国产在线麻豆精品观看| 国产成人福利片| 欧美久久久久中文字幕| 国产视频一区在线观看| 五月天精品一区二区三区| 成人av在线观| 欧美一区二区三区成人| 亚洲色欲色欲www| 国产一区二区三区观看|