mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-30 12:01:43 +00:00
Merge pull request #18333 from FRRouting/mergify/bp/stable/10.2/pr-18315
pimd: Fix PIM6 MLD VRF support (use recvmsg() pktinfo) (backport #18315)
This commit is contained in:
commit
aa86d77e45
@ -1657,18 +1657,6 @@ static void gm_t_recv(struct event *t)
|
|||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct interface *ifp;
|
|
||||||
|
|
||||||
ifp = if_lookup_by_index(pkt_src->sin6_scope_id, pim->vrf->vrf_id);
|
|
||||||
if (!ifp || !ifp->info)
|
|
||||||
goto out_free;
|
|
||||||
|
|
||||||
struct pim_interface *pim_ifp = ifp->info;
|
|
||||||
struct gm_if *gm_ifp = pim_ifp->mld;
|
|
||||||
|
|
||||||
if (!gm_ifp)
|
|
||||||
goto out_free;
|
|
||||||
|
|
||||||
for (cmsg = CMSG_FIRSTHDR(mh); cmsg; cmsg = CMSG_NXTHDR(mh, cmsg)) {
|
for (cmsg = CMSG_FIRSTHDR(mh); cmsg; cmsg = CMSG_NXTHDR(mh, cmsg)) {
|
||||||
if (cmsg->cmsg_level != SOL_IPV6)
|
if (cmsg->cmsg_level != SOL_IPV6)
|
||||||
continue;
|
continue;
|
||||||
@ -1687,6 +1675,21 @@ static void gm_t_recv(struct event *t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Prefer pktinfo as that also works in case of VRF */
|
||||||
|
ifindex_t ifindex = pktinfo ? pktinfo->ipi6_ifindex
|
||||||
|
: pkt_src->sin6_scope_id;
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
ifp = if_lookup_by_index(ifindex, pim->vrf->vrf_id);
|
||||||
|
if (!ifp || !ifp->info)
|
||||||
|
goto out_free;
|
||||||
|
|
||||||
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
|
struct gm_if *gm_ifp = pim_ifp->mld;
|
||||||
|
|
||||||
|
if (!gm_ifp)
|
||||||
|
goto out_free;
|
||||||
|
|
||||||
if (!pktinfo || !hoplimit) {
|
if (!pktinfo || !hoplimit) {
|
||||||
zlog_err(log_ifp(
|
zlog_err(log_ifp(
|
||||||
"BUG: packet without IPV6_PKTINFO or IPV6_HOPLIMIT"));
|
"BUG: packet without IPV6_PKTINFO or IPV6_HOPLIMIT"));
|
||||||
|
Loading…
Reference in New Issue
Block a user