version 1.1.1.1, 2012/02/21 17:26:12
|
version 1.1.1.2, 2012/10/09 09:22:28
|
Line 297 sockunion_sizeof (union sockunion *su)
|
Line 297 sockunion_sizeof (union sockunion *su)
|
} |
} |
|
|
/* return sockunion structure : this function should be revised. */ |
/* return sockunion structure : this function should be revised. */ |
static char * | static const char * |
sockunion_log (union sockunion *su) | sockunion_log (union sockunion *su, char *buf, size_t len) |
{ |
{ |
static char buf[SU_ADDRSTRLEN]; |
|
|
|
switch (su->sa.sa_family) |
switch (su->sa.sa_family) |
{ |
{ |
case AF_INET: |
case AF_INET: |
snprintf (buf, SU_ADDRSTRLEN, "%s", inet_ntoa (su->sin.sin_addr)); | return inet_ntop(AF_INET, &su->sin.sin_addr, buf, len); |
break; | |
#ifdef HAVE_IPV6 |
#ifdef HAVE_IPV6 |
case AF_INET6: |
case AF_INET6: |
snprintf (buf, SU_ADDRSTRLEN, "%s", | return inet_ntop(AF_INET6, &(su->sin6.sin6_addr), buf, len); |
inet_ntop (AF_INET6, &(su->sin6.sin6_addr), buf, SU_ADDRSTRLEN)); | |
break; |
break; |
#endif /* HAVE_IPV6 */ |
#endif /* HAVE_IPV6 */ |
|
|
default: |
default: |
snprintf (buf, SU_ADDRSTRLEN, "af_unknown %d ", su->sa.sa_family); | snprintf (buf, len, "af_unknown %d ", su->sa.sa_family); |
break; | return buf; |
} |
} |
return (XSTRDUP (MTYPE_TMP, buf)); |
|
} |
} |
|
|
/* sockunion_connect returns |
/* sockunion_connect returns |
Line 379 sockunion_connect (int fd, union sockunion *peersu, un
|
Line 376 sockunion_connect (int fd, union sockunion *peersu, un
|
{ |
{ |
if (errno != EINPROGRESS) |
if (errno != EINPROGRESS) |
{ |
{ |
|
char str[SU_ADDRSTRLEN]; |
zlog_info ("can't connect to %s fd %d : %s", |
zlog_info ("can't connect to %s fd %d : %s", |
sockunion_log (&su), fd, safe_strerror (errno)); | sockunion_log (&su, str, sizeof str), |
| fd, safe_strerror (errno)); |
return connect_error; |
return connect_error; |
} |
} |
} |
} |
Line 565 sockopt_minttl (int family, int sock, int minttl)
|
Line 564 sockopt_minttl (int family, int sock, int minttl)
|
|
|
errno = EOPNOTSUPP; |
errno = EOPNOTSUPP; |
return -1; |
return -1; |
|
} |
|
|
|
int |
|
sockopt_v6only (int family, int sock) |
|
{ |
|
int ret, on = 1; |
|
|
|
#ifdef HAVE_IPV6 |
|
#ifdef IPV6_V6ONLY |
|
if (family == AF_INET6) |
|
{ |
|
ret = setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY, |
|
(void *) &on, sizeof (int)); |
|
if (ret < 0) |
|
{ |
|
zlog (NULL, LOG_WARNING, "can't set sockopt IPV6_V6ONLY " |
|
"to socket %d", sock); |
|
return -1; |
|
} |
|
return 0; |
|
} |
|
#endif /* IPV6_V6ONLY */ |
|
#endif /* HAVE_IPV6 */ |
|
return 0; |
} |
} |
|
|
/* If same family and same prefix return 1. */ |
/* If same family and same prefix return 1. */ |