Insert the multicast route table ID as a Netlink attribute to Netlink
cache report notifications.

When multiple route tables are in use it is necessary to have a way to
determine which route table a given cache report belongs to when
receiving the cache report.

Signed-off-by: Paul Davey <paul.da...@alliedtelesis.co.nz>
---
 include/uapi/linux/mroute.h | 1 +
 net/ipv4/ipmr.c             | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/uapi/linux/mroute.h b/include/uapi/linux/mroute.h
index 11c8c1fc1124..918f1ef32ffe 100644
--- a/include/uapi/linux/mroute.h
+++ b/include/uapi/linux/mroute.h
@@ -169,6 +169,7 @@ enum {
        IPMRA_CREPORT_SRC_ADDR,
        IPMRA_CREPORT_DST_ADDR,
        IPMRA_CREPORT_PKT,
+       IPMRA_CREPORT_TABLE,
        __IPMRA_CREPORT_MAX
 };
 #define IPMRA_CREPORT_MAX (__IPMRA_CREPORT_MAX - 1)
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 876fd6ff1ff9..19b2f586319b 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -2396,6 +2396,7 @@ static size_t igmpmsg_netlink_msgsize(size_t payloadlen)
                + nla_total_size(4)     /* IPMRA_CREPORT_VIF_ID */
                + nla_total_size(4)     /* IPMRA_CREPORT_SRC_ADDR */
                + nla_total_size(4)     /* IPMRA_CREPORT_DST_ADDR */
+               + nla_total_size(4)     /* IPMRA_CREPORT_TABLE */
                                        /* IPMRA_CREPORT_PKT */
                + nla_total_size(payloadlen)
                ;
@@ -2431,7 +2432,8 @@ static void igmpmsg_netlink_event(struct mr_table *mrt, 
struct sk_buff *pkt)
            nla_put_in_addr(skb, IPMRA_CREPORT_SRC_ADDR,
                            msg->im_src.s_addr) ||
            nla_put_in_addr(skb, IPMRA_CREPORT_DST_ADDR,
-                           msg->im_dst.s_addr))
+                           msg->im_dst.s_addr) ||
+           nla_put_u32(skb, IPMRA_CREPORT_TABLE, mrt->id))
                goto nla_put_failure;
 
        nla = nla_reserve(skb, IPMRA_CREPORT_PKT, payloadlen);
-- 
2.28.0

Reply via email to