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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ip.c

?? Coldfire MCF5282 DBug bootloader
?? C
字號:
/*
 * File:		ip.c
 * Purpose:		Internet Protcol device driver
 *
 * Notes:
 *
 * Modifications:
 */


#include "src/include/dbug.h"
#include "src/uif/net/net.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;
}

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩福利电影在线| 欧洲色大大久久| 久久99蜜桃精品| 日韩av网站免费在线| 亚洲国产综合91精品麻豆| 亚洲另类一区二区| 亚洲免费观看在线视频| 亚洲乱码国产乱码精品精可以看| 国产精品不卡一区二区三区| **欧美大码日韩| 亚洲婷婷在线视频| 亚洲色图在线看| 亚洲精品中文在线观看| 一区二区三区高清不卡| 性欧美大战久久久久久久久| 午夜久久久影院| 免费成人av在线播放| 老司机精品视频线观看86| 国产自产高清不卡| 粉嫩av一区二区三区| av一区二区三区在线| 91亚洲永久精品| 欧美色手机在线观看| 欧美精品tushy高清| 日韩精品一区二| 国产视频一区不卡| 日韩久久一区二区| 亚洲一级片在线观看| 日韩经典中文字幕一区| 韩国一区二区视频| 成人福利电影精品一区二区在线观看 | 精品国产伦一区二区三区观看体验| 日韩欧美123| 欧美国产禁国产网站cc| 一级中文字幕一区二区| 蜜臀av一级做a爰片久久| 国产福利视频一区二区三区| 色综合久久88色综合天天6| 欧美精品久久一区二区三区| 欧美精品一区二区精品网| 中文字幕亚洲综合久久菠萝蜜| 亚洲综合小说图片| 久久疯狂做爰流白浆xx| 99精品视频免费在线观看| 国产农村妇女精品| 成人免费一区二区三区视频| 视频一区视频二区中文字幕| 国产99久久精品| 欧美日韩亚洲综合在线| 国产丝袜美腿一区二区三区| 亚洲午夜影视影院在线观看| 国产剧情一区二区三区| 欧美综合天天夜夜久久| 久久久国产一区二区三区四区小说| 亚洲私人影院在线观看| 麻豆国产精品777777在线| 99re6这里只有精品视频在线观看| 欧美日韩精品福利| 国产日产欧产精品推荐色| 亚洲制服丝袜一区| 国产成a人无v码亚洲福利| 欧美日韩国产影片| 国产精品久久久久7777按摩 | 国产不卡高清在线观看视频| 欧美色精品在线视频| 国产夜色精品一区二区av| 亚洲18色成人| 99精品桃花视频在线观看| 精品久久国产老人久久综合| 一区二区成人在线| 成人免费视频视频| 欧美xxxxxxxx| 久久综合九色综合97婷婷 | 国内不卡的二区三区中文字幕 | 国产综合一区二区| 亚洲少妇30p| 日韩久久久精品| 色综合一区二区| 国产综合久久久久影院| 亚洲自拍偷拍麻豆| 国产亚洲综合av| 欧美日韩1区2区| 成人h动漫精品一区二| 日本不卡中文字幕| 国产精品美女视频| 日韩视频一区二区三区| 一本色道亚洲精品aⅴ| 精品亚洲免费视频| 丝袜美腿亚洲色图| 亚洲欧洲综合另类在线| 精品国产露脸精彩对白| 欧美日韩黄色一区二区| 成人免费视频一区二区| 国产一区在线精品| 视频一区在线视频| 亚洲国产aⅴ成人精品无吗| 国产精品私人自拍| 久久―日本道色综合久久| 欧美高清精品3d| 91福利视频网站| 91浏览器入口在线观看| 国产99久久久精品| 国产一区美女在线| 精品在线一区二区| 秋霞成人午夜伦在线观看| 午夜精品aaa| 亚洲国产成人av网| 亚洲午夜久久久久久久久电影网| 久久午夜电影网| 日本三级亚洲精品| 91精品国产综合久久久久久久久久 | 成人国产精品视频| 国产精品高潮呻吟久久| av中文一区二区三区| 亚洲三级电影全部在线观看高清| 一本在线高清不卡dvd| 一区二区三区在线不卡| 欧美最猛黑人xxxxx猛交| 亚洲18影院在线观看| 欧美一级黄色录像| 国产在线精品一区二区| 欧美国产日本韩| 91一区二区在线| 亚洲成人动漫在线观看| 91麻豆精品久久久久蜜臀| 久久99深爱久久99精品| 久久久久久久久久久99999| 成人天堂资源www在线| 亚洲免费av在线| 欧美日韩国产精品成人| 久草中文综合在线| 中文字幕巨乱亚洲| 日本丶国产丶欧美色综合| 三级在线观看一区二区| 久久久久青草大香线综合精品| 成人午夜精品在线| 一区二区三区av电影| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲黄色免费网站| 欧美日韩一二三区| 国内久久精品视频| 亚洲婷婷国产精品电影人久久| 777欧美精品| 成人午夜av影视| 亚洲午夜三级在线| 久久久久99精品一区| 色综合久久久网| 黄色小说综合网站| 亚洲摸摸操操av| 99re6这里只有精品视频在线观看| 国产suv精品一区二区883| 99re视频精品| 欧美一级片在线| 国产精品久久久久久久久免费樱桃 | 亚洲成av人片在线观看无码| 国产一区二区三区精品欧美日韩一区二区三区 | 99re8在线精品视频免费播放| 欧美日韩黄视频| 国产精品卡一卡二卡三| 日韩高清在线不卡| 99久久er热在这里只有精品66| 欧美久久一二区| 成人免费在线视频| 精品一区二区免费在线观看| 日本高清视频一区二区| 国产情人综合久久777777| 午夜欧美一区二区三区在线播放| 成人免费看视频| 欧美成人性福生活免费看| 一区二区三区四区在线| 国产成人精品免费| 欧美一区二区三区视频免费| 亚洲天堂2014| 国产精品一级二级三级| 欧美一区二区三区色| 亚洲欧美国产高清| 国产91在线|亚洲| 亚洲精品一线二线三线无人区| 亚洲午夜电影在线观看| 91视频一区二区三区| 国产亚洲成年网址在线观看| 美美哒免费高清在线观看视频一区二区 | 99精品久久99久久久久| 精品区一区二区| 午夜精品福利一区二区蜜股av| 91麻豆国产福利在线观看| 欧美激情一区二区三区蜜桃视频| 另类欧美日韩国产在线| 91精品国产综合久久香蕉的特点| 夜夜夜精品看看| 色诱视频网站一区| 亚洲色大成网站www久久九九| 成人精品国产免费网站| 国产午夜精品一区二区三区四区| 精品中文字幕一区二区小辣椒| 日韩欧美一二区| 乱中年女人伦av一区二区| 欧美一区午夜精品| 三级久久三级久久| 制服丝袜在线91|