/usr/src/kernels/4.18.0-553.157.1.el8_10.x86_64/include/net
NameSizeModeActions
9p/-0755rm
bluetooth/-0755rm
caif/-0755rm
iucv/-0755rm
mana/-0755rm
netfilter/-0755rm
netns/-0755rm
nfc/-0755rm
phonet/-0755rm
sctp/-0755rm
tc_act/-0755rm
6lowpan.h102710644editdlrm
act_api.h95590644editdlrm
addrconf.h138260644editdlrm
af_ieee802154.h15910644editdlrm
af_rxrpc.h29760644editdlrm
af_unix.h22720644editdlrm
af_vsock.h72950644editdlrm
ah.h3820644editdlrm
arp.h20520644editdlrm
atmclip.h15150644editdlrm
ax25.h149990644editdlrm
ax88796.h14880644editdlrm
bareudp.h3330644editdlrm
bonding.h202250644editdlrm
bond_3ad.h96290644editdlrm
bond_alb.h62510644editdlrm
bond_options.h39160644editdlrm
bpf_sk_storage.h18020644editdlrm
busy_poll.h49730644editdlrm
calipso.h21990644editdlrm
cfg80211-wext.h19000644editdlrm
cfg80211.h3258440644editdlrm
cfg802154.h111750644editdlrm
checksum.h48500644editdlrm
cipso_ipv4.h83990644editdlrm
cls_cgroup.h23010644editdlrm
codel.h60000644editdlrm
codel_impl.h85000644editdlrm
codel_qdisc.h30010644editdlrm
compat.h17110644editdlrm
datalink.h6190644editdlrm
dcbevent.h12930644editdlrm
dcbnl.h52670644editdlrm
devlink.h647110644editdlrm
dn.h70460644editdlrm
dn_dev.h54880644editdlrm
dn_fib.h40770644editdlrm
dn_neigh.h9680644editdlrm
dn_nsp.h59660644editdlrm
dn_route.h45000644editdlrm
dropreason-core.h120630644editdlrm
drop_monitor.h9010644editdlrm
dsa.h166050644editdlrm
dsfield.h11390644editdlrm
dst.h148700644editdlrm
dst_cache.h25960644editdlrm
dst_metadata.h55210644editdlrm
dst_ops.h25640644editdlrm
erspan.h85270644editdlrm
esp.h11900644editdlrm
espintcp.h9660644editdlrm
ethoc.h5370644editdlrm
failover.h11780644editdlrm
fib_notifier.h14760644editdlrm
fib_rules.h57280644editdlrm
firewire.h6360644editdlrm
flow.h63530644editdlrm
flow_dissector.h112840644editdlrm
flow_offload.h177970644editdlrm
fou.h5490644editdlrm
fq.h24970644editdlrm
fq_impl.h81440644editdlrm
garp.h26780644editdlrm
genetlink.h146470644editdlrm
geneve.h18980644editdlrm
gen_stats.h30340644editdlrm
gre.h33770644editdlrm
gro_cells.h4430644editdlrm
gtp.h6330644editdlrm
gue.h33110644editdlrm
hwbm.h9370644editdlrm
icmp.h17650644editdlrm
ieee80211_radiotap.h230170644editdlrm
ieee802154_netdev.h93580644editdlrm
ife.h10570644editdlrm
if_inet6.h65910644editdlrm
ila.h4980644editdlrm
inet6_connection_sock.h9760644editdlrm
inet6_hashtables.h37460644editdlrm
inetpeer.h33720644editdlrm
inet_common.h26140644editdlrm
inet_connection_sock.h120700644editdlrm
inet_ecn.h80710644editdlrm
inet_frag.h48160644editdlrm
inet_hashtables.h138470644editdlrm
inet_sock.h98280644editdlrm
inet_timewait_sock.h39260644editdlrm
ip.h213540644editdlrm
ip6_checksum.h29810644editdlrm
ip6_fib.h137660644editdlrm
ip6_route.h92280644editdlrm
ip6_tunnel.h50960644editdlrm
ipcomp.h6590644editdlrm
ipconfig.h8110644editdlrm
ipv6.h327410644editdlrm
ipv6_frag.h33210644editdlrm
ipv6_stubs.h26710644editdlrm
ipx.h43860644editdlrm
ip_fib.h142900644editdlrm
ip_tunnels.h146970644editdlrm
ip_vs.h494070644editdlrm
iw_handler.h214130644editdlrm
kcm.h50830644editdlrm
l3mdev.h67430644editdlrm
lag.h4090644editdlrm
lapb.h48690644editdlrm
lib80211.h40170644editdlrm
llc.h44640644editdlrm
llc_conn.h41550644editdlrm
llc_c_ac.h95370644editdlrm
llc_c_ev.h109400644editdlrm
llc_c_st.h17620644editdlrm
llc_if.h22100644editdlrm
llc_pdu.h147830644editdlrm
llc_sap.h11080644editdlrm
llc_s_ac.h15910644editdlrm
llc_s_ev.h22550644editdlrm
llc_s_st.h9470644editdlrm
lwtunnel.h65630644editdlrm
mac80211.h2944370644editdlrm
mac802154.h156330644editdlrm
mip6.h16170644editdlrm
mld.h28700644editdlrm
mpls.h13400644editdlrm
mpls_iptunnel.h8270644editdlrm
mptcp.h62420644editdlrm
mrp.h31030644editdlrm
ncsi.h19640644editdlrm
ndisc.h150950644editdlrm
neighbour.h162890644editdlrm
netdev_queues.h56090644editdlrm
netevent.h10440644editdlrm
netlabel.h212360644editdlrm
netlink.h632530644editdlrm
netprio_cgroup.h12600644editdlrm
netrom.h78960644editdlrm
net_failover.h10230644editdlrm
net_namespace.h141770644editdlrm
net_ratelimit.h2200644editdlrm
nexthop.h8650644editdlrm
nl802154.h123850644editdlrm
nsh.h126020644editdlrm
p8022.h4470644editdlrm
page_pool.h69850644editdlrm
pie.h36840644editdlrm
ping.h31970644editdlrm
pkt_cls.h261780644editdlrm
pkt_sched.h65430644editdlrm
pptp.h5570644editdlrm
protocol.h43200644editdlrm
psample.h10830644editdlrm
psnap.h3510644editdlrm
raw.h21610644editdlrm
rawv6.h8560644editdlrm
red.h116000644editdlrm
regulatory.h109610644editdlrm
request_sock.h68710644editdlrm
rose.h78020644editdlrm
route.h113900644editdlrm
rsi_91x.h17100644editdlrm
rtnetlink.h73170644editdlrm
sch_generic.h338410644editdlrm
scm.h36710644editdlrm
secure_seq.h8550644editdlrm
seg6.h18740644editdlrm
seg6_hmac.h16990644editdlrm
seg6_local.h8700644editdlrm
slhc_vj.h68310644editdlrm
smc.h21550644editdlrm
snmp.h54820644editdlrm
sock.h791820644editdlrm
sock_reuseport.h15650644editdlrm
Space.h10940644editdlrm
stp.h3830644editdlrm
strparser.h43400644editdlrm
switchdev.h178120644editdlrm
tcp.h732060644editdlrm
tcp_states.h15400644editdlrm
tc_wrapper.h70330644editdlrm
timewait_sock.h11360644editdlrm
tipc.h24050644editdlrm
tls.h213630644editdlrm
tls_toe.h30060644editdlrm
transp_v6.h19960644editdlrm
tso.h5150644editdlrm
tun_proto.h9880644editdlrm
udp.h164810644editdlrm
udplite.h37620644editdlrm
udp_tunnel.h133760644editdlrm
vsock_addr.h6620644editdlrm
vxlan.h135410644editdlrm
wext.h15100644editdlrm
wimax.h204450644editdlrm
x25.h96580644editdlrm
x25device.h3870644editdlrm
xdp.h94360644editdlrm
xdp_priv.h4460644editdlrm
xdp_sock.h20940644editdlrm
xdp_sock_drv.h64230644editdlrm
xfrm.h596280644editdlrm
xsk_buff_pool.h65500644editdlrm
Edit: /usr/src/kernels/4.18.0-553.157.1.el8_10.x86_64/include/net/switchdev.h (17812B)
/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * include/net/switchdev.h - Switch device API * Copyright (c) 2014-2015 Jiri Pirko * Copyright (c) 2014-2015 Scott Feldman */ #ifndef _LINUX_SWITCHDEV_H_ #define _LINUX_SWITCHDEV_H_ #include #include #include #include #include #define SWITCHDEV_F_NO_RECURSE BIT(0) #define SWITCHDEV_F_SKIP_EOPNOTSUPP BIT(1) #define SWITCHDEV_F_DEFER BIT(2) enum switchdev_attr_id { SWITCHDEV_ATTR_ID_UNDEFINED, RH_KABI_BROKEN_REMOVE_ENUM(SWITCHDEV_ATTR_ID_PORT_PARENT_ID) SWITCHDEV_ATTR_ID_PORT_STP_STATE, RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_PORT_MST_STATE) SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS, RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS) RH_KABI_BROKEN_REMOVE_ENUM(SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS_SUPPORT) SWITCHDEV_ATTR_ID_PORT_MROUTER, SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME, SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING, RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL) SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED, SWITCHDEV_ATTR_ID_BRIDGE_MROUTER, RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_BRIDGE_MST) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_MRP_PORT_ROLE) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_ATTR_ID_VLAN_MSTI) }; struct switchdev_mst_state { u16 msti; u8 state; }; struct switchdev_brport_flags { unsigned long val; unsigned long mask; }; struct switchdev_vlan_msti { u16 vid; u16 msti; }; struct switchdev_attr { struct net_device *orig_dev; enum switchdev_attr_id id; u32 flags; void *complete_priv; void (*complete)(struct net_device *dev, int err, void *priv); union { /* RHEL: The following block represents original content of * the union that needs to be kept for KABI checker although * Switchdev API is not a part of KABI. */ RH_KABI_BROKEN_REMOVE_BLOCK( struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */ u8 stp_state; /* PORT_STP_STATE */ unsigned long brport_flags; /* PORT_{PRE}_BRIDGE_FLAGS */ unsigned long brport_flags_support; /* PORT_BRIDGE_FLAGS_SUPPORT */ bool mrouter; /* PORT_MROUTER */ clock_t ageing_time; /* BRIDGE_AGEING_TIME */ bool vlan_filtering; /* BRIDGE_VLAN_FILTERING */ bool mc_disabled; /* MC_DISABLED */ ) /* RH_KABI_BROKEN_REMOVE_BLOCK */ RH_KABI_BROKEN_INSERT_BLOCK( struct netdev_phys_item_id ppid; /* PORT_PARENT_ID */ u8 stp_state; /* PORT_STP_STATE */ struct switchdev_mst_state mst_state; /* PORT_MST_STATE */ struct switchdev_brport_flags brport_flags; /* PORT_BRIDGE_FLAGS */ bool mrouter; /* PORT_MROUTER */ clock_t ageing_time; /* BRIDGE_AGEING_TIME */ bool vlan_filtering; /* BRIDGE_VLAN_FILTERING */ u16 vlan_protocol; /* BRIDGE_VLAN_PROTOCOL */ bool mst; /* BRIDGE_MST */ bool mc_disabled; /* MC_DISABLED */ u8 mrp_port_role; /* MRP_PORT_ROLE */ struct switchdev_vlan_msti vlan_msti; /* VLAN_MSTI */ ) /* RH_KABI_BROKEN_INSERT_BLOCK */ } u; }; enum switchdev_obj_id { SWITCHDEV_OBJ_ID_UNDEFINED, SWITCHDEV_OBJ_ID_PORT_VLAN, SWITCHDEV_OBJ_ID_PORT_MDB, SWITCHDEV_OBJ_ID_HOST_MDB, RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_RING_TEST_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_RING_ROLE_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_RING_STATE_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_IN_TEST_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_IN_ROLE_MRP) RH_KABI_BROKEN_INSERT_ENUM(SWITCHDEV_OBJ_ID_IN_STATE_MRP) }; struct switchdev_obj { RH_KABI_BROKEN_INSERT(struct list_head list) struct net_device *orig_dev; enum switchdev_obj_id id; u32 flags; void *complete_priv; void (*complete)(struct net_device *dev, int err, void *priv); RH_KABI_RESERVE(1) RH_KABI_RESERVE(2) RH_KABI_RESERVE(3) RH_KABI_RESERVE(4) }; /* SWITCHDEV_OBJ_ID_PORT_VLAN */ struct switchdev_obj_port_vlan { struct switchdev_obj obj; u16 flags; u16 vid; /* If set, the notifier signifies a change of one of the following * flags for a VLAN that already exists: * - BRIDGE_VLAN_INFO_PVID * - BRIDGE_VLAN_INFO_UNTAGGED * Entries with BRIDGE_VLAN_INFO_BRENTRY unset are not notified at all. */ bool changed; }; #define SWITCHDEV_OBJ_PORT_VLAN(OBJ) \ container_of((OBJ), struct switchdev_obj_port_vlan, obj) /* SWITCHDEV_OBJ_ID_PORT_MDB */ struct switchdev_obj_port_mdb { struct switchdev_obj obj; unsigned char addr[ETH_ALEN]; u16 vid; }; #define SWITCHDEV_OBJ_PORT_MDB(OBJ) \ container_of((OBJ), struct switchdev_obj_port_mdb, obj) /* SWITCHDEV_OBJ_ID_MRP */ struct switchdev_obj_mrp { struct switchdev_obj obj; struct net_device *p_port; struct net_device *s_port; u32 ring_id; u16 prio; }; #define SWITCHDEV_OBJ_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_mrp, obj) /* SWITCHDEV_OBJ_ID_RING_TEST_MRP */ struct switchdev_obj_ring_test_mrp { struct switchdev_obj obj; /* The value is in us and a value of 0 represents to stop */ u32 interval; u8 max_miss; u32 ring_id; u32 period; bool monitor; }; #define SWITCHDEV_OBJ_RING_TEST_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_ring_test_mrp, obj) /* SWICHDEV_OBJ_ID_RING_ROLE_MRP */ struct switchdev_obj_ring_role_mrp { struct switchdev_obj obj; u8 ring_role; u32 ring_id; u8 sw_backup; }; #define SWITCHDEV_OBJ_RING_ROLE_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_ring_role_mrp, obj) struct switchdev_obj_ring_state_mrp { struct switchdev_obj obj; u8 ring_state; u32 ring_id; }; #define SWITCHDEV_OBJ_RING_STATE_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_ring_state_mrp, obj) /* SWITCHDEV_OBJ_ID_IN_TEST_MRP */ struct switchdev_obj_in_test_mrp { struct switchdev_obj obj; /* The value is in us and a value of 0 represents to stop */ u32 interval; u32 in_id; u32 period; u8 max_miss; }; #define SWITCHDEV_OBJ_IN_TEST_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_in_test_mrp, obj) /* SWICHDEV_OBJ_ID_IN_ROLE_MRP */ struct switchdev_obj_in_role_mrp { struct switchdev_obj obj; struct net_device *i_port; u32 ring_id; u16 in_id; u8 in_role; u8 sw_backup; }; #define SWITCHDEV_OBJ_IN_ROLE_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_in_role_mrp, obj) struct switchdev_obj_in_state_mrp { struct switchdev_obj obj; u32 in_id; u8 in_state; }; #define SWITCHDEV_OBJ_IN_STATE_MRP(OBJ) \ container_of((OBJ), struct switchdev_obj_in_state_mrp, obj) typedef int switchdev_obj_dump_cb_t(struct switchdev_obj *obj); struct switchdev_ops_extended_rh { }; /* RHEL: Need to keep this struct definition for deprecated callbacks below */ struct switchdev_trans { struct list_head item_list; bool ph_prepare; }; /** * struct switchdev_ops - switchdev operations * * @switchdev_port_attr_set: Set a port attribute (see switchdev_attr). */ struct RH_KABI_RENAME(switchdev_ops, rh_deprecated_switchdev_ops) { RH_KABI_DEPRECATE_FN(int, switchdev_port_attr_get, struct net_device *dev, struct switchdev_attr *attr) RH_KABI_DEPRECATE_FN(int, switchdev_port_attr_set, struct net_device *dev, const struct switchdev_attr *attr, struct switchdev_trans *trans) RH_KABI_DEPRECATE_FN(int, switchdev_port_obj_add, struct net_device *dev, const struct switchdev_obj *obj, struct switchdev_trans *trans) RH_KABI_DEPRECATE_FN(int, switchdev_port_obj_del, struct net_device *dev, const struct switchdev_obj *obj) RH_KABI_RESERVE(1) RH_KABI_RESERVE(2) RH_KABI_RESERVE(3) RH_KABI_RESERVE(4) RH_KABI_RESERVE(5) RH_KABI_RESERVE(6) RH_KABI_RESERVE(7) RH_KABI_AUX_EMBED(switchdev_ops_extended) }; struct switchdev_brport { struct net_device *dev; const void *ctx; struct notifier_block *atomic_nb; struct notifier_block *blocking_nb; bool tx_fwd_offload; }; enum switchdev_notifier_type { SWITCHDEV_FDB_ADD_TO_BRIDGE = 1, SWITCHDEV_FDB_DEL_TO_BRIDGE, SWITCHDEV_FDB_ADD_TO_DEVICE, SWITCHDEV_FDB_DEL_TO_DEVICE, SWITCHDEV_FDB_OFFLOADED, SWITCHDEV_FDB_FLUSH_TO_BRIDGE, SWITCHDEV_PORT_OBJ_ADD, /* Blocking. */ SWITCHDEV_PORT_OBJ_DEL, /* Blocking. */ SWITCHDEV_PORT_ATTR_SET, /* May be blocking . */ SWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE, SWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE, SWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE, SWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE, SWITCHDEV_VXLAN_FDB_OFFLOADED, SWITCHDEV_BRPORT_OFFLOADED, SWITCHDEV_BRPORT_UNOFFLOADED, }; struct switchdev_notifier_info { struct net_device *dev; struct netlink_ext_ack *extack; const void *ctx; }; struct switchdev_notifier_fdb_info { struct switchdev_notifier_info info; /* must be first */ const unsigned char *addr; u16 vid; u8 added_by_user:1, is_local:1, offloaded:1; }; struct switchdev_notifier_port_obj_info { struct switchdev_notifier_info info; /* must be first */ const struct switchdev_obj *obj; bool handled; }; struct switchdev_notifier_port_attr_info { struct switchdev_notifier_info info; /* must be first */ const struct switchdev_attr *attr; bool handled; }; struct switchdev_notifier_brport_info { struct switchdev_notifier_info info; /* must be first */ const struct switchdev_brport brport; }; static inline struct net_device * switchdev_notifier_info_to_dev(const struct switchdev_notifier_info *info) { return info->dev; } static inline struct netlink_ext_ack * switchdev_notifier_info_to_extack(const struct switchdev_notifier_info *info) { return info->extack; } static inline bool switchdev_fdb_is_dynamically_learned(const struct switchdev_notifier_fdb_info *fdb_info) { return !fdb_info->added_by_user && !fdb_info->is_local; } #ifdef CONFIG_NET_SWITCHDEV int switchdev_bridge_port_offload(struct net_device *brport_dev, struct net_device *dev, const void *ctx, struct notifier_block *atomic_nb, struct notifier_block *blocking_nb, bool tx_fwd_offload, struct netlink_ext_ack *extack); void switchdev_bridge_port_unoffload(struct net_device *brport_dev, const void *ctx, struct notifier_block *atomic_nb, struct notifier_block *blocking_nb); void switchdev_deferred_process(void); int switchdev_port_attr_set(struct net_device *dev, const struct switchdev_attr *attr, struct netlink_ext_ack *extack); bool switchdev_port_obj_act_is_deferred(struct net_device *dev, enum switchdev_notifier_type nt, const struct switchdev_obj *obj); int switchdev_port_obj_add(struct net_device *dev, const struct switchdev_obj *obj, struct netlink_ext_ack *extack); int switchdev_port_obj_del(struct net_device *dev, const struct switchdev_obj *obj); int register_switchdev_notifier(struct notifier_block *nb); int unregister_switchdev_notifier(struct notifier_block *nb); int call_switchdev_notifiers(unsigned long val, struct net_device *dev, struct switchdev_notifier_info *info, struct netlink_ext_ack *extack); int register_switchdev_blocking_notifier(struct notifier_block *nb); int unregister_switchdev_blocking_notifier(struct notifier_block *nb); int call_switchdev_blocking_notifiers(unsigned long val, struct net_device *dev, struct switchdev_notifier_info *info, struct netlink_ext_ack *extack); void switchdev_port_fwd_mark_set(struct net_device *dev, struct net_device *group_dev, bool joining); int switchdev_handle_fdb_event_to_device(struct net_device *dev, unsigned long event, const struct switchdev_notifier_fdb_info *fdb_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*mod_cb)(struct net_device *dev, struct net_device *orig_dev, unsigned long event, const void *ctx, const struct switchdev_notifier_fdb_info *fdb_info)); int switchdev_handle_port_obj_add(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), int (*add_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj, struct netlink_ext_ack *extack)); int switchdev_handle_port_obj_add_foreign(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*add_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj, struct netlink_ext_ack *extack)); int switchdev_handle_port_obj_del(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), int (*del_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj)); int switchdev_handle_port_obj_del_foreign(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*del_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj)); RH_KABI_FORCE_CHANGE(1) int switchdev_handle_port_attr_set(struct net_device *dev, struct switchdev_notifier_port_attr_info *port_attr_info, bool (*check_cb)(const struct net_device *dev), int (*set_cb)(struct net_device *dev, const void *ctx, const struct switchdev_attr *attr, struct netlink_ext_ack *extack)); #else static inline int switchdev_bridge_port_offload(struct net_device *brport_dev, struct net_device *dev, const void *ctx, struct notifier_block *atomic_nb, struct notifier_block *blocking_nb, bool tx_fwd_offload, struct netlink_ext_ack *extack) { return -EOPNOTSUPP; } static inline void switchdev_bridge_port_unoffload(struct net_device *brport_dev, const void *ctx, struct notifier_block *atomic_nb, struct notifier_block *blocking_nb) { } static inline void switchdev_deferred_process(void) { } static inline int switchdev_port_attr_set(struct net_device *dev, const struct switchdev_attr *attr, struct netlink_ext_ack *extack) { return -EOPNOTSUPP; } static inline int switchdev_port_obj_add(struct net_device *dev, const struct switchdev_obj *obj, struct netlink_ext_ack *extack) { return -EOPNOTSUPP; } static inline int switchdev_port_obj_del(struct net_device *dev, const struct switchdev_obj *obj) { return -EOPNOTSUPP; } static inline int register_switchdev_notifier(struct notifier_block *nb) { return 0; } static inline int unregister_switchdev_notifier(struct notifier_block *nb) { return 0; } static inline int call_switchdev_notifiers(unsigned long val, struct net_device *dev, struct switchdev_notifier_info *info, struct netlink_ext_ack *extack) { return NOTIFY_DONE; } static inline int register_switchdev_blocking_notifier(struct notifier_block *nb) { return 0; } static inline int unregister_switchdev_blocking_notifier(struct notifier_block *nb) { return 0; } static inline int call_switchdev_blocking_notifiers(unsigned long val, struct net_device *dev, struct switchdev_notifier_info *info, struct netlink_ext_ack *extack) { return NOTIFY_DONE; } static inline int switchdev_handle_fdb_event_to_device(struct net_device *dev, unsigned long event, const struct switchdev_notifier_fdb_info *fdb_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*mod_cb)(struct net_device *dev, struct net_device *orig_dev, unsigned long event, const void *ctx, const struct switchdev_notifier_fdb_info *fdb_info)) { return 0; } static inline int switchdev_handle_port_obj_add(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), int (*add_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj, struct netlink_ext_ack *extack)) { return 0; } static inline int switchdev_handle_port_obj_add_foreign(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*add_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj, struct netlink_ext_ack *extack)) { return 0; } static inline int switchdev_handle_port_obj_del(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), int (*del_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj)) { return 0; } static inline int switchdev_handle_port_obj_del_foreign(struct net_device *dev, struct switchdev_notifier_port_obj_info *port_obj_info, bool (*check_cb)(const struct net_device *dev), bool (*foreign_dev_check_cb)(const struct net_device *dev, const struct net_device *foreign_dev), int (*del_cb)(struct net_device *dev, const void *ctx, const struct switchdev_obj *obj)) { return 0; } static inline int switchdev_handle_port_attr_set(struct net_device *dev, struct switchdev_notifier_port_attr_info *port_attr_info, bool (*check_cb)(const struct net_device *dev), int (*set_cb)(struct net_device *dev, const void *ctx, const struct switchdev_attr *attr, struct netlink_ext_ack *extack)) { return 0; } #endif #endif /* _LINUX_SWITCHDEV_H_ */