📄 ifconfig.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 + -