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

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

?? ip.c

?? MCF523X系列處理器初始化代碼,對開發523X些列freescale處理器有非常重要的意思
?? C
字號:
/*
 * File:		ip.c
 * Purpose:		Internet Protcol device driver
 *
 * Notes:
 *
 * Modifications:
 */


#include "src/init/m523xevb.h"
#include "src/ethernet/nif.h"
#include "src/ethernet/tftp/arp.h"
#include "src/ethernet/tftp/icmp.h"
#include "src/ethernet/tftp/ip.h"
#include "src/ethernet/tftp/udp.h"

/********************************************************************/
void
ip_init(IP_INFO *info, 
		IP_ADDR_P myip,
		IP_ADDR_P gateway,
		IP_ADDR_P netmask)
{
	int index;

	for (index = 0; index < sizeof(IP_ADDR); index++)
	{
		info->myip[index] = myip[index];
		info->gateway[index] = gateway[index];
		info->netmask[index] = netmask[index];
		info->broadcast[index] = 0xFF;
	}

	info->rx = 0;
	info->rx_unsup = 0;
	info->tx = 0;
	info->err = 0;
}

/********************************************************************/
uint8 *
ip_get_myip (IP_INFO *info)
{
	if (info != 0)
	{
		return (uint8 *)&info->myip[0];
	}
	return 0;
}

/********************************************************************/
int
ip_addr_compare (IP_ADDR_P addr1, IP_ADDR_P addr2)
{
	int i;

	for (i = 0; i < sizeof(IP_ADDR); i++)
	{
		if (addr1[i] != addr2[i])
			return 0;
	}
	return 1;
}

/********************************************************************/
uint8 *
ip_resolve_route (NIF *nif, IP_ADDR_P destip, NBUF **ppNbuf)
{
	/*
	 * This function determines whether or not an outgoing IP
	 * packet needs to be transmitted on the local net or sent
	 * to the router for transmission.
	 */
	IP_INFO *info;
	IP_ADDR	mask,result;
	int i;

	info = nif_get_protocol_info(nif,FRAME_IP);

	/* create mask for local IP */
	for (i = 0; i < sizeof(IP_ADDR); i++)
	{
		mask[i] = info->myip[i] & info->netmask[i];
	}

	/* apply mask to the destination IP */
	for (i = 0; i < sizeof(IP_ADDR); i++)
	{
		result[i] = mask[i] & destip[i];
	}

	/* See if destination IP is local or not */
	if (ip_addr_compare(mask,result))
	{
		/* The destination IP is on the local net */
		return arp_resolve(nif,FRAME_IP,destip, ppNbuf);
	}
	else
	{
		/* The destination IP is not on the local net */
		return arp_resolve(nif,FRAME_IP,info->gateway, ppNbuf);
	}
}

/******************************************************************/
int
ip_send (NIF *nif, uint8 *dest, uint8 *src,
		 uint8 protocol, NBUF *pNbuf)
{
	/*
	 * This function assembles an IP datagram and passes it
	 * onto the hardware to be sent over the network.
	 */
	uint8 *route;
	ip_frame_hdr *ipframe;
	
	/* Construct the IP header */
	ipframe = (ip_frame_hdr*)&pNbuf->data[IP_HDR_OFFSET];

	/* IP version 4, Internet Header Length of 5 32-bit words */
	ipframe->version_ihl = 0x45;

	/* Type of Service == 0, normal and routine */
	ipframe->service_type = 0x00;

	/* Total length of data */
	ipframe->total_length = (uint16)(pNbuf->length + IP_HDR_SIZE);

	/* User defined identification */
	ipframe->identification = 0x0000;

	/* Fragment Flags and Offset -- Don't fragment, last frag */
	ipframe->flags_frag_offset = 0x0000;

	/* Time To Live */
	ipframe->ttl = 0xFF;

	/* Protocol */
	ipframe->protocol = protocol;

	/* Checksum, computed later, zeroed for computation */
	ipframe->checksum = 0x0000;

	/* source IP address */
	ipframe->source_addr[0] = src[0];
	ipframe->source_addr[1] = src[1];
	ipframe->source_addr[2] = src[2];
	ipframe->source_addr[3] = src[3];

	/* dest IP address */
	ipframe->dest_addr[0] = dest[0];
	ipframe->dest_addr[1] = dest[1];
	ipframe->dest_addr[2] = dest[2];
	ipframe->dest_addr[3] = dest[3];

	/* compute checksum */
	ipframe->checksum = ip_chksum((uint16 *)ipframe,IP_HDR_SIZE);

	/* Increment the packet length appropriately */
	pNbuf->length += IP_HDR_SIZE;

	route = ip_resolve_route(nif,dest, &pNbuf);
	if (route == NULL)
	{
		printf("Unable to locate %d.%d.%d.%d\n",
			dest[0],dest[1],dest[2],dest[3]);
		nif->tx_free(pNbuf);
		return 0;
	}

	return	nif->send ( nif,
						route,
						&nif->hwa[0],
						FRAME_IP,
						pNbuf) ;
}

/******************************************************************/
#if defined(DEBUG_PRINT)
void
dump_ip_frame (ip_frame_hdr *ipframe)
{
	printf("Version:  %02X\n", ((ipframe->version_ihl & 0x00f0) >> 4));
	printf("IHL:      %02X\n", ipframe->version_ihl & 0x000f);
	printf("Service:  %02X\n", ipframe->service_type);
	printf("Length:   %04X\n", ipframe->total_length);
	printf("Ident:    %04X\n", ipframe->identification);
	printf("Flags:    %02X\n", ((ipframe->flags_frag_offset & 0xC000) >> 14));
	printf("Frag:     %04X\n", ipframe->flags_frag_offset & 0x3FFF);
	printf("TTL:      %02X\n", ipframe->ttl);
	printf("Protocol: %02X\n", ipframe->protocol);
	printf("Chksum:   %04X\n", ipframe->checksum);
	printf("Source  : %d.%d.%d.%d\n",
		ipframe->source_addr[0],
		ipframe->source_addr[1],
		ipframe->source_addr[2],
		ipframe->source_addr[3]);
	printf("Dest    : %d.%d.%d.%d\n",
		ipframe->dest_addr[0],
		ipframe->dest_addr[1],
		ipframe->dest_addr[2],
		ipframe->dest_addr[3]);
	printf("Options: %08X\n", ipframe->options);
}
#endif

/******************************************************************/
uint16
ip_chksum (uint16 *data, int num)
{
	int chksum, ichksum;
	uint16 temp;

	chksum = 0;
	num = num >> 1;	/* from bytes to words */
	for (; num; num--, data++)
	{
		temp = *data;
		ichksum = chksum + temp;
		ichksum = ichksum & 0x0000FFFF;
		if ((ichksum < temp) || (ichksum < chksum))
		{
			ichksum += 1;
			ichksum = ichksum & 0x0000FFFF;
		}
		chksum = ichksum;
	}
	return (uint16)~chksum;
}

/******************************************************************/
static int
validate_ip_hdr (NIF *nif, ip_frame_hdr *ipframe)
{
	int index, chksum;
	IP_INFO *info;

	/* Check the IP Version */
	if (IP_VERSION(ipframe) != 4)
	{
		return 0;
	}

	/* Check Internet Header Length */
	if (IP_IHL(ipframe) < 5)
	{
		return 0;
	}

	info = nif_get_protocol_info(nif,FRAME_IP);
	for (index = 0; index < sizeof(IP_ADDR); index++)
	{
		if (info->myip[index] != ipframe->dest_addr[index])
			return 0;
	}

	/* Check the checksum */
	chksum = (int)((uint16)IP_CHKSUM(ipframe));
	IP_CHKSUM(ipframe) = 0;

	if (ip_chksum((uint16 *)ipframe,IP_IHL(ipframe)*4) != chksum)
	{
		return 0;
	}
	IP_CHKSUM(ipframe) = (uint16)chksum;

	return 1;
}

/******************************************************************/
void
ip_handler (NIF *nif, NBUF *pNbuf)
{
	/* IP packet handler */
	ip_frame_hdr *ipframe;
	int hdr_offset;

	ipframe = (ip_frame_hdr *)&pNbuf->data[IP_HDR_OFFSET];

	/* Verify valid IP header and destination IP */
	if (!validate_ip_hdr(nif,ipframe))
		return;

	hdr_offset = ETH_HDR_SIZE + (IP_IHL(ipframe) * 4);
	pNbuf->length = (uint16)(IP_LENGTH(ipframe) - (IP_IHL(ipframe) * 4));

	/* Call the appriopriate handler */
	switch (IP_PROTOCOL(ipframe))
	{
		case IP_PROTO_ICMP:
			icmp_handler(nif,pNbuf,hdr_offset);
			break;
		case IP_PROTO_UDP:
			udp_handler(nif,pNbuf,hdr_offset);
			break;
		default:
			break;
	}
	return;
}

/******************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清不卡一区二区| 色婷婷综合激情| 综合久久久久久久| 欧美一三区三区四区免费在线看| 国产成人免费视频网站| 午夜精品久久一牛影视| 国产精品蜜臀av| 日韩一级黄色片| 欧日韩精品视频| 99这里只有精品| 国产在线国偷精品产拍免费yy| 亚洲综合色噜噜狠狠| 国产精品三级视频| 亚洲精品一区在线观看| 欧美日韩激情在线| 色婷婷香蕉在线一区二区| 国产不卡视频在线播放| 精油按摩中文字幕久久| 午夜激情一区二区| 有码一区二区三区| 国产精品免费视频观看| 久久精品在这里| 欧美草草影院在线视频| 在线不卡a资源高清| 91精品蜜臀在线一区尤物| 99精品热视频| 国产成人久久精品77777最新版本| 青娱乐精品视频在线| 亚洲3atv精品一区二区三区| 怡红院av一区二区三区| 一区二区中文视频| 中文天堂在线一区| 国产三级精品视频| 国产亚洲一本大道中文在线| 精品国产自在久精品国产| 日韩欧美一区二区久久婷婷| 欧美一区中文字幕| 日韩色视频在线观看| 日韩视频一区二区三区| 欧美一区二区在线免费观看| 欧美一区二区三区免费观看视频| 欧美精品久久一区| 在线综合视频播放| 日韩午夜在线影院| 欧美电影免费提供在线观看| 日韩免费视频一区二区| 精品福利在线导航| 久久久电影一区二区三区| 国产网红主播福利一区二区| 国产亚洲综合av| 国产精品久久久久久久久免费丝袜| 国产欧美精品日韩区二区麻豆天美| 日本一区二区三区dvd视频在线| 国产女主播一区| 国产精品久久久久久妇女6080| 中文字幕一区二区三区在线不卡| 亚洲欧洲精品一区二区三区| 亚洲乱码国产乱码精品精小说| 亚洲精品国产无套在线观| 亚洲综合激情网| 奇米精品一区二区三区在线观看| 久久精品国产99国产| 国产成人精品免费在线| 99re视频这里只有精品| 欧美午夜片在线看| 欧美xxxxx牲另类人与| 中文一区二区在线观看| 亚洲久本草在线中文字幕| 视频一区二区国产| 国产在线视频不卡二| 成人av免费在线播放| 欧美性猛片aaaaaaa做受| 91精品婷婷国产综合久久| 久久先锋资源网| 亚洲视频香蕉人妖| 秋霞成人午夜伦在线观看| 国产91丝袜在线播放九色| 91视频精品在这里| 日韩视频在线永久播放| 中文乱码免费一区二区 | 中日韩av电影| 亚洲一区二区三区四区在线免费观看 | 色婷婷精品大视频在线蜜桃视频| 欧美无乱码久久久免费午夜一区| 欧美成人bangbros| 亚洲精品日产精品乱码不卡| 老司机免费视频一区二区| 白白色亚洲国产精品| 91精品国产色综合久久ai换脸| 国产三级三级三级精品8ⅰ区| 一区二区三区不卡视频| 国产又黄又大久久| 欧美日韩中文精品| 中文字幕巨乱亚洲| 免费在线观看一区| 色综合欧美在线视频区| 精品免费日韩av| 亚洲午夜精品一区二区三区他趣| 国产米奇在线777精品观看| 91久久精品国产91性色tv| 一区二区免费看| 精品一区二区三区久久久| 欧美色图12p| 中文字幕一区二区在线观看 | 蓝色福利精品导航| 在线视频一区二区三区| 欧美国产精品一区| 九九九精品视频| 欧美一区二区三区在线视频| 亚洲人精品午夜| 国产成人精品综合在线观看| 日韩免费高清av| 日日夜夜精品视频免费| 在线观看国产精品网站| 国产精品国产自产拍高清av| 国内精品久久久久影院薰衣草 | 欧美成人一区二区| 亚洲成人1区2区| 色婷婷av一区二区三区软件| 欧美国产成人在线| 国产大陆亚洲精品国产| 欧美xxxxxxxx| 青青草原综合久久大伊人精品 | 日韩欧美国产精品一区| 亚洲成人免费av| 欧洲亚洲精品在线| 一区二区三区高清不卡| 91蝌蚪porny| 亚洲男人的天堂网| 91丨九色丨尤物| 亚洲另类中文字| 日本道免费精品一区二区三区| 中文字幕一区二区三区在线不卡| 国产91在线|亚洲| 欧美高清在线一区| 成人av在线看| 亚洲人成在线观看一区二区| 91丨九色丨蝌蚪丨老版| 亚洲免费在线电影| 色综合婷婷久久| 一区二区欧美国产| 欧美亚洲动漫精品| 亚洲成人免费影院| 欧美一区二区三区婷婷月色| 男女性色大片免费观看一区二区 | 国内精品第一页| 久久精品一区八戒影视| 国产99久久精品| 中文字幕视频一区| 在线一区二区三区| 视频一区二区国产| 精品国产一区二区三区四区四| 国产乱码精品1区2区3区| 国产亚洲综合色| 97精品国产97久久久久久久久久久久 | 日本韩国一区二区| 亚洲超碰精品一区二区| 亚洲欧美电影一区二区| 91免费看片在线观看| 亚洲国产综合91精品麻豆| 9191久久久久久久久久久| 韩国女主播一区二区三区| 国产调教视频一区| 色视频一区二区| 日韩电影在线观看电影| 久久午夜羞羞影院免费观看| www.欧美日韩国产在线| 亚洲一区二区不卡免费| 欧美不卡视频一区| 不卡视频在线观看| 爽爽淫人综合网网站| 久久久91精品国产一区二区精品| 97精品国产露脸对白| 免费人成在线不卡| 国产精品美女久久久久久久久久久| 色猫猫国产区一区二在线视频| 日韩成人免费电影| 欧美激情在线一区二区三区| 欧美伊人久久大香线蕉综合69| 老司机午夜精品99久久| 国产精品久久久久一区二区三区共| 欧美日韩一级大片网址| 国产麻豆精品在线| 亚洲成人www| 欧美国产日韩在线观看| 91精品国产综合久久久久久久| 成人一区在线观看| 日韩电影在线观看网站| 中文字幕亚洲成人| 2024国产精品视频| 欧美性色黄大片手机版| 国产成人在线视频网站| 亚洲va国产va欧美va观看| 亚洲国产精品成人综合| 在线综合亚洲欧美在线视频| av日韩在线网站| 国产一区二区三区美女| 婷婷综合久久一区二区三区| 亚洲图片欧美激情| 久久久久综合网|