Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2248880
  • 博文数量: 395
  • 博客积分: 10994
  • 博客等级: 上将
  • 技术积分: 5586
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 19:49
文章存档

2014年(1)

2013年(10)

2012年(74)

2011年(303)

2010年(7)

分类: LINUX

2012-03-10 17:29:02



  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. }


阅读(3942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~