ipmr: support IP_PKTINFO on cache report IGMP msg
In order to support IP_PKTINFO on those packets, we need to call ipv4_pktinfo_prepare. When sending mrouted/pimd daemons a cache report IGMP msg, it is unnecessary to set dst on the newly created skb. It used to be necessary on older versions until commitd826eb14ec
("ipv4: PKTINFO doesnt need dst reference") which changed the way IP_PKTINFO struct is been retrieved. Changes from v1: 1. Undo changes in ipv4_pktinfo_prepare function. use it directly and copy the control block. Fixes:d826eb14ec
("ipv4: PKTINFO doesnt need dst reference") Signed-off-by: Leone Fernando <leone4fernando@gmail.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
02fed6d92b
commit
bb7403655b
@ -1025,6 +1025,10 @@ static int ipmr_cache_report(const struct mr_table *mrt,
|
||||
struct sk_buff *skb;
|
||||
int ret;
|
||||
|
||||
mroute_sk = rcu_dereference(mrt->mroute_sk);
|
||||
if (!mroute_sk)
|
||||
return -EINVAL;
|
||||
|
||||
if (assert == IGMPMSG_WHOLEPKT || assert == IGMPMSG_WRVIFWHOLE)
|
||||
skb = skb_realloc_headroom(pkt, sizeof(struct iphdr));
|
||||
else
|
||||
@ -1069,7 +1073,8 @@ static int ipmr_cache_report(const struct mr_table *mrt,
|
||||
msg = (struct igmpmsg *)skb_network_header(skb);
|
||||
msg->im_vif = vifi;
|
||||
msg->im_vif_hi = vifi >> 8;
|
||||
skb_dst_set(skb, dst_clone(skb_dst(pkt)));
|
||||
ipv4_pktinfo_prepare(mroute_sk, pkt);
|
||||
memcpy(skb->cb, pkt->cb, sizeof(skb->cb));
|
||||
/* Add our header */
|
||||
igmp = skb_put(skb, sizeof(struct igmphdr));
|
||||
igmp->type = assert;
|
||||
@ -1079,12 +1084,6 @@ static int ipmr_cache_report(const struct mr_table *mrt,
|
||||
skb->transport_header = skb->network_header;
|
||||
}
|
||||
|
||||
mroute_sk = rcu_dereference(mrt->mroute_sk);
|
||||
if (!mroute_sk) {
|
||||
kfree_skb(skb);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
igmpmsg_netlink_event(mrt, skb);
|
||||
|
||||
/* Deliver to mrouted */
|
||||
|
Loading…
Reference in New Issue
Block a user