]> git.puffer.fish Git - mirror/frr.git/commitdiff
bfdd: socket should be bound to vrf interface by default
authorPhilippe Guibert <philippe.guibert@6wind.com>
Fri, 8 Jan 2021 07:51:33 +0000 (07:51 +0000)
committerIgor Ryzhov <iryzhov@nfware.com>
Wed, 20 Jan 2021 16:04:36 +0000 (19:04 +0300)
When running in vrf-lite mode, the socket used in a vrf environment
should be bound to an interface belonging to the vrf. If no one is
selected, then the vrf interface itself should be bound to that socket,
so that outgoing packets are being applied routing rules for that vrf.

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

index 0a71c18a42972afabf26d51d9a8dfeda552b7896..10b99a62a97d5e944533dce73c6b97e5e02ac86f 100644 (file)
@@ -951,8 +951,9 @@ int bp_peer_socket(const struct bfd_session *bs)
 
        if (bs->key.ifname[0])
                device_to_bind = (const char *)bs->key.ifname;
-       else if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)
-           && bs->key.vrfname[0])
+       else if ((!vrf_is_backend_netns() && bs->vrf->vrf_id != VRF_DEFAULT)
+                || ((CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)
+                     && bs->key.vrfname[0])))
                device_to_bind = (const char *)bs->key.vrfname;
 
        frr_with_privs(&bglobal.bfdd_privs) {
@@ -1018,8 +1019,9 @@ int bp_peer_socketv6(const struct bfd_session *bs)
 
        if (bs->key.ifname[0])
                device_to_bind = (const char *)bs->key.ifname;
-       else if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)
-           && bs->key.vrfname[0])
+       else if ((!vrf_is_backend_netns() && bs->vrf->vrf_id != VRF_DEFAULT)
+                || ((CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)
+                     && bs->key.vrfname[0])))
                device_to_bind = (const char *)bs->key.vrfname;
 
        frr_with_privs(&bglobal.bfdd_privs) {