From: Philippe Guibert Date: Mon, 25 Mar 2019 16:19:25 +0000 (+0100) Subject: bfdd: socket creation in a vrf can be done X-Git-Tag: base_7.2~355^2~20 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=e52a638341e9c02d08d9faf5def68d15c7bbf185;p=mirror%2Ffrr.git bfdd: socket creation in a vrf can be done vrf_socket() call is performed instead of socket() call. Signed-off-by: Philippe Guibert --- diff --git a/bfdd/bfd.h b/bfdd/bfd.h index 5d7795d7fb..36eea2433d 100644 --- a/bfdd/bfd.h +++ b/bfdd/bfd.h @@ -49,6 +49,8 @@ DECLARE_MTYPE(BFDD_CONTROL); DECLARE_MTYPE(BFDD_SESSION_OBSERVER); DECLARE_MTYPE(BFDD_NOTIFICATION); +extern struct zebra_privs_t bfdd_privs; + struct bfd_timers { uint32_t desired_min_tx; uint32_t required_min_rx; diff --git a/bfdd/bfd_packet.c b/bfdd/bfd_packet.c index 93677ec85a..5b7db4f709 100644 --- a/bfdd/bfd_packet.c +++ b/bfdd/bfd_packet.c @@ -37,7 +37,6 @@ #include "bfd.h" - /* * Prototypes */ @@ -906,7 +905,10 @@ int bp_peer_socket(const struct bfd_session *bs) struct sockaddr_in sin; static int srcPort = BFD_SRCPORTINIT; - sd = socket(AF_INET, SOCK_DGRAM, PF_UNSPEC); + frr_elevate_privs(&bfdd_privs) { + sd = vrf_socket(AF_INET, SOCK_DGRAM, PF_UNSPEC, + bs->vrf->vrf_id, NULL); + } if (sd == -1) { log_error("ipv4-new: failed to create socket: %s", strerror(errno)); @@ -976,7 +978,10 @@ int bp_peer_socketv6(const struct bfd_session *bs) struct sockaddr_in6 sin6; static int srcPort = BFD_SRCPORTINIT; - sd = socket(AF_INET6, SOCK_DGRAM, PF_UNSPEC); + frr_elevate_privs(&bfdd_privs) { + sd = vrf_socket(AF_INET6, SOCK_DGRAM, PF_UNSPEC, + bs->vrf->vrf_id, NULL); + } if (sd == -1) { log_error("ipv6-new: failed to create socket: %s", strerror(errno));