--- zzzz-none-000/linux-5.15.111/net/bridge/br_multicast.c 2023-05-11 14:00:40.000000000 +0000 +++ puma7-arm-6670-761/linux-5.15.111/net/bridge/br_multicast.c 2024-02-07 09:28:09.000000000 +0000 @@ -5,6 +5,11 @@ * Copyright (c) 2010 Herbert Xu */ +/* + * Includes Intel Corporation's changes/modifications dated: 2017. + * Changed/modified portions - Copyright (c) 2017, Intel Corporation. + */ + #include #include #include @@ -35,6 +40,10 @@ #include "br_private.h" #include "br_private_mcast_eht.h" +#ifdef CONFIG_TI_PACKET_PROCESSOR +#include +#endif + static const struct rhashtable_params br_mdb_rht_params = { .head_offset = offsetof(struct net_bridge_mdb_entry, rhnode), .key_offset = offsetof(struct net_bridge_mdb_entry, addr), @@ -1439,6 +1448,17 @@ br_group.vid = vid; filter_mode = igmpv2 ? MCAST_EXCLUDE : MCAST_INCLUDE; +#ifdef CONFIG_TI_PACKET_PROCESSOR + if (group && pmctx && pmctx->port && pmctx->port->dev) + { + struct hil_mr_ipaddr hil_ip; + hil_ip.type = HIL_MR_IPV4; + hil_ip.addr.ip4.s_addr = group; + hil_ip.vpid = pmctx->port->dev->vpid_handle; + ti_hil_pp_event (MC_SESSION_ADD_MEMBER, (void *)&hil_ip); + } +#endif// CONFIG_TI_PACKET_PROCESSOR + return br_multicast_add_group(brmctx, pmctx, &br_group, src, filter_mode, igmpv2); } @@ -1463,6 +1483,17 @@ br_group.vid = vid; filter_mode = mldv1 ? MCAST_EXCLUDE : MCAST_INCLUDE; +#ifdef CONFIG_TI_PACKET_PROCESSOR + if (group && pmctx && pmctx->port && pmctx->port->dev) + { + struct hil_mr_ipaddr hil_ip; + hil_ip.type = HIL_MR_IPV6; + memcpy(&(hil_ip.addr.ip6), group, sizeof(struct in6_addr)); + hil_ip.vpid = pmctx->port->dev->vpid_handle; + ti_hil_pp_event (MC_SESSION_ADD_MEMBER, (void *)&hil_ip); + } +#endif// CONFIG_TI_PACKET_PROCESSOR + return br_multicast_add_group(brmctx, pmctx, &br_group, src, filter_mode, mldv1); } @@ -3534,6 +3565,17 @@ br_group.proto = htons(ETH_P_IP); br_group.vid = vid; +#ifdef CONFIG_TI_PACKET_PROCESSOR + if (group && pmctx && pmctx->port && pmctx->port->dev) + { + struct hil_mr_ipaddr hil_ip; + hil_ip.type = HIL_MR_IPV4; + hil_ip.addr.ip4.s_addr = group; + hil_ip.vpid = pmctx->port->dev->vpid_handle; + ti_hil_pp_event (MC_SESSION_DEL_MEMBER, (void *)&hil_ip); + } +#endif// CONFIG_TI_PACKET_PROCESSOR + br_multicast_leave_group(brmctx, pmctx, &br_group, &brmctx->ip4_other_query, own_query, src); @@ -3559,6 +3601,17 @@ br_group.proto = htons(ETH_P_IPV6); br_group.vid = vid; +#ifdef CONFIG_TI_PACKET_PROCESSOR + if (group && pmctx && pmctx->port && pmctx->port->dev) + { + struct hil_mr_ipaddr hil_ip; + hil_ip.type = HIL_MR_IPV6; + memcpy(&(hil_ip.addr.ip6), group, sizeof(struct in6_addr)); + hil_ip.vpid = pmctx->port->dev->vpid_handle; + ti_hil_pp_event (MC_SESSION_DEL_MEMBER, (void *)&hil_ip); + } +#endif// CONFIG_TI_PACKET_PROCESSOR + br_multicast_leave_group(brmctx, pmctx, &br_group, &brmctx->ip6_other_query, own_query, src); @@ -3872,7 +3925,7 @@ seqcount_spinlock_init(&brmctx->ip4_querier.seq, &br->multicast_lock); brmctx->multicast_igmp_version = 2; #if IS_ENABLED(CONFIG_IPV6) - brmctx->multicast_mld_version = 1; + brmctx->multicast_mld_version = 2; brmctx->ip6_other_query.delay_time = 0; brmctx->ip6_querier.port_ifidx = 0; seqcount_spinlock_init(&brmctx->ip6_querier.seq, &br->multicast_lock);