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

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

?? bootp.c

?? TCPIP協議包
?? C
字號:
/*
 * Center for Information Technology Integration
 */


#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(argc,argv,p)
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(ifp,bp)
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(bpp, bootpp)
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;
}

/* Given a network mask, return the number of contiguous 1-bits starting
 * from the most significant bit.
 */
static int
mask2width(mask)
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一区二区三区免费野_久草精品视频
精品成人佐山爱一区二区| 欧美日韩成人综合在线一区二区| 日韩精品每日更新| 亚洲不卡av一区二区三区| 亚洲一区在线观看免费 | 国产午夜精品一区二区三区四区| 欧美一二三区精品| 91精品国产综合久久蜜臀| 91精品国产乱| 精品国产一区二区三区不卡| 日韩一区二区精品葵司在线| 日韩视频在线永久播放| 日韩精品中文字幕一区| 国产欧美视频一区二区三区| 综合久久久久久久| 午夜精品久久久久久不卡8050| 五月综合激情日本mⅴ| 久久99国产精品久久99果冻传媒| 国产真实乱对白精彩久久| 成人免费电影视频| 欧美影院午夜播放| 日韩美女视频在线| 国产精品三级电影| 亚洲高清视频中文字幕| 免费成人美女在线观看.| 丁香天五香天堂综合| 日本道精品一区二区三区| 91精品中文字幕一区二区三区| 精品国产三级电影在线观看| 国产精品免费观看视频| 亚洲成人av电影| 国产黄色精品网站| 欧美日韩亚洲丝袜制服| 久久夜色精品一区| 亚洲主播在线观看| 国产成人在线视频网站| 欧美亚洲国产一区二区三区| 精品精品国产高清a毛片牛牛 | 久久这里只有精品视频网| 亚洲欧美另类在线| 国产一区二区0| 欧美色视频在线观看| 久久综合五月天婷婷伊人| 18涩涩午夜精品.www| 精品一区二区三区欧美| 日本乱人伦一区| 亚洲国产成人自拍| 免费在线看一区| 在线精品视频免费播放| 日本一区二区三区在线不卡| 天天操天天综合网| 97久久精品人人爽人人爽蜜臀| 精品噜噜噜噜久久久久久久久试看 | 日韩欧美电影一二三| 亚洲在线中文字幕| 99re热这里只有精品免费视频| 日韩精品自拍偷拍| 日韩电影免费在线| 91豆麻精品91久久久久久| 欧美国产国产综合| 国产成人亚洲精品狼色在线| 日韩欧美一级片| 日本欧美肥老太交大片| 欧美日韩五月天| 亚洲午夜在线电影| 欧美日韩在线三级| 亚洲一区在线电影| 欧美日韩一区三区| 亚洲高清三级视频| 欧美三级韩国三级日本三斤| 夜色激情一区二区| 欧美中文字幕一区二区三区亚洲| 亚洲精品视频在线看| 亚洲大尺度视频在线观看| 久久综合色8888| 激情综合色综合久久| 亚洲一区二区三区小说| 国产精品1区二区.| 国产免费久久精品| 日韩精品成人一区二区在线| 九九视频精品免费| 国产精品久久久久桃色tv| 欧美一级夜夜爽| 一本大道综合伊人精品热热| 国产一区二区中文字幕| 日日欢夜夜爽一区| 亚洲一区免费视频| 国产女人18水真多18精品一级做 | 91首页免费视频| 国模无码大尺度一区二区三区| 亚洲国产成人av网| 亚洲女子a中天字幕| 国产精品嫩草影院com| 国产一区二区三区在线观看精品| 91视频观看免费| 日韩美女久久久| 国产亚洲欧美日韩在线一区| 337p亚洲精品色噜噜狠狠| 色八戒一区二区三区| 99久久国产综合精品麻豆| 国产在线视频一区二区| 日本va欧美va精品发布| 亚洲电影激情视频网站| 亚洲欧美另类小说视频| 中文字幕亚洲一区二区av在线 | 亚洲人成网站色在线观看| 精品国产自在久精品国产| 7777精品伊人久久久大香线蕉最新版| 91网站最新网址| 成人高清在线视频| 国产99一区视频免费| 国v精品久久久网| 极品少妇xxxx精品少妇偷拍| 久久国产人妖系列| 麻豆成人在线观看| 国内外精品视频| 国产黄人亚洲片| jizzjizzjizz欧美| 在线亚洲一区二区| 欧美日韩免费一区二区三区视频| 精品视频免费在线| 日韩一区二区免费电影| 久久久亚洲精品石原莉奈| 国产三级一区二区三区| 亚洲欧洲三级电影| 一区二区在线观看av| 亚洲自拍都市欧美小说| 丝袜美腿高跟呻吟高潮一区| 美女脱光内衣内裤视频久久网站| 麻豆91在线看| 懂色av一区二区三区免费看| av日韩在线网站| 欧美日韩亚洲综合在线| 日韩欧美中文一区| 久久久久国产一区二区三区四区 | 久久久99久久| 日韩一区有码在线| 午夜影视日本亚洲欧洲精品| 男男成人高潮片免费网站| 国产精品 日产精品 欧美精品| 成人av免费在线| 在线播放视频一区| 国产人妖乱国产精品人妖| 一区二区日韩av| 久久99精品国产麻豆婷婷洗澡| 粉嫩嫩av羞羞动漫久久久 | 国产一区久久久| 91久久精品一区二区三| 欧美精品丝袜中出| 国产清纯在线一区二区www| 综合色天天鬼久久鬼色| 蜜臀av一级做a爰片久久| 成人三级伦理片| 欧美乱熟臀69xxxxxx| 国产精品久久一级| 三级在线观看一区二区| 成人激情免费视频| 欧美一区二区三区免费大片 | 欧美国产国产综合| 图片区小说区区亚洲影院| 国产成人免费xxxxxxxx| 在线播放视频一区| 亚洲色图19p| 国产成人av资源| 欧美一级黄色录像| 亚洲美女在线国产| 国产成人免费视频精品含羞草妖精| 欧美系列一区二区| 国产精品久久精品日日| 精品一区二区三区免费观看| 欧美午夜片在线观看| 国产精品视频九色porn| 奇米精品一区二区三区四区| 欧美影院一区二区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产日韩欧美麻豆| 麻豆91在线播放免费| 欧美三级午夜理伦三级中视频| 国产精品美女视频| 国产精品一品二品| 精品剧情在线观看| 蜜桃久久久久久| 欧美剧情片在线观看| 亚洲欧美视频在线观看| 99这里都是精品| 日韩一区中文字幕| 成人va在线观看| 中文字幕国产一区二区| 欧美日本国产视频| 亚洲人快播电影网| 91视频国产观看| 亚洲精品视频自拍| 91福利在线免费观看| 日韩伦理av电影| 一本色道亚洲精品aⅴ| 亚洲另类中文字| 日本电影欧美片| 午夜不卡在线视频| 欧美日韩午夜影院| 奇米888四色在线精品|