Linux anchor 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64
Apache/2.4.18 (Ubuntu)
Server IP : 10.10.100.4 & Your IP : 216.73.217.150
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
linux-headers-4.4.0-119 /
include /
net /
Delete
Unzip
Name
Size
Permission
Date
Action
9p
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
bluetooth
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
caif
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
irda
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
iucv
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
netfilter
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
netns
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
nfc
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
phonet
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
sctp
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
tc_act
[ DIR ]
drwxr-xr-x
2018-04-05 07:11
6lowpan.h
7.53
KB
-rw-r--r--
2016-01-11 00:01
Space.h
1.12
KB
-rw-r--r--
2016-01-11 00:01
act_api.h
4.21
KB
-rw-r--r--
2016-01-11 00:01
addrconf.h
11.45
KB
-rw-r--r--
2018-04-02 18:07
af_ieee802154.h
1.55
KB
-rw-r--r--
2016-01-11 00:01
af_rxrpc.h
1.82
KB
-rw-r--r--
2016-01-11 00:01
af_unix.h
2.12
KB
-rw-r--r--
2018-04-02 18:07
af_vsock.h
6.17
KB
-rw-r--r--
2016-01-11 00:01
ah.h
343
B
-rw-r--r--
2016-01-11 00:01
arp.h
1.83
KB
-rw-r--r--
2018-04-02 18:07
atmclip.h
1.44
KB
-rw-r--r--
2016-01-11 00:01
ax25.h
14.53
KB
-rw-r--r--
2016-01-11 00:01
ax88796.h
998
B
-rw-r--r--
2016-01-11 00:01
bond_3ad.h
9.73
KB
-rw-r--r--
2016-01-11 00:01
bond_alb.h
6.6
KB
-rw-r--r--
2016-01-11 00:01
bond_options.h
3.82
KB
-rw-r--r--
2016-01-11 00:01
bonding.h
18.41
KB
-rw-r--r--
2018-04-02 18:07
busy_poll.h
3.97
KB
-rw-r--r--
2016-01-11 00:01
cfg80211-wext.h
1.95
KB
-rw-r--r--
2016-01-11 00:01
cfg80211.h
187.7
KB
-rw-r--r--
2018-04-02 18:07
cfg802154.h
10.59
KB
-rw-r--r--
2016-01-11 00:01
checksum.h
4.53
KB
-rw-r--r--
2016-01-11 00:01
cipso_ipv4.h
8.17
KB
-rw-r--r--
2018-04-02 18:07
cls_cgroup.h
2.03
KB
-rw-r--r--
2016-01-11 00:01
codel.h
11.37
KB
-rw-r--r--
2018-04-02 18:07
compat.h
2
KB
-rw-r--r--
2016-01-11 00:01
datalink.h
580
B
-rw-r--r--
2016-01-11 00:01
dcbevent.h
1.26
KB
-rw-r--r--
2016-01-11 00:01
dcbnl.h
4.2
KB
-rw-r--r--
2016-01-11 00:01
dn.h
7
KB
-rw-r--r--
2016-01-11 00:01
dn_dev.h
5.32
KB
-rw-r--r--
2016-01-11 00:01
dn_fib.h
3.91
KB
-rw-r--r--
2016-01-11 00:01
dn_neigh.h
929
B
-rw-r--r--
2016-01-11 00:01
dn_nsp.h
5.87
KB
-rw-r--r--
2016-01-11 00:01
dn_route.h
4.36
KB
-rw-r--r--
2016-01-11 00:01
dsa.h
8.93
KB
-rw-r--r--
2016-01-11 00:01
dsfield.h
1.07
KB
-rw-r--r--
2016-01-11 00:01
dst.h
13.42
KB
-rw-r--r--
2018-04-02 18:07
dst_metadata.h
3.61
KB
-rw-r--r--
2018-04-02 18:07
dst_ops.h
2.03
KB
-rw-r--r--
2018-04-02 18:07
esp.h
225
B
-rw-r--r--
2016-01-11 00:01
ethoc.h
538
B
-rw-r--r--
2016-01-11 00:01
fib_rules.h
2.99
KB
-rw-r--r--
2016-01-11 00:01
firewire.h
597
B
-rw-r--r--
2016-01-11 00:01
flow.h
6.78
KB
-rw-r--r--
2016-01-11 00:01
flow_dissector.h
4.84
KB
-rw-r--r--
2016-01-11 00:01
flowcache.h
561
B
-rw-r--r--
2016-01-11 00:01
fou.h
499
B
-rw-r--r--
2016-01-11 00:01
garp.h
2.58
KB
-rw-r--r--
2016-01-11 00:01
gen_stats.h
2.13
KB
-rw-r--r--
2016-01-11 00:01
genetlink.h
13.31
KB
-rw-r--r--
2018-04-02 18:07
geneve.h
1.82
KB
-rw-r--r--
2018-04-02 18:07
gre.h
661
B
-rw-r--r--
2016-01-11 00:01
gro_cells.h
1.94
KB
-rw-r--r--
2016-01-11 00:01
gue.h
3.19
KB
-rw-r--r--
2016-01-11 00:01
icmp.h
1.53
KB
-rw-r--r--
2016-01-11 00:01
ieee80211_radiotap.h
12.22
KB
-rw-r--r--
2016-01-11 00:01
ieee802154_netdev.h
9.13
KB
-rw-r--r--
2016-01-11 00:01
if_inet6.h
6.07
KB
-rw-r--r--
2016-01-11 00:01
inet6_connection_sock.h
1.1
KB
-rw-r--r--
2016-01-11 00:01
inet6_hashtables.h
3.25
KB
-rw-r--r--
2016-01-11 00:01
inet_common.h
1.6
KB
-rw-r--r--
2016-01-11 00:01
inet_connection_sock.h
10.41
KB
-rw-r--r--
2018-04-02 18:07
inet_ecn.h
6.02
KB
-rw-r--r--
2018-04-02 18:07
inet_frag.h
4.36
KB
-rw-r--r--
2018-04-02 18:07
inet_hashtables.h
12.02
KB
-rw-r--r--
2016-01-11 00:01
inet_sock.h
7.87
KB
-rw-r--r--
2018-04-02 18:07
inet_timewait_sock.h
4.11
KB
-rw-r--r--
2016-01-11 00:01
inetpeer.h
3.44
KB
-rw-r--r--
2016-01-11 00:01
ip.h
17.13
KB
-rw-r--r--
2018-04-02 18:07
ip6_checksum.h
2.91
KB
-rw-r--r--
2016-01-11 00:01
ip6_fib.h
7.21
KB
-rw-r--r--
2018-04-02 18:07
ip6_route.h
6.17
KB
-rw-r--r--
2018-04-02 18:07
ip6_tunnel.h
3.28
KB
-rw-r--r--
2018-04-02 18:07
ip_fib.h
9.36
KB
-rw-r--r--
2018-04-02 18:07
ip_tunnels.h
10.69
KB
-rw-r--r--
2018-04-02 18:07
ip_vs.h
46.13
KB
-rw-r--r--
2018-04-02 18:07
ipcomp.h
620
B
-rw-r--r--
2016-01-11 00:01
ipconfig.h
772
B
-rw-r--r--
2016-01-11 00:01
ipv6.h
28.59
KB
-rw-r--r--
2018-04-02 18:07
ipx.h
4.32
KB
-rw-r--r--
2016-01-11 00:01
iw_handler.h
22.21
KB
-rw-r--r--
2018-04-02 18:07
l3mdev.h
5.18
KB
-rw-r--r--
2018-04-02 18:07
lapb.h
4.69
KB
-rw-r--r--
2016-01-11 00:01
lib80211.h
3.88
KB
-rw-r--r--
2016-01-11 00:01
llc.h
4.25
KB
-rw-r--r--
2016-01-11 00:01
llc_c_ac.h
9.34
KB
-rw-r--r--
2016-01-11 00:01
llc_c_ev.h
10.68
KB
-rw-r--r--
2016-01-11 00:01
llc_c_st.h
1.72
KB
-rw-r--r--
2016-01-11 00:01
llc_conn.h
4
KB
-rw-r--r--
2016-01-11 00:01
llc_if.h
2.16
KB
-rw-r--r--
2016-01-11 00:01
llc_pdu.h
14.08
KB
-rw-r--r--
2016-01-11 00:01
llc_s_ac.h
1.55
KB
-rw-r--r--
2016-01-11 00:01
llc_s_ev.h
2.2
KB
-rw-r--r--
2016-01-11 00:01
llc_s_st.h
947
B
-rw-r--r--
2016-01-11 00:01
llc_sap.h
1.08
KB
-rw-r--r--
2016-01-11 00:01
lwtunnel.h
4.07
KB
-rw-r--r--
2016-01-11 00:01
mac80211.h
212.7
KB
-rw-r--r--
2018-04-02 18:07
mac802154.h
12.1
KB
-rw-r--r--
2016-01-11 00:01
mip6.h
1.58
KB
-rw-r--r--
2016-01-11 00:01
mld.h
2.76
KB
-rw-r--r--
2016-01-11 00:01
mpls.h
1.14
KB
-rw-r--r--
2016-01-11 00:01
mpls_iptunnel.h
815
B
-rw-r--r--
2016-01-11 00:01
mrp.h
2.99
KB
-rw-r--r--
2016-01-11 00:01
ndisc.h
5.75
KB
-rw-r--r--
2018-04-02 18:07
neighbour.h
14.16
KB
-rw-r--r--
2016-01-11 00:01
net_namespace.h
9.2
KB
-rw-r--r--
2018-04-02 18:07
net_ratelimit.h
181
B
-rw-r--r--
2016-01-11 00:01
netevent.h
739
B
-rw-r--r--
2016-01-11 00:01
netlabel.h
17.25
KB
-rw-r--r--
2016-01-11 00:01
netlink.h
36.13
KB
-rw-r--r--
2016-01-11 00:01
netprio_cgroup.h
1.08
KB
-rw-r--r--
2016-01-11 00:01
netrom.h
7.61
KB
-rw-r--r--
2016-01-11 00:01
nexthop.h
821
B
-rw-r--r--
2016-01-11 00:01
nl802154.h
11.89
KB
-rw-r--r--
2016-01-11 00:01
p8022.h
408
B
-rw-r--r--
2016-01-11 00:01
ping.h
3.52
KB
-rw-r--r--
2016-01-11 00:01
pkt_cls.h
9.61
KB
-rw-r--r--
2018-04-02 18:07
pkt_sched.h
3.77
KB
-rw-r--r--
2016-01-11 00:01
protocol.h
4.09
KB
-rw-r--r--
2016-01-11 00:01
psnap.h
312
B
-rw-r--r--
2016-01-11 00:01
raw.h
1.84
KB
-rw-r--r--
2016-01-11 00:01
rawv6.h
543
B
-rw-r--r--
2016-01-11 00:01
red.h
10.03
KB
-rw-r--r--
2016-01-11 00:01
regulatory.h
10.12
KB
-rw-r--r--
2016-01-11 00:01
request_sock.h
6.38
KB
-rw-r--r--
2016-01-11 00:01
rose.h
7.59
KB
-rw-r--r--
2016-01-11 00:01
route.h
9.35
KB
-rw-r--r--
2016-01-11 00:01
rtnetlink.h
5.37
KB
-rw-r--r--
2016-01-11 00:01
sch_generic.h
20.05
KB
-rw-r--r--
2018-04-02 18:07
scm.h
3.44
KB
-rw-r--r--
2018-04-02 18:07
secure_seq.h
677
B
-rw-r--r--
2016-01-11 00:01
slhc_vj.h
6.63
KB
-rw-r--r--
2016-01-11 00:01
snmp.h
5.75
KB
-rw-r--r--
2016-01-11 00:01
sock.h
64.74
KB
-rw-r--r--
2018-04-02 18:07
stp.h
344
B
-rw-r--r--
2016-01-11 00:01
switchdev.h
8.81
KB
-rw-r--r--
2018-04-02 18:07
tcp.h
54.1
KB
-rw-r--r--
2018-04-02 18:07
tcp_memcontrol.h
254
B
-rw-r--r--
2016-01-11 00:01
tcp_states.h
1.26
KB
-rw-r--r--
2016-01-11 00:01
timewait_sock.h
1.11
KB
-rw-r--r--
2016-01-11 00:01
transp_v6.h
1.83
KB
-rw-r--r--
2016-01-11 00:01
tso.h
446
B
-rw-r--r--
2016-01-11 00:01
udp.h
9.77
KB
-rw-r--r--
2016-01-11 00:01
udp_tunnel.h
3.24
KB
-rw-r--r--
2016-01-11 00:01
udplite.h
3.75
KB
-rw-r--r--
2016-01-11 00:01
vsock_addr.h
1.05
KB
-rw-r--r--
2016-01-11 00:01
vxlan.h
6.99
KB
-rw-r--r--
2018-04-02 18:07
wext.h
1.47
KB
-rw-r--r--
2016-01-11 00:01
wimax.h
19.97
KB
-rw-r--r--
2016-01-11 00:01
x25.h
9.35
KB
-rw-r--r--
2016-01-11 00:01
x25device.h
348
B
-rw-r--r--
2016-01-11 00:01
xfrm.h
49.3
KB
-rw-r--r--
2018-04-02 18:07
Save
Rename
/* * net/dst.h Protocol independent destination cache definitions. * * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> * */ #ifndef _NET_DST_H #define _NET_DST_H #include <net/dst_ops.h> #include <linux/netdevice.h> #include <linux/rtnetlink.h> #include <linux/rcupdate.h> #include <linux/bug.h> #include <linux/jiffies.h> #include <net/neighbour.h> #include <asm/processor.h> #define DST_GC_MIN (HZ/10) #define DST_GC_INC (HZ/2) #define DST_GC_MAX (120*HZ) /* Each dst_entry has reference count and sits in some parent list(s). * When it is removed from parent list, it is "freed" (dst_free). * After this it enters dead state (dst->obsolete > 0) and if its refcnt * is zero, it can be destroyed immediately, otherwise it is added * to gc list and garbage collector periodically checks the refcnt. */ struct sk_buff; struct dst_entry { struct rcu_head rcu_head; struct dst_entry *child; struct net_device *dev; struct dst_ops *ops; unsigned long _metrics; unsigned long expires; struct dst_entry *path; struct dst_entry *from; #ifdef CONFIG_XFRM struct xfrm_state *xfrm; #else void *__pad1; #endif int (*input)(struct sk_buff *); int (*output)(struct net *net, struct sock *sk, struct sk_buff *skb); unsigned short flags; #define DST_HOST 0x0001 #define DST_NOXFRM 0x0002 #define DST_NOPOLICY 0x0004 #define DST_NOHASH 0x0008 #define DST_NOCACHE 0x0010 #define DST_NOCOUNT 0x0020 #define DST_FAKE_RTABLE 0x0040 #define DST_XFRM_TUNNEL 0x0080 #define DST_XFRM_QUEUE 0x0100 #define DST_METADATA 0x0200 short error; /* A non-zero value of dst->obsolete forces by-hand validation * of the route entry. Positive values are set by the generic * dst layer to indicate that the entry has been forcefully * destroyed. * * Negative values are used by the implementation layer code to * force invocation of the dst_ops->check() method. */ short obsolete; #define DST_OBSOLETE_NONE 0 #define DST_OBSOLETE_DEAD 2 #define DST_OBSOLETE_FORCE_CHK -1 #define DST_OBSOLETE_KILL -2 unsigned short header_len; /* more space at head required */ unsigned short trailer_len; /* space to reserve at tail */ unsigned short __pad3; #ifdef CONFIG_IP_ROUTE_CLASSID __u32 tclassid; #else __u32 __pad2; #endif #ifdef CONFIG_64BIT struct lwtunnel_state *lwtstate; /* * Align __refcnt to a 64 bytes alignment * (L1_CACHE_SIZE would be too much) */ long __pad_to_align_refcnt[1]; #endif /* * __refcnt wants to be on a different cache line from * input/output/ops or performance tanks badly */ atomic_t __refcnt; /* client references */ int __use; unsigned long lastuse; #ifndef CONFIG_64BIT struct lwtunnel_state *lwtstate; #endif union { struct dst_entry *next; struct rtable __rcu *rt_next; struct rt6_info *rt6_next; struct dn_route __rcu *dn_next; }; }; struct dst_metrics { u32 metrics[RTAX_MAX]; atomic_t refcnt; }; extern const struct dst_metrics dst_default_metrics; u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); #define DST_METRICS_READ_ONLY 0x1UL #define DST_METRICS_REFCOUNTED 0x2UL #define DST_METRICS_FLAGS 0x3UL #define __DST_METRICS_PTR(Y) \ ((u32 *)((Y) & ~DST_METRICS_FLAGS)) #define DST_METRICS_PTR(X) __DST_METRICS_PTR((X)->_metrics) static inline bool dst_metrics_read_only(const struct dst_entry *dst) { return dst->_metrics & DST_METRICS_READ_ONLY; } void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old); static inline void dst_destroy_metrics_generic(struct dst_entry *dst) { unsigned long val = dst->_metrics; if (!(val & DST_METRICS_READ_ONLY)) __dst_destroy_metrics_generic(dst, val); } static inline u32 *dst_metrics_write_ptr(struct dst_entry *dst) { unsigned long p = dst->_metrics; BUG_ON(!p); if (p & DST_METRICS_READ_ONLY) return dst->ops->cow_metrics(dst, p); return __DST_METRICS_PTR(p); } /* This may only be invoked before the entry has reached global * visibility. */ static inline void dst_init_metrics(struct dst_entry *dst, const u32 *src_metrics, bool read_only) { dst->_metrics = ((unsigned long) src_metrics) | (read_only ? DST_METRICS_READ_ONLY : 0); } static inline void dst_copy_metrics(struct dst_entry *dest, const struct dst_entry *src) { u32 *dst_metrics = dst_metrics_write_ptr(dest); if (dst_metrics) { u32 *src_metrics = DST_METRICS_PTR(src); memcpy(dst_metrics, src_metrics, RTAX_MAX * sizeof(u32)); } } static inline u32 *dst_metrics_ptr(struct dst_entry *dst) { return DST_METRICS_PTR(dst); } static inline u32 dst_metric_raw(const struct dst_entry *dst, const int metric) { u32 *p = DST_METRICS_PTR(dst); return p[metric-1]; } static inline u32 dst_metric(const struct dst_entry *dst, const int metric) { WARN_ON_ONCE(metric == RTAX_HOPLIMIT || metric == RTAX_ADVMSS || metric == RTAX_MTU); return dst_metric_raw(dst, metric); } static inline u32 dst_metric_advmss(const struct dst_entry *dst) { u32 advmss = dst_metric_raw(dst, RTAX_ADVMSS); if (!advmss) advmss = dst->ops->default_advmss(dst); return advmss; } static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val) { u32 *p = dst_metrics_write_ptr(dst); if (p) p[metric-1] = val; } /* Kernel-internal feature bits that are unallocated in user space. */ #define DST_FEATURE_ECN_CA (1 << 31) #define DST_FEATURE_MASK (DST_FEATURE_ECN_CA) #define DST_FEATURE_ECN_MASK (DST_FEATURE_ECN_CA | RTAX_FEATURE_ECN) static inline u32 dst_feature(const struct dst_entry *dst, u32 feature) { return dst_metric(dst, RTAX_FEATURES) & feature; } static inline u32 dst_mtu(const struct dst_entry *dst) { return dst->ops->mtu(dst); } /* RTT metrics are stored in milliseconds for user ABI, but used as jiffies */ static inline unsigned long dst_metric_rtt(const struct dst_entry *dst, int metric) { return msecs_to_jiffies(dst_metric(dst, metric)); } static inline u32 dst_allfrag(const struct dst_entry *dst) { int ret = dst_feature(dst, RTAX_FEATURE_ALLFRAG); return ret; } static inline int dst_metric_locked(const struct dst_entry *dst, int metric) { return dst_metric(dst, RTAX_LOCK) & (1<<metric); } static inline void dst_hold(struct dst_entry *dst) { /* * If your kernel compilation stops here, please check * __pad_to_align_refcnt declaration in struct dst_entry */ BUILD_BUG_ON(offsetof(struct dst_entry, __refcnt) & 63); atomic_inc(&dst->__refcnt); } static inline void dst_use(struct dst_entry *dst, unsigned long time) { dst_hold(dst); dst->__use++; dst->lastuse = time; } static inline void dst_use_noref(struct dst_entry *dst, unsigned long time) { dst->__use++; dst->lastuse = time; } static inline struct dst_entry *dst_clone(struct dst_entry *dst) { if (dst) atomic_inc(&dst->__refcnt); return dst; } void dst_release(struct dst_entry *dst); static inline void refdst_drop(unsigned long refdst) { if (!(refdst & SKB_DST_NOREF)) dst_release((struct dst_entry *)(refdst & SKB_DST_PTRMASK)); } /** * skb_dst_drop - drops skb dst * @skb: buffer * * Drops dst reference count if a reference was taken. */ static inline void skb_dst_drop(struct sk_buff *skb) { if (skb->_skb_refdst) { refdst_drop(skb->_skb_refdst); skb->_skb_refdst = 0UL; } } static inline void __skb_dst_copy(struct sk_buff *nskb, unsigned long refdst) { nskb->_skb_refdst = refdst; if (!(nskb->_skb_refdst & SKB_DST_NOREF)) dst_clone(skb_dst(nskb)); } static inline void skb_dst_copy(struct sk_buff *nskb, const struct sk_buff *oskb) { __skb_dst_copy(nskb, oskb->_skb_refdst); } /** * skb_dst_force - makes sure skb dst is refcounted * @skb: buffer * * If dst is not yet refcounted, let's do it */ static inline void skb_dst_force(struct sk_buff *skb) { if (skb_dst_is_noref(skb)) { WARN_ON(!rcu_read_lock_held()); skb->_skb_refdst &= ~SKB_DST_NOREF; dst_clone(skb_dst(skb)); } } /** * dst_hold_safe - Take a reference on a dst if possible * @dst: pointer to dst entry * * This helper returns false if it could not safely * take a reference on a dst. */ static inline bool dst_hold_safe(struct dst_entry *dst) { if (dst->flags & DST_NOCACHE) return atomic_inc_not_zero(&dst->__refcnt); dst_hold(dst); return true; } /** * skb_dst_force_safe - makes sure skb dst is refcounted * @skb: buffer * * If dst is not yet refcounted and not destroyed, grab a ref on it. */ static inline void skb_dst_force_safe(struct sk_buff *skb) { if (skb_dst_is_noref(skb)) { struct dst_entry *dst = skb_dst(skb); if (!dst_hold_safe(dst)) dst = NULL; skb->_skb_refdst = (unsigned long)dst; } } /** * __skb_tunnel_rx - prepare skb for rx reinsert * @skb: buffer * @dev: tunnel device * @net: netns for packet i/o * * After decapsulation, packet is going to re-enter (netif_rx()) our stack, * so make some cleanups. (no accounting done) */ static inline void __skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev, struct net *net) { skb->dev = dev; /* * Clear hash so that we can recalulate the hash for the * encapsulated packet, unless we have already determine the hash * over the L4 4-tuple. */ skb_clear_hash_if_not_l4(skb); skb_set_queue_mapping(skb, 0); skb_scrub_packet(skb, !net_eq(net, dev_net(dev))); } /** * skb_tunnel_rx - prepare skb for rx reinsert * @skb: buffer * @dev: tunnel device * * After decapsulation, packet is going to re-enter (netif_rx()) our stack, * so make some cleanups, and perform accounting. * Note: this accounting is not SMP safe. */ static inline void skb_tunnel_rx(struct sk_buff *skb, struct net_device *dev, struct net *net) { /* TODO : stats should be SMP safe */ dev->stats.rx_packets++; dev->stats.rx_bytes += skb->len; __skb_tunnel_rx(skb, dev, net); } int dst_discard_out(struct net *net, struct sock *sk, struct sk_buff *skb); static inline int dst_discard(struct sk_buff *skb) { return dst_discard_out(&init_net, skb->sk, skb); } void *dst_alloc(struct dst_ops *ops, struct net_device *dev, int initial_ref, int initial_obsolete, unsigned short flags); void dst_init(struct dst_entry *dst, struct dst_ops *ops, struct net_device *dev, int initial_ref, int initial_obsolete, unsigned short flags); void __dst_free(struct dst_entry *dst); struct dst_entry *dst_destroy(struct dst_entry *dst); static inline void dst_free(struct dst_entry *dst) { if (dst->obsolete > 0) return; if (!atomic_read(&dst->__refcnt)) { dst = dst_destroy(dst); if (!dst) return; } __dst_free(dst); } static inline void dst_rcu_free(struct rcu_head *head) { struct dst_entry *dst = container_of(head, struct dst_entry, rcu_head); dst_free(dst); } static inline void dst_confirm(struct dst_entry *dst) { } static inline int dst_neigh_output(struct dst_entry *dst, struct neighbour *n, struct sk_buff *skb) { const struct hh_cache *hh; hh = &n->hh; if ((n->nud_state & NUD_CONNECTED) && hh->hh_len) return neigh_hh_output(hh, skb); else return n->output(n, skb); } static inline struct neighbour *dst_neigh_lookup(const struct dst_entry *dst, const void *daddr) { struct neighbour *n = dst->ops->neigh_lookup(dst, NULL, daddr); return IS_ERR(n) ? NULL : n; } static inline struct neighbour *dst_neigh_lookup_skb(const struct dst_entry *dst, struct sk_buff *skb) { struct neighbour *n = dst->ops->neigh_lookup(dst, skb, NULL); return IS_ERR(n) ? NULL : n; } static inline void dst_confirm_neigh(const struct dst_entry *dst, const void *daddr) { if (dst->ops->confirm_neigh) dst->ops->confirm_neigh(dst, daddr); } static inline void dst_link_failure(struct sk_buff *skb) { struct dst_entry *dst = skb_dst(skb); if (dst && dst->ops && dst->ops->link_failure) dst->ops->link_failure(skb); } static inline void dst_set_expires(struct dst_entry *dst, int timeout) { unsigned long expires = jiffies + timeout; if (expires == 0) expires = 1; if (dst->expires == 0 || time_before(expires, dst->expires)) dst->expires = expires; } /* Output packet to network from transport. */ static inline int dst_output(struct net *net, struct sock *sk, struct sk_buff *skb) { return skb_dst(skb)->output(net, sk, skb); } /* Input packet from network to transport. */ static inline int dst_input(struct sk_buff *skb) { return skb_dst(skb)->input(skb); } static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) { if (dst->obsolete) dst = dst->ops->check(dst, cookie); return dst; } void dst_subsys_init(void); /* Flags for xfrm_lookup flags argument. */ enum { XFRM_LOOKUP_ICMP = 1 << 0, XFRM_LOOKUP_QUEUE = 1 << 1, XFRM_LOOKUP_KEEP_DST_REF = 1 << 2, }; struct flowi; #ifndef CONFIG_XFRM static inline struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, const struct flowi *fl, const struct sock *sk, int flags) { return dst_orig; } static inline struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig, const struct flowi *fl, const struct sock *sk, int flags) { return dst_orig; } static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst) { return NULL; } #else struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, const struct flowi *fl, const struct sock *sk, int flags); struct dst_entry *xfrm_lookup_route(struct net *net, struct dst_entry *dst_orig, const struct flowi *fl, const struct sock *sk, int flags); /* skb attached with this dst needs transformation if dst->xfrm is valid */ static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst) { return dst->xfrm; } #endif #endif /* _NET_DST_H */