Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09cf0211 authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by David S. Miller
Browse files

bridge: mdb: fill state in br_mdb_notify



Fill also the port group state when sending notifications.

Signed-off-by: default avatarSatish Ashok <sashok@cumulusnetworks.com>
Signed-off-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cb1c6168
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ static void __br_mdb_notify(struct net_device *dev, struct br_mdb_entry *entry,
}

void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
		   struct br_ip *group, int type)
		   struct br_ip *group, int type, u8 state)
{
	struct br_mdb_entry entry;

@@ -241,6 +241,7 @@ void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
#if IS_ENABLED(CONFIG_IPV6)
	entry.addr.u.ip6 = group->u.ip6;
#endif
	entry.state = state;
	__br_mdb_notify(dev, &entry, type);
}

@@ -348,7 +349,7 @@ static int br_mdb_add_group(struct net_bridge *br, struct net_bridge_port *port,
		return -ENOMEM;
	rcu_assign_pointer(*pp, p);

	br_mdb_notify(br->dev, port, group, RTM_NEWMDB);
	br_mdb_notify(br->dev, port, group, RTM_NEWMDB, state);
	return 0;
}

+3 −2
Original line number Diff line number Diff line
@@ -694,7 +694,7 @@ static int br_multicast_add_group(struct net_bridge *br,
	if (unlikely(!p))
		goto err;
	rcu_assign_pointer(*pp, p);
	br_mdb_notify(br->dev, port, group, RTM_NEWMDB);
	br_mdb_notify(br->dev, port, group, RTM_NEWMDB, MDB_TEMPORARY);

found:
	mod_timer(&p->timer, now + br->multicast_membership_interval);
@@ -1439,8 +1439,9 @@ br_multicast_leave_group(struct net_bridge *br,
			rcu_assign_pointer(*pp, p->next);
			hlist_del_init(&p->mglist);
			del_timer(&p->timer);
			br_mdb_notify(br->dev, port, group, RTM_DELMDB,
				      p->state);
			call_rcu_bh(&p->rcu, br_multicast_free_pg);
			br_mdb_notify(br->dev, port, group, RTM_DELMDB);

			if (!mp->ports && !mp->mglist &&
			    netif_running(br->dev))
+1 −1
Original line number Diff line number Diff line
@@ -488,7 +488,7 @@ br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
void br_mdb_init(void);
void br_mdb_uninit(void);
void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
		   struct br_ip *group, int type);
		   struct br_ip *group, int type, u8 state);

#define mlock_dereference(X, br) \
	rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))