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

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

?? tftp.c

?? pxa255處理器的bootloader
?? C
字號(hào):
/////////////////////////////////////////////////////////////////////////////////
// Copyright(c) 2001-2002 Hybus Co,.ltd. All rights reserved.
//
// Module name:
//      tftp.c
//
// Description:
//
//
// Author:
//      bedguy
//
// Created:
//      2002.10
//
///////////////////////////////////////////////////////////////////////////////

#include "net.h"
#include "tftp.h"
#include "bootp.h"

#define TFTP_PORT					69		// Well known TFTP port #
#define TFTP_TIMEOUT				5		// Seconds to tftpTimeout for a lost pkt
#define TIMEOUT_COUNT				10		// # of tftpTimeouts before giving up

// TFTP operations.
#define TFTP_RRQ					1
#define TFTP_WRQ					2
#define TFTP_DATA					3
#define TFTP_ACK					4
#define TFTP_ERROR					5


#define TFTP_NONE					0
#define TFTP_STATE_RRQ				1
#define TFTP_STATE_DATA				2
#define TFTP_STATE_TOO_LARGE		3
#define TFTP_STATE_BAD_MAGIC		4
#define TFTP_STATE_SUCCESS			5
#define TFTP_STATE_FAILURE			6


static short	tftpState = 0;
static unsigned short	tftpBlock = 0;
static short	tftpLastBlock = 0;
static ulong	loadAddr = 0;
ushort			tftpPort = 69;
ushort			tftpHostPort=0;
ushort			tftpClientPort = 7777;
static char		requestFile[128];
static ulong	tftpTimeout;

// Prototypes.
bool			TftpStart(char *filename);
void			TftpTx(char *txBuf);

bool DoTftp(CMD_TBL *cptr, int argc, char **argv){
	// tftp肺 罐籃 file data甫 扁廢且 林家甫 積己.
	if (argc!=3){
		printf(cptr->usage);
		return false;
	}
	if (!StrCmp(argv[2], "kernel")){
		loadAddr = (long)KERNEL_DRAM_BASE;
	}
	else if (!StrCmp(argv[2], "root")){
		loadAddr = (long)ROOT_DRAM_BASE;
	}
	else if (!StrCmp(argv[2], "loader")){
		loadAddr = (long)LOADER_DRAM_BASE;
	}
	else {
		if (!HexToInt(argv[2], &loadAddr, 32)){
			printf(cptr->usage);
			return false;
		}
	}

	// IP啊 絕欄擱 bootp甫 角青竅咯 IP甫 且寸 罐瀾.
	if (clientIP==0){
		printf("No IP. Bootp start...\n");
		if (DoBootp(0, 0,0)==false){
			printf("\tBootp failed. try again.\n");
			return false;
		}
	}
	return TftpStart(argv[1]);	// argv[1] : filename.
}	// DoTftp.


bool TftpStart(char *filename){
	char		*txPktBuf, *rxPktBuf;

	txPktBuf = PktBuf;
	rxPktBuf = PktBuf;
	
	// check filename.
	if (!filename || !filename[0]){
		printf("boot file name is not exists.\n");
		return false;
	}
	
	printf("TFTP Start...\n");
	
	printf("\tHost   (server) IP       : ");
	PrintIPAddr(hostIP);
	printf("\n");
	
	printf("\tClient (target) IP       : ");
	PrintIPAddr(clientIP);
	printf("\n");

	StrCpy(requestFile, filename);
	printf("\tLoading Filename         : %s\n", requestFile);
	printf("\tSave Address             : 0x%08lx\n", loadAddr);
	
	printf("\nLoading start...\n");

	protocol = PROT_TFTP;
	tftpState = TFTP_STATE_RRQ;
	tftpHostPort = 0;

	TftpTx(txPktBuf);

	tftpTimeout = GetTime() + TFTP_TIMEOUT * HZ;
	
	while (tftpState!=TFTP_STATE_SUCCESS && tftpState!=TFTP_STATE_FAILURE){
		RxPacket(rxPktBuf);
		if (GetTime()>tftpTimeout){
			printf("\n\tTftp is failed. Try again.\n\n");
			tftpState=TFTP_STATE_FAILURE;
		}
	}

	protocol = NOPROTOCOL;
	tftpState = TFTP_NONE;
	tftpBlock = 0;
	tftpHostPort = 0;
	return true;
}	// TftpStart.


void TftpTx(char *txPktBuf){
	char		*pktPtr = (char *)(txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE);
	ushort		hostPort = 0;
	int			len = 0;

	MemSet(txPktBuf, 0, MAX_PKT_SIZE);
	// make tftp header.
	switch (tftpState){
		// tftp request packet闌 父惦.
		case TFTP_STATE_RRQ:
			*((ushort *)pktPtr)++ = SWAP16(TFTP_RRQ);
			StrCpy((char *)pktPtr, requestFile);
			pktPtr += StrLen(requestFile) + 1;
			StrCpy((char *)pktPtr, "octet");
			pktPtr += 5 + 1;
			len = pktPtr - (txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE);
			hostPort = tftpPort;
			break;

		// 薦腳茄 data packet俊 措茄 acknowledge packet闌 父惦.
		case TFTP_STATE_DATA:
			*((ushort *)pktPtr)++ = SWAP16(TFTP_ACK);
			*((ushort *)pktPtr)++ = SWAP16(tftpBlock);
			len = pktPtr - (txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE);
			hostPort = tftpHostPort;
			break;

		// error packet闌 父惦.
		case TFTP_STATE_TOO_LARGE:
			*((ushort *)pktPtr)++ = SWAP16(TFTP_ERROR);
			*((ushort *)pktPtr)++ = SWAP16(3);
			StrCpy((char *)pktPtr, "File too large");
			pktPtr += 14 + 1;
			len = pktPtr - (txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE);
			hostPort = tftpHostPort;

			break;

		// error packet闌 父惦.
		case TFTP_STATE_BAD_MAGIC:
			*((ushort *)pktPtr)++ = SWAP16(TFTP_ERROR);
			*((ushort *)pktPtr)++ = SWAP16(2);
			StrCpy((char *)pktPtr, "File has bad magic");
			pktPtr += 18 + 1;
			len = pktPtr - (txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE);
			hostPort = tftpHostPort;
			break;
		default :
			return;
	}
	// Ethernet, IP, UDP Header甫 父惦.
	SetUdpHeader((char *)(txPktBuf+ETHER_HDR_SIZE+IP_HDR_SIZE), hostPort, tftpClientPort, len);
	SetIPHeader((char *)(txPktBuf+ETHER_HDR_SIZE), clientIP, hostIP, UDP_HDR_SIZE+len);
	SetEtherHeader(txPktBuf, hostEther, PROT_IP);

	// tftp packet 傈價(jià).
	TxPacket(txPktBuf, ETHER_HDR_SIZE+IP_HDR_SIZE+UDP_HDR_SIZE+len);
	return;
}	// TftpTx.


bool TftpRx(char *rxPktBuf, int len){
	char			*pktPtr = rxPktBuf;
	short			value;
	unsigned long		rlen=0;			// tftp肺 傈價(jià)罐籃 data狼 辨撈(烙矯 buffer).
	
	// handling received data.
	value = SWAP16(*(short *)pktPtr);	// packet type.
	pktPtr+=2;
	len-=2;
	switch (value){
		case TFTP_RRQ :
		case TFTP_WRQ :
		case TFTP_ACK :
		default:
			break;
		// tftp data packet.
		case TFTP_DATA :
			// error. check data index.
			if (len < 2) return false;
			tftpBlock = SWAP16(*(ushort *)pktPtr);	// tftp data packet俊輯 block 鍋齲.
			pktPtr += 2;
			len -= 2;
			// tftp receive 柳青 釬矯.
			if (((tftpBlock)%128)==0){	// each 64 kbyte.
				ClearLine();
				rlen = (unsigned long)tftpBlock * 512;
				printf("\t0x%08lx bytes received.", rlen);
			}

			// request俊 措茄 霉鍋擄 data packet老錠 鞘夸茄 瀝焊 汲瀝.
			if (tftpState == TFTP_STATE_RRQ){
				tftpState = TFTP_STATE_DATA;
				tftpLastBlock = 0;

				if (tftpBlock != 1){
					tftpState = TFTP_STATE_FAILURE;
					return false;
				}
			}
			// 撈傈狼 packet闌 促矯 罐疽闌 錠綽 公矯.
			if (tftpBlock <= tftpLastBlock) break;

			tftpLastBlock = tftpBlock;
	
			MemCpy((char *)(loadAddr+(tftpBlock-1)*512), (char *)pktPtr, len);

			tftpTimeout = GetTime() + TFTP_TIMEOUT * HZ;
			
			TftpTx(rxPktBuf);

			if (len < 512){
				// We received the whole thing.  Try to run it.
				ClearLine();
				rlen = ((long)tftpBlock-1) * 512 + len;
				printf("\t0x%08lx (%ld) bytes received.\n", rlen, rlen);
				printf("\ttftp done.\n\n");
				tftpState = TFTP_STATE_SUCCESS;
			}
			break;
		// error 貿(mào)府.
		case TFTP_ERROR :
			// tftp RRQ or tftp ack pakcet has some error.
			printf("\nTFTP error: '%s' (%d)\n", pktPtr+2, SWAP16(*(ushort *)pktPtr));
			tftpState = TFTP_STATE_FAILURE;
			break;
	}
	return true;
}	// TftpRx.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久色婷婷小香蕉久久| 国产精品成人一区二区艾草 | 久久综合色之久久综合| 天天色天天操综合| 日韩欧美自拍偷拍| 国产在线观看一区二区| 国产精品美女久久久久aⅴ | 成人h精品动漫一区二区三区| 亚洲国产成人午夜在线一区| 99在线热播精品免费| 亚洲一区二区视频在线观看| 欧美一区二区三区影视| 国产一区二区三区四区五区入口 | 欧美一级欧美一级在线播放| 精品国产乱码久久久久久老虎| 久久99久久久欧美国产| 国产精品全国免费观看高清| 91麻豆精东视频| 婷婷久久综合九色综合绿巨人| 欧美一级日韩免费不卡| 国产99久久久精品| 亚洲一级二级三级| 精品国产成人系列| 97se亚洲国产综合在线| 日韩高清不卡一区二区| 国产女人水真多18毛片18精品视频 | 欧美成人综合网站| 成人app网站| 日韩精品高清不卡| 国产精品国产三级国产aⅴ入口| 在线精品亚洲一区二区不卡| 麻豆精品精品国产自在97香蕉| 国产精品高潮呻吟久久| 日韩一区二区免费高清| 91美女蜜桃在线| 国产一区二区不卡| 亚洲国产精品久久艾草纯爱| 国产精品污www在线观看| 91精品国产91久久久久久一区二区 | 精品噜噜噜噜久久久久久久久试看| 成人黄色在线网站| 免费高清在线视频一区·| 自拍偷拍亚洲欧美日韩| 欧美精品一区二| 欧美日本乱大交xxxxx| 不卡av免费在线观看| 久久99精品国产麻豆不卡| 一区二区不卡在线播放| 国产三级精品三级| 精品日本一线二线三线不卡| 欧美三片在线视频观看| 99精品欧美一区二区三区小说| 久久精品国产精品亚洲红杏| 五月天激情综合网| 亚洲三级免费观看| 国产精品乱码久久久久久| 2019国产精品| 精品国产乱码久久久久久1区2区 | 一区二区三区免费在线观看| 久久丝袜美腿综合| 日韩亚洲欧美综合| 777午夜精品视频在线播放| 一本久久综合亚洲鲁鲁五月天| 国产91精品精华液一区二区三区| 久久99久久99小草精品免视看| 日韩主播视频在线| 亚洲高清不卡在线| 亚洲大尺度视频在线观看| 亚洲精品videosex极品| 亚洲色图一区二区| 亚洲激情综合网| 亚洲精品国产精品乱码不99| 尤物在线观看一区| 亚洲狼人国产精品| 一区二区三区四区在线免费观看| 亚洲人快播电影网| 一区二区三区91| 亚洲国产日韩a在线播放性色| 一级精品视频在线观看宜春院 | 亚洲成人动漫在线观看| 亚洲国产中文字幕在线视频综合| 一区二区在线观看不卡| 一卡二卡三卡日韩欧美| 亚洲电影欧美电影有声小说| 亚洲va欧美va天堂v国产综合| 天堂久久一区二区三区| 日韩黄色在线观看| 黄色日韩网站视频| 国产99精品视频| 色伊人久久综合中文字幕| 欧美亚洲高清一区二区三区不卡| 欧美亚洲高清一区| 欧美一区二区三区免费| 久久嫩草精品久久久精品一| 国产精品欧美久久久久一区二区 | 欧美精品色综合| 欧美成人精品高清在线播放| 久久久国产精华| 亚洲欧美日韩中文字幕一区二区三区 | 色综合久久天天| 欧美乱熟臀69xxxxxx| 欧美草草影院在线视频| 国产精品五月天| 婷婷丁香激情综合| 国产不卡视频在线播放| 在线视频国内一区二区| 91精品国产综合久久福利软件| 精品国产91九色蝌蚪| 国产精品国产三级国产普通话三级| 亚洲国产精品久久久久婷婷884 | 不卡一区二区三区四区| 在线一区二区观看| 日韩午夜电影在线观看| 国产精品美女久久久久久久久| 亚洲风情在线资源站| 国内精品久久久久影院色 | 亚洲高清不卡在线| 国产一区二区免费看| 日本高清无吗v一区| 欧美精品一区男女天堂| 亚洲日本一区二区| 看电影不卡的网站| 在线亚洲欧美专区二区| 久久久久免费观看| 午夜免费欧美电影| 成人高清视频在线| 欧美xxxx老人做受| 亚洲综合999| 成人性生交大片| 精品日韩在线一区| 夜夜夜精品看看| 北条麻妃一区二区三区| 欧美v日韩v国产v| 亚洲一二三级电影| av在线不卡免费看| 精品国产a毛片| 天堂成人国产精品一区| 91黄色免费看| 亚洲人午夜精品天堂一二香蕉| 国产一区二三区| 欧美va天堂va视频va在线| 亚洲国产成人tv| 色综合久久久久久久久| 国产精品麻豆视频| 国产精品资源网| 欧美精品一区二区三区四区 | 国产福利一区二区三区| 欧美一级国产精品| 国产精品99久久久久久似苏梦涵| 欧美手机在线视频| 亚洲欧美区自拍先锋| 成人黄色免费短视频| 久久综合色天天久久综合图片| 日本aⅴ免费视频一区二区三区| 91豆麻精品91久久久久久| 亚洲男同1069视频| 丁香婷婷综合色啪| 国产丝袜美腿一区二区三区| 国内精品自线一区二区三区视频| 精品国产免费视频| 韩国欧美国产1区| 精品久久一区二区三区| 经典三级一区二区| 精品久久国产97色综合| 黄页视频在线91| 久久久国产精品午夜一区ai换脸| 国产麻豆一精品一av一免费| 久久综合资源网| 成人夜色视频网站在线观看| 中文字幕精品综合| 色综合久久天天综合网| 一区二区三区丝袜| 欧美日韩精品欧美日韩精品一| 亚洲123区在线观看| 在线不卡免费av| 韩国女主播一区| 国产欧美日韩亚州综合| 成人一区二区三区| 一区二区三区在线免费视频| 在线中文字幕一区| 日本成人中文字幕| 久久色中文字幕| 99国产精品久久久| 性感美女极品91精品| 日韩视频永久免费| 成人成人成人在线视频| 亚洲综合激情小说| 精品嫩草影院久久| eeuss影院一区二区三区| 怡红院av一区二区三区| 91精品国产色综合久久| 国内外成人在线| 亚洲精品国产高清久久伦理二区| 在线不卡免费av| 国产成人免费在线观看不卡| 亚洲免费电影在线| 欧美一区二区三区在线视频 | 91一区二区三区在线观看| 亚洲第一精品在线| 欧美激情综合网|