vxworks 下使用程序配置网卡驱动的ip地址

4239阅读 0评论2012-03-10 gududesiling
分类:LINUX



  1. #include "vxWorks.h"
  2. #include "sockLib.h"
  3. #include "inetLib.h"
  4. #include "stdio.h"
  5. #include "string.h"
  6. #include <arpa/inet.h>

  7. #include <sys/ioctl.h>
  8. #include <net/if.h>

  9. static int setIpAddr(char *,char *, char *);

  10. STATUS setIp(char *ifname,char *Ipaddr, char *mask)
  11. {

  12.     if(taskSpawn("setIp",100,0,0x100000,setIpAddr, (int)ifname, (int)Ipaddr,(int)mask,0,0,0,0,0,0,0)==ERROR)
  13.     {
  14.         printf("Task udprecv_test spawn failed.\n");
  15.         return(ERROR);
  16.     }
  17.     printf("Task spawn successed.\n");
  18.     return OK;
  19. }

  20. static int setIpAddr(char *ifname,char *Ipaddr, char *mask){
  21.     int fd;
  22.     struct ifreq ifr;
  23.     struct sockaddr_in *sin;
  24.     fd = socket(AF_INET, SOCK_DGRAM, 0);
  25.     if(fd < 0)
  26.     {
  27.         perror("socket error");
  28.         return -1;
  29.     }    
  30.     memset(&ifr, 0, sizeof(ifr));
  31.     strcpy(ifr.ifr_name, ifname);
  32.     sin = (struct sockaddr_in *)&ifr.ifr_addr;
  33.     sin->sin_family = AF_INET;
  34.     sin->sin_addr.s_addr = inet_addr(Ipaddr);
  35.     
  36.     printf("ifName:%s\n",ifname);
  37.     printf("ipAddr:%s\n", Ipaddr);
  38.     printf("ifMask:%s\n", mask);
  39.     if(ioctl(fd, SIOCSIFADDR, &ifr) < 0)
  40.     {
  41.         printf("ioctl ip failed\n");
  42.         close(fd);
  43.         return -1;
  44.     }
  45.     sin->sin_addr.s_addr = inet_addr(mask);
  46.     if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
  47.     {
  48.         printf("ioctl mask failed\n");
  49.         close(fd);
  50.         return -1;
  51.     }
  52.     close(fd);
  53.     return 0;
  54. }


上一篇:linux设备驱动之8250串口驱动
下一篇:vxwroks 下终端中调用全局函数输入参数的格式