IO: Workaround for broken FreeBSD behavior
FreeBSD silently changes TTL to 1 when MSG_DONTROUTE is used, even when it is explicitly set to another value. That breaks TTL security sockets, including BFD which always uses TTL 255. Bad FreeBSD!
This commit is contained in:
parent
82b742533b
commit
c2d29dd197
1 changed files with 3 additions and 1 deletions
|
@ -1566,7 +1566,9 @@ sk_sendmsg(sock *s)
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_DONTROUTE_UNICAST
|
#ifdef CONFIG_DONTROUTE_UNICAST
|
||||||
if (ipa_is_ip4(s->daddr) && ip4_is_unicast(ipa_to_ip4(s->daddr)))
|
/* FreeBSD silently changes TTL to 1 when MSG_DONTROUTE is used, therefore we
|
||||||
|
cannot use it for other cases (e.g. when TTL security is used). */
|
||||||
|
if (ipa_is_ip4(s->daddr) && ip4_is_unicast(ipa_to_ip4(s->daddr)) && (s->ttl == 1))
|
||||||
flags = MSG_DONTROUTE;
|
flags = MSG_DONTROUTE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue