bool neigh_suppress = false;
list_for_each_entry(p, &br->port_list, list) {
- if (p->flags & (BR_NEIGH_SUPPRESS | BR_NEIGH_VLAN_SUPPRESS)) {
+ if (READ_ONCE(p->flags) & (BR_NEIGH_SUPPRESS | BR_NEIGH_VLAN_SUPPRESS)) {
neigh_suppress = true;
break;
}
const struct net_bridge_port *dst = READ_ONCE(f->dst);
bool replied = false;
- if ((p && (p->flags & BR_PROXYARP)) ||
- (dst && (dst->flags & BR_PROXYARP_WIFI)) ||
+ if ((p && test_bit(BR_PROXYARP_BIT, &p->flags)) ||
+ (dst && test_bit(BR_PROXYARP_WIFI_BIT, &dst->flags)) ||
br_is_neigh_suppress_enabled(dst, vid)) {
if (!vid)
br_arp_send(br, p, skb->dev, sip, tip,
if (!p)
return false;
- if (!vid)
- return !!(p->flags & BR_NEIGH_SUPPRESS);
-
- if (p->flags & BR_NEIGH_VLAN_SUPPRESS) {
+ if (vid && test_bit(BR_NEIGH_VLAN_SUPPRESS_BIT, &p->flags)) {
struct net_bridge_vlan_group *vg = nbp_vlan_group_rcu(p);
struct net_bridge_vlan *v;
if (!v)
return false;
return !!(v->priv_flags & BR_VLFLAG_NEIGH_SUPPRESS_ENABLED);
- } else {
- return !!(p->flags & BR_NEIGH_SUPPRESS);
}
+ return test_bit(BR_NEIGH_SUPPRESS_BIT, &p->flags);
}
bool br_is_neigh_forward_grat_enabled(const struct net_bridge_port *p, u16 vid)
{
- if (!vid)
- return !!(p->flags & BR_NEIGH_FORWARD_GRAT);
-
- if (p->flags & BR_NEIGH_VLAN_SUPPRESS) {
+ if (vid && test_bit(BR_NEIGH_VLAN_SUPPRESS_BIT, &p->flags)) {
struct net_bridge_vlan_group *vg = nbp_vlan_group_rcu(p);
struct net_bridge_vlan *v;
if (!v)
return false;
return !!(v->priv_flags & BR_VLFLAG_NEIGH_FORWARD_GRAT_ENABLED);
- } else {
- return !!(p->flags & BR_NEIGH_FORWARD_GRAT);
}
+ return test_bit(BR_NEIGH_FORWARD_GRAT_BIT, &p->flags);
}
trace_br_fdb_external_learn_add(br, p, addr, vid);
- if (locked && (!p || !(p->flags & BR_PORT_MAB)))
+ if (locked && (!p || !test_bit(BR_PORT_MAB_BIT, &p->flags)))
return -EINVAL;
spin_lock_bh(&br->hash_lock);
struct net_bridge_vlan_group *vg;
vg = nbp_vlan_group_rcu(p);
- return ((p->flags & BR_HAIRPIN_MODE) || skb->dev != p->dev) &&
+ return (test_bit(BR_HAIRPIN_MODE_BIT, &p->flags) || skb->dev != p->dev) &&
(br_mst_is_enabled(p) || p->state == BR_STATE_FORWARDING) &&
br_allowed_egress(vg, skb) && nbp_switchdev_allowed_egress(p, skb) &&
!br_skb_isolated(p, skb);
*/
switch (pkt_type) {
case BR_PKT_UNICAST:
- if (!(p->flags & BR_FLOOD))
+ if (!test_bit(BR_FLOOD_BIT, &p->flags))
continue;
break;
case BR_PKT_MULTICAST:
- if (!(p->flags & BR_MCAST_FLOOD) && skb->dev != br->dev)
+ if (!test_bit(BR_MCAST_FLOOD_BIT, &p->flags) && skb->dev != br->dev)
continue;
break;
case BR_PKT_BROADCAST:
- if (!(p->flags & BR_BCAST_FLOOD) && skb->dev != br->dev)
+ if (!test_bit(BR_BCAST_FLOOD_BIT, &p->flags) && skb->dev != br->dev)
continue;
break;
}
/* Do not flood to ports that enable proxy ARP */
- if (p->flags & BR_PROXYARP)
+ if (test_bit(BR_PROXYARP_BIT, &p->flags))
continue;
if (BR_INPUT_SKB_CB(skb)->proxyarp_replied) {
- if (p->flags & BR_PROXYARP_WIFI)
+ if (test_bit(BR_PROXYARP_WIFI_BIT, &p->flags))
continue;
/* For gratuitous ARPs/NAs, check neigh_forward_grat.
* For regular ARPs/NDs, check only neigh_suppress.
if ((unsigned long)lport > (unsigned long)rport) {
port = lport;
- if (port->flags & BR_MULTICAST_TO_UNICAST) {
+ if (test_bit(BR_MULTICAST_TO_UNICAST_BIT,
+ &port->flags)) {
maybe_deliver_addr(lport, skb, p->eth_addr,
local_orig);
goto delivered;