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

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

?? net.c

?? LUBBOCK板的BLOB
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  net.c : Simple network layer with TFTP/ICMP builtin
 *
 *  Copyright (c) 2003, Intel Corporation (yu.tang@intel.com)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 */

#ifdef HAVE_CONFIG_H
# include <blob/config.h>
#endif

#include <blob/arch.h>
#include <blob/command.h>
#include <blob/serial.h>
#include <blob/util.h>
#include <blob/time.h>

#include <net.h>

#ifdef DEBUG
#define DBPRINT(args...) printf(args)
#else
#define DBPRINT(args...)
#endif

static struct mybuf in = {0} ,out1 = {0}, out2 = {0};
static unsigned char broadcast_mac_addr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
static unsigned char broadcast_ip_addr[4] = {0xff, 0xff, 0xff, 0xff};

//static unsigned char mac_addr[6] = {0x0, 0x0, 0x0, 0x0, 0xf, 0xe};
static unsigned char ip_addr[4] = {192, 1, 1, 2};

static unsigned char svr_mac_addr[6];
static unsigned char svr_ip_addr[4] = {192,1,1,1};
static unsigned short our_tftp_port = 0;

static char image_name[256];
static unsigned int image_addr;

static int last_block_num;
static unsigned short ip_id=0; 

static unsigned long tftp_timeout = 0;
static int tftp_state = 0;
static int arp_state = 0;

#define MIN(a,b) ((a)<(b) ? (a): (b))

static unsigned short in_chksum(unsigned char *p, int len);
static void arp_input();
static void ip_input();
static void icmp_input();
static void udp_input();
static void arp_request();
static void tftp_handler();
static void do_tftp();

/* 
 * Very simple buffer management.
 *
 * io = 0 : request for input buffer
 * io = 1 : request for output buffer
 *
 * set buffer length to 0 to free the buffer.
 *
 */
struct mybuf * bget(int io) 
{
	if( io == 1) {	
		if(out1.len == 0) return &out1;
		if(out2.len == 0) return &out2;
	}else return &in;

	printf("%s:can't get buffer\n",__FUNCTION__);
	return 0;
}

static unsigned short in_chksum(unsigned char *p, int len)
{
	unsigned long sum=0;
	
	while(len > 1) {
		sum += *((unsigned short*)p)++;
		if( sum & 0x80000000 ) 
			sum = (sum & 0xFFFF) + (sum >> 16);
		len -= 2;
	}

	if(len) 
		sum += (unsigned short) *(unsigned char*) p;

	while(sum >> 16) 
		sum = (sum & 0xFFFF) + (sum >> 16);

	return ~sum;
}



/* ARP zone */

static void arp_input()
{
	int op;
	struct etherhdr *eh, *ehout;
	struct ether_arp *ea, *eaout ;
	struct mybuf *out;

	out = bget(1);
	if(!out) return ;

	eh = (struct etherhdr*) (in.buf);
	ea = (struct ether_arp*)(eh + 1 );

	ehout = (struct etherhdr*) (out->buf);
	eaout = (struct ether_arp*) (ehout + 1);

	/* sanity check */
	if ( ntohs(ea->ea_hdr.ar_hrd) != ARPHDR_ETHER ) {
		DBPRINT("check 1\n");
	       	return;
	}
	if ( ntohs(ea->ea_hdr.ar_pro) != ETHPROTO_IP ) {
		DBPRINT("check 2\n");
		return;
	}
	if ( ea->ea_hdr.ar_hln != 6) {
		DBPRINT("check 3\n");
		return;
	}

	if ( ea->ea_hdr.ar_pln != 4) {
		DBPRINT("check 4\n");
		return;
	}

	/* matching ip */

	op = ntohs(ea->ea_hdr.ar_op);

	switch(op) {
	case ARP_REQUEST:
		*ehout = *eh;
		*eaout = *ea;

		if ( !memcmp(ea->arp_spa, svr_ip_addr, 4) ) {
			memcpy(svr_mac_addr, ea->arp_sha, 6);
		}

		memcpy(ehout->eh_dhost, eh->eh_shost, 6);
		memcpy(ehout->eh_shost, eth_mac_addr, 6);

		eaout->ea_hdr.ar_op = htons(ARP_REPLY);

		memcpy(eaout->arp_tha, ea->arp_sha, 6);
		memcpy(eaout->arp_tpa, ea->arp_spa, 4);

		memcpy(eaout->arp_sha, eth_mac_addr, 6);
		memcpy(eaout->arp_spa, ip_addr, 4);

		out->len = sizeof(struct etherhdr) + sizeof(struct ether_arp);

		/* send it */
		eth_xmit(out);

		break;
	case ARP_REPLY:
		if( (!memcmp(eh->eh_dhost, eth_mac_addr, 6)) && ( !memcmp(ea->arp_spa, svr_ip_addr, 4) ) ) {
			arp_state = 1;
			memcpy(svr_mac_addr, ea->arp_sha, 6);
			do_tftp();
		}
		break;
	case ARP_REVREQUEST:
		break;
	case ARP_REVREPLY:
		break;
	}
}

static void arp_request()
{	
	struct etherhdr *eh;
	struct ether_arp *ea;	
	struct mybuf *out;

	out = bget(1);
	if(!out) return;

	eh = (struct etherhdr *) (out->buf);
	ea = (struct ether_arp *) (eh + 1 );

	memcpy(eh->eh_dhost, broadcast_mac_addr, 6);
	memcpy(eh->eh_shost, eth_mac_addr, 6);
	eh->eh_proto = htons( ETHPROTO_ARP);
	
	ea->ea_hdr.ar_hrd = htons(ARPHDR_ETHER);
	ea->ea_hdr.ar_pro = htons(ETHPROTO_IP);
	ea->ea_hdr.ar_hln = 6;
	ea->ea_hdr.ar_pln = 4;
	ea->ea_hdr.ar_op = htons(ARP_REQUEST);

	memcpy(ea->arp_sha, eth_mac_addr, 6);
	memcpy(ea->arp_spa, ip_addr, 4);
	//memcpy(ea->.tha, 6);
	memcpy(ea->arp_tpa, svr_ip_addr, 4);

	out->len = sizeof(struct etherhdr) + sizeof(struct ether_arp);

	eth_xmit(out);
}

/* IP zone */
static void ip_input()
{
	int hlen;

	struct iphdr *ip = (struct iphdr*) (in.buf + 14 );

	if (ip->ip_v != IPVERSION) {
		printf("%s:ip version not matacing\n", __FUNCTION__);
		return;
	}

	hlen =  ip->ip_hl << 2 ;

	if( hlen < sizeof(struct iphdr) ) {
		printf("%s:hlen < iphdr\n", __FUNCTION__);
		return;
	}

	ip->ip_sum = in_chksum((unsigned char*)ip, hlen);
       	if(ip->ip_sum) {
		printf("%s:chksum error\n",__FUNCTION__);
		return;
	}
	
	if(ntohs(ip->ip_len) < hlen) {
		printf("%s:ip_len < hlen: 0x%x, 0x%x\n",__FUNCTION__,ip->ip_len, hlen);
		return;
	}

	if( ntohs(ip->ip_off) & IP_OFFMASK ) {
		printf("%s:can't handler fragment\n", __FUNCTION__);
		return;
	}

	if( memcmp(&ip->ip_dst, ip_addr, 4) && memcmp(&ip->ip_dst,broadcast_ip_addr,4) ) {
		/* packet not for us, ingore */
		DBPRINT("noise, not for us\n");
		return;
	}

	switch(ip->ip_p) {
	case IPPROTO_ICMP:
		icmp_input();
		break;
	case IPPROTO_UDP:
		udp_input();
		break;
	default:
		DBPRINT("Unsupported IP packet\n");
		break;
	}
	return; 
}

/* ICMP zone */
static void icmp_input()
{
	struct in_addr t;
	struct icmphdr *icmp;
	struct mybuf *out;

	struct etherhdr *eh = (struct etherhdr*)(in.buf);
	struct iphdr *ip = (struct iphdr *) (in.buf + sizeof(struct etherhdr));
	int hlen = ip->ip_hl << 2;
	int icmplen = ntohs(ip->ip_len) - hlen;

	if( icmplen < ICMP_MINLEN ) {
		printf("%s: .. < ICMP_MINLEN\n", __FUNCTION__);
		return;
	}

	icmp = (struct icmphdr *) (in.buf + sizeof(struct etherhdr) + hlen);

	switch(icmp->type) {
	case ICMP_ECHO:
		out = bget(1);
		if(!out) return;

		icmp->type = ICMP_ECHOREPLY;
		icmp->cksum = 0;
		icmp->cksum = in_chksum((unsigned char*)icmp, icmplen);
		memcpy(out->buf + sizeof(struct etherhdr) + hlen, 
				icmp, icmplen);

		memcpy(&t, &ip->ip_dst, sizeof(struct in_addr));
		memcpy(&ip->ip_dst, &ip->ip_src, sizeof(struct in_addr));
		memcpy(&ip->ip_src, &t, sizeof(struct in_addr)); 

		ip->ip_ttl = MAXTTL;
		ip->ip_hl = sizeof(struct iphdr) >> 2; /* discard the options */
		ip->ip_len = htons(icmplen + sizeof(struct iphdr) );
		ip->ip_sum = 0;
		ip->ip_sum = in_chksum((unsigned char*)ip, sizeof(struct iphdr));
		memcpy(out->buf + sizeof(struct etherhdr), ip, sizeof(struct iphdr));

		memcpy(eh->eh_dhost, eh->eh_shost, 6);
		memcpy(eh->eh_shost, eth_mac_addr, 6);
		memcpy(out->buf, eh, sizeof(struct etherhdr) );

		out->len = icmplen + sizeof(struct iphdr) + sizeof( struct etherhdr);
		eth_xmit(out);

		break;

	case ICMP_ECHOREPLY:
		break;

	case ICMP_UNREACH:
		break;
	}

	return;

}

/* TFTP zone */
static void udp_input()
{
	struct etherhdr *eh;
	struct iphdr *ip;
	struct udphdr *uh;


	eh = (struct etherhdr*) (in.buf);
	ip = (struct iphdr *) (eh + 1);
	uh = (struct udphdr *) ( (unsigned char*)ip + (ip->ip_hl << 2));

	/* check-sum */

	/* Not for us? */
	if( ntohs(uh->uh_dport) != our_tftp_port ) return;

	/* ok, tftp handler */
	tftp_handler();
}


#define	RRQ	01				/* read request */
#define	WRQ	02				/* write request */
#define	DATA	03				/* data packet */
#define	ACK	04				/* acknowledgement */
#define	ERROR	05				/* error code */


static void do_tftp()
{
	struct mybuf* out;
	char *p , *th ;
	char mode[]="octet";
	int pktlen = 0;
	struct etherhdr *eh;
	struct iphdr *ip;
	struct udphdr *uh;

	/* in progress... */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费一区二区三区视频 | 亚洲精品精品亚洲| 精品一区二区三区欧美| www久久精品| 风间由美一区二区三区在线观看 | 中文字幕一区二区三区四区不卡| 国内精品伊人久久久久av影院 | 欧美日韩精品欧美日韩精品一 | 国产成人欧美日韩在线电影| 7777精品伊人久久久大香线蕉 | 成人高清在线视频| 亚洲成年人影院| 久久精品亚洲精品国产欧美| 国产一区二区伦理| 首页国产欧美日韩丝袜| 国产亚洲污的网站| 日韩欧美一级二级| 91免费版pro下载短视频| 欧美a级理论片| 亚洲在线观看免费| 久久综合九色综合欧美就去吻| 成年人网站91| 国产精品一区三区| 国产一区亚洲一区| 久久电影网电视剧免费观看| 亚洲精品videosex极品| 国产日韩三级在线| 国产情人综合久久777777| 精品乱码亚洲一区二区不卡| 91免费精品国自产拍在线不卡 | 国产精品一区一区| 久久91精品久久久久久秒播| 日韩精品视频网| 亚洲欧美日韩国产综合| 国产精品免费视频观看| 久久婷婷国产综合国色天香| 2020国产精品自拍| 久久精品亚洲精品国产欧美kt∨| 久久久久久久久久久久电影 | 91国偷自产一区二区使用方法| voyeur盗摄精品| 日本国产一区二区| 777午夜精品视频在线播放| 捆绑紧缚一区二区三区视频 | 欧美精品一区二区在线播放| 精品污污网站免费看| 欧美日韩不卡一区二区| 欧美巨大另类极品videosbest | 亚洲欧美日韩国产成人精品影院| 日韩伦理av电影| 日韩av在线免费观看不卡| 激情文学综合网| 国模娜娜一区二区三区| 国产aⅴ精品一区二区三区色成熟| 国产麻豆视频一区二区| 一本大道久久a久久综合婷婷| 欧美日产国产精品| 国产夜色精品一区二区av| 一区二区三区在线视频播放| 麻豆精品一二三| 色8久久人人97超碰香蕉987| 精品国产亚洲在线| 天堂影院一区二区| 99视频精品在线| 久久久午夜精品| 麻豆久久久久久久| 91精品国产色综合久久久蜜香臀| 国产精品视频九色porn| 激情综合网激情| 91麻豆精品91久久久久久清纯| 一区免费观看视频| 成人黄色电影在线| 欧美激情中文字幕| 粉嫩一区二区三区在线看| 精品久久久久香蕉网| 日韩高清国产一区在线| 欧美日韩中文另类| 美国十次了思思久久精品导航| 欧美日韩免费一区二区三区| 亚洲欧美另类图片小说| 91福利国产精品| 香蕉影视欧美成人| 精品欧美黑人一区二区三区| 激情六月婷婷综合| 国产精品久久二区二区| 色综合天天综合在线视频| 国产精品午夜在线观看| 91色婷婷久久久久合中文| 一区二区在线免费| 欧美一区二区三区在线观看视频| 日韩精品电影在线观看| 国产欧美日韩不卡免费| youjizz久久| 捆绑调教一区二区三区| 日本一区免费视频| 欧美日韩国产色站一区二区三区| 精品午夜一区二区三区在线观看| 国产精品久久久久久久裸模| 色婷婷综合久久久久中文| 日本不卡一二三| 一区在线中文字幕| 久久久av毛片精品| 欧美色图免费看| 一本色道久久综合精品竹菊| 三级不卡在线观看| 一区av在线播放| 国产精品美女久久久久久久久| 777亚洲妇女| 欧美三区免费完整视频在线观看| 国产成都精品91一区二区三| 亚洲国产一二三| 99久久精品免费| 亚洲综合色婷婷| 色香蕉成人二区免费| 亚洲欧美在线视频观看| 欧美精品123区| 欧美一区二区三区四区五区 | 成人一级视频在线观看| 欧美成人猛片aaaaaaa| 日韩一区二区三区av| 2017欧美狠狠色| 亚洲美女在线国产| 国产精品进线69影院| 一区二区三区在线免费| 亚洲国产成人高清精品| 亚洲国产成人高清精品| 精品综合久久久久久8888| 国产精品夜夜嗨| 不卡免费追剧大全电视剧网站| 91九色最新地址| 国产三级精品视频| 日日夜夜一区二区| 播五月开心婷婷综合| 欧美日韩精品欧美日韩精品| 久久先锋影音av鲁色资源| 中文字幕巨乱亚洲| 亚洲成在人线免费| 国产高清无密码一区二区三区| 大尺度一区二区| 欧美欧美欧美欧美| 国产午夜精品理论片a级大结局 | 2021国产精品久久精品| 久久久国际精品| 亚洲午夜电影网| 国产精品123| 91福利国产成人精品照片| 日韩精品一区二区三区中文不卡| 欧美国产1区2区| 毛片一区二区三区| 欧美精品丝袜久久久中文字幕| 福利视频网站一区二区三区| 5月丁香婷婷综合| 国产精品女同互慰在线看| 午夜精品一区在线观看| 成人午夜在线免费| 欧美成人r级一区二区三区| 一色桃子久久精品亚洲| 精品亚洲porn| 在线免费亚洲电影| 国产婷婷色一区二区三区| 亚洲欧美成aⅴ人在线观看| 麻豆精品视频在线| 91年精品国产| 国产精品久久久久永久免费观看 | 一区精品在线播放| 国产精品夜夜嗨| 欧美日韩欧美一区二区| 最好看的中文字幕久久| 成人精品国产一区二区4080| 国产性色一区二区| 青青草国产精品97视觉盛宴| 欧美日韩极品在线观看一区| 国产精品伦理一区二区| 国产一区二区三区在线观看免费视频| 91麻豆福利精品推荐| 国产精品动漫网站| 国产在线精品一区二区不卡了 | 亚洲欧美日韩综合aⅴ视频| 成人激情免费网站| 国产午夜三级一区二区三| 奇米在线7777在线精品| 欧美私模裸体表演在线观看| 亚洲精品免费在线| 欧美日韩国产天堂| 日韩电影在线一区| 日韩欧美中文字幕精品| 激情小说欧美图片| 久久久久久久久蜜桃| 成人免费视频caoporn| 久久蜜臀精品av| 成人激情午夜影院| 欧美国产乱子伦| 日本高清不卡一区| 亚洲美腿欧美偷拍| 欧美体内she精高潮| 日本欧美韩国一区三区| 欧美一区二区三区白人| 日韩成人午夜电影| 久久久综合九色合综国产精品| 成人深夜在线观看|