net: bridge: multicast: use multicast contexts instead of bridge or port
Pass multicast context pointers to multicast functions instead of bridge/port. This would make it easier later to switch these contexts to their per-vlan versions. The patch is basically search and replace, no functional changes. Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d3d065c003
commit
adc47037a7
@@ -33,7 +33,8 @@
|
||||
static bool br_multicast_del_eht_set_entry(struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *src_addr,
|
||||
union net_bridge_eht_addr *h_addr);
|
||||
static void br_multicast_create_eht_set_entry(struct net_bridge_port_group *pg,
|
||||
static void br_multicast_create_eht_set_entry(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *src_addr,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
int filter_mode,
|
||||
@@ -388,7 +389,8 @@ static void br_multicast_ip_src_to_eht_addr(const struct br_ip *src,
|
||||
}
|
||||
}
|
||||
|
||||
static void br_eht_convert_host_filter_mode(struct net_bridge_port_group *pg,
|
||||
static void br_eht_convert_host_filter_mode(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
int filter_mode)
|
||||
{
|
||||
@@ -405,14 +407,15 @@ static void br_eht_convert_host_filter_mode(struct net_bridge_port_group *pg,
|
||||
br_multicast_del_eht_set_entry(pg, &zero_addr, h_addr);
|
||||
break;
|
||||
case MCAST_EXCLUDE:
|
||||
br_multicast_create_eht_set_entry(pg, &zero_addr, h_addr,
|
||||
MCAST_EXCLUDE,
|
||||
br_multicast_create_eht_set_entry(brmctx, pg, &zero_addr,
|
||||
h_addr, MCAST_EXCLUDE,
|
||||
true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void br_multicast_create_eht_set_entry(struct net_bridge_port_group *pg,
|
||||
static void br_multicast_create_eht_set_entry(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *src_addr,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
int filter_mode,
|
||||
@@ -441,8 +444,8 @@ static void br_multicast_create_eht_set_entry(struct net_bridge_port_group *pg,
|
||||
if (!set_h)
|
||||
goto fail_set_entry;
|
||||
|
||||
mod_timer(&set_h->timer, jiffies + br_multicast_gmi(br));
|
||||
mod_timer(&eht_set->timer, jiffies + br_multicast_gmi(br));
|
||||
mod_timer(&set_h->timer, jiffies + br_multicast_gmi(brmctx));
|
||||
mod_timer(&eht_set->timer, jiffies + br_multicast_gmi(brmctx));
|
||||
|
||||
return;
|
||||
|
||||
@@ -499,7 +502,8 @@ static void br_multicast_del_eht_host(struct net_bridge_port_group *pg,
|
||||
}
|
||||
|
||||
/* create new set entries from reports */
|
||||
static void __eht_create_set_entries(struct net_bridge_port_group *pg,
|
||||
static void __eht_create_set_entries(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -512,8 +516,8 @@ static void __eht_create_set_entries(struct net_bridge_port_group *pg,
|
||||
memset(&eht_src_addr, 0, sizeof(eht_src_addr));
|
||||
for (src_idx = 0; src_idx < nsrcs; src_idx++) {
|
||||
memcpy(&eht_src_addr, srcs + (src_idx * addr_size), addr_size);
|
||||
br_multicast_create_eht_set_entry(pg, &eht_src_addr, h_addr,
|
||||
filter_mode,
|
||||
br_multicast_create_eht_set_entry(brmctx, pg, &eht_src_addr,
|
||||
h_addr, filter_mode,
|
||||
false);
|
||||
}
|
||||
}
|
||||
@@ -549,7 +553,8 @@ static bool __eht_del_set_entries(struct net_bridge_port_group *pg,
|
||||
return changed;
|
||||
}
|
||||
|
||||
static bool br_multicast_eht_allow(struct net_bridge_port_group *pg,
|
||||
static bool br_multicast_eht_allow(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -559,8 +564,8 @@ static bool br_multicast_eht_allow(struct net_bridge_port_group *pg,
|
||||
|
||||
switch (br_multicast_eht_host_filter_mode(pg, h_addr)) {
|
||||
case MCAST_INCLUDE:
|
||||
__eht_create_set_entries(pg, h_addr, srcs, nsrcs, addr_size,
|
||||
MCAST_INCLUDE);
|
||||
__eht_create_set_entries(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
addr_size, MCAST_INCLUDE);
|
||||
break;
|
||||
case MCAST_EXCLUDE:
|
||||
changed = __eht_del_set_entries(pg, h_addr, srcs, nsrcs,
|
||||
@@ -571,7 +576,8 @@ static bool br_multicast_eht_allow(struct net_bridge_port_group *pg,
|
||||
return changed;
|
||||
}
|
||||
|
||||
static bool br_multicast_eht_block(struct net_bridge_port_group *pg,
|
||||
static bool br_multicast_eht_block(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -585,7 +591,7 @@ static bool br_multicast_eht_block(struct net_bridge_port_group *pg,
|
||||
addr_size);
|
||||
break;
|
||||
case MCAST_EXCLUDE:
|
||||
__eht_create_set_entries(pg, h_addr, srcs, nsrcs, addr_size,
|
||||
__eht_create_set_entries(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
|
||||
MCAST_EXCLUDE);
|
||||
break;
|
||||
}
|
||||
@@ -594,7 +600,8 @@ static bool br_multicast_eht_block(struct net_bridge_port_group *pg,
|
||||
}
|
||||
|
||||
/* flush_entries is true when changing mode */
|
||||
static bool __eht_inc_exc(struct net_bridge_port_group *pg,
|
||||
static bool __eht_inc_exc(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -612,11 +619,10 @@ static bool __eht_inc_exc(struct net_bridge_port_group *pg,
|
||||
/* if we're changing mode del host and its entries */
|
||||
if (flush_entries)
|
||||
br_multicast_del_eht_host(pg, h_addr);
|
||||
__eht_create_set_entries(pg, h_addr, srcs, nsrcs, addr_size,
|
||||
__eht_create_set_entries(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
|
||||
filter_mode);
|
||||
/* we can be missing sets only if we've deleted some entries */
|
||||
if (flush_entries) {
|
||||
struct net_bridge *br = pg->key.port->br;
|
||||
struct net_bridge_group_eht_set *eht_set;
|
||||
struct net_bridge_group_src *src_ent;
|
||||
struct hlist_node *tmp;
|
||||
@@ -647,14 +653,15 @@ static bool __eht_inc_exc(struct net_bridge_port_group *pg,
|
||||
&eht_src_addr);
|
||||
if (!eht_set)
|
||||
continue;
|
||||
mod_timer(&eht_set->timer, jiffies + br_multicast_lmqt(br));
|
||||
mod_timer(&eht_set->timer, jiffies + br_multicast_lmqt(brmctx));
|
||||
}
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
static bool br_multicast_eht_inc(struct net_bridge_port_group *pg,
|
||||
static bool br_multicast_eht_inc(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -663,14 +670,15 @@ static bool br_multicast_eht_inc(struct net_bridge_port_group *pg,
|
||||
{
|
||||
bool changed;
|
||||
|
||||
changed = __eht_inc_exc(pg, h_addr, srcs, nsrcs, addr_size,
|
||||
changed = __eht_inc_exc(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
|
||||
MCAST_INCLUDE, to_report);
|
||||
br_eht_convert_host_filter_mode(pg, h_addr, MCAST_INCLUDE);
|
||||
br_eht_convert_host_filter_mode(brmctx, pg, h_addr, MCAST_INCLUDE);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
static bool br_multicast_eht_exc(struct net_bridge_port_group *pg,
|
||||
static bool br_multicast_eht_exc(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -679,14 +687,15 @@ static bool br_multicast_eht_exc(struct net_bridge_port_group *pg,
|
||||
{
|
||||
bool changed;
|
||||
|
||||
changed = __eht_inc_exc(pg, h_addr, srcs, nsrcs, addr_size,
|
||||
changed = __eht_inc_exc(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
|
||||
MCAST_EXCLUDE, to_report);
|
||||
br_eht_convert_host_filter_mode(pg, h_addr, MCAST_EXCLUDE);
|
||||
br_eht_convert_host_filter_mode(brmctx, pg, h_addr, MCAST_EXCLUDE);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
static bool __eht_ip4_handle(struct net_bridge_port_group *pg,
|
||||
static bool __eht_ip4_handle(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -696,24 +705,25 @@ static bool __eht_ip4_handle(struct net_bridge_port_group *pg,
|
||||
|
||||
switch (grec_type) {
|
||||
case IGMPV3_ALLOW_NEW_SOURCES:
|
||||
br_multicast_eht_allow(pg, h_addr, srcs, nsrcs, sizeof(__be32));
|
||||
br_multicast_eht_allow(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(__be32));
|
||||
break;
|
||||
case IGMPV3_BLOCK_OLD_SOURCES:
|
||||
changed = br_multicast_eht_block(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_block(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(__be32));
|
||||
break;
|
||||
case IGMPV3_CHANGE_TO_INCLUDE:
|
||||
to_report = true;
|
||||
fallthrough;
|
||||
case IGMPV3_MODE_IS_INCLUDE:
|
||||
changed = br_multicast_eht_inc(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_inc(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(__be32), to_report);
|
||||
break;
|
||||
case IGMPV3_CHANGE_TO_EXCLUDE:
|
||||
to_report = true;
|
||||
fallthrough;
|
||||
case IGMPV3_MODE_IS_EXCLUDE:
|
||||
changed = br_multicast_eht_exc(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_exc(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(__be32), to_report);
|
||||
break;
|
||||
}
|
||||
@@ -722,7 +732,8 @@ static bool __eht_ip4_handle(struct net_bridge_port_group *pg,
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static bool __eht_ip6_handle(struct net_bridge_port_group *pg,
|
||||
static bool __eht_ip6_handle(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
union net_bridge_eht_addr *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -732,18 +743,18 @@ static bool __eht_ip6_handle(struct net_bridge_port_group *pg,
|
||||
|
||||
switch (grec_type) {
|
||||
case MLD2_ALLOW_NEW_SOURCES:
|
||||
br_multicast_eht_allow(pg, h_addr, srcs, nsrcs,
|
||||
br_multicast_eht_allow(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(struct in6_addr));
|
||||
break;
|
||||
case MLD2_BLOCK_OLD_SOURCES:
|
||||
changed = br_multicast_eht_block(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_block(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(struct in6_addr));
|
||||
break;
|
||||
case MLD2_CHANGE_TO_INCLUDE:
|
||||
to_report = true;
|
||||
fallthrough;
|
||||
case MLD2_MODE_IS_INCLUDE:
|
||||
changed = br_multicast_eht_inc(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_inc(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(struct in6_addr),
|
||||
to_report);
|
||||
break;
|
||||
@@ -751,7 +762,7 @@ static bool __eht_ip6_handle(struct net_bridge_port_group *pg,
|
||||
to_report = true;
|
||||
fallthrough;
|
||||
case MLD2_MODE_IS_EXCLUDE:
|
||||
changed = br_multicast_eht_exc(pg, h_addr, srcs, nsrcs,
|
||||
changed = br_multicast_eht_exc(brmctx, pg, h_addr, srcs, nsrcs,
|
||||
sizeof(struct in6_addr),
|
||||
to_report);
|
||||
break;
|
||||
@@ -762,7 +773,8 @@ static bool __eht_ip6_handle(struct net_bridge_port_group *pg,
|
||||
#endif
|
||||
|
||||
/* true means an entry was deleted */
|
||||
bool br_multicast_eht_handle(struct net_bridge_port_group *pg,
|
||||
bool br_multicast_eht_handle(const struct net_bridge_mcast *brmctx,
|
||||
struct net_bridge_port_group *pg,
|
||||
void *h_addr,
|
||||
void *srcs,
|
||||
u32 nsrcs,
|
||||
@@ -779,12 +791,12 @@ bool br_multicast_eht_handle(struct net_bridge_port_group *pg,
|
||||
memset(&eht_host_addr, 0, sizeof(eht_host_addr));
|
||||
memcpy(&eht_host_addr, h_addr, addr_size);
|
||||
if (addr_size == sizeof(__be32))
|
||||
changed = __eht_ip4_handle(pg, &eht_host_addr, srcs, nsrcs,
|
||||
grec_type);
|
||||
changed = __eht_ip4_handle(brmctx, pg, &eht_host_addr, srcs,
|
||||
nsrcs, grec_type);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
else
|
||||
changed = __eht_ip6_handle(pg, &eht_host_addr, srcs, nsrcs,
|
||||
grec_type);
|
||||
changed = __eht_ip6_handle(brmctx, pg, &eht_host_addr, srcs,
|
||||
nsrcs, grec_type);
|
||||
#endif
|
||||
|
||||
out:
|
||||
|
||||
Reference in New Issue
Block a user