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

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

?? nfs.c

?? 關(guān)于s3c2440之bootloader的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * vivi/net/nfs.c  * * Based on u-boot * * $Id: nfs.c,v 1.0 2004/08/12 11:14:01 kingmonkey Exp $ * * 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. * * Description: net nfs protocol routines . * */ #include "printk.h"#include "command.h"#include "net.h"#include "nfs.h"#include "bootp.h"#include <malloc.h>#include <string.h>/*#define NFS_DEBUG*/#if (CONFIG_CMD_NET) && CONFIG_CMD_NFS)#define HASHES_PER_LINE 65	/* Number of "loading" hashes per line	*/#define NFS_TIMEOUT 10static int fs_mounted = 0;static unsigned long rpc_id = 0;static int nfs_offset = -1;static int nfs_len;static char dirfh[NFS_FHSIZE];	/* file handle of directory */static char filefh[NFS_FHSIZE]; /* file handle of kernel image */static IPaddr_t NfsServerIP;static int	NfsSrvMountPort;static int	NfsSrvNfsPort;static int	NfsOurPort;static int	NfsTimeoutCount;static int	NfsState;#define STATE_PRCLOOKUP_PROG_MOUNT_REQ	1#define STATE_PRCLOOKUP_PROG_NFS_REQ	2#define STATE_MOUNT_REQ			3#define STATE_UMOUNT_REQ		4#define STATE_LOOKUP_REQ		5#define STATE_READ_REQ			6#define STATE_READLINK_REQ		7static char default_filename[64];static char *nfs_filename;static char *nfs_path;static char nfs_path_buff[2048];static __inline__ voidstore_block (uchar * src, unsigned offset, unsigned len){	ulong newsize = offset + len;	(void)memcpy ((void *)(load_addr + offset), src, len);		if (NetBootFileXferSize < (offset+len))		NetBootFileXferSize = newsize;}static char*basename (char *path){	char *fname;	fname = path + strlen(path) - 1;	while (fname >= path) {		if (*fname == '/') {			fname++;			break;		}		fname--;	}	return fname;}static char*dirname (char *path){	char *fname;	fname = basename (path);	--fname;	*fname = '\0';	return path;}/**************************************************************************RPC_ADD_CREDENTIALS - Add RPC authentication/verifier entries**************************************************************************/static long *rpc_add_credentials (long *p){	int hl;	int hostnamelen;	char hostname[256];	strcpy (hostname, "");	hostnamelen=strlen (hostname);	/* Here's the executive summary on authentication requirements of the	 * various NFS server implementations:	Linux accepts both AUTH_NONE	 * and AUTH_UNIX authentication (also accepts an empty hostname field	 * in the AUTH_UNIX scheme).  *BSD refuses AUTH_NONE, but accepts	 * AUTH_UNIX (also accepts an empty hostname field in the AUTH_UNIX	 * scheme).  To be safe, use AUTH_UNIX and pass the hostname if we have	 * it (if the BOOTP/DHCP reply didn't give one, just use an empty	 * hostname).  */	hl = (hostnamelen + 3) & ~3;	/* Provide an AUTH_UNIX credential.  */	*p++ = htonl(1);		/* AUTH_UNIX */	*p++ = htonl(hl+20);		/* auth length */	*p++ = htonl(0);		/* stamp */	*p++ = htonl(hostnamelen);	/* hostname string */	if (hostnamelen & 3) {		*(p + hostnamelen / 4) = 0; /* add zero padding */	}	memcpy (p, hostname, hostnamelen);	p += hl / 4;	*p++ = 0;			/* uid */	*p++ = 0;			/* gid */	*p++ = 0;			/* auxiliary gid list */	/* Provide an AUTH_NONE verifier.  */	*p++ = 0;			/* AUTH_NONE */	*p++ = 0;			/* auth length */	return p;}/**************************************************************************RPC_LOOKUP - Lookup RPC Port numbers**************************************************************************/static voidrpc_req (int rpc_prog, int rpc_proc, u32 *data, int datalen){	struct rpc_t pkt;	unsigned long id;	u32 *p;	int pktlen;	int sport;	id = ++rpc_id;	pkt.u.call.id = htonl(id);	pkt.u.call.type = htonl(MSG_CALL);	pkt.u.call.rpcvers = htonl(2);	/* use RPC version 2 */	pkt.u.call.prog = htonl(rpc_prog);	pkt.u.call.vers = htonl(2);	/* portmapper is version 2 */	pkt.u.call.proc = htonl(rpc_proc);	p = (u32 *)&(pkt.u.call.data);	if (datalen)		memcpy ((char *)p, (char *)data, datalen*sizeof(u32));	pktlen = (char *)p + datalen*sizeof(u32) - (char *)&pkt;	memcpy ((char *)NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE, (char *)&pkt, pktlen);	if (rpc_prog == PROG_PORTMAP)		sport = SUNRPC_PORT;	else if (rpc_prog == PROG_MOUNT)		sport = NfsSrvMountPort;	else		sport = NfsSrvNfsPort;	NetSendUDPPacket (NetServerEther, NfsServerIP, sport, NfsOurPort, pktlen);}/**************************************************************************RPC_LOOKUP - Lookup RPC Port numbers**************************************************************************/static voidrpc_lookup_req (int prog, int ver){	u32 data[16];	data[0] = 0; data[1] = 0;	/* auth credential */	data[2] = 0; data[3] = 0;	/* auth verifier */	data[4] = htonl(prog);	data[5] = htonl(ver);	data[6] = htonl(17);	/* IP_UDP */	data[7] = 0;	rpc_req (PROG_PORTMAP, PORTMAP_GETPORT, data, 8);}/**************************************************************************NFS_MOUNT - Mount an NFS Filesystem**************************************************************************/static voidnfs_mount_req (char *path){	u32 data[1024];	u32 *p;	int len;	int pathlen;	pathlen = strlen (path);	p = &(data[0]);	p = (u32 *)rpc_add_credentials((long *)p);	*p++ = htonl(pathlen);	if (pathlen & 3) *(p + pathlen / 4) = 0;	memcpy (p, path, pathlen);	p += (pathlen + 3) / 4;	len = (u32 *)p - (u32 *)&(data[0]);	rpc_req (PROG_MOUNT, MOUNT_ADDENTRY, data, len);}/**************************************************************************NFS_UMOUNTALL - Unmount all our NFS Filesystems on the Server**************************************************************************/static voidnfs_umountall_req (void){	u32 data[1024];	u32 *p;	int len;	if ((NfsSrvMountPort == -1) || (!fs_mounted)) {		/* Nothing mounted, nothing to umount */		return;	}	p = &(data[0]);	p = (u32 *)rpc_add_credentials ((long *)p);	len = (u32 *)p - (u32 *)&(data[0]);	rpc_req (PROG_MOUNT, MOUNT_UMOUNTALL, data, len);}/*************************************************************************** * NFS_READLINK (AH 2003-07-14) * This procedure is called when read of the first block fails - * this probably happens when it's a directory or a symlink * In case of successful readlink(), the dirname is manipulated, * so that inside the nfs() function a recursion can be done. **************************************************************************/static voidnfs_readlink_req (void){	u32 data[1024];	u32 *p;	int len;	p = &(data[0]);	p = (u32 *)rpc_add_credentials ((long *)p);	memcpy (p, filefh, NFS_FHSIZE);	p += (NFS_FHSIZE / 4);	len = (u32 *)p - (u32 *)&(data[0]);	rpc_req (PROG_NFS, NFS_READLINK, data, len);}/**************************************************************************NFS_LOOKUP - Lookup Pathname**************************************************************************/static voidnfs_lookup_req (char *fname){	u32 data[1024];	u32 *p;	int len;	int fnamelen;	fnamelen = strlen (fname);	p = &(data[0]);	p = (u32 *)rpc_add_credentials ((long *)p);	memcpy (p, dirfh, NFS_FHSIZE);	p += (NFS_FHSIZE / 4);	*p++ = htonl(fnamelen);	if (fnamelen & 3) *(p + fnamelen / 4) = 0;	memcpy (p, fname, fnamelen);	p += (fnamelen + 3) / 4;	len = (u32 *)p - (u32 *)&(data[0]);	rpc_req (PROG_NFS, NFS_LOOKUP, data, len);}/**************************************************************************NFS_READ - Read File on NFS Server**************************************************************************/static voidnfs_read_req (int offset, int readlen){	u32 data[1024];	u32 *p;	int len;	p = &(data[0]);	p = (u32 *)rpc_add_credentials ((long *)p);	memcpy (p, filefh, NFS_FHSIZE);	p += (NFS_FHSIZE / 4);	*p++ = htonl(offset);	*p++ = htonl(readlen);	*p++ = 0;	len = (u32 *)p - (u32 *)&(data[0]);	rpc_req (PROG_NFS, NFS_READ, data, len);}/**************************************************************************RPC request dispatcher**************************************************************************/static voidNfsSend (void){#ifdef NFS_DEBUG	printk ("%s\n", __FUNCTION__);#endif	switch (NfsState) {	case STATE_PRCLOOKUP_PROG_MOUNT_REQ:		rpc_lookup_req (PROG_MOUNT, 1);		break;	case STATE_PRCLOOKUP_PROG_NFS_REQ:		rpc_lookup_req (PROG_NFS, 2);		break;	case STATE_MOUNT_REQ:		nfs_mount_req (nfs_path);		break;	case STATE_UMOUNT_REQ:		nfs_umountall_req ();		break;	case STATE_LOOKUP_REQ:		nfs_lookup_req (nfs_filename);		break;	case STATE_READ_REQ:		nfs_read_req (nfs_offset, nfs_len);		break;	case STATE_READLINK_REQ:		nfs_readlink_req ();		break;	}}/**************************************************************************Handlers for the reply from server**************************************************************************/static intrpc_lookup_reply (int prog, uchar *pkt, unsigned len){	struct rpc_t rpc_pkt;	memcpy ((unsigned char *)&rpc_pkt, pkt, len);#ifdef NFS_DEBUG	printk ("%s\n", __FUNCTION__);#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美tickling挠脚心丨vk| 成人一区在线观看| 欧美日韩国产bt| 亚洲国产精品嫩草影院| 69堂国产成人免费视频| 天天av天天翘天天综合网 | 久久久午夜电影| 国产一区激情在线| 国产精品网站在线| 欧美性受xxxx| 日本 国产 欧美色综合| 精品电影一区二区| 成人午夜电影小说| 洋洋av久久久久久久一区| 欧美精品色综合| 国产一区二区精品在线观看| 国产精品初高中害羞小美女文| 91福利小视频| 蜜桃视频一区二区三区在线观看| 国产午夜精品久久久久久久| 一本大道综合伊人精品热热| 青青草原综合久久大伊人精品| 精品国产乱码久久久久久久久| 成人精品免费视频| 亚洲成av人片在线观看| 久久综合九色综合久久久精品综合| gogogo免费视频观看亚洲一| 日韩高清在线电影| 中国色在线观看另类| 欧美日韩卡一卡二| 国产传媒久久文化传媒| 亚洲成人激情自拍| 国产精品久久久久久久久搜平片 | 欧美精品乱码久久久久久按摩 | 国产一区二区在线影院| 亚洲精品国产a久久久久久| 欧美一区二区视频网站| 91在线视频播放地址| 久久国产精品99精品国产 | 亚洲高清不卡在线观看| 久久精品欧美一区二区三区不卡 | 欧美日韩一区二区三区在线看| 国产一区二区三区电影在线观看| 亚洲综合丝袜美腿| 国产欧美一区二区三区鸳鸯浴 | 97久久超碰国产精品电影| 青娱乐精品视频在线| 亚洲精品中文在线观看| 久久久久久久久久电影| 欧美精品久久天天躁| 成人av在线一区二区| 国产综合色精品一区二区三区| 香蕉影视欧美成人| 亚洲精品一二三区| 国产精品久久久一区麻豆最新章节| 欧美一二三区在线观看| 欧美中文字幕一区| 99精品视频在线播放观看| 捆绑调教美女网站视频一区| 亚洲电影第三页| 亚洲综合一区二区三区| 亚洲欧美日韩国产另类专区| 欧美激情在线观看视频免费| www亚洲一区| 精品久久免费看| 精品乱人伦小说| 日韩欧美专区在线| 欧美一区二区视频在线观看2022 | 欧美一级高清片在线观看| 欧美少妇性性性| 日本乱人伦aⅴ精品| 99久久免费精品| 91在线视频观看| 91视视频在线观看入口直接观看www | 日本午夜精品视频在线观看| 偷拍一区二区三区| 日本最新不卡在线| 青青草国产成人av片免费| 午夜视频一区二区三区| 午夜欧美一区二区三区在线播放| 一区二区三区在线观看视频| 一区二区成人在线视频| 一区二区三区高清| 亚洲sss视频在线视频| 婷婷一区二区三区| 日本不卡中文字幕| 久久国产精品99久久人人澡| 国产伦精品一区二区三区在线观看| 久久精品国产亚洲a| 国产一区二区三区国产| 成人福利视频在线看| 99re这里都是精品| 欧美丝袜丝交足nylons图片| 欧美美女直播网站| 精品卡一卡二卡三卡四在线| 国产欧美日本一区视频| 亚洲视频精选在线| 天天亚洲美女在线视频| 久久 天天综合| 国产成人啪午夜精品网站男同| 97se亚洲国产综合在线| 欧美久久一二区| 精品国产一区二区三区av性色| 欧美激情在线观看视频免费| 亚洲最色的网站| 日av在线不卡| jizz一区二区| 欧美一区二区三区四区五区| 国产亚洲一区字幕| 曰韩精品一区二区| 久久电影网站中文字幕| 99久久精品情趣| 91精品国产一区二区三区蜜臀| 中文字幕欧美国产| 亚洲成a人片在线不卡一二三区| 久久成人免费网| 色视频一区二区| 久久先锋影音av鲁色资源| 最好看的中文字幕久久| 日本麻豆一区二区三区视频| 成人免费毛片嘿嘿连载视频| 欧美日韩另类一区| 国产精品拍天天在线| 日产欧产美韩系列久久99| 99热这里都是精品| 精品国产区一区| 亚洲制服丝袜在线| 国产精品66部| 91精品一区二区三区久久久久久| 国产亚洲精品aa| 日韩av成人高清| 色综合久久综合中文综合网| 久久综合精品国产一区二区三区| 亚洲电影你懂得| 99vv1com这只有精品| 久久综合999| 石原莉奈在线亚洲三区| 一本大道久久a久久综合| 国产亚洲一区二区三区四区 | 日韩午夜激情视频| 1000精品久久久久久久久| 激情成人综合网| 欧美一区二区三区成人| 亚洲综合成人网| 一本一道久久a久久精品| 欧美高清在线精品一区| 狠狠色2019综合网| 日韩视频在线你懂得| 亚洲国产日日夜夜| 色综合久久久久网| 国产精品久线观看视频| 国内精品国产成人| 日韩欧美在线123| 丝袜美腿一区二区三区| 欧美日韩免费一区二区三区视频 | 婷婷国产在线综合| 在线精品国精品国产尤物884a| 亚洲国产精品t66y| 国产成人精品在线看| 久久久亚洲精品一区二区三区| 寂寞少妇一区二区三区| 精品国产免费视频| 美国欧美日韩国产在线播放| 欧美一区二区啪啪| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美欧美欧美欧美| 日韩av中文字幕一区二区| 91麻豆精品国产91久久久久| 婷婷丁香激情综合| 日韩一区二区三区在线观看| 免费欧美高清视频| 精品国内二区三区| 国产精品99久久久久久似苏梦涵| 精品久久久久一区二区国产| 国产在线视频一区二区三区| 久久一留热品黄| 成人av综合一区| 亚洲精品国产成人久久av盗摄| 在线观看区一区二| 日韩中文字幕一区二区三区| 欧美一级夜夜爽| 国产美女视频91| 中文字幕一区二区三中文字幕| 色视频成人在线观看免| 舔着乳尖日韩一区| 欧美mv日韩mv| 成人激情动漫在线观看| 一区二区三区在线高清| 欧美精品电影在线播放| 国产一区啦啦啦在线观看| 国产精品青草久久| 欧洲激情一区二区| 日韩二区三区在线观看| 久久久美女毛片| 99精品视频中文字幕| 肉色丝袜一区二区| 久久免费午夜影院| 91久久免费观看| 青青草国产精品97视觉盛宴| 国产精品天天摸av网|