- #include "vxWorks.h"
- #include "sockLib.h"
- #include "inetLib.h"
- #include "stdio.h"
- #include "string.h"
- #include <arpa/inet.h>
- #include <sys/ioctl.h>
- #include <net/if.h>
- static int setIpAddr(char *,char *, char *);
- STATUS setIp(char *ifname,char *Ipaddr, char *mask)
- {
- if(taskSpawn("setIp",100,0,0x100000,setIpAddr, (int)ifname, (int)Ipaddr,(int)mask,0,0,0,0,0,0,0)==ERROR)
- {
- printf("Task udprecv_test spawn failed.\n");
- return(ERROR);
- }
- printf("Task spawn successed.\n");
- return OK;
- }
- static int setIpAddr(char *ifname,char *Ipaddr, char *mask){
- int fd;
- struct ifreq ifr;
- struct sockaddr_in *sin;
- fd = socket(AF_INET, SOCK_DGRAM, 0);
- if(fd < 0)
- {
- perror("socket error");
- return -1;
- }
- memset(&ifr, 0, sizeof(ifr));
- strcpy(ifr.ifr_name, ifname);
- sin = (struct sockaddr_in *)&ifr.ifr_addr;
- sin->sin_family = AF_INET;
- sin->sin_addr.s_addr = inet_addr(Ipaddr);
-
- printf("ifName:%s\n",ifname);
- printf("ipAddr:%s\n", Ipaddr);
- printf("ifMask:%s\n", mask);
- if(ioctl(fd, SIOCSIFADDR, &ifr) < 0)
- {
- printf("ioctl ip failed\n");
- close(fd);
- return -1;
- }
- sin->sin_addr.s_addr = inet_addr(mask);
- if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
- {
- printf("ioctl mask failed\n");
- close(fd);
- return -1;
- }
- close(fd);
- return 0;
- }