Diff for /libelwix/src/net.c between versions 1.10 and 1.11

version 1.10, 2014/02/10 22:50:44 version 1.11, 2015/01/19 23:21:12
Line 95  e_link_ntoa(const struct sockaddr_dl *sdl) Line 95  e_link_ntoa(const struct sockaddr_dl *sdl)
 }  }
   
 /*  /*
    * e_link_addr() - String ethernet address to link address
    *
    * @mac = ethernet address
    * @sdl = link address
    * return: -1 error or 0 ok
    */
   int
   e_link_addr(const char *mac, struct sockaddr_dl * __restrict sdl)
   {
           if (!mac || !sdl)
                   return -1;
           if (!sdl->sdl_len)
                   sdl->sdl_len = sizeof(struct sockaddr_dl);
   
           link_addr(mac, sdl);
           return 0;
   }
   
   /*
  * e_ether_ntoa() - Convert ethernet address to string   * e_ether_ntoa() - Convert ethernet address to string
  *   *
  * @n = ethernet address structure, like struct ether_addr   * @n = ethernet address structure, like struct ether_addr
Line 110  e_ether_ntoa(const ether_addr_t * __restrict n, char * Line 129  e_ether_ntoa(const ether_addr_t * __restrict n, char *
   
         memset(a, 0, len);          memset(a, 0, len);
         if (snprintf(a, len, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",           if (snprintf(a, len, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", 
                        n->ether_addr_octet[0], n->ether_addr_octet[1],                         n->octet[0], n->octet[1], 
                        n->ether_addr_octet[2], n->ether_addr_octet[3],                         n->octet[2], n->octet[3], 
                        n->ether_addr_octet[4], n->ether_addr_octet[5]) < 17)                        n->octet[4], n->octet[5]) < 17)
                 return NULL;                  return NULL;
   
         return a;          return a;
Line 134  e_ether_aton(const char *a, ether_addr_t * __restrict  Line 153  e_ether_aton(const char *a, ether_addr_t * __restrict 
                 return NULL;                  return NULL;
   
         i = sscanf(a, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",           i = sscanf(a, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", 
                        &e->ether_addr_octet[0],                         &e->octet[0], 
                        &e->ether_addr_octet[1],                         &e->octet[1], 
                        &e->ether_addr_octet[2],                         &e->octet[2], 
                        &e->ether_addr_octet[3],                         &e->octet[3], 
                        &e->ether_addr_octet[4],                         &e->octet[4], 
                        &e->ether_addr_octet[5]);                        &e->octet[5]);
         if (i != 6)          if (i != 6)
                 return NULL;                  return NULL;
   
Line 313  e_addrcmp(sockaddr_t * __restrict a, sockaddr_t * __re Line 332  e_addrcmp(sockaddr_t * __restrict a, sockaddr_t * __re
                         case AF_LINK:                          case AF_LINK:
                                 return memcmp(&a->sdl.sdl_data, &b->sdl.sdl_data,                                   return memcmp(&a->sdl.sdl_data, &b->sdl.sdl_data, 
                                                 sizeof a->sdl.sdl_data);                                                  sizeof a->sdl.sdl_data);
                           case AF_UNSPEC:
                                   return memcmp(a, b, sizeof(sockaddr_t));
                 }                  }
   
         return (int) !!(a - b);          return (int) !!(a - b);
Line 442  e_getnet(const char *net) Line 463  e_getnet(const char *net)
  *   *
  * @ifname = interface name   * @ifname = interface name
  * @addr = if addr is !=NULL then set this for new address   * @addr = if addr is !=NULL then set this for new address
 * return: NULL error or !=NULL get ethernet address * return: NULL error or !=NULL get 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)
Line 467  e_ether_addr(const char *ifname, ether_addr_t * __rest Line 488  e_ether_addr(const char *ifname, ether_addr_t * __rest
                         break;                          break;
                 }                  }
         freeifaddrs(ifa);          freeifaddrs(ifa);
   
           return a;
   }
   
   /*
    * e_get1stiface() - Get first interface of host
    *
    * @szIface = interface string buffer
    * @iflen = size of interface buffer
    * return: -1 error or 0 ok
    */
   int
   e_get1stiface(char *szIface, int iflen)
   {
           struct ifaddrs *ifa;
   
           if (!szIface || !iflen)
                   return -1;
   
           getifaddrs(&ifa);
           strlcpy(szIface, ifa->ifa_name, iflen);
           freeifaddrs(ifa);
           return 0;
   }
   
   /*
    * e_getifacebyname() - Get interface and make network structure
    *
    * @psIface = Interface, if =NULL first interface
    * @addr = Network address structure
    * return: NULL error or !=NULL network structure
    */
   sockaddr_t *
   e_getifacebyname(const char *psIface, sockaddr_t * __restrict addr)
   {
           char szIface[64] = { [0 ... 63] = 0 };
           struct ifaddrs *p, *ifa = NULL;
   
           if (!addr)
                   return NULL;
   
           memset(addr, 0, sizeof(sockaddr_t));
           getifaddrs(&ifa);
           strlcpy(szIface, psIface ? psIface : ifa->ifa_name, sizeof szIface);
           for (p = ifa; p && p->ifa_name; p++)
                   if (p->ifa_name && !strcmp(p->ifa_name, szIface) && p->ifa_addr && 
                                   p->ifa_addr->sa_family == AF_LINK) {
                           memcpy(&addr->sdl, p->ifa_addr, sizeof(struct sockaddr_dl));
                           break;
                   }
           freeifaddrs(ifa);
   
           return addr;
   }
   
   /*
    * e_getlinkbyname() - Get host ethernet address and make network structure
    *
    * @psHost = Host ethernet address
    * @addr = Network address structure
    * return: NULL error or !=NULL network structure
    */
   sockaddr_t *
   e_getlinkbyname(const char *psHost, sockaddr_t * __restrict addr)
   {
           ait_val_t v;
           sockaddr_t *a = addr;
   
           if (!psHost || !addr)
                   return NULL;
           else
                   memset(addr, 0, sizeof(sockaddr_t));
   
           AIT_INIT_VAL2(&v, string);
           if (!strchr(psHost, '.'))
                   AIT_SET_STR(&v, ":");
           AIT_SET_STRCAT(&v, psHost);
   
           addr->sdl.sdl_len = sizeof(struct sockaddr_dl);
           if (e_link_addr(AIT_GET_STR(&v), &addr->sdl))
                   a = NULL;
   
           AIT_FREE_VAL(&v);
           return a;
   }
   
   /*
    * e_getlinkbyether() - Get ethernet address and make network structure
    *
    * @mac = Ethernet address
    * @idx = Interface index
    * @type = Interface type
    * @iface = Interface name
    * @addr = Network address structure
    * return: NULL error or !=NULL network structure
    */
   sockaddr_t *
   e_getlinkbyether(const ether_addr_t * __restrict mac, u_short idx, u_char type, 
                   const char *iface, sockaddr_t * __restrict addr)
   {
           sockaddr_t *a = addr;
   
           if (!addr)
                   return NULL;
           else
                   memset(addr, 0, sizeof(sockaddr_t));
   
           addr->sdl.sdl_len = sizeof(struct sockaddr_dl);
           addr->sdl.sdl_family = AF_LINK;
           addr->sdl.sdl_index = idx;
           addr->sdl.sdl_type = type;
           if (iface && *iface) {
                   addr->sdl.sdl_nlen = strlen(iface);
                   memcpy(addr->sdl.sdl_data, iface, addr->sdl.sdl_nlen);
           }
           addr->sdl.sdl_alen = sizeof(ether_addr_t);
           memcpy(LLADDR(&addr->sdl), mac, addr->sdl.sdl_alen);
   
         return a;          return a;
 }  }

Removed from v.1.10  
changed lines
  Added in v.1.11


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