mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
- Fix #660: Fix interface-automatic broken in the presence of
asymmetric routing. git-svn-id: file:///svn/unbound/trunk@3383 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
6bc89b3ccd
commit
40c0bbf371
2 changed files with 12 additions and 0 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
2 April 2015: Wouter
|
||||||
|
- Fix #660: Fix interface-automatic broken in the presence of
|
||||||
|
asymmetric routing.
|
||||||
|
|
||||||
26 March 2015: Wouter
|
26 March 2015: Wouter
|
||||||
- remote.c probedelay line is easier to read.
|
- remote.c probedelay line is easier to read.
|
||||||
- rename ldns subdirectory to sldns to avoid name collision.
|
- rename ldns subdirectory to sldns to avoid name collision.
|
||||||
|
|
|
||||||
|
|
@ -498,12 +498,16 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
|
||||||
cmsg = CMSG_FIRSTHDR(&msg);
|
cmsg = CMSG_FIRSTHDR(&msg);
|
||||||
if(r->srctype == 4) {
|
if(r->srctype == 4) {
|
||||||
#ifdef IP_PKTINFO
|
#ifdef IP_PKTINFO
|
||||||
|
void* cmsg_data;
|
||||||
msg.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
|
msg.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
|
||||||
log_assert(msg.msg_controllen <= sizeof(control));
|
log_assert(msg.msg_controllen <= sizeof(control));
|
||||||
cmsg->cmsg_level = IPPROTO_IP;
|
cmsg->cmsg_level = IPPROTO_IP;
|
||||||
cmsg->cmsg_type = IP_PKTINFO;
|
cmsg->cmsg_type = IP_PKTINFO;
|
||||||
memmove(CMSG_DATA(cmsg), &r->pktinfo.v4info,
|
memmove(CMSG_DATA(cmsg), &r->pktinfo.v4info,
|
||||||
sizeof(struct in_pktinfo));
|
sizeof(struct in_pktinfo));
|
||||||
|
/* unset the ifindex to not bypass the routing tables */
|
||||||
|
cmsg_data = CMSG_DATA(cmsg);
|
||||||
|
((struct in_pktinfo *) cmsg_data)->ipi_ifindex = 0;
|
||||||
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
|
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
|
||||||
#elif defined(IP_SENDSRCADDR)
|
#elif defined(IP_SENDSRCADDR)
|
||||||
msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr));
|
msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr));
|
||||||
|
|
@ -518,12 +522,16 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet,
|
||||||
msg.msg_control = NULL;
|
msg.msg_control = NULL;
|
||||||
#endif /* IP_PKTINFO or IP_SENDSRCADDR */
|
#endif /* IP_PKTINFO or IP_SENDSRCADDR */
|
||||||
} else if(r->srctype == 6) {
|
} else if(r->srctype == 6) {
|
||||||
|
void* cmsg_data;
|
||||||
msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
|
msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
|
||||||
log_assert(msg.msg_controllen <= sizeof(control));
|
log_assert(msg.msg_controllen <= sizeof(control));
|
||||||
cmsg->cmsg_level = IPPROTO_IPV6;
|
cmsg->cmsg_level = IPPROTO_IPV6;
|
||||||
cmsg->cmsg_type = IPV6_PKTINFO;
|
cmsg->cmsg_type = IPV6_PKTINFO;
|
||||||
memmove(CMSG_DATA(cmsg), &r->pktinfo.v6info,
|
memmove(CMSG_DATA(cmsg), &r->pktinfo.v6info,
|
||||||
sizeof(struct in6_pktinfo));
|
sizeof(struct in6_pktinfo));
|
||||||
|
/* unset the ifindex to not bypass the routing tables */
|
||||||
|
cmsg_data = CMSG_DATA(cmsg);
|
||||||
|
((struct in6_pktinfo *) cmsg_data)->ipi6_ifindex = 0;
|
||||||
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
|
cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
|
||||||
} else {
|
} else {
|
||||||
/* try to pass all 0 to use default route */
|
/* try to pass all 0 to use default route */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue