Diff for /embedaddon/quagga/lib/sockunion.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2012/10/09 09:22:28 version 1.1.1.3, 2013/07/21 23:54:39
Line 177  sockunion2str (union sockunion *su, char *buf, size_t  Line 177  sockunion2str (union sockunion *su, char *buf, size_t 
 union sockunion *  union sockunion *
 sockunion_str2su (const char *str)  sockunion_str2su (const char *str)
 {  {
  int ret;  union sockunion *su = XCALLOC (MTYPE_SOCKUNION, sizeof (union sockunion));
  union sockunion *su;  
  if (!str2sockunion (str, su))
  su = XCALLOC (MTYPE_SOCKUNION, sizeof (union sockunion));    return su;
  
  ret = inet_pton (AF_INET, str, &su->sin.sin_addr); 
  if (ret > 0)                  /* Valid IPv4 address format. */ 
    { 
      su->sin.sin_family = AF_INET; 
#ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 
      su->sin.sin_len = sizeof(struct sockaddr_in); 
#endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */ 
      return su; 
    } 
#ifdef HAVE_IPV6 
  ret = inet_pton (AF_INET6, str, &su->sin6.sin6_addr); 
  if (ret > 0)                  /* Valid IPv6 address format. */ 
    { 
      su->sin6.sin6_family = AF_INET6; 
#ifdef SIN6_LEN 
      su->sin6.sin6_len = sizeof(struct sockaddr_in6); 
#endif /* SIN6_LEN */ 
      return su; 
    } 
#endif /* HAVE_IPV6 */ 
 
   XFREE (MTYPE_SOCKUNION, su);    XFREE (MTYPE_SOCKUNION, su);
   return NULL;    return NULL;
 }  }
   
 char *  
 sockunion_su2str (union sockunion *su)  
 {  
   char str[SU_ADDRSTRLEN];  
   
   switch (su->sa.sa_family)  
     {  
     case AF_INET:  
       inet_ntop (AF_INET, &su->sin.sin_addr, str, sizeof (str));  
       break;  
 #ifdef HAVE_IPV6  
     case AF_INET6:  
       inet_ntop (AF_INET6, &su->sin6.sin6_addr, str, sizeof (str));  
       break;  
 #endif /* HAVE_IPV6 */  
     }  
   return XSTRDUP (MTYPE_TMP, str);  
 }  
   
 /* Convert IPv4 compatible IPv6 address to IPv4 address. */  /* Convert IPv4 compatible IPv6 address to IPv4 address. */
 static void  static void
 sockunion_normalise_mapped (union sockunion *su)  sockunion_normalise_mapped (union sockunion *su)
Line 422  sockunion_bind (int sock, union sockunion *su, unsigne Line 382  sockunion_bind (int sock, union sockunion *su, unsigne
       su->sin.sin_len = size;        su->sin.sin_len = size;
 #endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */  #endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
       if (su_addr == NULL)        if (su_addr == NULL)
        su->sin.sin_addr.s_addr = htonl (INADDR_ANY);        sockunion2ip (su) = htonl (INADDR_ANY);
     }      }
 #ifdef HAVE_IPV6  #ifdef HAVE_IPV6
   else if (su->sa.sa_family == AF_INET6)    else if (su->sa.sa_family == AF_INET6)
Line 779  sockunion_cmp (union sockunion *su1, union sockunion * Line 739  sockunion_cmp (union sockunion *su1, union sockunion *
   
   if (su1->sa.sa_family == AF_INET)    if (su1->sa.sa_family == AF_INET)
     {      {
      if (ntohl (su1->sin.sin_addr.s_addr) == ntohl (su2->sin.sin_addr.s_addr))      if (ntohl (sockunion2ip (su1)) == ntohl (sockunion2ip (su2)))
         return 0;          return 0;
      if (ntohl (su1->sin.sin_addr.s_addr) > ntohl (su2->sin.sin_addr.s_addr))      if (ntohl (sockunion2ip (su1)) > ntohl (sockunion2ip (su2)))
         return 1;          return 1;
       else        else
         return -1;          return -1;

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


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