net: bridge: mcast: add support for raw L2 multicast groups
[linux-2.6-microblaze.git] / net / bridge / br_private.h
index 905d406..4c691c3 100644 (file)
@@ -854,6 +854,11 @@ void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
 void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp,
                                       struct net_bridge_port_group *sg);
 
+static inline bool br_group_is_l2(const struct br_ip *group)
+{
+       return group->proto == 0;
+}
+
 #define mlock_dereference(X, br) \
        rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
 
@@ -885,7 +890,8 @@ __br_multicast_querier_exists(struct net_bridge *br,
 }
 
 static inline bool br_multicast_querier_exists(struct net_bridge *br,
-                                              struct ethhdr *eth)
+                                              struct ethhdr *eth,
+                                              const struct net_bridge_mdb_entry *mdb)
 {
        switch (eth->h_proto) {
        case (htons(ETH_P_IP)):
@@ -897,7 +903,7 @@ static inline bool br_multicast_querier_exists(struct net_bridge *br,
                        &br->ip6_other_query, true);
 #endif
        default:
-               return false;
+               return !!mdb && br_group_is_l2(&mdb->addr);
        }
 }