Linux vmi284606.contaboserver.net 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Apache/2.4.57 (Ubuntu)
: 167.86.127.34 | : 216.73.217.31
Cant Read [ /etc/named.conf ]
7.2.24-0ubuntu0.18.04.17
root
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
src /
linux-headers-4.15.0-213 /
include /
net /
[ HOME SHELL ]
Name
Size
Permission
Action
9p
[ DIR ]
drwxr-xr-x
bluetooth
[ DIR ]
drwxr-xr-x
caif
[ DIR ]
drwxr-xr-x
iucv
[ DIR ]
drwxr-xr-x
netfilter
[ DIR ]
drwxr-xr-x
netns
[ DIR ]
drwxr-xr-x
nfc
[ DIR ]
drwxr-xr-x
phonet
[ DIR ]
drwxr-xr-x
sctp
[ DIR ]
drwxr-xr-x
tc_act
[ DIR ]
drwxr-xr-x
6lowpan.h
10.03
KB
-rw-r--r--
Space.h
1.15
KB
-rw-r--r--
act_api.h
6.38
KB
-rw-r--r--
addrconf.h
12.63
KB
-rw-r--r--
af_ieee802154.h
1.55
KB
-rw-r--r--
af_rxrpc.h
2.79
KB
-rw-r--r--
af_unix.h
2.22
KB
-rw-r--r--
af_vsock.h
7.21
KB
-rw-r--r--
ah.h
382
B
-rw-r--r--
arp.h
2
KB
-rw-r--r--
atmclip.h
1.48
KB
-rw-r--r--
ax25.h
15.02
KB
-rw-r--r--
ax88796.h
998
B
-rw-r--r--
bond_3ad.h
9.79
KB
-rw-r--r--
bond_alb.h
6.6
KB
-rw-r--r--
bond_options.h
3.92
KB
-rw-r--r--
bonding.h
19.1
KB
-rw-r--r--
busy_poll.h
3.81
KB
-rw-r--r--
calipso.h
2.15
KB
-rw-r--r--
cfg80211-wext.h
1.95
KB
-rw-r--r--
cfg80211.h
221.24
KB
-rw-r--r--
cfg802154.h
10.89
KB
-rw-r--r--
checksum.h
4.76
KB
-rw-r--r--
cipso_ipv4.h
8.2
KB
-rw-r--r--
cls_cgroup.h
2.15
KB
-rw-r--r--
codel.h
5.65
KB
-rw-r--r--
codel_impl.h
7.98
KB
-rw-r--r--
codel_qdisc.h
2.9
KB
-rw-r--r--
compat.h
2.11
KB
-rw-r--r--
datalink.h
619
B
-rw-r--r--
dcbevent.h
1.26
KB
-rw-r--r--
dcbnl.h
4.2
KB
-rw-r--r--
devlink.h
13.25
KB
-rw-r--r--
dn.h
6.88
KB
-rw-r--r--
dn_dev.h
5.36
KB
-rw-r--r--
dn_fib.h
3.98
KB
-rw-r--r--
dn_neigh.h
968
B
-rw-r--r--
dn_nsp.h
5.83
KB
-rw-r--r--
dn_route.h
4.36
KB
-rw-r--r--
dsa.h
13.94
KB
-rw-r--r--
dsfield.h
1.11
KB
-rw-r--r--
dst.h
13.48
KB
-rw-r--r--
dst_cache.h
2.53
KB
-rw-r--r--
dst_metadata.h
5.39
KB
-rw-r--r--
dst_ops.h
2
KB
-rw-r--r--
erspan.h
2.11
KB
-rw-r--r--
esp.h
877
B
-rw-r--r--
ethoc.h
538
B
-rw-r--r--
fib_notifier.h
1.29
KB
-rw-r--r--
fib_rules.h
4.18
KB
-rw-r--r--
firewire.h
636
B
-rw-r--r--
flow.h
6.16
KB
-rw-r--r--
flow_dissector.h
7.55
KB
-rw-r--r--
fou.h
549
B
-rw-r--r--
fq.h
2.67
KB
-rw-r--r--
fq_impl.h
6.9
KB
-rw-r--r--
garp.h
2.62
KB
-rw-r--r--
gen_stats.h
2.34
KB
-rw-r--r--
genetlink.h
11.3
KB
-rw-r--r--
geneve.h
1.67
KB
-rw-r--r--
gre.h
2.99
KB
-rw-r--r--
gro_cells.h
443
B
-rw-r--r--
gtp.h
633
B
-rw-r--r--
gue.h
3.23
KB
-rw-r--r--
hwbm.h
937
B
-rw-r--r--
icmp.h
2.01
KB
-rw-r--r--
ieee80211_radiotap.h
6.63
KB
-rw-r--r--
ieee802154_netdev.h
10.24
KB
-rw-r--r--
if_inet6.h
6.13
KB
-rw-r--r--
ife.h
1.06
KB
-rw-r--r--
ila.h
498
B
-rw-r--r--
inet6_connection_sock.h
976
B
-rw-r--r--
inet6_hashtables.h
3.7
KB
-rw-r--r--
inet_common.h
1.89
KB
-rw-r--r--
inet_connection_sock.h
10.48
KB
-rw-r--r--
inet_ecn.h
6.02
KB
-rw-r--r--
inet_frag.h
4.51
KB
-rw-r--r--
inet_hashtables.h
12.91
KB
-rw-r--r--
inet_sock.h
8.25
KB
-rw-r--r--
inet_timewait_sock.h
3.82
KB
-rw-r--r--
inetpeer.h
3.29
KB
-rw-r--r--
ip.h
18.51
KB
-rw-r--r--
ip6_checksum.h
2.89
KB
-rw-r--r--
ip6_fib.h
10.04
KB
-rw-r--r--
ip6_route.h
7.63
KB
-rw-r--r--
ip6_tunnel.h
4.72
KB
-rw-r--r--
ip_fib.h
10.72
KB
-rw-r--r--
ip_tunnels.h
13.61
KB
-rw-r--r--
ip_vs.h
46.78
KB
-rw-r--r--
ipcomp.h
659
B
-rw-r--r--
ipconfig.h
811
B
-rw-r--r--
ipv6.h
29.97
KB
-rw-r--r--
ipv6_frag.h
2.54
KB
-rw-r--r--
ipx.h
4.4
KB
-rw-r--r--
iw_handler.h
20.91
KB
-rw-r--r--
kcm.h
4.96
KB
-rw-r--r--
l3mdev.h
5.86
KB
-rw-r--r--
lapb.h
4.75
KB
-rw-r--r--
lib80211.h
3.92
KB
-rw-r--r--
llc.h
4.41
KB
-rw-r--r--
llc_c_ac.h
9.31
KB
-rw-r--r--
llc_c_ev.h
10.68
KB
-rw-r--r--
llc_c_st.h
1.72
KB
-rw-r--r--
llc_conn.h
4.06
KB
-rw-r--r--
llc_if.h
2.16
KB
-rw-r--r--
llc_pdu.h
14.44
KB
-rw-r--r--
llc_s_ac.h
1.55
KB
-rw-r--r--
llc_s_ev.h
2.2
KB
-rw-r--r--
llc_s_st.h
947
B
-rw-r--r--
llc_sap.h
1.08
KB
-rw-r--r--
lwtunnel.h
5.84
KB
-rw-r--r--
mac80211.h
230.36
KB
-rw-r--r--
mac802154.h
15.27
KB
-rw-r--r--
mip6.h
1.58
KB
-rw-r--r--
mld.h
2.8
KB
-rw-r--r--
mpls.h
932
B
-rw-r--r--
mpls_iptunnel.h
827
B
-rw-r--r--
mrp.h
3.05
KB
-rw-r--r--
ncsi.h
1.92
KB
-rw-r--r--
ndisc.h
13.77
KB
-rw-r--r--
neighbour.h
15.06
KB
-rw-r--r--
net_namespace.h
10.08
KB
-rw-r--r--
net_ratelimit.h
220
B
-rw-r--r--
netevent.h
910
B
-rw-r--r--
netlabel.h
20.74
KB
-rw-r--r--
netlink.h
40.39
KB
-rw-r--r--
netprio_cgroup.h
1.24
KB
-rw-r--r--
netrom.h
7.68
KB
-rw-r--r--
nexthop.h
865
B
-rw-r--r--
nl802154.h
12.09
KB
-rw-r--r--
nsh.h
12.31
KB
-rw-r--r--
p8022.h
447
B
-rw-r--r--
ping.h
3.45
KB
-rw-r--r--
pkt_cls.h
17.34
KB
-rw-r--r--
pkt_sched.h
4.05
KB
-rw-r--r--
pptp.h
557
B
-rw-r--r--
protocol.h
3.89
KB
-rw-r--r--
psample.h
860
B
-rw-r--r--
psnap.h
351
B
-rw-r--r--
raw.h
2.07
KB
-rw-r--r--
rawv6.h
854
B
-rw-r--r--
red.h
10.45
KB
-rw-r--r--
regulatory.h
10.12
KB
-rw-r--r--
request_sock.h
6.46
KB
-rw-r--r--
rose.h
7.62
KB
-rw-r--r--
route.h
10.02
KB
-rw-r--r--
rtnetlink.h
6.13
KB
-rw-r--r--
sch_generic.h
23.3
KB
-rw-r--r--
scm.h
3.5
KB
-rw-r--r--
secure_seq.h
855
B
-rw-r--r--
seg6.h
1.66
KB
-rw-r--r--
seg6_hmac.h
1.65
KB
-rw-r--r--
slhc_vj.h
6.67
KB
-rw-r--r--
smc.h
440
B
-rw-r--r--
snmp.h
5.23
KB
-rw-r--r--
sock.h
70.05
KB
-rw-r--r--
sock_reuseport.h
863
B
-rw-r--r--
stp.h
383
B
-rw-r--r--
strparser.h
3.75
KB
-rw-r--r--
switchdev.h
6.52
KB
-rw-r--r--
tcp.h
62.88
KB
-rw-r--r--
tcp_states.h
1.26
KB
-rw-r--r--
timewait_sock.h
1.11
KB
-rw-r--r--
tipc.h
2.34
KB
-rw-r--r--
tls.h
7.12
KB
-rw-r--r--
transp_v6.h
2.08
KB
-rw-r--r--
tso.h
515
B
-rw-r--r--
tun_proto.h
988
B
-rw-r--r--
udp.h
12.87
KB
-rw-r--r--
udp_tunnel.h
5.12
KB
-rw-r--r--
udplite.h
3.83
KB
-rw-r--r--
vsock_addr.h
1.05
KB
-rw-r--r--
vxlan.h
10.43
KB
-rw-r--r--
wext.h
1.51
KB
-rw-r--r--
wimax.h
19.97
KB
-rw-r--r--
x25.h
9.43
KB
-rw-r--r--
x25device.h
387
B
-rw-r--r--
xfrm.h
53.72
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : pkt_cls.h
/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __NET_PKT_CLS_H #define __NET_PKT_CLS_H #include <linux/pkt_cls.h> #include <linux/workqueue.h> #include <net/sch_generic.h> #include <net/act_api.h> /* Basic packet classifier frontend definitions. */ struct tcf_walker { int stop; int skip; int count; int (*fn)(struct tcf_proto *, void *node, struct tcf_walker *); }; int register_tcf_proto_ops(struct tcf_proto_ops *ops); int unregister_tcf_proto_ops(struct tcf_proto_ops *ops); enum tcf_block_binder_type { TCF_BLOCK_BINDER_TYPE_UNSPEC, TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS, TCF_BLOCK_BINDER_TYPE_CLSACT_EGRESS, }; struct tcf_block_ext_info { enum tcf_block_binder_type binder_type; tcf_chain_head_change_t *chain_head_change; void *chain_head_change_priv; }; struct tcf_block_cb; bool tcf_queue_work(struct rcu_work *rwork, work_func_t func); #ifdef CONFIG_NET_CLS struct tcf_chain *tcf_chain_get(struct tcf_block *block, u32 chain_index, bool create); void tcf_chain_put(struct tcf_chain *chain); int tcf_block_get(struct tcf_block **p_block, struct tcf_proto __rcu **p_filter_chain, struct Qdisc *q); int tcf_block_get_ext(struct tcf_block **p_block, struct Qdisc *q, struct tcf_block_ext_info *ei); void tcf_block_put(struct tcf_block *block); void tcf_block_put_ext(struct tcf_block *block, struct Qdisc *q, struct tcf_block_ext_info *ei); static inline struct Qdisc *tcf_block_q(struct tcf_block *block) { return block->q; } static inline struct net_device *tcf_block_dev(struct tcf_block *block) { return tcf_block_q(block)->dev_queue->dev; } void *tcf_block_cb_priv(struct tcf_block_cb *block_cb); struct tcf_block_cb *tcf_block_cb_lookup(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident); void tcf_block_cb_incref(struct tcf_block_cb *block_cb); unsigned int tcf_block_cb_decref(struct tcf_block_cb *block_cb); struct tcf_block_cb *__tcf_block_cb_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident, void *cb_priv); int tcf_block_cb_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident, void *cb_priv); void __tcf_block_cb_unregister(struct tcf_block_cb *block_cb); void tcf_block_cb_unregister(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident); int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp, struct tcf_result *res, bool compat_mode); #else static inline int tcf_block_get(struct tcf_block **p_block, struct tcf_proto __rcu **p_filter_chain, struct Qdisc *q) { return 0; } static inline int tcf_block_get_ext(struct tcf_block **p_block, struct Qdisc *q, struct tcf_block_ext_info *ei) { return 0; } static inline void tcf_block_put(struct tcf_block *block) { } static inline void tcf_block_put_ext(struct tcf_block *block, struct Qdisc *q, struct tcf_block_ext_info *ei) { } static inline struct Qdisc *tcf_block_q(struct tcf_block *block) { return NULL; } static inline struct net_device *tcf_block_dev(struct tcf_block *block) { return NULL; } static inline int tc_setup_cb_block_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_priv) { return 0; } static inline void tc_setup_cb_block_unregister(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_priv) { } static inline void *tcf_block_cb_priv(struct tcf_block_cb *block_cb) { return NULL; } static inline struct tcf_block_cb *tcf_block_cb_lookup(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident) { return NULL; } static inline void tcf_block_cb_incref(struct tcf_block_cb *block_cb) { } static inline unsigned int tcf_block_cb_decref(struct tcf_block_cb *block_cb) { return 0; } static inline struct tcf_block_cb *__tcf_block_cb_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident, void *cb_priv) { return NULL; } static inline int tcf_block_cb_register(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident, void *cb_priv) { return 0; } static inline void __tcf_block_cb_unregister(struct tcf_block_cb *block_cb) { } static inline void tcf_block_cb_unregister(struct tcf_block *block, tc_setup_cb_t *cb, void *cb_ident) { } static inline int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp, struct tcf_result *res, bool compat_mode) { return TC_ACT_UNSPEC; } #endif static inline unsigned long __cls_set_class(unsigned long *clp, unsigned long cl) { return xchg(clp, cl); } static inline void __tcf_bind_filter(struct Qdisc *q, struct tcf_result *r, unsigned long base) { unsigned long cl; cl = q->ops->cl_ops->bind_tcf(q, base, r->classid); cl = __cls_set_class(&r->class, cl); if (cl) q->ops->cl_ops->unbind_tcf(q, cl); } static inline void tcf_bind_filter(struct tcf_proto *tp, struct tcf_result *r, unsigned long base) { struct Qdisc *q = tp->chain->block->q; /* Check q as it is not set for shared blocks. In that case, * setting class is not supported. */ if (!q) return; sch_tree_lock(q); __tcf_bind_filter(q, r, base); sch_tree_unlock(q); } static inline void __tcf_unbind_filter(struct Qdisc *q, struct tcf_result *r) { unsigned long cl; if ((cl = __cls_set_class(&r->class, 0)) != 0) q->ops->cl_ops->unbind_tcf(q, cl); } static inline void tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r) { struct Qdisc *q = tp->chain->block->q; if (!q) return; __tcf_unbind_filter(q, r); } struct tcf_exts { #ifdef CONFIG_NET_CLS_ACT __u32 type; /* for backward compat(TCA_OLD_COMPAT) */ int nr_actions; struct tc_action **actions; struct net *net; #endif /* Map to export classifier specific extension TLV types to the * generic extensions API. Unsupported extensions must be set to 0. */ int action; int police; }; static inline int tcf_exts_init(struct tcf_exts *exts, struct net *net, int action, int police) { #ifdef CONFIG_NET_CLS_ACT exts->type = 0; exts->nr_actions = 0; exts->net = net; exts->actions = kcalloc(TCA_ACT_MAX_PRIO, sizeof(struct tc_action *), GFP_KERNEL); if (!exts->actions) return -ENOMEM; #endif exts->action = action; exts->police = police; return 0; } /* Return false if the netns is being destroyed in cleanup_net(). Callers * need to do cleanup synchronously in this case, otherwise may race with * tc_action_net_exit(). Return true for other cases. */ static inline bool tcf_exts_get_net(struct tcf_exts *exts) { #ifdef CONFIG_NET_CLS_ACT exts->net = maybe_get_net(exts->net); return exts->net != NULL; #else return true; #endif } static inline void tcf_exts_put_net(struct tcf_exts *exts) { #ifdef CONFIG_NET_CLS_ACT if (exts->net) put_net(exts->net); #endif } static inline void tcf_exts_to_list(const struct tcf_exts *exts, struct list_head *actions) { #ifdef CONFIG_NET_CLS_ACT int i; for (i = 0; i < exts->nr_actions; i++) { struct tc_action *a = exts->actions[i]; list_add_tail(&a->list, actions); } #endif } static inline void tcf_exts_stats_update(const struct tcf_exts *exts, u64 bytes, u64 packets, u64 lastuse) { #ifdef CONFIG_NET_CLS_ACT int i; preempt_disable(); for (i = 0; i < exts->nr_actions; i++) { struct tc_action *a = exts->actions[i]; tcf_action_stats_update(a, bytes, packets, lastuse); } preempt_enable(); #endif } /** * tcf_exts_has_actions - check if at least one action is present * @exts: tc filter extensions handle * * Returns true if at least one action is present. */ static inline bool tcf_exts_has_actions(struct tcf_exts *exts) { #ifdef CONFIG_NET_CLS_ACT return exts->nr_actions; #else return false; #endif } /** * tcf_exts_has_one_action - check if exactly one action is present * @exts: tc filter extensions handle * * Returns true if exactly one action is present. */ static inline bool tcf_exts_has_one_action(struct tcf_exts *exts) { #ifdef CONFIG_NET_CLS_ACT return exts->nr_actions == 1; #else return false; #endif } /** * tcf_exts_exec - execute tc filter extensions * @skb: socket buffer * @exts: tc filter extensions handle * @res: desired result * * Executes all configured extensions. Returns TC_ACT_OK on a normal execution, * a negative number if the filter must be considered unmatched or * a positive action code (TC_ACT_*) which must be returned to the * underlying layer. */ static inline int tcf_exts_exec(struct sk_buff *skb, struct tcf_exts *exts, struct tcf_result *res) { #ifdef CONFIG_NET_CLS_ACT return tcf_action_exec(skb, exts->actions, exts->nr_actions, res); #endif return TC_ACT_OK; } int tcf_exts_validate(struct net *net, struct tcf_proto *tp, struct nlattr **tb, struct nlattr *rate_tlv, struct tcf_exts *exts, bool ovr); void tcf_exts_destroy(struct tcf_exts *exts); void tcf_exts_change(struct tcf_exts *dst, struct tcf_exts *src); int tcf_exts_dump(struct sk_buff *skb, struct tcf_exts *exts); int tcf_exts_dump_stats(struct sk_buff *skb, struct tcf_exts *exts); /** * struct tcf_pkt_info - packet information */ struct tcf_pkt_info { unsigned char * ptr; int nexthdr; }; #ifdef CONFIG_NET_EMATCH struct tcf_ematch_ops; /** * struct tcf_ematch - extended match (ematch) * * @matchid: identifier to allow userspace to reidentify a match * @flags: flags specifying attributes and the relation to other matches * @ops: the operations lookup table of the corresponding ematch module * @datalen: length of the ematch specific configuration data * @data: ematch specific data */ struct tcf_ematch { struct tcf_ematch_ops * ops; unsigned long data; unsigned int datalen; u16 matchid; u16 flags; struct net *net; }; static inline int tcf_em_is_container(struct tcf_ematch *em) { return !em->ops; } static inline int tcf_em_is_simple(struct tcf_ematch *em) { return em->flags & TCF_EM_SIMPLE; } static inline int tcf_em_is_inverted(struct tcf_ematch *em) { return em->flags & TCF_EM_INVERT; } static inline int tcf_em_last_match(struct tcf_ematch *em) { return (em->flags & TCF_EM_REL_MASK) == TCF_EM_REL_END; } static inline int tcf_em_early_end(struct tcf_ematch *em, int result) { if (tcf_em_last_match(em)) return 1; if (result == 0 && em->flags & TCF_EM_REL_AND) return 1; if (result != 0 && em->flags & TCF_EM_REL_OR) return 1; return 0; } /** * struct tcf_ematch_tree - ematch tree handle * * @hdr: ematch tree header supplied by userspace * @matches: array of ematches */ struct tcf_ematch_tree { struct tcf_ematch_tree_hdr hdr; struct tcf_ematch * matches; }; /** * struct tcf_ematch_ops - ematch module operations * * @kind: identifier (kind) of this ematch module * @datalen: length of expected configuration data (optional) * @change: called during validation (optional) * @match: called during ematch tree evaluation, must return 1/0 * @destroy: called during destroyage (optional) * @dump: called during dumping process (optional) * @owner: owner, must be set to THIS_MODULE * @link: link to previous/next ematch module (internal use) */ struct tcf_ematch_ops { int kind; int datalen; int (*change)(struct net *net, void *, int, struct tcf_ematch *); int (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *); void (*destroy)(struct tcf_ematch *); int (*dump)(struct sk_buff *, struct tcf_ematch *); struct module *owner; struct list_head link; }; int tcf_em_register(struct tcf_ematch_ops *); void tcf_em_unregister(struct tcf_ematch_ops *); int tcf_em_tree_validate(struct tcf_proto *, struct nlattr *, struct tcf_ematch_tree *); void tcf_em_tree_destroy(struct tcf_ematch_tree *); int tcf_em_tree_dump(struct sk_buff *, struct tcf_ematch_tree *, int); int __tcf_em_tree_match(struct sk_buff *, struct tcf_ematch_tree *, struct tcf_pkt_info *); /** * tcf_em_tree_match - evaulate an ematch tree * * @skb: socket buffer of the packet in question * @tree: ematch tree to be used for evaluation * @info: packet information examined by classifier * * This function matches @skb against the ematch tree in @tree by going * through all ematches respecting their logic relations returning * as soon as the result is obvious. * * Returns 1 if the ematch tree as-one matches, no ematches are configured * or ematch is not enabled in the kernel, otherwise 0 is returned. */ static inline int tcf_em_tree_match(struct sk_buff *skb, struct tcf_ematch_tree *tree, struct tcf_pkt_info *info) { if (tree->hdr.nmatches) return __tcf_em_tree_match(skb, tree, info); else return 1; } #define MODULE_ALIAS_TCF_EMATCH(kind) MODULE_ALIAS("ematch-kind-" __stringify(kind)) #else /* CONFIG_NET_EMATCH */ struct tcf_ematch_tree { }; #define tcf_em_tree_validate(tp, tb, t) ((void)(t), 0) #define tcf_em_tree_destroy(t) do { (void)(t); } while(0) #define tcf_em_tree_dump(skb, t, tlv) (0) #define tcf_em_tree_match(skb, t, info) ((void)(info), 1) #endif /* CONFIG_NET_EMATCH */ static inline unsigned char * tcf_get_base_ptr(struct sk_buff *skb, int layer) { switch (layer) { case TCF_LAYER_LINK: return skb_mac_header(skb); case TCF_LAYER_NETWORK: return skb_network_header(skb); case TCF_LAYER_TRANSPORT: return skb_transport_header(skb); } return NULL; } static inline int tcf_valid_offset(const struct sk_buff *skb, const unsigned char *ptr, const int len) { return likely((ptr + len) <= skb_tail_pointer(skb) && ptr >= skb->head && (ptr <= (ptr + len))); } #ifdef CONFIG_NET_CLS_IND #include <net/net_namespace.h> static inline int tcf_change_indev(struct net *net, struct nlattr *indev_tlv) { char indev[IFNAMSIZ]; struct net_device *dev; if (nla_strlcpy(indev, indev_tlv, IFNAMSIZ) >= IFNAMSIZ) return -EINVAL; dev = __dev_get_by_name(net, indev); if (!dev) return -ENODEV; return dev->ifindex; } static inline bool tcf_match_indev(struct sk_buff *skb, int ifindex) { if (!ifindex) return true; if (!skb->skb_iif) return false; return ifindex == skb->skb_iif; } #endif /* CONFIG_NET_CLS_IND */ int tc_setup_cb_call(struct tcf_block *block, struct tcf_exts *exts, enum tc_setup_type type, void *type_data, bool err_stop); enum tc_block_command { TC_BLOCK_BIND, TC_BLOCK_UNBIND, }; struct tc_block_offload { enum tc_block_command command; enum tcf_block_binder_type binder_type; struct tcf_block *block; }; struct tc_cls_common_offload { u32 chain_index; __be16 protocol; u32 prio; }; static inline void tc_cls_common_offload_init(struct tc_cls_common_offload *cls_common, const struct tcf_proto *tp) { cls_common->chain_index = tp->chain->index; cls_common->protocol = tp->protocol; cls_common->prio = tp->prio; } struct tc_cls_u32_knode { struct tcf_exts *exts; struct tc_u32_sel *sel; u32 handle; u32 val; u32 mask; u32 link_handle; u8 fshift; }; struct tc_cls_u32_hnode { u32 handle; u32 prio; unsigned int divisor; }; enum tc_clsu32_command { TC_CLSU32_NEW_KNODE, TC_CLSU32_REPLACE_KNODE, TC_CLSU32_DELETE_KNODE, TC_CLSU32_NEW_HNODE, TC_CLSU32_REPLACE_HNODE, TC_CLSU32_DELETE_HNODE, }; struct tc_cls_u32_offload { struct tc_cls_common_offload common; /* knode values */ enum tc_clsu32_command command; union { struct tc_cls_u32_knode knode; struct tc_cls_u32_hnode hnode; }; }; static inline bool tc_can_offload(const struct net_device *dev) { return dev->features & NETIF_F_HW_TC; } static inline bool tc_skip_hw(u32 flags) { return (flags & TCA_CLS_FLAGS_SKIP_HW) ? true : false; } static inline bool tc_skip_sw(u32 flags) { return (flags & TCA_CLS_FLAGS_SKIP_SW) ? true : false; } /* SKIP_HW and SKIP_SW are mutually exclusive flags. */ static inline bool tc_flags_valid(u32 flags) { if (flags & ~(TCA_CLS_FLAGS_SKIP_HW | TCA_CLS_FLAGS_SKIP_SW)) return false; if (!(flags ^ (TCA_CLS_FLAGS_SKIP_HW | TCA_CLS_FLAGS_SKIP_SW))) return false; return true; } static inline bool tc_in_hw(u32 flags) { return (flags & TCA_CLS_FLAGS_IN_HW) ? true : false; } enum tc_fl_command { TC_CLSFLOWER_REPLACE, TC_CLSFLOWER_DESTROY, TC_CLSFLOWER_STATS, }; struct tc_cls_flower_offload { struct tc_cls_common_offload common; enum tc_fl_command command; unsigned long cookie; struct flow_dissector *dissector; struct fl_flow_key *mask; struct fl_flow_key *key; struct tcf_exts *exts; u32 classid; }; enum tc_matchall_command { TC_CLSMATCHALL_REPLACE, TC_CLSMATCHALL_DESTROY, }; struct tc_cls_matchall_offload { struct tc_cls_common_offload common; enum tc_matchall_command command; struct tcf_exts *exts; unsigned long cookie; }; enum tc_clsbpf_command { TC_CLSBPF_OFFLOAD, TC_CLSBPF_STATS, }; struct tc_cls_bpf_offload { struct tc_cls_common_offload common; enum tc_clsbpf_command command; struct tcf_exts *exts; struct bpf_prog *prog; struct bpf_prog *oldprog; const char *name; bool exts_integrated; u32 gen_flags; }; struct tc_mqprio_qopt_offload { /* struct tc_mqprio_qopt must always be the first element */ struct tc_mqprio_qopt qopt; u16 mode; u16 shaper; u32 flags; u64 min_rate[TC_QOPT_MAX_QUEUE]; u64 max_rate[TC_QOPT_MAX_QUEUE]; }; /* This structure holds cookie structure that is passed from user * to the kernel for actions and classifiers */ struct tc_cookie { u8 *data; u32 len; }; enum tc_red_command { TC_RED_REPLACE, TC_RED_DESTROY, TC_RED_STATS, TC_RED_XSTATS, }; struct tc_red_qopt_offload_params { u32 min; u32 max; u32 probability; bool is_ecn; }; struct tc_red_qopt_offload_stats { struct gnet_stats_basic_packed *bstats; struct gnet_stats_queue *qstats; }; struct tc_red_qopt_offload { enum tc_red_command command; u32 handle; u32 parent; union { struct tc_red_qopt_offload_params set; struct tc_red_qopt_offload_stats stats; struct red_stats *xstats; }; }; #endif
Close