br_private.h (320424c7d44f54c18df9812fd7c45f6963524002) | br_private.h (9632233e7de8da43711bb7cd3e054af32fedcc38) |
---|---|
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Linux ethernet bridge 4 * 5 * Authors: 6 * Lennert Buytenhek <buytenh@gnu.org> 7 */ 8 --- 75 unchanged lines hidden (view full) --- 84 85/* IGMP/MLD statistics */ 86struct bridge_mcast_stats { 87 struct br_mcast_stats mstats; 88 struct u64_stats_sync syncp; 89}; 90#endif 91 | 1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2/* 3 * Linux ethernet bridge 4 * 5 * Authors: 6 * Lennert Buytenhek <buytenh@gnu.org> 7 */ 8 --- 75 unchanged lines hidden (view full) --- 84 85/* IGMP/MLD statistics */ 86struct bridge_mcast_stats { 87 struct br_mcast_stats mstats; 88 struct u64_stats_sync syncp; 89}; 90#endif 91 |
92/* net_bridge_mcast_port must be always defined due to forwarding stubs */ 93struct net_bridge_mcast_port { 94#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 95 struct net_bridge_port *port; 96 97 struct bridge_mcast_own_query ip4_own_query; 98 struct timer_list ip4_mc_router_timer; 99 struct hlist_node ip4_rlist; 100#if IS_ENABLED(CONFIG_IPV6) 101 struct bridge_mcast_own_query ip6_own_query; 102 struct timer_list ip6_mc_router_timer; 103 struct hlist_node ip6_rlist; 104#endif /* IS_ENABLED(CONFIG_IPV6) */ 105 unsigned char multicast_router; 106#endif /* CONFIG_BRIDGE_IGMP_SNOOPING */ 107}; 108 |
|
92struct br_tunnel_info { 93 __be64 tunnel_id; 94 struct metadata_dst __rcu *tunnel_dst; 95}; 96 97/* private vlan flags */ 98enum { 99 BR_VLFLAG_PER_PORT_STATS = BIT(0), --- 200 unchanged lines hidden (view full) --- 300 unsigned long designated_age; 301 302 struct timer_list forward_delay_timer; 303 struct timer_list hold_timer; 304 struct timer_list message_age_timer; 305 struct kobject kobj; 306 struct rcu_head rcu; 307 | 109struct br_tunnel_info { 110 __be64 tunnel_id; 111 struct metadata_dst __rcu *tunnel_dst; 112}; 113 114/* private vlan flags */ 115enum { 116 BR_VLFLAG_PER_PORT_STATS = BIT(0), --- 200 unchanged lines hidden (view full) --- 317 unsigned long designated_age; 318 319 struct timer_list forward_delay_timer; 320 struct timer_list hold_timer; 321 struct timer_list message_age_timer; 322 struct kobject kobj; 323 struct rcu_head rcu; 324 |
325 struct net_bridge_mcast_port multicast_ctx; 326 |
|
308#ifdef CONFIG_BRIDGE_IGMP_SNOOPING | 327#ifdef CONFIG_BRIDGE_IGMP_SNOOPING |
309 struct bridge_mcast_own_query ip4_own_query; 310#if IS_ENABLED(CONFIG_IPV6) 311 struct bridge_mcast_own_query ip6_own_query; 312#endif /* IS_ENABLED(CONFIG_IPV6) */ | 328 struct bridge_mcast_stats __percpu *mcast_stats; 329 |
313 u32 multicast_eht_hosts_limit; 314 u32 multicast_eht_hosts_cnt; | 330 u32 multicast_eht_hosts_limit; 331 u32 multicast_eht_hosts_cnt; |
315 unsigned char multicast_router; 316 struct bridge_mcast_stats __percpu *mcast_stats; 317 struct timer_list multicast_router_timer; | |
318 struct hlist_head mglist; | 332 struct hlist_head mglist; |
319 struct hlist_node rlist; | |
320#endif 321 322#ifdef CONFIG_SYSFS 323 char sysfs_name[IFNAMSIZ]; 324#endif 325 326#ifdef CONFIG_NET_POLL_CONTROLLER 327 struct netpoll *np; --- 116 unchanged lines hidden (view full) --- 444 unsigned long multicast_query_response_interval; 445 unsigned long multicast_startup_query_interval; 446 447 struct rhashtable mdb_hash_tbl; 448 struct rhashtable sg_port_tbl; 449 450 struct hlist_head mcast_gc_list; 451 struct hlist_head mdb_list; | 333#endif 334 335#ifdef CONFIG_SYSFS 336 char sysfs_name[IFNAMSIZ]; 337#endif 338 339#ifdef CONFIG_NET_POLL_CONTROLLER 340 struct netpoll *np; --- 116 unchanged lines hidden (view full) --- 457 unsigned long multicast_query_response_interval; 458 unsigned long multicast_startup_query_interval; 459 460 struct rhashtable mdb_hash_tbl; 461 struct rhashtable sg_port_tbl; 462 463 struct hlist_head mcast_gc_list; 464 struct hlist_head mdb_list; |
452 struct hlist_head router_list; | |
453 | 465 |
454 struct timer_list multicast_router_timer; | 466 struct hlist_head ip4_mc_router_list; 467 struct timer_list ip4_mc_router_timer; |
455 struct bridge_mcast_other_query ip4_other_query; 456 struct bridge_mcast_own_query ip4_own_query; 457 struct bridge_mcast_querier ip4_querier; 458 struct bridge_mcast_stats __percpu *mcast_stats; 459#if IS_ENABLED(CONFIG_IPV6) | 468 struct bridge_mcast_other_query ip4_other_query; 469 struct bridge_mcast_own_query ip4_own_query; 470 struct bridge_mcast_querier ip4_querier; 471 struct bridge_mcast_stats __percpu *mcast_stats; 472#if IS_ENABLED(CONFIG_IPV6) |
473 struct hlist_head ip6_mc_router_list; 474 struct timer_list ip6_mc_router_timer; |
|
460 struct bridge_mcast_other_query ip6_other_query; 461 struct bridge_mcast_own_query ip6_own_query; 462 struct bridge_mcast_querier ip6_querier; 463#endif /* IS_ENABLED(CONFIG_IPV6) */ 464 struct work_struct mcast_gc_work; 465#endif 466 467 struct timer_list hello_timer; --- 391 unchanged lines hidden (view full) --- 859static inline bool br_group_is_l2(const struct br_ip *group) 860{ 861 return group->proto == 0; 862} 863 864#define mlock_dereference(X, br) \ 865 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock)) 866 | 475 struct bridge_mcast_other_query ip6_other_query; 476 struct bridge_mcast_own_query ip6_own_query; 477 struct bridge_mcast_querier ip6_querier; 478#endif /* IS_ENABLED(CONFIG_IPV6) */ 479 struct work_struct mcast_gc_work; 480#endif 481 482 struct timer_list hello_timer; --- 391 unchanged lines hidden (view full) --- 874static inline bool br_group_is_l2(const struct br_ip *group) 875{ 876 return group->proto == 0; 877} 878 879#define mlock_dereference(X, br) \ 880 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock)) 881 |
867static inline bool br_multicast_is_router(struct net_bridge *br) | 882static inline struct hlist_node * 883br_multicast_get_first_rport_node(struct net_bridge *b, struct sk_buff *skb) { 884#if IS_ENABLED(CONFIG_IPV6) 885 if (skb->protocol == htons(ETH_P_IPV6)) 886 return rcu_dereference(hlist_first_rcu(&b->ip6_mc_router_list)); 887#endif 888 return rcu_dereference(hlist_first_rcu(&b->ip4_mc_router_list)); 889} 890 891static inline struct net_bridge_port * 892br_multicast_rport_from_node_skb(struct hlist_node *rp, struct sk_buff *skb) { 893 struct net_bridge_mcast_port *mctx; 894 895#if IS_ENABLED(CONFIG_IPV6) 896 if (skb->protocol == htons(ETH_P_IPV6)) 897 mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port, 898 ip6_rlist); 899 else 900#endif 901 mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port, 902 ip4_rlist); 903 904 if (mctx) 905 return mctx->port; 906 else 907 return NULL; 908} 909 910static inline bool br_ip4_multicast_is_router(struct net_bridge *br) |
868{ | 911{ |
869 return br->multicast_router == 2 || 870 (br->multicast_router == 1 && 871 timer_pending(&br->multicast_router_timer)); | 912 return timer_pending(&br->ip4_mc_router_timer); |
872} 873 | 913} 914 |
915static inline bool br_ip6_multicast_is_router(struct net_bridge *br) 916{ 917#if IS_ENABLED(CONFIG_IPV6) 918 return timer_pending(&br->ip6_mc_router_timer); 919#else 920 return false; 921#endif 922} 923 |
|
874static inline bool | 924static inline bool |
925br_multicast_is_router(struct net_bridge *br, struct sk_buff *skb) 926{ 927 switch (br->multicast_router) { 928 case MDB_RTR_TYPE_PERM: 929 return true; 930 case MDB_RTR_TYPE_TEMP_QUERY: 931 if (skb) { 932 if (skb->protocol == htons(ETH_P_IP)) 933 return br_ip4_multicast_is_router(br); 934 else if (skb->protocol == htons(ETH_P_IPV6)) 935 return br_ip6_multicast_is_router(br); 936 } else { 937 return br_ip4_multicast_is_router(br) || 938 br_ip6_multicast_is_router(br); 939 } 940 fallthrough; 941 default: 942 return false; 943 } 944} 945 946static inline bool |
|
875__br_multicast_querier_exists(struct net_bridge *br, 876 struct bridge_mcast_other_query *querier, 877 const bool is_ipv6) 878{ 879 bool own_querier_enabled; 880 881 if (br_opt_get(br, BROPT_MULTICAST_QUERIER)) { 882 if (is_ipv6 && !br_opt_get(br, BROPT_HAS_IPV6_ADDR)) --- 129 unchanged lines hidden (view full) --- 1012} 1013 1014static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, 1015 struct sk_buff *skb, 1016 bool local_rcv, bool local_orig) 1017{ 1018} 1019 | 947__br_multicast_querier_exists(struct net_bridge *br, 948 struct bridge_mcast_other_query *querier, 949 const bool is_ipv6) 950{ 951 bool own_querier_enabled; 952 953 if (br_opt_get(br, BROPT_MULTICAST_QUERIER)) { 954 if (is_ipv6 && !br_opt_get(br, BROPT_HAS_IPV6_ADDR)) --- 129 unchanged lines hidden (view full) --- 1084} 1085 1086static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, 1087 struct sk_buff *skb, 1088 bool local_rcv, bool local_orig) 1089{ 1090} 1091 |
1020static inline bool br_multicast_is_router(struct net_bridge *br) | 1092static inline bool br_multicast_is_router(struct net_bridge *br, 1093 struct sk_buff *skb) |
1021{ 1022 return false; 1023} 1024 1025static inline bool br_multicast_querier_exists(struct net_bridge *br, 1026 struct ethhdr *eth, 1027 const struct net_bridge_mdb_entry *mdb) 1028{ --- 568 unchanged lines hidden (view full) --- 1597void nbp_switchdev_frame_mark(const struct net_bridge_port *p, 1598 struct sk_buff *skb); 1599bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, 1600 const struct sk_buff *skb); 1601int br_switchdev_set_port_flag(struct net_bridge_port *p, 1602 unsigned long flags, 1603 unsigned long mask, 1604 struct netlink_ext_ack *extack); | 1094{ 1095 return false; 1096} 1097 1098static inline bool br_multicast_querier_exists(struct net_bridge *br, 1099 struct ethhdr *eth, 1100 const struct net_bridge_mdb_entry *mdb) 1101{ --- 568 unchanged lines hidden (view full) --- 1670void nbp_switchdev_frame_mark(const struct net_bridge_port *p, 1671 struct sk_buff *skb); 1672bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, 1673 const struct sk_buff *skb); 1674int br_switchdev_set_port_flag(struct net_bridge_port *p, 1675 unsigned long flags, 1676 unsigned long mask, 1677 struct netlink_ext_ack *extack); |
1605void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, 1606 int type); | 1678void br_switchdev_fdb_notify(struct net_bridge *br, 1679 const struct net_bridge_fdb_entry *fdb, int type); |
1607int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, 1608 struct netlink_ext_ack *extack); 1609int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid); 1610 1611static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 1612{ 1613 skb->offload_fwd_mark = 0; 1614} --- 30 unchanged lines hidden (view full) --- 1645} 1646 1647static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid) 1648{ 1649 return -EOPNOTSUPP; 1650} 1651 1652static inline void | 1680int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags, 1681 struct netlink_ext_ack *extack); 1682int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid); 1683 1684static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 1685{ 1686 skb->offload_fwd_mark = 0; 1687} --- 30 unchanged lines hidden (view full) --- 1718} 1719 1720static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid) 1721{ 1722 return -EOPNOTSUPP; 1723} 1724 1725static inline void |
1653br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type) | 1726br_switchdev_fdb_notify(struct net_bridge *br, 1727 const struct net_bridge_fdb_entry *fdb, int type) |
1654{ 1655} 1656 1657static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 1658{ 1659} 1660#endif /* CONFIG_NET_SWITCHDEV */ 1661 1662/* br_arp_nd_proxy.c */ 1663void br_recalculate_neigh_suppress_enabled(struct net_bridge *br); 1664void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br, 1665 u16 vid, struct net_bridge_port *p); 1666void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br, 1667 u16 vid, struct net_bridge_port *p, struct nd_msg *msg); 1668struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m); 1669#endif | 1728{ 1729} 1730 1731static inline void br_switchdev_frame_unmark(struct sk_buff *skb) 1732{ 1733} 1734#endif /* CONFIG_NET_SWITCHDEV */ 1735 1736/* br_arp_nd_proxy.c */ 1737void br_recalculate_neigh_suppress_enabled(struct net_bridge *br); 1738void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br, 1739 u16 vid, struct net_bridge_port *p); 1740void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br, 1741 u16 vid, struct net_bridge_port *p, struct nd_msg *msg); 1742struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m); 1743#endif |