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

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

?? msripv6.c

?? Vitual Ring Routing 管你知不知道
?? C
字號:
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// (c) Microsoft Corporation. All rights reserved. 
//
// This file is part of the Microsoft Virtual Ring Routing distribution.
// You should have received a copy of the Microsoft Research Shared Source
// license agreement (MSR-SSLA) for this software; see the file "license.txt".
// If not, please see http://research.microsoft.com/vrr/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//

//
// This file contains snips of msripv6 code being substituted for missing
// items from Windows DDK build environment.
//
#include "headers.h"

uint RandomValue;

//* Random - Generate a psuedo random value between 1 and 2^32.
//
//  This routine is a quick and dirty psuedo random number generator.
//  It has the advantages of being fast and consuming very little
//  memory (for either code or data).  The random numbers it produces are
//  not of the best quality, however.  A much better generator could be
//  had if we were willing to use an extra 256 bytes of memory for data.
//
//  This routine uses the linear congruential method (see Knuth, Vol II),
//  with specific values for the multiplier and constant taken from
//  Numerical Recipes in C Second Edition by Press, et. al.
//
uint  // Returns: A random value between 1 and 2^32.
Random(void)
{
    //
    // The algorithm is R = (aR + c) mod m, where R is the random number,
    // a is a magic multiplier, c is a constant, and the modulus m is the
    // maximum number of elements in the period.  We chose our m to be 2^32
    // in order to get the mod operation for free.
    // BUGBUG: What about concurrent calls?
    //
    RandomValue = (1664525 * RandomValue) + 1013904223;

    return RandomValue;
}

//* SeedRandom - Provide a seed value.
//
//  Called to provide a seed value for the random number generator.
//
void
SeedRandom(uint Seed)
{
    int i;

    //
    // Incorporate the seed into our random value.
    //
    RandomValue ^= Seed;

    //
    // Stir the bits.
    //
    for (i = 0; i < 100; i++)
        (void) Random();
}

//* RandomNumber
//
//  Returns a number randomly selected from a range.
//
uint
RandomNumber(uint Min, uint Max)
{
    uint Number;

    //
    // Note that the high bits of Random() are much more random
    // than the low bits.
    //
    Number = Max - Min; // Spread.
    Number = (uint)(((ULONGLONG)Random() * Number) >> 32); // Randomize spread.
    Number += Min;

    return Number;
}

//* ChecksumPacket - Calculate the Internet checksum of a packet.
//
//  Taken from msripv6\tcpip6\ip6\subr.c
//
//  Calculates the checksum of packet data. The data may be supplied
//  either with the Packet/Offset arguments, or (if Packet is NULL)
//  the Data argument. In either case, Length specifies how much
//  data to checksum.
//
//  The Packet is assumed to contain (at least) Offset + Length bytes.
//
//  Also calculates and adds-in the pseudo-header checksum,
//  using IP->Source, IP->Dest, Length, and NextHeader.
//  (With options, we may have IP->NextHeader != NextHeader.)
//
ushort
ChecksumPacket(
    PNDIS_PACKET Packet,  // Packet with data to checksum.
    uint Offset,          // Offset into packet where data starts.
    uchar *Data,          // If Packet is NULL, data to checksum.
    uint Length,          // Length of packet data.
    IPv6Addr *Source,     // Source address.
    IPv6Addr *Dest,       // Destination address.
    uchar NextHeader)     // Protocol type for pseudo-header.
{
    PNDIS_BUFFER Buffer = NULL;
    uint Checksum;
    uint PayloadLength;
    uint Size;
    uint TotalSummed;

    //
    // Start with the pseudo-header.
    //
    Checksum = Cksum((unsigned char *)Source, sizeof *Source) + Cksum((unsigned char *)Dest, sizeof *Dest);
    PayloadLength = RtlUlongByteSwap(Length);
    Checksum += (PayloadLength >> 16) + (PayloadLength & 0xffff);
    Checksum += (NextHeader << 8);

    if (Packet == NULL) {
        //
        // We do not have to initialize Buffer.
        // The checksum loop below will exit before trying to use it.
        //
        Size = Length;
        Data += Offset;
    } else {
        //
        // Skip over Offset bytes in the packet.
        //

        Buffer = NdisFirstBuffer(Packet);
        for (;;) {
            Size = NdisBufferLength(Buffer);

            //
            // There is a boundary case here: the Packet contains
            // exactly Offset bytes total, and Length is zero.
            // Checking Offset <= Size instead of Offset < Size
            // makes this work.
            //
            if (Offset <= Size) {
                //Data = NdisBufferVirtualAddressSafe(Buffer, LowPagePriority);
                Data = NdisBufferVirtualAddress(Buffer);
                if (Data == NULL)
                    return 0;

                Data += Offset;
                Size -= Offset;
                break;
            }

            Offset -= Size;
            NdisGetNextBuffer(Buffer, &Buffer);
            ASSERT(Buffer != NULL); // Caller ensures this.
        }
    }
    for (TotalSummed = 0;;) {
        ushort Temp;

        //
        // Size might be bigger than we need,
        // if there is "extra" data in the packet.
        //
        if (Size > Length)
            Size = Length;

        Temp = Cksum(Data, Size);
        if (TotalSummed & 1) {
            // We're at an odd offset into the logical buffer,
            // so we need to swap the bytes that Cksum returns.
            Checksum += (Temp >> 8) + ((Temp & 0xff) << 8);
        } else {
            Checksum += Temp;
        }
        TotalSummed += Size;

        Length -= Size;
        if (Length == 0)
            break;
        // Buffer is always initialized if we reach here.
        // So the next clause is redundant, but keeps PreFast happy.
        if (Buffer == NULL)
            break;
        NdisGetNextBuffer(Buffer, &Buffer);
        NdisQueryBufferSafe(Buffer, &Data, &Size, LowPagePriority);
        if (Data == NULL)
            return 0;
    }

    //
    // Wrap in the carries to reduce Checksum to 16 bits.
    // (Twice is sufficient because it can only overflow once.)
    //
    Checksum = (Checksum >> 16) + (Checksum & 0xffff);
    Checksum += (Checksum >> 16);

    //
    // Take ones-complement and replace 0 with 0xffff.
    //
    Checksum = (ushort) ~Checksum;
    if (Checksum == 0)
        Checksum = 0xffff;

    return (ushort) Checksum;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一二三四久久| 成人av电影免费观看| 国产欧美日韩精品一区| 色婷婷亚洲婷婷| 国产精品18久久久久| 偷拍自拍另类欧美| 亚洲欧美经典视频| 国产精品卡一卡二卡三| 成人精品视频网站| 在线中文字幕不卡| |精品福利一区二区三区| 欧美一级二级在线观看| 欧美日韩精品综合在线| 色悠悠久久综合| 色综合视频在线观看| 99久精品国产| 成人精品免费视频| 99r国产精品| 99精品欧美一区二区三区综合在线| 国产一区视频网站| 青娱乐精品在线视频| 日本va欧美va精品发布| 日韩高清国产一区在线| 蜜臀av性久久久久蜜臀aⅴ | 国产精品妹子av| 日本伊人色综合网| 精品一区二区三区不卡| 欧美激情艳妇裸体舞| 国产亚洲精品久| 久久久精品国产免大香伊 | 亚洲特黄一级片| 亚洲欧美一区二区三区久本道91| 亚洲欧洲日韩av| 亚洲精品中文在线观看| 伊人婷婷欧美激情| 亚洲国产aⅴ成人精品无吗| 日韩国产高清影视| 国产剧情一区在线| 色综合天天综合网天天看片| 欧美中文字幕不卡| 717成人午夜免费福利电影| 在线亚洲+欧美+日本专区| 欧美日韩精品系列| 精品嫩草影院久久| 91丨九色丨国产丨porny| 久久国产精品99精品国产| 激情综合五月婷婷| 成人禁用看黄a在线| 欧洲在线/亚洲| 精品久久久网站| 欧美人动与zoxxxx乱| 欧美一区午夜视频在线观看 | 国产精品色哟哟| 一区二区久久久久久| 裸体在线国模精品偷拍| 成人av先锋影音| 在线不卡免费欧美| 中文无字幕一区二区三区 | 国产.欧美.日韩| 狠狠色狠狠色合久久伊人| 欧美在线免费播放| 视频一区二区中文字幕| 国产一区二区三区久久久 | 精品国产亚洲在线| 国产无遮挡一区二区三区毛片日本| 久久免费视频一区| 亚洲v日本v欧美v久久精品| 成人免费毛片a| 日韩午夜激情电影| 亚洲美女区一区| 国产精品99精品久久免费| 欧美日本一区二区三区四区| 国产精品国模大尺度视频| 奇米一区二区三区| 91黄色激情网站| 欧美精品一区二| 一区二区三区国产精品| 成人污视频在线观看| 国产精品一区一区三区| 91在线国产福利| 亚洲免费观看高清| 国产乱人伦精品一区二区在线观看 | 国产一区二区不卡老阿姨| 欧美中文字幕一区| 亚洲男人的天堂一区二区| 国产精品亚洲人在线观看| 欧美一区二区三区日韩视频| 亚洲线精品一区二区三区| 99热国产精品| 亚洲视频免费在线观看| av成人动漫在线观看| 中文字幕第一区综合| 麻豆国产精品视频| 欧美另类高清zo欧美| 亚洲一区在线看| 欧美日韩国产经典色站一区二区三区| 国产精品国产三级国产aⅴ入口| 欧美韩国日本一区| 久久综合九色欧美综合狠狠| 日韩女优毛片在线| 蜜臂av日日欢夜夜爽一区| 欧美一级黄色大片| 日本中文字幕不卡| 欧美色爱综合网| 久久综合五月天婷婷伊人| 狠狠狠色丁香婷婷综合激情| 久久亚洲二区三区| 成人三级伦理片| 亚洲精品综合在线| 99国产精品视频免费观看| 一区二区三区在线观看网站| 欧美日本在线播放| 国产一区二区三区免费观看| 2019国产精品| 国产美女主播视频一区| 国产精品美女久久福利网站| 色噜噜狠狠成人网p站| 日韩激情在线观看| 精品捆绑美女sm三区| 日韩一区二区三区四区| 亚洲欧美怡红院| 精品奇米国产一区二区三区| 国产乱色国产精品免费视频| 国产精品久久三| 欧美三级韩国三级日本一级| 国内不卡的二区三区中文字幕| 亚洲国产成人一区二区三区| 欧美色综合网站| 国产乱码精品一品二品| 一区二区三区免费网站| 日韩欧美一级二级| 99国产精品国产精品毛片| 日韩中文字幕av电影| 国产欧美日韩在线看| 欧美日韩在线观看一区二区 | 国产亚洲欧美中文| 在线观看日韩av先锋影音电影院| 日本在线播放一区二区三区| 国产女人水真多18毛片18精品视频| 国产原创一区二区三区| 亚洲在线成人精品| 久久久久久久久久久久久女国产乱| 日本精品裸体写真集在线观看 | 91色porny在线视频| 狠狠色综合日日| 成人免费视频在线观看| 在线视频一区二区三| 岛国精品在线观看| 蜜桃视频在线观看一区| 夜夜亚洲天天久久| 欧美激情在线观看视频免费| 久久精品人人爽人人爽| 国产日韩欧美亚洲| 亚洲国产精品国自产拍av| 中文一区二区完整视频在线观看 | av一二三不卡影片| 成人精品免费网站| 972aa.com艺术欧美| 色综合中文字幕| 日本韩国一区二区三区视频| 91行情网站电视在线观看高清版| 一本到不卡精品视频在线观看| 一本色道久久综合亚洲91| 日本韩国精品一区二区在线观看| 91蜜桃视频在线| 欧美午夜精品理论片a级按摩| 在线观看亚洲精品视频| 91精品婷婷国产综合久久| 欧美高清视频一二三区 | 欧美剧在线免费观看网站 | 777亚洲妇女| 精品国产一区二区三区av性色| 日韩欧美国产午夜精品| 国产亚洲欧美激情| 亚洲欧洲av在线| 午夜视频久久久久久| 久色婷婷小香蕉久久| 成人免费观看av| 欧美日韩国产系列| 2024国产精品| 亚洲欧洲成人av每日更新| 亚洲成人av在线电影| 日韩和的一区二区| 国产精品毛片a∨一区二区三区| 欧美日韩一区在线观看| 午夜在线成人av| 欧美日韩大陆在线| 国产自产高清不卡| 亚洲地区一二三色| 麻豆91在线播放| 一本久久综合亚洲鲁鲁五月天| 欧美精品在欧美一区二区少妇| 成人不卡免费av| 经典三级视频一区| 欧美日韩一区二区三区在线看| 中文字幕一区二区三区蜜月 | av激情亚洲男人天堂| 国产精品少妇自拍| av一区二区三区| 国产精品日韩成人|