Linux tsuru-no-tsurugi 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.0.18 & Your IP : 216.73.216.68
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-5.15.0-185 /
include /
net /
Delete
Unzip
Name
Size
Permission
Date
Action
9p
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
bluetooth
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
caif
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
iucv
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
netfilter
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
netns
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
nfc
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
phonet
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
sctp
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
tc_act
[ DIR ]
drwxr-xr-x
2026-06-27 06:50
6lowpan.h
10.03
KB
-rw-r--r--
2021-11-01 05:53
Space.h
737
B
-rw-r--r--
2021-11-01 05:53
act_api.h
8.44
KB
-rw-r--r--
2026-06-20 00:54
addrconf.h
14.25
KB
-rw-r--r--
2026-06-20 00:54
af_ieee802154.h
1.19
KB
-rw-r--r--
2021-11-01 05:53
af_rxrpc.h
2.73
KB
-rw-r--r--
2021-11-01 05:53
af_unix.h
3.3
KB
-rw-r--r--
2026-06-20 00:54
af_vsock.h
7.41
KB
-rw-r--r--
2026-06-20 00:54
ah.h
382
B
-rw-r--r--
2021-11-01 05:53
arp.h
2.09
KB
-rw-r--r--
2026-06-20 00:54
atmclip.h
1.48
KB
-rw-r--r--
2021-11-01 05:53
ax25.h
15.08
KB
-rw-r--r--
2026-06-20 00:54
ax88796.h
1.41
KB
-rw-r--r--
2021-11-01 05:53
bareudp.h
572
B
-rw-r--r--
2021-11-01 05:53
bond_3ad.h
9.48
KB
-rw-r--r--
2026-06-20 00:54
bond_alb.h
6.1
KB
-rw-r--r--
2026-06-20 00:54
bond_options.h
3.79
KB
-rw-r--r--
2026-06-20 00:54
bonding.h
19.79
KB
-rw-r--r--
2026-06-20 00:54
bpf_sk_storage.h
1.74
KB
-rw-r--r--
2021-11-01 05:53
busy_poll.h
3.87
KB
-rw-r--r--
2026-06-20 00:54
calipso.h
1.55
KB
-rw-r--r--
2021-11-01 05:53
cfg80211-wext.h
1.81
KB
-rw-r--r--
2021-11-01 05:53
cfg80211.h
294.25
KB
-rw-r--r--
2026-06-20 00:54
cfg802154.h
10.53
KB
-rw-r--r--
2026-06-20 00:54
checksum.h
4.75
KB
-rw-r--r--
2026-06-20 00:54
cipso_ipv4.h
7.37
KB
-rw-r--r--
2021-11-01 05:53
cls_cgroup.h
2.04
KB
-rw-r--r--
2026-06-20 00:54
codel.h
5.65
KB
-rw-r--r--
2021-11-01 05:53
codel_impl.h
7.98
KB
-rw-r--r--
2021-11-01 05:53
codel_qdisc.h
2.9
KB
-rw-r--r--
2021-11-01 05:53
compat.h
2.53
KB
-rw-r--r--
2021-11-01 05:53
datalink.h
619
B
-rw-r--r--
2021-11-01 05:53
dcbevent.h
742
B
-rw-r--r--
2021-11-01 05:53
dcbnl.h
4.22
KB
-rw-r--r--
2021-11-01 05:53
devlink.h
62.1
KB
-rw-r--r--
2021-11-01 05:53
dsa.h
35.38
KB
-rw-r--r--
2026-06-20 00:54
dsfield.h
1.12
KB
-rw-r--r--
2021-11-01 05:53
dst.h
14.8
KB
-rw-r--r--
2026-06-20 00:54
dst_cache.h
2.96
KB
-rw-r--r--
2026-06-20 00:54
dst_metadata.h
5.39
KB
-rw-r--r--
2026-06-20 00:54
dst_ops.h
2.08
KB
-rw-r--r--
2026-06-20 00:54
erspan.h
8.96
KB
-rw-r--r--
2021-11-01 05:53
esp.h
1.16
KB
-rw-r--r--
2021-11-01 05:53
espintcp.h
966
B
-rw-r--r--
2021-11-01 05:53
ethoc.h
391
B
-rw-r--r--
2021-11-01 05:53
failover.h
1.15
KB
-rw-r--r--
2021-11-01 05:53
fib_notifier.h
1.35
KB
-rw-r--r--
2021-11-01 05:53
fib_rules.h
6.3
KB
-rw-r--r--
2026-06-20 00:54
firewire.h
636
B
-rw-r--r--
2021-11-01 05:53
flow.h
5
KB
-rw-r--r--
2026-06-20 00:54
flow_dissector.h
10.27
KB
-rw-r--r--
2026-06-20 00:54
flow_offload.h
15.56
KB
-rw-r--r--
2026-06-20 00:54
fou.h
549
B
-rw-r--r--
2021-11-01 05:53
fq.h
2.47
KB
-rw-r--r--
2021-11-01 05:53
fq_impl.h
7.89
KB
-rw-r--r--
2021-11-01 05:53
garp.h
2.62
KB
-rw-r--r--
2021-11-01 05:53
gen_stats.h
2.82
KB
-rw-r--r--
2021-11-01 05:53
genetlink.h
13.53
KB
-rw-r--r--
2026-06-20 00:54
geneve.h
1.85
KB
-rw-r--r--
2021-11-01 05:53
gre.h
3.29
KB
-rw-r--r--
2021-11-01 05:53
gro.h
783
B
-rw-r--r--
2021-11-01 05:53
gro_cells.h
443
B
-rw-r--r--
2021-11-01 05:53
gtp.h
633
B
-rw-r--r--
2021-11-01 05:53
gue.h
3.24
KB
-rw-r--r--
2021-11-01 05:53
hwbm.h
969
B
-rw-r--r--
2021-11-01 05:53
icmp.h
1.87
KB
-rw-r--r--
2021-11-01 05:53
ieee80211_radiotap.h
13.2
KB
-rw-r--r--
2021-11-01 05:53
ieee802154_netdev.h
9.86
KB
-rw-r--r--
2026-06-20 00:54
if_inet6.h
6.54
KB
-rw-r--r--
2026-06-20 00:54
ife.h
1.03
KB
-rw-r--r--
2021-11-01 05:53
ila.h
291
B
-rw-r--r--
2021-11-01 05:53
inet6_connection_sock.h
765
B
-rw-r--r--
2021-11-01 05:53
inet6_hashtables.h
4.16
KB
-rw-r--r--
2026-06-20 00:54
inet_common.h
2.55
KB
-rw-r--r--
2021-11-01 05:53
inet_connection_sock.h
11.25
KB
-rw-r--r--
2026-06-20 00:54
inet_ecn.h
7.45
KB
-rw-r--r--
2021-11-01 05:53
inet_frag.h
4.93
KB
-rw-r--r--
2026-06-20 00:54
inet_hashtables.h
12.24
KB
-rw-r--r--
2026-06-20 00:54
inet_sock.h
9.76
KB
-rw-r--r--
2026-06-20 00:54
inet_timewait_sock.h
3.65
KB
-rw-r--r--
2021-11-01 05:53
inetpeer.h
3.29
KB
-rw-r--r--
2021-11-01 05:53
ioam6.h
1.22
KB
-rw-r--r--
2026-06-20 00:54
ip.h
22.23
KB
-rw-r--r--
2026-06-20 00:54
ip6_checksum.h
2.71
KB
-rw-r--r--
2021-11-01 05:53
ip6_fib.h
15.9
KB
-rw-r--r--
2026-06-20 00:54
ip6_route.h
9.99
KB
-rw-r--r--
2021-11-01 05:53
ip6_tunnel.h
4.98
KB
-rw-r--r--
2026-06-20 00:54
ip_fib.h
15.96
KB
-rw-r--r--
2026-06-20 00:54
ip_tunnels.h
15.58
KB
-rw-r--r--
2026-06-20 00:54
ip_vs.h
49.4
KB
-rw-r--r--
2026-06-20 00:54
ipcomp.h
659
B
-rw-r--r--
2021-11-01 05:53
ipconfig.h
811
B
-rw-r--r--
2021-11-01 05:53
ipv6.h
35.33
KB
-rw-r--r--
2026-06-20 00:54
ipv6_frag.h
3.28
KB
-rw-r--r--
2026-06-20 00:54
ipv6_stubs.h
3.4
KB
-rw-r--r--
2026-06-20 00:54
iw_handler.h
20.91
KB
-rw-r--r--
2021-11-01 05:53
kcm.h
4.84
KB
-rw-r--r--
2026-06-20 00:54
l3mdev.h
7.03
KB
-rw-r--r--
2026-06-20 00:54
lag.h
409
B
-rw-r--r--
2021-11-01 05:53
lapb.h
4.82
KB
-rw-r--r--
2026-06-20 00:54
lib80211.h
3.92
KB
-rw-r--r--
2021-11-01 05:53
llc.h
4.41
KB
-rw-r--r--
2026-06-20 00:54
llc_c_ac.h
9.31
KB
-rw-r--r--
2021-11-01 05:53
llc_c_ev.h
10.68
KB
-rw-r--r--
2021-11-01 05:53
llc_c_st.h
1.72
KB
-rw-r--r--
2021-11-01 05:53
llc_conn.h
4.06
KB
-rw-r--r--
2021-11-01 05:53
llc_if.h
2.16
KB
-rw-r--r--
2021-11-01 05:53
llc_pdu.h
14.35
KB
-rw-r--r--
2026-06-20 00:54
llc_s_ac.h
1.55
KB
-rw-r--r--
2021-11-01 05:53
llc_s_ev.h
2.2
KB
-rw-r--r--
2021-11-01 05:53
llc_s_st.h
947
B
-rw-r--r--
2021-11-01 05:53
llc_sap.h
1.08
KB
-rw-r--r--
2021-11-01 05:53
lwtunnel.h
6.65
KB
-rw-r--r--
2026-06-20 00:54
mac80211.h
267.55
KB
-rw-r--r--
2026-06-20 00:54
mac802154.h
14.88
KB
-rw-r--r--
2021-11-01 05:53
macsec.h
6.92
KB
-rw-r--r--
2026-06-20 00:54
mctp.h
6.01
KB
-rw-r--r--
2026-06-20 00:54
mctpdevice.h
841
B
-rw-r--r--
2026-06-20 00:54
mip6.h
1016
B
-rw-r--r--
2021-11-01 05:53
mld.h
2.85
KB
-rw-r--r--
2021-11-01 05:53
mpls.h
943
B
-rw-r--r--
2021-11-01 05:53
mpls_iptunnel.h
429
B
-rw-r--r--
2021-11-01 05:53
mptcp.h
6.62
KB
-rw-r--r--
2026-06-20 00:54
mrp.h
3.05
KB
-rw-r--r--
2026-06-20 00:54
ncsi.h
1.92
KB
-rw-r--r--
2021-11-01 05:53
ndisc.h
14.79
KB
-rw-r--r--
2026-06-20 00:54
neighbour.h
15.72
KB
-rw-r--r--
2026-06-20 00:54
net_failover.h
1023
B
-rw-r--r--
2021-11-01 05:53
net_namespace.h
12.5
KB
-rw-r--r--
2026-06-20 00:54
net_ratelimit.h
220
B
-rw-r--r--
2021-11-01 05:53
netevent.h
1.02
KB
-rw-r--r--
2021-11-01 05:53
netlabel.h
20.19
KB
-rw-r--r--
2026-06-20 00:54
netlink.h
60.21
KB
-rw-r--r--
2021-11-01 05:53
netprio_cgroup.h
1.02
KB
-rw-r--r--
2021-11-01 05:53
netrom.h
7.71
KB
-rw-r--r--
2021-11-01 05:53
nexthop.h
12.27
KB
-rw-r--r--
2021-11-01 05:53
nl802154.h
12.09
KB
-rw-r--r--
2026-06-20 00:54
nsh.h
12.31
KB
-rw-r--r--
2021-11-01 05:53
p8022.h
447
B
-rw-r--r--
2021-11-01 05:53
page_pool.h
8.44
KB
-rw-r--r--
2026-06-20 00:54
pie.h
3.6
KB
-rw-r--r--
2021-11-01 05:53
ping.h
2.9
KB
-rw-r--r--
2021-11-01 05:53
pkt_cls.h
23.86
KB
-rw-r--r--
2021-11-01 05:53
pkt_sched.h
5.9
KB
-rw-r--r--
2026-06-20 00:54
pptp.h
557
B
-rw-r--r--
2021-11-01 05:53
protocol.h
3.81
KB
-rw-r--r--
2026-06-20 00:54
psample.h
1.06
KB
-rw-r--r--
2021-11-01 05:53
psnap.h
351
B
-rw-r--r--
2021-11-01 05:53
raw.h
2.09
KB
-rw-r--r--
2026-06-20 00:54
rawv6.h
854
B
-rw-r--r--
2021-11-01 05:53
red.h
11.38
KB
-rw-r--r--
2021-11-01 05:53
regulatory.h
10.65
KB
-rw-r--r--
2021-11-01 05:53
request_sock.h
6.5
KB
-rw-r--r--
2026-06-20 00:54
rose.h
7.62
KB
-rw-r--r--
2021-11-01 05:53
route.h
11.31
KB
-rw-r--r--
2026-06-20 00:54
rpl.h
839
B
-rw-r--r--
2026-06-20 00:54
rsi_91x.h
1.67
KB
-rw-r--r--
2021-11-01 05:53
rtnetlink.h
7.46
KB
-rw-r--r--
2026-06-20 00:54
rtnh.h
859
B
-rw-r--r--
2021-11-01 05:53
sch_generic.h
33.91
KB
-rw-r--r--
2026-06-20 00:54
scm.h
3.79
KB
-rw-r--r--
2026-06-20 00:54
secure_seq.h
855
B
-rw-r--r--
2026-06-20 00:54
seg6.h
2.18
KB
-rw-r--r--
2026-06-20 00:54
seg6_hmac.h
1.44
KB
-rw-r--r--
2021-11-01 05:53
seg6_local.h
644
B
-rw-r--r--
2021-11-01 05:53
selftests.h
582
B
-rw-r--r--
2021-11-01 05:53
slhc_vj.h
6.67
KB
-rw-r--r--
2021-11-01 05:53
smc.h
2.45
KB
-rw-r--r--
2021-11-01 05:53
snmp.h
5.14
KB
-rw-r--r--
2021-11-01 05:53
sock.h
84.33
KB
-rw-r--r--
2026-06-20 00:54
sock_reuseport.h
1.83
KB
-rw-r--r--
2026-06-20 00:54
stp.h
383
B
-rw-r--r--
2021-11-01 05:53
strparser.h
4.15
KB
-rw-r--r--
2026-06-20 00:54
switchdev.h
14.27
KB
-rw-r--r--
2026-06-20 00:54
tcp.h
73.48
KB
-rw-r--r--
2026-06-20 00:54
tcp_states.h
1.2
KB
-rw-r--r--
2021-11-01 05:53
timewait_sock.h
925
B
-rw-r--r--
2021-11-01 05:53
tipc.h
2.35
KB
-rw-r--r--
2021-11-01 05:53
tls.h
20.96
KB
-rw-r--r--
2026-06-20 00:54
tls_toe.h
2.94
KB
-rw-r--r--
2021-11-01 05:53
transp_v6.h
1.95
KB
-rw-r--r--
2021-11-01 05:53
tso.h
566
B
-rw-r--r--
2021-11-01 05:53
tun_proto.h
988
B
-rw-r--r--
2021-11-01 05:53
udp.h
16.64
KB
-rw-r--r--
2026-06-20 00:54
udp_tunnel.h
11.92
KB
-rw-r--r--
2026-06-20 00:54
udplite.h
3.67
KB
-rw-r--r--
2026-06-20 00:54
vsock_addr.h
662
B
-rw-r--r--
2021-11-01 05:53
vxlan.h
14.09
KB
-rw-r--r--
2026-06-20 00:54
wext.h
1.47
KB
-rw-r--r--
2021-11-01 05:53
x25.h
9.49
KB
-rw-r--r--
2021-11-01 05:53
x25device.h
387
B
-rw-r--r--
2021-11-01 05:53
xdp.h
8.62
KB
-rw-r--r--
2026-06-20 00:54
xdp_priv.h
446
B
-rw-r--r--
2021-11-01 05:53
xdp_sock.h
2.04
KB
-rw-r--r--
2021-11-01 05:53
xdp_sock_drv.h
5.48
KB
-rw-r--r--
2026-06-20 00:54
xfrm.h
54.98
KB
-rw-r--r--
2026-06-20 00:54
xsk_buff_pool.h
5.02
KB
-rw-r--r--
2026-06-20 00:54
Save
Rename
#ifndef __LINUX_ERSPAN_H #define __LINUX_ERSPAN_H /* * GRE header for ERSPAN type I encapsulation (4 octets [34:37]) * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |0|0|0|0|0|00000|000000000|00000| Protocol Type for ERSPAN | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * The Type I ERSPAN frame format is based on the barebones IP + GRE * encapsulation (as described above) on top of the raw mirrored frame. * There is no extra ERSPAN header. * * * GRE header for ERSPAN type II and II encapsulation (8 octets [34:41]) * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |0|0|0|1|0|00000|000000000|00000| Protocol Type for ERSPAN | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Sequence Number (increments per packet per session) | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * Note that in the above GRE header [RFC1701] out of the C, R, K, S, * s, Recur, Flags, Version fields only S (bit 03) is set to 1. The * other fields are set to zero, so only a sequence number follows. * * ERSPAN Version 1 (Type II) header (8 octets [42:49]) * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Ver | VLAN | COS | En|T| Session ID | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Reserved | Index | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * * ERSPAN Version 2 (Type III) header (12 octets [42:49]) * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Ver | VLAN | COS |BSO|T| Session ID | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Timestamp | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | SGT |P| FT | Hw ID |D|Gra|O| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * Platform Specific SubHeader (8 octets, optional) * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Platf ID | Platform Specific Info | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * | Platform Specific Info | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * * GRE proto ERSPAN type I/II = 0x88BE, type III = 0x22EB */ #include <uapi/linux/erspan.h> #define ERSPAN_VERSION 0x1 /* ERSPAN type II */ #define VER_MASK 0xf000 #define VLAN_MASK 0x0fff #define COS_MASK 0xe000 #define EN_MASK 0x1800 #define T_MASK 0x0400 #define ID_MASK 0x03ff #define INDEX_MASK 0xfffff #define ERSPAN_VERSION2 0x2 /* ERSPAN type III*/ #define BSO_MASK EN_MASK #define SGT_MASK 0xffff0000 #define P_MASK 0x8000 #define FT_MASK 0x7c00 #define HWID_MASK 0x03f0 #define DIR_MASK 0x0008 #define GRA_MASK 0x0006 #define O_MASK 0x0001 #define HWID_OFFSET 4 #define DIR_OFFSET 3 enum erspan_encap_type { ERSPAN_ENCAP_NOVLAN = 0x0, /* originally without VLAN tag */ ERSPAN_ENCAP_ISL = 0x1, /* originally ISL encapsulated */ ERSPAN_ENCAP_8021Q = 0x2, /* originally 802.1Q encapsulated */ ERSPAN_ENCAP_INFRAME = 0x3, /* VLAN tag perserved in frame */ }; #define ERSPAN_V1_MDSIZE 4 #define ERSPAN_V2_MDSIZE 8 struct erspan_base_hdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 vlan_upper:4, ver:4; __u8 vlan:8; __u8 session_id_upper:2, t:1, en:2, cos:3; __u8 session_id:8; #elif defined(__BIG_ENDIAN_BITFIELD) __u8 ver: 4, vlan_upper:4; __u8 vlan:8; __u8 cos:3, en:2, t:1, session_id_upper:2; __u8 session_id:8; #else #error "Please fix <asm/byteorder.h>" #endif }; static inline void set_session_id(struct erspan_base_hdr *ershdr, u16 id) { ershdr->session_id = id & 0xff; ershdr->session_id_upper = (id >> 8) & 0x3; } static inline u16 get_session_id(const struct erspan_base_hdr *ershdr) { return (ershdr->session_id_upper << 8) + ershdr->session_id; } static inline void set_vlan(struct erspan_base_hdr *ershdr, u16 vlan) { ershdr->vlan = vlan & 0xff; ershdr->vlan_upper = (vlan >> 8) & 0xf; } static inline u16 get_vlan(const struct erspan_base_hdr *ershdr) { return (ershdr->vlan_upper << 8) + ershdr->vlan; } static inline void set_hwid(struct erspan_md2 *md2, u8 hwid) { md2->hwid = hwid & 0xf; md2->hwid_upper = (hwid >> 4) & 0x3; } static inline u8 get_hwid(const struct erspan_md2 *md2) { return (md2->hwid_upper << 4) + md2->hwid; } static inline int erspan_hdr_len(int version) { if (version == 0) return 0; return sizeof(struct erspan_base_hdr) + (version == 1 ? ERSPAN_V1_MDSIZE : ERSPAN_V2_MDSIZE); } static inline u8 tos_to_cos(u8 tos) { u8 dscp, cos; dscp = tos >> 2; cos = dscp >> 3; return cos; } static inline void erspan_build_header(struct sk_buff *skb, u32 id, u32 index, bool truncate, bool is_ipv4) { struct ethhdr *eth = (struct ethhdr *)skb->data; enum erspan_encap_type enc_type; struct erspan_base_hdr *ershdr; struct qtag_prefix { __be16 eth_type; __be16 tci; } *qp; u16 vlan_tci = 0; u8 tos; __be32 *idx; tos = is_ipv4 ? ip_hdr(skb)->tos : (ipv6_hdr(skb)->priority << 4) + (ipv6_hdr(skb)->flow_lbl[0] >> 4); enc_type = ERSPAN_ENCAP_NOVLAN; /* If mirrored packet has vlan tag, extract tci and * perserve vlan header in the mirrored frame. */ if (eth->h_proto == htons(ETH_P_8021Q)) { qp = (struct qtag_prefix *)(skb->data + 2 * ETH_ALEN); vlan_tci = ntohs(qp->tci); enc_type = ERSPAN_ENCAP_INFRAME; } skb_push(skb, sizeof(*ershdr) + ERSPAN_V1_MDSIZE); ershdr = (struct erspan_base_hdr *)skb->data; memset(ershdr, 0, sizeof(*ershdr) + ERSPAN_V1_MDSIZE); /* Build base header */ ershdr->ver = ERSPAN_VERSION; ershdr->cos = tos_to_cos(tos); ershdr->en = enc_type; ershdr->t = truncate; set_vlan(ershdr, vlan_tci); set_session_id(ershdr, id); /* Build metadata */ idx = (__be32 *)(ershdr + 1); *idx = htonl(index & INDEX_MASK); } /* ERSPAN GRA: timestamp granularity * 00b --> granularity = 100 microseconds * 01b --> granularity = 100 nanoseconds * 10b --> granularity = IEEE 1588 * Here we only support 100 microseconds. */ static inline __be32 erspan_get_timestamp(void) { u64 h_usecs; ktime_t kt; kt = ktime_get_real(); h_usecs = ktime_divns(kt, 100 * NSEC_PER_USEC); /* ERSPAN base header only has 32-bit, * so it wraps around 4 days. */ return htonl((u32)h_usecs); } /* ERSPAN BSO (Bad/Short/Oversized), see RFC1757 * 00b --> Good frame with no error, or unknown integrity * 01b --> Payload is a Short Frame * 10b --> Payload is an Oversized Frame * 11b --> Payload is a Bad Frame with CRC or Alignment Error */ enum erspan_bso { BSO_NOERROR = 0x0, BSO_SHORT = 0x1, BSO_OVERSIZED = 0x2, BSO_BAD = 0x3, }; static inline u8 erspan_detect_bso(struct sk_buff *skb) { /* BSO_BAD is not handled because the frame CRC * or alignment error information is in FCS. */ if (skb->len < ETH_ZLEN) return BSO_SHORT; if (skb->len > ETH_FRAME_LEN) return BSO_OVERSIZED; return BSO_NOERROR; } static inline void erspan_build_header_v2(struct sk_buff *skb, u32 id, u8 direction, u16 hwid, bool truncate, bool is_ipv4) { struct ethhdr *eth = (struct ethhdr *)skb->data; struct erspan_base_hdr *ershdr; struct erspan_md2 *md2; struct qtag_prefix { __be16 eth_type; __be16 tci; } *qp; u16 vlan_tci = 0; u8 gra = 0; /* 100 usec */ u8 bso = 0; /* Bad/Short/Oversized */ u8 sgt = 0; u8 tos; tos = is_ipv4 ? ip_hdr(skb)->tos : (ipv6_hdr(skb)->priority << 4) + (ipv6_hdr(skb)->flow_lbl[0] >> 4); /* Unlike v1, v2 does not have En field, * so only extract vlan tci field. */ if (eth->h_proto == htons(ETH_P_8021Q)) { qp = (struct qtag_prefix *)(skb->data + 2 * ETH_ALEN); vlan_tci = ntohs(qp->tci); } bso = erspan_detect_bso(skb); skb_push(skb, sizeof(*ershdr) + ERSPAN_V2_MDSIZE); ershdr = (struct erspan_base_hdr *)skb->data; memset(ershdr, 0, sizeof(*ershdr) + ERSPAN_V2_MDSIZE); /* Build base header */ ershdr->ver = ERSPAN_VERSION2; ershdr->cos = tos_to_cos(tos); ershdr->en = bso; ershdr->t = truncate; set_vlan(ershdr, vlan_tci); set_session_id(ershdr, id); /* Build metadata */ md2 = (struct erspan_md2 *)(ershdr + 1); md2->timestamp = erspan_get_timestamp(); md2->sgt = htons(sgt); md2->p = 1; md2->ft = 0; md2->dir = direction; md2->gra = gra; md2->o = 0; set_hwid(md2, hwid); } #endif