]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
set TTL to 255, as suggested by RFC 5881
authorAlan T. DeKok <aland@freeradius.org>
Sun, 26 Feb 2023 23:12:37 +0000 (18:12 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 27 Feb 2023 14:12:27 +0000 (09:12 -0500)
We likely want to have this configurable, so that the BFD links
can go slightly further.

src/modules/proto_bfd/proto_bfd.c

index a15509f74fdb73d28e23459b432cf9e9aa3b8782..290904a733cb6c9f2d81aea427ceb0b894cc8a13 100644 (file)
@@ -18,6 +18,8 @@
  *   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  *
  * @copyright 2012 Network RADIUS SAS (legal@networkradius.com)
+ *
+ *  Check on RFC 5881 for BFD over IP issues.
  */
 
 #include <freeradius-devel/server/base.h>
@@ -1732,6 +1734,7 @@ static int bfd_socket_parse(CONF_SECTION *cs, rad_listen_t *this)
 static int bfd_socket_open(CONF_SECTION *cs, rad_listen_t *this)
 {
        int rcode;
+       int ttl = 255;
        uint16_t port;
        bfd_socket_t *sock = this->data;
 
@@ -1747,6 +1750,8 @@ static int bfd_socket_open(CONF_SECTION *cs, rad_listen_t *this)
                return -1;
        }
 
+       if (setsockopt(this->fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) < 0) goto fail;
+
        rad_suid_up();
        rcode = fr_socket_bind(this->fd, &sock->my_ipaddr, &port, sock->interface);
        rad_suid_down();
@@ -1754,6 +1759,8 @@ static int bfd_socket_open(CONF_SECTION *cs, rad_listen_t *this)
 
        if (rcode < 0) {
                char buffer[256];
+
+       fail:
                close(this->fd);
 
                this->print(this, buffer, sizeof(buffer));