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

📄 ifconfig.c

📁 T-kernel Tcp/ip Protocol Stack Sample
💻 C
字号:
/* *  Copyright (C) 2003-2004 MITSUBISHI ELECTRIC CORPORATION and *  RENESAS SOLUTIONS CORPORATION *  All rights reserved. * *  TCP/IP functions subsystem: *    ifconfig function (i.e. set my IP address). * *  <for Subsystem Version> */#if defined(T_KERNEL)#include <tk/tkernel.h>#elif defined(ITRON3)#include <itron.h>#include "id.h"#endif#include <sys/byte_order.h>#include <sys/cdefs.h>#include <sys/types.h>#include <sys/uio.h>#include <sys/file.h>#include <sys/filedesc.h>#include <sys/mbuf.h>#include <sys/fcntl.h>#include <sys/socket.h>#include <sys/socketvar.h>#include <sys/sockio.h>#include <sys/errno.h>#include <sys/sysproto.h>#include <net/route.h>#include <net/ethernet.h>#include <net/if.h>#include <netinet/in.h>#include <uif_ext.h>#define OLD	1/* * NOTE: change for your network environment. */#ifdef OLD#define IFRA_ADDR	"10.74.1.100"		/* IP address */#define BROAD_ADDR	"10.74.1.255"		/* Broadcast address */#define MASK_ADDR	"255.255.255.0"		/* Mask address */#else /* OLD */#define IF_FILE "a:\\ifcfg-sn0"#endif /* OLD */#define DEFAULT_DSTNET  "0.0.0.0"#define DEFAULT_MASK    "0.0.0.0"#define GATE_ADDR       "10.74.1.1"#define IF_NAME	"sn0"int ifconfig(void);static int set_netif(char *, unsigned long, unsigned long, unsigned long);static int up_netif(char *);extern unsigned long _inet_addr(char *);#ifdef TMPextern unsigned long htonl(unsigned long);#endifextern void *fast_memset(void *, int, size_t);#ifndef OLDextern void rt_ioctl(u_char, char *, char *, char *, int, int);extern int get_file_size(char *);#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;#if defined(T_KERNEL)	s = _unix_socket(AF_INET, SOCK_DGRAM, 0);#else	s = unix_socket(AF_INET, SOCK_DGRAM, 0);#endif	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 */#if defined(T_KERNEL)	ret = _unix_ioctl(s, SIOCAIFADDR, (VP)&ifra);#else	ret = unix_ioctl(s, SIOCAIFADDR, (VP)&ifra);#endif#if defined(T_KERNEL)	_unix_shutdown(s, SHUT_RDWR);#else	unix_shutdown(s, SHUT_RDWR);#endif#if defined(T_KERNEL)	_unix_close(s);#else	unix_close(s);#endif	return (ret);}/* check and up my network interface */staticint up_netif(ifname)char *ifname;{	int s, ret;	struct ifreq ifr;#if defined(T_KERNEL)	s = _unix_socket(AF_INET, SOCK_DGRAM, 0);#else	s = unix_socket(AF_INET, SOCK_DGRAM, 0);#endif	if (s == -1)		return (s);	/* get current interface status */	memset((char *)&ifr, 0, sizeof(struct ifreq));	strcpy(ifr.ifr_name, ifname);#if defined(T_KERNEL)	ret = _unix_ioctl(s, SIOCGIFFLAGS, (VP)&ifr);#else	ret = unix_ioctl(s, SIOCGIFFLAGS, (VP)&ifr);#endif	if (ret == -1) {#if defined(T_KERNEL)		_unix_close(s);#else		unix_close(s);#endif		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);#if defined(T_KERNEL)		ret = _unix_ioctl(s, SIOCSIFFLAGS, (VP)&ifr);#else		ret = unix_ioctl(s, SIOCSIFFLAGS, (VP)&ifr);#endif		if (ret == -1) {#if defined(T_KERNEL)			_unix_close(s);#else			unix_close(s);#endif			return (ret);		}	}#if defined(T_KERNEL)	_unix_shutdown(s, SHUT_RDWR);#else	unix_shutdown(s, SHUT_RDWR);#endif#if defined(T_KERNEL)	_unix_close(s);#else	unix_close(s);#endif	return (ret);}/* set my IP address */int ifconfig(void){	int ret;	unsigned long myaddr, broadaddr, maskaddr;#ifndef OLD	unsigned int fd, ifcfgFSize, rn;	char *ebuf, *vbuf, *ebufi0, *ebufi1;#endif#ifdef TMP	/* set local host ("lo0") interface */	myaddr = htonl( _inet_addr("127.0.0.1") );	broadaddr = htonl( _inet_addr("127.255.255.255") );	maskaddr = htonl( _inet_addr("255.0.0.0") );	ret = set_netif("lo0", myaddr, broadaddr, maskaddr);	if (ret == -1) {		return (-1);	}#endif#ifdef OLD#ifndef TMP	myaddr = htonl( _inet_addr(IFRA_ADDR) );	broadaddr = htonl( _inet_addr(BROAD_ADDR) );	maskaddr = htonl( _inet_addr(MASK_ADDR) );#else	myaddr = _inet_addr(IFRA_ADDR);	broadaddr = _inet_addr(BROAD_ADDR);	maskaddr = _inet_addr(MASK_ADDR);#endif#else /* OLD */	if ((ifcfgFSize = get_file_size(IF_FILE)) == -1) {		return -1;	}	if (pget_blk(&ebuf, ID_mpl1, ifcfgFSize) != E_OK ) {		return -1;	}	/* read "ifcfg-sn0" file */	if ((fd = open(IF_FILE,(O_RDONLY|O_BINARY))) == -1) {		return -1;	}	if ((rn = read(fd,ebuf,ifcfgFSize)) == -1) {		close(fd);		return -1;	}	if (close(fd) == -1) {		return -1;	}	*(ebuf + rn ) = '\0';	/* set my IP address */	if ((ebufi0 = strstr(ebuf,"IPADDR=")) == NULL) {		return -1;	}	ebufi0 += 7;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (pget_blk(&vbuf,ID_mpl1,ebufi1-ebufi0+1) != E_OK) {		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	myaddr = _inet_addr((char *)vbuf);	rel_blk(ID_mpl1,&vbuf);	/* set broadcast address */	if ((ebufi0 = strstr(ebuf,"BROADCAST=")) == NULL) {		return -1;	}	ebufi0 += 10;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (pget_blk(&vbuf,ID_mpl1,ebufi1-ebufi0+1) != E_OK) {		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	broadaddr = _inet_addr((char *)vbuf);	rel_blk(ID_mpl1,&vbuf);	/* set mask address */	if ((ebufi0 = strstr(ebuf,"NETMASK=")) == NULL) {		return -1;	}	ebufi0 += 8;	if ((ebufi1 = strstr(ebufi0,"\r\n")) == NULL) {		return -1;	}	if (pget_blk(&vbuf,ID_mpl1,ebufi1-ebufi0+1) != E_OK){		return -1;	} 	strncpy(vbuf,ebufi0,ebufi1 - ebufi0);	*(vbuf + (ebufi1 - ebufi0)) = '\0';	maskaddr = _inet_addr((char *)vbuf);	rel_blk(ID_mpl1,&vbuf);#endif /* OLD */	/* set my network interface */	ret = set_netif(IF_NAME, myaddr, broadaddr, maskaddr);	if (ret == -1) {		return (-1);	}	/* check and up my network interface */	ret = up_netif(IF_NAME);	if (ret == -1) {		return (-1);	}#ifndef OLD	/* set default gateway */	rt_ioctl(RTM_ADD, DEFAULT_DSTNET, GATE_ADDR, DEFAULT_MASK, 1,		RTF_UP | RTF_STATIC | RTF_GATEWAY);#endif	return (0);}/* EOF */

⌨️ 快捷键说明

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