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

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

?? netbootp.c

?? 一個tcp/ip協議棧,帶有PPP、IP、TCP、UDP等協議
?? C
字號:
/*****************************************************************************
* netbootp.c - 
*
* portions Copyright (c) 2001 by Cognizant Pty Ltd.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice and the following disclaimer are included verbatim in any 
* distributions. No written agreement, license, or royalty fee is required
* for any of the authorized uses.
*
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
* REVISION HISTORY (please don't use tabs!)
*
*(yyyy-mm-dd)
* 2001-06-01 Robert Dickenson <odin@pnc.com.au>, Cognizant Pty Ltd.
*            Original file.
*
******************************************************************************
*/
#include "netconf.h"
#include "netbuf.h"
#include "netos.h"

#include <stdio.h>
#include "netdebug.h"

#include "net.h" // for struct in_addr
#include "netbootp.h"

#if 0
/*
 * Center for Information Technology Integration
 *           The University of Michigan
 *                    Ann Arbor
 *
 * Dedicated to the public domain.
 * Send questions to info@citi.umich.edu
 *
 * BOOTP is documented in RFC 951 and RFC 1048
 * Delinted, ANSIfied and reformatted - 5/30/91 P. Karn
 */

#include <time.h>
#include "global.h"
#include "mbuf.h"
#include "socket.h"
#include "netuser.h"
#include "udp.h"
#include "iface.h"
#include "ip.h"
#include "internet.h"
#include "domain.h"
#include "rip.h"
#include "cmdparse.h"
#include "bootp.h"

static int bootp_rx(struct iface *ifp,struct mbuf *bp);
static void ntoh_bootp(struct mbuf **bpp,struct bootp *bootpp);
static int mask2width(int32 mask);

#define BOOTP_TIMEOUT   30      /* Time limit for booting       */
#define BOOTP_RETRANS   5       /* The inteval between sendings */

int WantBootp = 0;
static int SilentStartup = 0;

int dobootp(int argc, char *argv[], void *p)
{
    struct iface *ifp = NULL;
    struct socket lsock, fsock;
    struct mbuf *bp;
    struct udp_cb *bootp_cb;
    register uint8 *cp;
    time_t    now,          /* The current time (seconds)   */
              starttime,    /* The start time of sending BOOTP */
              lastsendtime; /* The last time of sending BOOTP  */
    int i;

    if(argc < 2)            /* default to the first interface */
        ifp = Ifaces;
    else {
        for(i = 1; i != argc; ++i){
            
            if((ifp = if_lookup(argv[i])) != NULL) 
                continue;
            else if(strncmp(argv[i], "silent", strlen(argv[i])) == 0)
                SilentStartup = 1;
            else if(strncmp(argv[i], "noisy", strlen(argv[i])) == 0)
                SilentStartup = 0;
            else {
                printf("bootp [net_name] [silent] [noisy]\n");
                return 1;
            }
        }
    }

    if(ifp == NULL)
        return 0;
    
    lsock.address = ifp->addr;
    lsock.port = IPPORT_BOOTPC;

    bootp_cb = open_udp(&lsock,NULL);

    fsock.address = ifp->broadcast;
    fsock.port = IPPORT_BOOTPS;

    /* Get boot starting time */
    time(&starttime);
    lastsendtime = 0;

    /* Send the bootp request packet until a response is received or time
       out */
    for(;;){

        /* Allow bootp packets should be passed through iproute. */
        WantBootp = 1;

        /* Get the current time */
        time(&now);

        /* Stop, if time out */
        if(now - starttime >= BOOTP_TIMEOUT){
            printf("bootp: timed out, values not set\n");
            break;
        }

        /* Don't flood the network, send in intervals */
        if(now - lastsendtime > BOOTP_RETRANS){
            if(!SilentStartup) printf("Requesting...\n");

            /* Allocate BOOTP packet and fill it in */
            if((bp = alloc_mbuf(sizeof(struct bootp))) == NULL)
                break;

            cp = bp->data;      /* names per the RFC: */
            *cp++ = BOOTREQUEST;        /* op */
            *cp++ = ifp->iftype->type;  /* htype */
            *cp++ = ifp->iftype->hwalen;    /* hlen */
            *cp++ = 0;          /* hops */
            cp = put32(cp,(int32) now); /* xid */
            cp = put16(cp, now - starttime);/* secs */
            cp = put16(cp, 0);      /* unused */
            cp = put32(cp, ifp->addr);  /* ciaddr */
            cp = put32(cp, 0L);     /* yiaddr */
            cp = put32(cp, 0L);     /* siaddr */
            cp = put32(cp, 0L);     /* giaddr */
            memcpy(cp, ifp->hwaddr, ifp->iftype->hwalen);
            cp += 16;           /* chaddr */
            memset(cp, 0, 64);      /* sname */
            cp += 64;
            memset(cp, 0, 128);     /* file */
            cp += 128;
            memset(cp, 0, 64);      /* vend */
            cp += 64;
            bp->cnt = cp - bp->data;
            /* assert(bp->cnt == BOOTP_LEN) */

            /* Send out one BOOTP Request packet as a broadcast */
            send_udp(&lsock, &fsock,0,0,&bp,bp->cnt,0,0);

            lastsendtime = now;
        }

        /* Give other tasks a chance to run. */
        kwait(NULL);

        /* Test for and process any replies */
        if(recv_udp(bootp_cb, &fsock, &bp) > -1){
            if(bootp_rx(ifp,bp))
                break;
        } else if(Net_error != WOULDBLK){
            printf("bootp: Net_error %d, no values set\n",
                 Net_error);
            break;
        }
    }

    WantBootp = 0;
    del_udp(bootp_cb);
    return 0;
}

/* Process BOOTP input received from 'interface'. */
static int bootp_rx(struct iface *ifp, struct mbuf *bp)
{
    int         ch;
    int         count;
    int32       gateway = 0;
    int32       nameserver = 0;
    int32       broadcast, netmask;
    struct route    *rp;
    struct bootp    reply;
    uint8       *cp;

    if(len_p(bp) != sizeof(struct bootp)){
        free_p(&bp);
        return 0;
    }
    ntoh_bootp(&bp, &reply);
    free_p(&bp);

    if(reply.op != BOOTREPLY) 
        return 0;

    if(!SilentStartup)
        printf("Network %s configured:\n", ifp->name);

    if(ifp->addr == 0){
        Ip_addr = (int) reply.yiaddr.s_addr;    /* yiaddr */
        ifp->addr =  reply.yiaddr.s_addr;   /* yiaddr */
        if(!SilentStartup)
            printf("     IP address: %s\n",  
        inet_ntoa(ifp->addr));
    }

    /* now process the vendor-specific block, check for cookie first. */
    cp = reply.vend;
    if(get32(cp) != 0x63825363L){
        printf("Invalid magic cookie.\n");
        return(0);
    }

    cp += 4;
    while(((ch = *cp) != BOOTP_END) && (++cp < (reply.vend + 64))) 
        switch(ch){
        case BOOTP_PAD:     /* They're just padding */
            continue;
        case BOOTP_SUBNET:  /* fixed length, 4 octets */
            cp++;       /* moved past length */

            /* Set the netmask */
                /* Remove old entry if it exists */
            netmask = get32(cp);
            cp += 4;

                rp = rt_blookup(ifp->addr & ifp->netmask,mask2width(ifp->netmask));
                if(rp != NULL)
                        rt_drop(rp->target,rp->bits);
                ifp->netmask = netmask;
                rt_add(ifp->addr,mask2width(ifp->netmask),0L,ifp,0L,0L,0);

            if(!SilentStartup)
                printf("     Subnet mask: %s\n", inet_ntoa(netmask));
            
            /* Set the broadcast */
            broadcast = ifp->addr | ~(ifp->netmask);
                rp = rt_blookup(ifp->broadcast,32);
                if(rp != NULL && rp->iface == ifp)
                        rt_drop(ifp->broadcast,32);
                ifp->broadcast = broadcast;
                rt_add(ifp->broadcast,32,0L,ifp,1L,0L,1);
            
            if(!SilentStartup)
                printf("     Broadcast: %s\n", inet_ntoa(broadcast));

            break;
        case BOOTP_HOSTNAME:
            count = (int) *cp;
            cp++;

            if(Hostname != NULL)
                free(Hostname);
            Hostname = mallocw(count);
            strncpy(Hostname, (char *)cp, count);
            cp += count;

            if(!SilentStartup)
                printf("     Hostname: %s\n", Hostname);
            break;
        case BOOTP_DNS:
            count = (int) *cp;
            cp++;

            while(count){
                nameserver = get32(cp);
                add_nameserver(nameserver);
                if(!SilentStartup)
                    printf("     Nameserver: %s\n", inet_ntoa(nameserver));
                cp += 4;
                count -= 4;
            }
            break;
        case BOOTP_GATEWAY:
            count = (int) *cp;
            cp++;

            gateway = get32(cp);

            /* Add the gateway as the default */
            rt_add(0,0,gateway,ifp,1,0,0);

            if(!SilentStartup)
                printf("     Default gateway: %s\n", inet_ntoa(gateway));
            cp += count;
            break;
        default:        /* variable field we don't know about */
            count = (int) *cp;
            cp++;

            cp += count;
            break;
    }

    rt_add(ifp->addr,mask2width(ifp->netmask),0L,ifp,1,0,0);

    return(1);
}


static void ntoh_bootp(struct mbuf **bpp, struct bootp *bootpp)
{
    bootpp->op = pullchar(bpp);             /* op */
    bootpp->htype = pullchar(bpp);          /* htype */
    bootpp->hlen = pullchar(bpp);           /* hlen */
    bootpp->hops = pullchar(bpp);           /* hops */
    bootpp->xid = pull32(bpp);              /* xid */
    bootpp->secs = pull16(bpp);             /* secs */
    bootpp->unused = pull16(bpp);           /* unused */
    bootpp->ciaddr.s_addr = pull32(bpp);    /* ciaddr */
    bootpp->yiaddr.s_addr = pull32(bpp);    /* ciaddr */
    bootpp->siaddr.s_addr = pull32(bpp);    /* siaddr */
    bootpp->giaddr.s_addr = pull32(bpp);    /* giaddr */
    pullup(bpp, bootpp->chaddr, 16);        /* chaddr */
    pullup(bpp, bootpp->sname, 64);         /* sname */
    pullup(bpp, bootpp->file, 128);         /* file name */
    pullup(bpp, bootpp->vend, 64);          /* vendor */
}


int bootp_validPacket(struct ip* ip, struct mbuf* bp)
{
    struct udp udp;
    struct mbuf* bp1;

    /* Must be a udp packet */
    if (ip->protocol !=  UDP_PTCL) 
        return 0;

    /* Invalid if packet is not the right size */
    if (len_p(bp) != (sizeof(struct udp) + sizeof(struct bootp)))
        return 0;

    /* Invalid if not a udp bootp packet */
    dup_p(&bp1,bp,0,len_p(bp));
    ntohudp(&udp, &bp);
    free_p(&bp);

    return (udp.dest == IPPORT_BOOTPC) ? 1 : 0;
}
#endif

/* Given a network mask, return the number of contiguous 1-bits starting
 * from the most significant bit.
 */
static int mask2width(int32 mask)
{
    int width,i;

    width = 0;
    for (i = 31;i >= 0;i--) {
        if(!(mask & (1L << i))) break;
        width++;
    }
    return width;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜亚洲播放| 欧美大片在线观看一区二区| 欧美一二三四区在线| 久久久亚洲高清| 强制捆绑调教一区二区| 99国内精品久久| 久久九九影视网| 美国毛片一区二区| 精品视频一区二区不卡| 综合激情网...| 成人爽a毛片一区二区免费| 欧美一级黄色大片| 五月天激情小说综合| 色偷偷成人一区二区三区91| 欧美国产禁国产网站cc| 国产一区二区福利| 精品卡一卡二卡三卡四在线| 五月天中文字幕一区二区| 欧美午夜不卡视频| 一二三区精品视频| 精品视频免费在线| 亚洲无线码一区二区三区| 色婷婷国产精品综合在线观看| 国产精品不卡视频| 本田岬高潮一区二区三区| 久久久久久久久蜜桃| 久久er99热精品一区二区| 欧美一区二区三级| 蜜臀91精品一区二区三区| 欧美一区二区私人影院日本| 日韩和欧美的一区| 精品日韩一区二区三区免费视频| 轻轻草成人在线| 日韩你懂的在线播放| 激情五月播播久久久精品| 26uuu亚洲综合色欧美| 国产精品一区在线观看乱码| 久久久精品国产99久久精品芒果| 国产麻豆精品theporn| 国产人久久人人人人爽| 成人av动漫网站| 亚洲激情一二三区| 欧美一区二视频| 国产精品一区二区三区99| 国产精品九色蝌蚪自拍| 欧美三级中文字| 裸体在线国模精品偷拍| 国产香蕉久久精品综合网| 成人激情免费网站| 亚洲国产精品人人做人人爽| 日韩免费看的电影| 国产成人激情av| 亚洲在线免费播放| 日韩欧美亚洲另类制服综合在线 | 3atv一区二区三区| 国产麻豆日韩欧美久久| 亚洲精品免费看| 69久久夜色精品国产69蝌蚪网| 精品一区二区三区在线观看| 国产精品毛片久久久久久| 91官网在线免费观看| 蜜桃av一区二区| 中文在线一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲最新视频在线播放| 欧美一级黄色录像| 91影视在线播放| 免费成人av资源网| 亚洲人成影院在线观看| 日韩欧美成人午夜| 欧洲一区二区三区免费视频| 激情欧美一区二区| 一区二区免费看| 国产日韩欧美亚洲| 3d动漫精品啪啪一区二区竹菊| 成人精品gif动图一区| 奇米888四色在线精品| 1024精品合集| 26uuu亚洲综合色欧美| 欧美伊人精品成人久久综合97| 国产一区二区看久久| 五月婷婷色综合| 亚洲精品欧美激情| 欧美国产日韩一二三区| 欧美电视剧在线看免费| 欧美日韩免费观看一区二区三区| 风间由美一区二区三区在线观看 | 国产伦精品一区二区三区免费 | 午夜精品久久久久久久| 中文字幕欧美一| 精品国产人成亚洲区| 欧美日韩久久不卡| 在线一区二区三区四区五区| 国产成人免费xxxxxxxx| 麻豆精品视频在线观看免费| 亚洲图片自拍偷拍| 亚洲视频一区二区免费在线观看| 精品动漫一区二区三区在线观看| 欧美日韩亚洲不卡| 在线观看日韩国产| 91在线观看地址| 91视视频在线观看入口直接观看www | 日韩电影免费在线看| 亚洲va天堂va国产va久| 亚洲色图在线看| 国产精品久久久久三级| 国产人妖乱国产精品人妖| 久久久精品免费免费| 久久久久88色偷偷免费| 久久天天做天天爱综合色| 精品国产网站在线观看| 欧美va亚洲va国产综合| 欧美精品一区二区三区久久久| 日韩欧美国产综合| 精品对白一区国产伦| 久久久综合网站| 国产亚洲婷婷免费| 最新成人av在线| 亚洲另类中文字| 亚洲香肠在线观看| 日韩综合在线视频| 裸体一区二区三区| 国产剧情一区在线| 不卡视频一二三| 色婷婷综合五月| 91精品国产综合久久福利软件 | 欧美一区午夜精品| 26uuu国产一区二区三区| 国产欧美久久久精品影院| 国产精品电影院| 亚洲国产乱码最新视频| 日本不卡一区二区| 国产精品一区二区免费不卡| 成人精品视频网站| 欧美亚洲自拍偷拍| 日韩午夜激情电影| 国产精品欧美综合在线| 一区二区三区91| 狠狠色丁香婷婷综合| eeuss影院一区二区三区| 欧美亚洲综合另类| 久久综合丝袜日本网| 亚洲欧美日韩在线| 另类欧美日韩国产在线| 高清shemale亚洲人妖| 欧美在线免费观看视频| 久久色在线视频| 一区二区三区久久久| 久久99久久精品欧美| 99久久伊人精品| 欧美一区二区三区男人的天堂| 日本一区二区在线不卡| 亚洲国产日韩综合久久精品| 久久国产精品第一页| 日本丰满少妇一区二区三区| 日韩欧美在线不卡| 亚洲欧美日韩人成在线播放| 麻豆一区二区三区| 色天天综合久久久久综合片| 精品入口麻豆88视频| 一区二区成人在线| 国产东北露脸精品视频| 91精品国产丝袜白色高跟鞋| 亚洲精品国产精华液| 国产精品一区免费在线观看| 欧美性一区二区| 国产精品国产三级国产普通话蜜臀| 免费成人在线观看视频| 在线亚洲一区观看| 欧美激情一区二区在线| 美女视频黄 久久| 欧美午夜精品久久久久久超碰| 国产精品美女一区二区三区| 青青草国产精品亚洲专区无| 欧美亚洲禁片免费| 国产精品福利一区二区| 国产精品 日产精品 欧美精品| 日韩亚洲欧美高清| 亚洲成在人线在线播放| 99精品欧美一区| 国产精品天天摸av网| 国产美女精品人人做人人爽| 日韩免费视频一区二区| 日本一不卡视频| 7777精品伊人久久久大香线蕉完整版 | 中文字幕一区二区三区乱码在线| 久久99精品久久久久久动态图| 欧美另类一区二区三区| 夜夜精品浪潮av一区二区三区| 91亚洲精品乱码久久久久久蜜桃| 欧美激情艳妇裸体舞| 国产精品99久久久久久久vr | 国产精品一区二区三区乱码| 日韩精品在线看片z| 蜜桃视频在线一区| 欧美白人最猛性xxxxx69交| 日本不卡的三区四区五区| 欧美一区二区在线视频| 免费成人在线播放| 精品国产一区二区国模嫣然|