/usr/src/linux-headers-5.15.0-181/include/net
NameSizeModeActions
9p/-0755rm
bluetooth/-0755rm
caif/-0755rm
iucv/-0755rm
netfilter/-0755rm
netns/-0755rm
nfc/-0755rm
phonet/-0755rm
sctp/-0755rm
tc_act/-0755rm
6lowpan.h102700644editdlrm
act_api.h86470644editdlrm
addrconf.h145940644editdlrm
af_ieee802154.h12200644editdlrm
af_rxrpc.h27980644editdlrm
af_unix.h33750644editdlrm
af_vsock.h75920644editdlrm
ah.h3820644editdlrm
arp.h21410644editdlrm
atmclip.h15150644editdlrm
ax25.h154430644editdlrm
ax88796.h14400644editdlrm
bareudp.h5720644editdlrm
bonding.h202630644editdlrm
bond_3ad.h97060644editdlrm
bond_alb.h62510644editdlrm
bond_options.h38760644editdlrm
bpf_sk_storage.h17800644editdlrm
busy_poll.h39590644editdlrm
calipso.h15900644editdlrm
cfg80211-wext.h18540644editdlrm
cfg80211.h3013170644editdlrm
cfg802154.h107790644editdlrm
checksum.h48690644editdlrm
cipso_ipv4.h75480644editdlrm
cls_cgroup.h20860644editdlrm
codel.h57820644editdlrm
codel_impl.h81670644editdlrm
codel_qdisc.h29730644editdlrm
compat.h25860644editdlrm
datalink.h6190644editdlrm
dcbevent.h7420644editdlrm
dcbnl.h43170644editdlrm
devlink.h635930644editdlrm
dsa.h362310644editdlrm
dsfield.h11470644editdlrm
dst.h151530644editdlrm
dst_cache.h30310644editdlrm
dst_metadata.h55210644editdlrm
dst_ops.h21250644editdlrm
erspan.h91800644editdlrm
esp.h11900644editdlrm
espintcp.h9660644editdlrm
ethoc.h3910644editdlrm
failover.h11780644editdlrm
fib_notifier.h13840644editdlrm
fib_rules.h64500644editdlrm
firewire.h6360644editdlrm
flow.h51190644editdlrm
flow_dissector.h105170644editdlrm
flow_offload.h159380644editdlrm
fou.h5490644editdlrm
fq.h25280644editdlrm
fq_impl.h80760644editdlrm
garp.h26780644editdlrm
genetlink.h138540644editdlrm
geneve.h18980644editdlrm
gen_stats.h28890644editdlrm
gre.h33690644editdlrm
gro.h7830644editdlrm
gro_cells.h4430644editdlrm
gtp.h6330644editdlrm
gue.h33130644editdlrm
hwbm.h9690644editdlrm
icmp.h19180644editdlrm
ieee80211_radiotap.h135180644editdlrm
ieee802154_netdev.h100950644editdlrm
ife.h10570644editdlrm
if_inet6.h66920644editdlrm
ila.h2910644editdlrm
inet6_connection_sock.h7650644editdlrm
inet6_hashtables.h42590644editdlrm
inetpeer.h33720644editdlrm
inet_common.h26140644editdlrm
inet_connection_sock.h115190644editdlrm
inet_ecn.h76250644editdlrm
inet_frag.h50460644editdlrm
inet_hashtables.h125320644editdlrm
inet_sock.h99940644editdlrm
inet_timewait_sock.h37350644editdlrm
ioam6.h11990644editdlrm
ip.h227590644editdlrm
ip6_checksum.h27700644editdlrm
ip6_fib.h162800644editdlrm
ip6_route.h102300644editdlrm
ip6_tunnel.h50960644editdlrm
ipcomp.h6590644editdlrm
ipconfig.h8110644editdlrm
ipv6.h361820644editdlrm
ipv6_frag.h33610644editdlrm
ipv6_stubs.h34820644editdlrm
ip_fib.h163460644editdlrm
ip_tunnels.h159490644editdlrm
ip_vs.h505880644editdlrm
iw_handler.h214130644editdlrm
kcm.h49610644editdlrm
l3mdev.h72020644editdlrm
lag.h4090644editdlrm
lapb.h49380644editdlrm
lib80211.h40170644editdlrm
llc.h45140644editdlrm
llc_conn.h41550644editdlrm
llc_c_ac.h95370644editdlrm
llc_c_ev.h109400644editdlrm
llc_c_st.h17620644editdlrm
llc_if.h22100644editdlrm
llc_pdu.h146970644editdlrm
llc_sap.h11080644editdlrm
llc_s_ac.h15910644editdlrm
llc_s_ev.h22550644editdlrm
llc_s_st.h9470644editdlrm
lwtunnel.h68060644editdlrm
mac80211.h2739720644editdlrm
mac802154.h152350644editdlrm
macsec.h70840644editdlrm
mctp.h61550644editdlrm
mctpdevice.h8410644editdlrm
mip6.h10160644editdlrm
mld.h29180644editdlrm
mpls.h9430644editdlrm
mpls_iptunnel.h4290644editdlrm
mptcp.h67760644editdlrm
mrp.h31190644editdlrm
ncsi.h19640644editdlrm
ndisc.h151500644editdlrm
neighbour.h160990644editdlrm
netevent.h10440644editdlrm
netlabel.h206760644editdlrm
netlink.h616560644editdlrm
netprio_cgroup.h10470644editdlrm
netrom.h78950644editdlrm
net_failover.h10230644editdlrm
net_namespace.h127950644editdlrm
net_ratelimit.h2200644editdlrm
nexthop.h125650644editdlrm
nl802154.h123840644editdlrm
nsh.h126020644editdlrm
p8022.h4470644editdlrm
page_pool.h86460644editdlrm
pie.h36840644editdlrm
ping.h29700644editdlrm
pkt_cls.h244310644editdlrm
pkt_sched.h60420644editdlrm
pptp.h5570644editdlrm
protocol.h39000644editdlrm
psample.h10830644editdlrm
psnap.h3510644editdlrm
raw.h21360644editdlrm
rawv6.h8540644editdlrm
red.h116540644editdlrm
regulatory.h109010644editdlrm
request_sock.h66600644editdlrm
rose.h78020644editdlrm
route.h115820644editdlrm
rpl.h8390644editdlrm
rsi_91x.h17100644editdlrm
rtnetlink.h76380644editdlrm
rtnh.h8590644editdlrm
sch_generic.h347200644editdlrm
scm.h38770644editdlrm
secure_seq.h8550644editdlrm
seg6.h22370644editdlrm
seg6_hmac.h14730644editdlrm
seg6_local.h6440644editdlrm
selftests.h5820644editdlrm
slhc_vj.h68310644editdlrm
smc.h25130644editdlrm
snmp.h52680644editdlrm
sock.h863510644editdlrm
sock_reuseport.h18730644editdlrm
Space.h7370644editdlrm
stp.h3830644editdlrm
strparser.h42500644editdlrm
switchdev.h146140644editdlrm
tcp.h752460644editdlrm
tcp_states.h12250644editdlrm
timewait_sock.h9250644editdlrm
tipc.h24050644editdlrm
tls.h214650644editdlrm
tls_toe.h30060644editdlrm
transp_v6.h19960644editdlrm
tso.h5660644editdlrm
tun_proto.h9880644editdlrm
udp.h170350644editdlrm
udplite.h37620644editdlrm
udp_tunnel.h122010644editdlrm
vsock_addr.h6620644editdlrm
vxlan.h144240644editdlrm
wext.h15100644editdlrm
x25.h97180644editdlrm
x25device.h3870644editdlrm
xdp.h88290644editdlrm
xdp_priv.h4460644editdlrm
xdp_sock.h20940644editdlrm
xdp_sock_drv.h56070644editdlrm
xfrm.h563040644editdlrm
xsk_buff_pool.h51380644editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/include/net/act_api.h (8647B)
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __NET_ACT_API_H #define __NET_ACT_API_H /* * Public action API for classifiers/qdiscs */ #include #include #include #include #include struct tcf_idrinfo { struct mutex lock; struct idr action_idr; struct net *net; }; struct tc_action_ops; struct tc_action { const struct tc_action_ops *ops; __u32 type; /* for backward compat(TCA_OLD_COMPAT) */ struct tcf_idrinfo *idrinfo; u32 tcfa_index; refcount_t tcfa_refcnt; atomic_t tcfa_bindcnt; int tcfa_action; struct tcf_t tcfa_tm; struct gnet_stats_basic_packed tcfa_bstats; struct gnet_stats_basic_packed tcfa_bstats_hw; struct gnet_stats_queue tcfa_qstats; struct net_rate_estimator __rcu *tcfa_rate_est; spinlock_t tcfa_lock; struct gnet_stats_basic_cpu __percpu *cpu_bstats; struct gnet_stats_basic_cpu __percpu *cpu_bstats_hw; struct gnet_stats_queue __percpu *cpu_qstats; struct tc_cookie __rcu *act_cookie; struct tcf_chain __rcu *goto_chain; u32 tcfa_flags; u8 hw_stats; u8 used_hw_stats; bool used_hw_stats_valid; }; #define tcf_index common.tcfa_index #define tcf_refcnt common.tcfa_refcnt #define tcf_bindcnt common.tcfa_bindcnt #define tcf_action common.tcfa_action #define tcf_tm common.tcfa_tm #define tcf_bstats common.tcfa_bstats #define tcf_qstats common.tcfa_qstats #define tcf_rate_est common.tcfa_rate_est #define tcf_lock common.tcfa_lock #define TCA_ACT_HW_STATS_ANY (TCA_ACT_HW_STATS_IMMEDIATE | \ TCA_ACT_HW_STATS_DELAYED) /* Reserve 16 bits for user-space. See TCA_ACT_FLAGS_NO_PERCPU_STATS. */ #define TCA_ACT_FLAGS_USER_BITS 16 #define TCA_ACT_FLAGS_USER_MASK 0xffff #define TCA_ACT_FLAGS_POLICE (1U << TCA_ACT_FLAGS_USER_BITS) #define TCA_ACT_FLAGS_BIND (1U << (TCA_ACT_FLAGS_USER_BITS + 1)) #define TCA_ACT_FLAGS_REPLACE (1U << (TCA_ACT_FLAGS_USER_BITS + 2)) #define TCA_ACT_FLAGS_NO_RTNL (1U << (TCA_ACT_FLAGS_USER_BITS + 3)) /* Update lastuse only if needed, to avoid dirtying a cache line. * We use a temp variable to avoid fetching jiffies twice. */ static inline void tcf_lastuse_update(struct tcf_t *tm) { unsigned long now = jiffies; if (tm->lastuse != now) tm->lastuse = now; if (unlikely(!tm->firstuse)) tm->firstuse = now; } static inline void tcf_tm_dump(struct tcf_t *dtm, const struct tcf_t *stm) { dtm->install = jiffies_to_clock_t(jiffies - stm->install); dtm->lastuse = jiffies_to_clock_t(jiffies - stm->lastuse); dtm->firstuse = stm->firstuse ? jiffies_to_clock_t(jiffies - stm->firstuse) : 0; dtm->expires = jiffies_to_clock_t(stm->expires); } #ifdef CONFIG_NET_CLS_ACT #define ACT_P_CREATED 1 #define ACT_P_DELETED 1 typedef void (*tc_action_priv_destructor)(void *priv); struct tc_action_ops { struct list_head head; char kind[IFNAMSIZ]; enum tca_id id; /* identifier should match kind */ unsigned int net_id; size_t size; struct module *owner; int (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *); /* called under RCU BH lock*/ int (*dump)(struct sk_buff *, struct tc_action *, int, int); void (*cleanup)(struct tc_action *); int (*lookup)(struct net *net, struct tc_action **a, u32 index); int (*init)(struct net *net, struct nlattr *nla, struct nlattr *est, struct tc_action **act, struct tcf_proto *tp, u32 flags, struct netlink_ext_ack *extack); int (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *); void (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool); size_t (*get_fill_size)(const struct tc_action *act); struct net_device *(*get_dev)(const struct tc_action *a, tc_action_priv_destructor *destructor); struct psample_group * (*get_psample_group)(const struct tc_action *a, tc_action_priv_destructor *destructor); }; struct tc_action_net { struct tcf_idrinfo *idrinfo; const struct tc_action_ops *ops; }; static inline int tc_action_net_init(struct net *net, struct tc_action_net *tn, const struct tc_action_ops *ops) { int err = 0; tn->idrinfo = kmalloc(sizeof(*tn->idrinfo), GFP_KERNEL); if (!tn->idrinfo) return -ENOMEM; tn->ops = ops; tn->idrinfo->net = net; mutex_init(&tn->idrinfo->lock); idr_init(&tn->idrinfo->action_idr); return err; } void tcf_idrinfo_destroy(const struct tc_action_ops *ops, struct tcf_idrinfo *idrinfo); static inline void tc_action_net_exit(struct list_head *net_list, unsigned int id) { struct net *net; rtnl_lock(); list_for_each_entry(net, net_list, exit_list) { struct tc_action_net *tn = net_generic(net, id); tcf_idrinfo_destroy(tn->ops, tn->idrinfo); kfree(tn->idrinfo); } rtnl_unlock(); } int tcf_generic_walker(struct tc_action_net *tn, struct sk_buff *skb, struct netlink_callback *cb, int type, const struct tc_action_ops *ops, struct netlink_ext_ack *extack); int tcf_idr_search(struct tc_action_net *tn, struct tc_action **a, u32 index); int tcf_idr_create(struct tc_action_net *tn, u32 index, struct nlattr *est, struct tc_action **a, const struct tc_action_ops *ops, int bind, bool cpustats, u32 flags); int tcf_idr_create_from_flags(struct tc_action_net *tn, u32 index, struct nlattr *est, struct tc_action **a, const struct tc_action_ops *ops, int bind, u32 flags); void tcf_idr_insert_many(struct tc_action *actions[]); void tcf_idr_cleanup(struct tc_action_net *tn, u32 index); int tcf_idr_check_alloc(struct tc_action_net *tn, u32 *index, struct tc_action **a, int bind); int tcf_idr_release(struct tc_action *a, bool bind); int tcf_register_action(struct tc_action_ops *a, struct pernet_operations *ops); int tcf_unregister_action(struct tc_action_ops *a, struct pernet_operations *ops); int tcf_action_destroy(struct tc_action *actions[], int bind); int tcf_action_exec(struct sk_buff *skb, struct tc_action **actions, int nr_actions, struct tcf_result *res); int tcf_action_init(struct net *net, struct tcf_proto *tp, struct nlattr *nla, struct nlattr *est, struct tc_action *actions[], int init_res[], size_t *attr_size, u32 flags, struct netlink_ext_ack *extack); struct tc_action_ops *tc_action_load_ops(struct nlattr *nla, bool police, bool rtnl_held, struct netlink_ext_ack *extack); struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp, struct nlattr *nla, struct nlattr *est, struct tc_action_ops *a_o, int *init_res, u32 flags, struct netlink_ext_ack *extack); int tcf_action_dump(struct sk_buff *skb, struct tc_action *actions[], int bind, int ref, bool terse); int tcf_action_dump_old(struct sk_buff *skb, struct tc_action *a, int, int); int tcf_action_dump_1(struct sk_buff *skb, struct tc_action *a, int, int); static inline void tcf_action_update_bstats(struct tc_action *a, struct sk_buff *skb) { if (likely(a->cpu_bstats)) { bstats_cpu_update(this_cpu_ptr(a->cpu_bstats), skb); return; } spin_lock(&a->tcfa_lock); bstats_update(&a->tcfa_bstats, skb); spin_unlock(&a->tcfa_lock); } static inline void tcf_action_inc_drop_qstats(struct tc_action *a) { if (likely(a->cpu_qstats)) { qstats_drop_inc(this_cpu_ptr(a->cpu_qstats)); return; } spin_lock(&a->tcfa_lock); qstats_drop_inc(&a->tcfa_qstats); spin_unlock(&a->tcfa_lock); } static inline void tcf_action_inc_overlimit_qstats(struct tc_action *a) { if (likely(a->cpu_qstats)) { qstats_overlimit_inc(this_cpu_ptr(a->cpu_qstats)); return; } spin_lock(&a->tcfa_lock); qstats_overlimit_inc(&a->tcfa_qstats); spin_unlock(&a->tcfa_lock); } void tcf_action_update_stats(struct tc_action *a, u64 bytes, u64 packets, u64 drops, bool hw); int tcf_action_copy_stats(struct sk_buff *, struct tc_action *, int); int tcf_action_check_ctrlact(int action, struct tcf_proto *tp, struct tcf_chain **handle, struct netlink_ext_ack *newchain); struct tcf_chain *tcf_action_set_ctrlact(struct tc_action *a, int action, struct tcf_chain *newchain); #ifdef CONFIG_INET DECLARE_STATIC_KEY_FALSE(tcf_frag_xmit_count); #endif int tcf_dev_queue_xmit(struct sk_buff *skb, int (*xmit)(struct sk_buff *skb)); #endif /* CONFIG_NET_CLS_ACT */ static inline void tcf_action_stats_update(struct tc_action *a, u64 bytes, u64 packets, u64 drops, u64 lastuse, bool hw) { #ifdef CONFIG_NET_CLS_ACT if (!a->ops->stats_update) return; a->ops->stats_update(a, bytes, packets, drops, lastuse, hw); #endif } #endif