Magellan Linux

Diff of /trunk/mkinitrd-magellan/klibc/usr/kinit/ipconfig/netdev.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 532 by niro, Sat Sep 1 22:45:15 2007 UTC revision 1122 by niro, Wed Aug 18 21:11:40 2010 UTC
# Line 12  Line 12 
12  #include <net/if_arp.h>  #include <net/if_arp.h>
13  #include <netinet/in.h>  #include <netinet/in.h>
14  #include <linux/route.h>  #include <linux/route.h>
15    #include <linux/sockios.h>
16    
17  #include "netdev.h"  #include "netdev.h"
18    
# Line 40  int netdev_getflags(struct netdev *dev, Line 41  int netdev_getflags(struct netdev *dev,
41    
42  static int netdev_sif_addr(struct ifreq *ifr, int cmd, uint32_t addr)  static int netdev_sif_addr(struct ifreq *ifr, int cmd, uint32_t addr)
43  {  {
44   struct sockaddr_in *sin = (struct sockaddr_in *)&ifr->ifr_addr;   struct sockaddr_in sin;
45    
46   sin->sin_family = AF_INET;   memset(&sin, 0, sizeof(sin));
47   sin->sin_addr.s_addr = addr;   sin.sin_family = AF_INET;
48     sin.sin_addr.s_addr = addr;
49    
50     memcpy(&ifr->ifr_addr, &sin, sizeof sin);
51    
52   return ioctl(cfd, cmd, ifr);   return ioctl(cfd, cmd, ifr);
53  }  }
# Line 75  int netdev_setaddress(struct netdev *dev Line 79  int netdev_setaddress(struct netdev *dev
79   return 0;   return 0;
80  }  }
81    
82    static void set_s_addr(struct sockaddr *saddr, uint32_t ipaddr)
83    {
84     struct sockaddr_in sin = {
85     .sin_family = AF_INET,
86     .sin_addr.s_addr = ipaddr,
87     };
88     memcpy(saddr, &sin, sizeof sin);
89    }
90    
91  int netdev_setdefaultroute(struct netdev *dev)  int netdev_setdefaultroute(struct netdev *dev)
92  {  {
93   struct rtentry r;   struct rtentry r;
# Line 84  int netdev_setdefaultroute(struct netdev Line 97  int netdev_setdefaultroute(struct netdev
97    
98   memset(&r, 0, sizeof(r));   memset(&r, 0, sizeof(r));
99    
100   ((struct sockaddr_in *)&r.rt_dst)->sin_family = AF_INET;   set_s_addr(&r.rt_dst, INADDR_ANY);
101   ((struct sockaddr_in *)&r.rt_dst)->sin_addr.s_addr = INADDR_ANY;   set_s_addr(&r.rt_gateway, dev->ip_gateway);
102   ((struct sockaddr_in *)&r.rt_gateway)->sin_family = AF_INET;   set_s_addr(&r.rt_genmask, INADDR_ANY);
  ((struct sockaddr_in *)&r.rt_gateway)->sin_addr.s_addr =  
     dev->ip_gateway;  
  ((struct sockaddr_in *)&r.rt_genmask)->sin_family = AF_INET;  
  ((struct sockaddr_in *)&r.rt_genmask)->sin_addr.s_addr = INADDR_ANY;  
103   r.rt_flags = RTF_UP | RTF_GATEWAY;   r.rt_flags = RTF_UP | RTF_GATEWAY;
104    
105   if (ioctl(cfd, SIOCADDRT, &r) == -1 && errno != EEXIST) {   if (ioctl(cfd, SIOCADDRT, &r) == -1 && errno != EEXIST) {

Legend:
Removed from v.532  
changed lines
  Added in v.1122