|
version 1.1.1.1, 2012/02/21 17:26:12
|
version 1.1.1.3, 2016/11/02 10:09:11
|
|
Line 179 getsockopt_ipv6_ifindex (struct msghdr *msgh)
|
Line 179 getsockopt_ipv6_ifindex (struct msghdr *msgh)
|
| |
|
| return pktinfo->ipi6_ifindex; |
return pktinfo->ipi6_ifindex; |
| } |
} |
| #endif /* HAVE_IPV6 */ |
|
| |
|
| |
int |
| |
setsockopt_ipv6_tclass(int sock, int tclass) |
| |
{ |
| |
int ret = 0; |
| |
|
| |
#ifdef IPV6_TCLASS /* RFC3542 */ |
| |
ret = setsockopt (sock, IPPROTO_IPV6, IPV6_TCLASS, &tclass, sizeof (tclass)); |
| |
if (ret < 0) |
| |
zlog_warn ("Can't set IPV6_TCLASS option for fd %d to %#x: %s", |
| |
sock, tclass, safe_strerror(errno)); |
| |
#endif |
| |
return ret; |
| |
} |
| |
#endif /* HAVE_IPV6 */ |
| |
|
| /* |
/* |
| * Process multicast socket options for IPv4 in an OS-dependent manner. |
* Process multicast socket options for IPv4 in an OS-dependent manner. |
| * Supported options are IP_{ADD,DROP}_MEMBERSHIP. |
* Supported options are IP_{ADD,DROP}_MEMBERSHIP. |
|
Line 207 int
|
Line 220 int
|
| setsockopt_ipv4_multicast(int sock, |
setsockopt_ipv4_multicast(int sock, |
| int optname, |
int optname, |
| unsigned int mcast_addr, |
unsigned int mcast_addr, |
| unsigned int ifindex) | ifindex_t ifindex) |
| { |
{ |
| #ifdef HAVE_RFC3678 |
#ifdef HAVE_RFC3678 |
| struct group_req gr; |
struct group_req gr; |
|
Line 305 setsockopt_ipv4_multicast(int sock,
|
Line 318 setsockopt_ipv4_multicast(int sock,
|
| * Set IP_MULTICAST_IF socket option in an OS-dependent manner. |
* Set IP_MULTICAST_IF socket option in an OS-dependent manner. |
| */ |
*/ |
| int |
int |
| setsockopt_ipv4_multicast_if(int sock, | setsockopt_ipv4_multicast_if(int sock, ifindex_t ifindex) |
| unsigned int ifindex) | |
| { |
{ |
| |
|
| #ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX |
#ifdef HAVE_STRUCT_IP_MREQN_IMR_IFINDEX |
|
Line 332 setsockopt_ipv4_multicast_if(int sock,
|
Line 344 setsockopt_ipv4_multicast_if(int sock,
|
| } |
} |
| |
|
| static int |
static int |
| setsockopt_ipv4_ifindex (int sock, int val) | setsockopt_ipv4_ifindex (int sock, ifindex_t val) |
| { |
{ |
| int ret; |
int ret; |
| |
|
|
Line 368 setsockopt_ipv4_tos(int sock, int tos)
|
Line 380 setsockopt_ipv4_tos(int sock, int tos)
|
| |
|
| |
|
| int |
int |
| setsockopt_ifindex (int af, int sock, int val) | setsockopt_ifindex (int af, int sock, ifindex_t val) |
| { |
{ |
| int ret = -1; |
int ret = -1; |
| |
|
|
Line 395 setsockopt_ifindex (int af, int sock, int val)
|
Line 407 setsockopt_ifindex (int af, int sock, int val)
|
| * Returns the interface index (small integer >= 1) if it can be |
* Returns the interface index (small integer >= 1) if it can be |
| * determined, or else 0. |
* determined, or else 0. |
| */ |
*/ |
| static int | static ifindex_t |
| getsockopt_ipv4_ifindex (struct msghdr *msgh) |
getsockopt_ipv4_ifindex (struct msghdr *msgh) |
| { |
{ |
| /* XXX: initialize to zero? (Always overwritten, so just cosmetic.) */ |
/* XXX: initialize to zero? (Always overwritten, so just cosmetic.) */ |
| int ifindex = -1; | ifindex_t ifindex = -1; |
| |
|
| #if defined(IP_PKTINFO) |
#if defined(IP_PKTINFO) |
| /* Linux pktinfo based ifindex retrieval */ |
/* Linux pktinfo based ifindex retrieval */ |
|
Line 419 getsockopt_ipv4_ifindex (struct msghdr *msgh)
|
Line 431 getsockopt_ipv4_ifindex (struct msghdr *msgh)
|
| struct sockaddr_dl *sdl; |
struct sockaddr_dl *sdl; |
| #else |
#else |
| /* SUNOS_5 uses an integer with the index. */ |
/* SUNOS_5 uses an integer with the index. */ |
| int *ifindex_p; | ifindex_t *ifindex_p; |
| #endif /* SUNOS_5 */ |
#endif /* SUNOS_5 */ |
| |
|
| #ifndef SUNOS_5 |
#ifndef SUNOS_5 |
|
Line 460 getsockopt_ipv4_ifindex (struct msghdr *msgh)
|
Line 472 getsockopt_ipv4_ifindex (struct msghdr *msgh)
|
| } |
} |
| |
|
| /* return ifindex, 0 if none found */ |
/* return ifindex, 0 if none found */ |
| int | ifindex_t |
| getsockopt_ifindex (int af, struct msghdr *msgh) |
getsockopt_ifindex (int af, struct msghdr *msgh) |
| { |
{ |
| switch (af) |
switch (af) |
|
Line 503 sockopt_iphdrincl_swab_systoh (struct ip *iph)
|
Line 515 sockopt_iphdrincl_swab_systoh (struct ip *iph)
|
| #endif /* HAVE_IP_HDRINCL_BSD_ORDER */ |
#endif /* HAVE_IP_HDRINCL_BSD_ORDER */ |
| |
|
| iph->ip_id = ntohs(iph->ip_id); |
iph->ip_id = ntohs(iph->ip_id); |
| |
} |
| |
|
| |
int |
| |
sockopt_tcp_rtt (int sock) |
| |
{ |
| |
#ifdef TCP_INFO |
| |
struct tcp_info ti; |
| |
socklen_t len = sizeof(ti); |
| |
|
| |
if (getsockopt (sock, IPPROTO_TCP, TCP_INFO, &ti, &len) != 0) |
| |
return 0; |
| |
|
| |
return ti.tcpi_rtt / 1000; |
| |
#else |
| |
return 0; |
| |
#endif |
| } |
} |
| |
|
| int |
int |