]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bfdd: socket creation in a vrf can be done
authorPhilippe Guibert <philippe.guibert@6wind.com>
Mon, 25 Mar 2019 16:19:25 +0000 (17:19 +0100)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Tue, 7 May 2019 13:49:39 +0000 (15:49 +0200)
vrf_socket() call is performed instead of socket() call.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bfdd/bfd.h
bfdd/bfd_packet.c

index 5d7795d7fb8db432685e0de69c473dd230b404f4..36eea2433de42234468ae75f37b995548271533d 100644 (file)
@@ -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;
index 93677ec85aceeb7709385a07c652682b843d73aa..5b7db4f70963b4c662376ba0d88149fd80d0b65b 100644 (file)
@@ -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));