BRIDGE_VLANDB_ENTRY_MCAST_ROUTER,
        BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS,
        BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS,
+       BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS,
        __BRIDGE_VLANDB_ENTRY_MAX,
 };
 #define BRIDGE_VLANDB_ENTRY_MAX (__BRIDGE_VLANDB_ENTRY_MAX - 1)
 
        [BRIDGE_VLANDB_ENTRY_MCAST_ROUTER]      = { .type = NLA_U8 },
        [BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS]    = { .type = NLA_REJECT },
        [BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS]  = { .type = NLA_U32 },
+       [BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS]    = NLA_POLICY_MAX(NLA_U8, 1),
 };
 
 static int br_vlan_rtm_process_one(struct net_device *dev,
 
                       const struct net_bridge_port *p)
 {
        if (nla_put_u8(skb, BRIDGE_VLANDB_ENTRY_STATE, br_vlan_get_state(v)) ||
-           !__vlan_tun_put(skb, v))
+           !__vlan_tun_put(skb, v) ||
+           nla_put_u8(skb, BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS,
+                      !!(v->priv_flags & BR_VLFLAG_NEIGH_SUPPRESS_ENABLED)))
                return false;
 
 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
               + nla_total_size(sizeof(u32)) /* BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS */
               + nla_total_size(sizeof(u32)) /* BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS */
 #endif
+              + nla_total_size(sizeof(u8)) /* BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS */
               + 0;
 }
 
        }
 #endif
 
+       if (tb[BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS]) {
+               bool enabled = v->priv_flags & BR_VLFLAG_NEIGH_SUPPRESS_ENABLED;
+               bool val = nla_get_u8(tb[BRIDGE_VLANDB_ENTRY_NEIGH_SUPPRESS]);
+
+               if (!p) {
+                       NL_SET_ERR_MSG_MOD(extack, "Can't set neigh_suppress for non-port vlans");
+                       return -EINVAL;
+               }
+
+               if (val != enabled) {
+                       v->priv_flags ^= BR_VLFLAG_NEIGH_SUPPRESS_ENABLED;
+                       *changed = true;
+               }
+       }
+
        return 0;
 }