]> git.puffer.fish Git - matthieu/frr.git/commitdiff
pimd: Fix PIM VRF support (send register/register stop in VRF)
authorMartin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
Fri, 21 Feb 2025 07:54:49 +0000 (08:54 +0100)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Mon, 24 Feb 2025 18:57:31 +0000 (18:57 +0000)
In 946195391406269003275850e1a4d550ea8db38b and
8ebcc02328c6b63ecf85e44fdfbf3365be27c127, transmission of PIM register and
register stop messages was changed to use a separate socket. However, that
socket is not bound to a possible VRF, so the messages were sent in the
default VRF instead. Call vrf_bind() once after socket creation and when the
VRF is ready to ensure transmission in the correct VRF. vrf_bind() handles
the non-VRF case (i.e. VRF_DEFAULT) automatically, so it may be called
unconditionally.

Signed-off-by: Martin Buck <mb-tmp-tvguho.pbz@gromit.dyndns.org>
(cherry picked from commit 5a01011e0d2db538a8ba523904bd4f08b786edfb)

pimd/pim_instance.c

index 3945c5923d5e68c0e6130359d6be25f41fdc01ea..f1471a5a93bfb32b5cb87b2fab8b9d57a56021ff 100644 (file)
@@ -181,6 +181,9 @@ static int pim_vrf_enable(struct vrf *vrf)
 
        zlog_debug("%s: for %s %u", __func__, vrf->name, vrf->vrf_id);
 
+       if (vrf_bind(vrf->vrf_id, pim->reg_sock, NULL) < 0)
+               zlog_warn("Failed to bind register socket to VRF %s", vrf->name);
+
        pim_mroute_socket_enable(pim);
 
        FOR_ALL_INTERFACES (vrf, ifp) {