⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifconfig.c

📁 T-kernel Tcp/ip Protocol Stack Sample
💻 C
字号:
/* *  Copyright (C) 2004-2006 MITSUBISHI ELECTRIC CORPORATION and *  RENESAS SOLUTIONS CORPORATION *  All rights reserved. * *  set my IP address (like UNIX "ifconfig" command). */#define DEBUG#include <tk/tkernel.h>#include <renesas_tcpip.h>/* * Set below flag in case of fixed IP address. * Otherwise get IP address from a file(= ifcfg-sn0) on CF card. */#ifdef USE_FILEextern ID mplid;// #include <dfs32r.h>// #include "fcntl.h"#endif // USE_FILE/* * NOTE: change for your network environment. */#ifndef USE_FILE#define IFRA_ADDR	"172.30.62.234"		/* IP address */#define BROAD_ADDR	"172.30.62.255"		/* Broadcast address */#define MASK_ADDR	"255.255.255.0"		/* Mask address */#define GATE_ADDR   "172.30.62.254"// #define IFRA_ADDR	"192.168.123.234"		/* IP address */// #define BROAD_ADDR	"192.168.123.255"		/* Broadcast address */// #define MASK_ADDR	"255.255.255.0"		/* Mask address */// #define GATE_ADDR   "192.168.123.254"#else /* USE_FILE */#define IF_FILE "a:\\ifcfg-sn0"#endif /* USE_FILE */#define DEFAULT_DSTNET  "0.0.0.0"#define DEFAULT_MASK    "0.0.0.0"#define IF_NAME	"sn0"int renesas_tcpip_ifconfig(void);static int set_netif(char *, unsigned long, unsigned long, unsigned long);static int up_netif(char *);#ifdef USE_FILEextern void renesas_tcpip_route(u_char, char *, char *, char *, int, int);#if 1 static int get_file_size(char *);#else // originalextern int get_file_size(char *);#endif // if 1#endif/* set my network interface */staticint set_netif(ifname, myaddr, broadaddr, maskaddr)char *ifname;unsigned long myaddr;unsigned long broadaddr;unsigned long maskaddr;{	int s, ret;	struct ifaliasreq ifra;	struct sockaddr_in *sin;	s = renesas_tcpip_socket(AF_INET, SOCK_DGRAM, 0);	if (s == -1)		return (s);	/*	 * initialize interface configuration	 */	memset((char *)&ifra, 0, sizeof(struct ifaliasreq));	strcpy(ifra.ifra_name, ifname);	sin = (struct sockaddr_in *)&ifra.ifra_addr;	sin->sin_len = sizeof(struct sockaddr_in);	sin->sin_family = AF_INET;	sin->sin_addr.s_addr = myaddr;	/* network broadcast addr */	sin = (struct sockaddr_in *)&ifra.ifra_broadaddr;	sin->sin_len = sizeof(struct sockaddr_in);	sin->sin_family = AF_INET;	sin->sin_addr.s_addr = broadaddr;	/* network mask addr */	sin = (struct sockaddr_in *)&ifra.ifra_mask;	sin->sin_len = sizeof(struct sockaddr_in);	sin->sin_family = AF_INET;	sin->sin_addr.s_addr = maskaddr;	/* set interface address */	ret = renesas_tcpip_ioctl(s, SIOCAIFADDR, (VP)&ifra);	renesas_tcpip_shutdown(s, SHUT_RDWR);	renesas_tcpip_close(s);	return (ret);}/* check and up my network interface */staticint up_netif(ifname)char *ifname;{	int s, ret;	struct ifreq ifr;	s = renesas_tcpip_socket(AF_INET, SOCK_DGRAM, 0);	if (s == -1)		return (s);	/* get current interface status */	memset((char *)&ifr, 0, sizeof(struct ifreq));	strcpy(ifr.ifr_name, ifname);	ret = renesas_tcpip_ioctl(s, SIOCGIFFLAGS, (VP)&ifr);	if (ret == -1) {		renesas_tcpip_close(s);		return (ret);	}	/* up the interface if neccessary */	if (!(ifr.ifr_ifru.ifru_flags & (short)IFF_UP)) {		/* bit on */		ifr.ifr_ifru.ifru_flags |= (IFF_UP);		ret = renesas_tcpip_ioctl(s, SIOCSIFFLAGS, (VP)&ifr);		if (ret == -1) {			renesas_tcpip_close(s);			return (ret);		}	}	renesas_tcpip_shutdown(s, SHUT_RDWR);	renesas_tcpip_close(s);	return (ret);}int renesas_tcpip_ifconfig(void){	int ret;	unsigned long myaddr, broadaddr, maskaddr, gwaddr;#ifdef USE_FILE	unsigned int fd, ifcfgFSize;	char *ebuf, *vbuf, *ebufi0, *ebufi1;#endif	renesas_tcpip_errno = 0;#ifdef USE_FILE	ret = dev_att(0);	if(ret < 0){#if defined(DEBUG)		tm_putstring("dev_att error!!\n");#endif /* DEBUG */		return(-1);	}#if defined(DEBUG)	tm_putstring("CompactFlash attached\n");#endif /* DEBUG */#endif// #ifdef TMP	/* set local host ("lo0") interface */	myaddr = inet_addr("127.0.0.1");	broadaddr = inet_addr("127.255.255.255");	maskaddr = inet_addr("255.0.0.0");	ret = set_netif("lo0", myaddr, broadaddr, maskaddr);	if (ret == -1) {		return (-1);	}#if defined(DEBUG)	tm_putstring("set localhost(127.0.0.1) passed\n");#endif// #endif /* TMP */#ifndef USE_FILE	myaddr = inet_addr(IFRA_ADDR);	broadaddr = inet_addr(BROAD_ADDR);	maskaddr = inet_addr(MASK_ADDR);#else /* USE_FILE */	ifcfgFSize = get_file_size(IF_FILE);	if( ifcfgFSize == -1) {		return -1;	}	/* read "ifcfg-sn0" file */	fd = vfat_open(IF_FILE,DFS_O_RDONLY,0x0777);	if( fd < 0){		return -1;	}	tm_putstring("ifcfg-sn0 opened\n");	tk_get_mpl( mplid, ifcfgFSize, (VP *)&ebuf, TMO_POL);		ret = vfat_read(fd,ebuf,ifcfgFSize);	// if( ret > 0 ){		// *(ebuf + ret ) = '\0';	// }	tm_putstring("ifcfg-sn0 read\n");	*(ebuf + ret ) = '\0';	vfat_close(fd);	/* set my IP address */	if ((ebufi0 = strstr(ebuf,"IPADDR=")) == NULL) {		return -1;	}	ebufi0 += 7;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (tk_get_mpl(mplid,ebufi1-ebufi0+1,(VP *)&vbuf, TMO_POL) != E_OK) {		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	myaddr = inet_addr((char *)vbuf);	tk_rel_mpl(mplid,&vbuf);	/* set broadcast address */	if ((ebufi0 = strstr(ebuf,"BROADCAST=")) == NULL) {		return -1;	}	ebufi0 += 10;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (tk_get_mpl(mplid, ebufi1-ebufi0+1, (VP *)&vbuf, TMO_POL) != E_OK) {		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	broadaddr = inet_addr((char *)vbuf);	tk_rel_mpl(mplid,&vbuf);	/* set mask address */	if ((ebufi0 = strstr(ebuf,"NETMASK=")) == NULL) {		return -1;	}	ebufi0 += 8;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (tk_get_mpl(mplid, ebufi1-ebufi0+1, (VP *)&vbuf,TMO_POL) != E_OK){		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	maskaddr = inet_addr((char *)vbuf);	tk_rel_mpl(mplid,&vbuf);	if( (ebufi0 = strstr(ebuf,"GATE_ADDR=")) == NULL){		gwaddr = 0;#if defined(DEBUG)		tm_putstring("gwaddr =0\n");#endif /* DEBUG */	}else{		ebufi0 += 10;		if( (ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {			return -1;		}		if (tk_get_mpl(mplid, ebufi1-ebufi0+1, (VP *)&vbuf, TMO_POL) != E_OK) {			return -1;		}		strncpy(vbuf,ebufi0,ebufi1 - ebufi0);		*(vbuf + (ebufi1 - ebufi0)) = '\0';		gwaddr = inet_addr((char *)vbuf);#if defined(DEBUG)		// tm_putstring("gwaddr =%s\n",vbuf);#endif		tk_rel_mpl(mplid, &vbuf);		tk_rel_mpl(mplid, &ebuf);	}#endif /* USE_FILE */	/* set my network interface */	ret = set_netif(IF_NAME, myaddr, broadaddr, maskaddr);	if (ret == -1) {		return (-1);	}#if defined(DEBUG)	tm_putstring("set network is OK!!\n");#endif	/* check and up my network interface */	ret = up_netif(IF_NAME);	if (ret == -1) {		return (-1);	}#if defined(DEBUG)	tm_putstring("check network is OK!\n");#endif#ifdef SET_DEFGW	/* set default gateway */#ifdef USE_FILE	renesas_tcpip_route(RTM_ADD, DEFAULT_DSTNET, gwaddr, DEFAULT_MASK,		1, RTF_UP | RTF_STATIC | RTF_GATEWAY);	tm_putstring("renesas_tcpip_route passed!!\n");#else	renesas_tcpip_route(RTM_ADD, DEFAULT_DSTNET, GATE_ADDR, DEFAULT_MASK,		1, RTF_UP | RTF_STATIC | RTF_GATEWAY);#endif // 7.Dec.2005#endif /* SET_DEFGW */	return (0);}#ifdef USE_FILEstatic int get_file_size( char * fileName){	long fileSize;	signed int fd;	fd = vfat_open(fileName, DFS_O_RDONLY,0x0777);	fileSize = vfat_lseek(fd, 0, 2);	vfat_close(fd);	return fileSize;}#endif/* EOF */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -