Diff for /libelwix/src/net.c between versions 1.12.4.3 and 1.12.4.4

version 1.12.4.3, 2016/05/14 13:26:04 version 1.12.4.4, 2016/05/14 19:55:52
Line 481  e_getnet(const char *net) Line 481  e_getnet(const char *net)
  * e_ether_addr() - Get or set ethernet address from interface name   * e_ether_addr() - Get or set ethernet address from interface name
  *   *
  * @ifname = interface name   * @ifname = interface name
 * @addr = if addr is !=NULL then set this for new address * @addr = if addr is !=NULL then set new ethernet address
 * return: NULL error or !=NULL get ethernet address should be e_free() * return: NULL error or !=NULL get current ethernet address should be e_free()
  */   */
 ether_addr_t *  ether_addr_t *
 e_ether_addr(const char *ifname, ether_addr_t * __restrict addr)  e_ether_addr(const char *ifname, ether_addr_t * __restrict addr)
 {  {
         ether_addr_t *a = NULL;          ether_addr_t *a = NULL;
         struct ifaddrs *p, *ifa = NULL;          struct ifaddrs *p, *ifa = NULL;
 #ifdef __linux__  
         int s;  
         struct ifreq req;          struct ifreq req;
           int s;
           sockaddr_t sa = E_SOCKADDR_INIT;
   
         memset(&req, 0, sizeof req);          memset(&req, 0, sizeof req);
 #endif  
   
         if (!ifname)          if (!ifname)
                 return NULL;                  return NULL;
   
Line 506  e_ether_addr(const char *ifname, ether_addr_t * __rest Line 504  e_ether_addr(const char *ifname, ether_addr_t * __rest
                                 p->ifa_addr->sa_family == AF_LINK) {                                  p->ifa_addr->sa_family == AF_LINK) {
                         a = e_malloc(sizeof(ether_addr_t));                          a = e_malloc(sizeof(ether_addr_t));
                         if (a)                          if (a)
                                memcpy(a, LLADDR((struct sockaddr_dl*) p->ifa_addr), sizeof(ether_addr_t));                                memcpy(a, LLADDR((struct sockaddr_dl*) p->ifa_addr), 
                                                 sizeof(ether_addr_t));
 
                         /* should set mac address */
                         if (addr && (s = socket(AF_LOCAL, SOCK_DGRAM, 0)) > 0) {
                                 strlcpy(req.ifr_name, ifname, sizeof req.ifr_name);
                                 sa.sa.sa_family = AF_LINK;
                                 sa.sa.sa_len = sizeof(ether_addr_t);
                                 memcpy(sa.sa.sa_data, addr, sizeof(ether_addr_t));
                                 req.ifr_ifru.ifru_addr = sa.sa;
                                 ioctl(s, SIOCSIFLLADDR, &req);
                                 close(s);
                         }
                         break;                          break;
                 }                  }
 #else  #else
Line 520  e_ether_addr(const char *ifname, ether_addr_t * __rest Line 530  e_ether_addr(const char *ifname, ether_addr_t * __rest
                                 if (a)                                  if (a)
                                         memcpy(a, req.ifr_addr.sa_data, sizeof(ether_addr_t));                                          memcpy(a, req.ifr_addr.sa_data, sizeof(ether_addr_t));
                         }                          }
                           close(s);
                         break;                          break;
                 }                  }
 #endif  #endif

Removed from v.1.12.4.3  
changed lines
  Added in v.1.12.4.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>