aboutsummaryrefslogtreecommitdiff
path: root/sys/linux/socket_pppox.txt
blob: bf59bad7ce9d9fee27797bf0b61af032ee97fa95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <linux/net.h>
include <uapi/linux/if_pppox.h>
include <uapi/linux/ppp-ioctl.h>
include <uapi/linux/if_pppol2tp.h>

resource sock_pppox[sock]
resource sock_pppoe[sock_pppox]
resource sock_l2tp[sock_pppox]
resource sock_pptp[sock_pppox]

type pptp_call_id int16be[0:3]
type sid_t int16[0:4]
type l2tp_tunnel16 int16[0:4]
type l2tp_session16 int16[0:4]
type l2tp_tunnel32 int32[0:4]
type l2tp_session32 int32[0:4]

socket$pppoe(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_OE]) sock_pppoe
connect$pppoe(fd sock_pppoe, addr ptr[in, sockaddr_pppoe], addrlen len[addr])
ioctl$PPPOEIOCSFWD(fd sock_pppoe, cmd const[PPPOEIOCSFWD], arg ptr[in, sockaddr_pppoe])
ioctl$PPPOEIOCDFWD(fd sock_pppoe, cmd const[PPPOEIOCDFWD], arg const[0])

socket$l2tp(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_OL2TP]) sock_l2tp
connect$l2tp(fd sock_l2tp, addr ptr[in, sockaddr_l2tp], addrlen len[addr])
ioctl$PPPIOCGL2TPSTATS(fd sock_l2tp, cmd const[PPPIOCGL2TPSTATS], arg ptr[in, array[int8]])
ioctl$SIOCGIFMTU(fd sock_l2tp, cmd const[SIOCGIFMTU], arg ptr[out, ifreq_t[int32]])
ioctl$SIOCSIFMTU(fd sock_l2tp, cmd const[SIOCSIFMTU], arg ptr[in, ifreq_t[int32]])
setsockopt$l2tp_PPPOL2TP_SO_DEBUG(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_DEBUG], optval int32, optlen bytesize[optval])
setsockopt$l2tp_PPPOL2TP_SO_RECVSEQ(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_RECVSEQ], optval bool32, optlen bytesize[optval])
setsockopt$l2tp_PPPOL2TP_SO_SENDSEQ(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_SENDSEQ], optval bool32, optlen bytesize[optval])
setsockopt$l2tp_PPPOL2TP_SO_LNSMODE(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_LNSMODE], optval bool32, optlen bytesize[optval])
setsockopt$l2tp_PPPOL2TP_SO_REORDERTO(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_REORDERTO], optval int32, optlen bytesize[optval])

socket$pptp(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_PPTP]) sock_pptp
bind$pptp(fd sock_pptp, addr ptr[in, sockaddr_pptp], addrlen len[addr])
connect$pptp(fd sock_pptp, addr ptr[in, sockaddr_pptp], addrlen len[addr])

ioctl$PPPIOCGCHAN(fd sock_pppox, cmd const[PPPIOCGCHAN], arg ptr[out, int32])
ioctl$PPPIOCGFLAGS(fd sock_pppox, cmd const[PPPIOCGFLAGS], arg ptr[out, int32])
ioctl$PPPIOCSFLAGS(fd sock_pppox, cmd const[PPPIOCSFLAGS], arg ptr[in, flags[ppp_flags, int32]])
ioctl$PPPIOCGMRU(fd sock_pppox, cmd const[PPPIOCGMRU], arg ptr[out, int32])
ioctl$PPPIOCSMRU(fd sock_pppox, cmd const[PPPIOCSMRU], arg ptr[in, int32])

define SOCKADDR_PPPOX_SIZE	sizeof(struct sockaddr_pppox)

sockaddr_pppoe {
	sa_family	const[AF_PPPOX, int16]
	sa_protocol	const[PX_PROTO_OE, int32]
	pppoe		pppoe_addr
} [packed, size[SOCKADDR_PPPOX_SIZE]]

pppoe_addr {
	sid	sid_t
	remote	mac_addr
	dev	devname
}

sockaddr_l2tp [
	pppol2tp	sockaddr_pppol2tp
	pppol2tpin6	sockaddr_pppol2tpin6
	pppol2tpv3	sockaddr_pppol2tpv3
	pppol2tpv3in6	sockaddr_pppol2tpv3in6
] [varlen]

type sockaddr_pppol2tp sockaddr_l2tp_t[pppol2tp_addr]
type sockaddr_pppol2tpin6 sockaddr_l2tp_t[pppol2tpin6_addr]
type sockaddr_pppol2tpv3 sockaddr_l2tp_t[pppol2tpv3_addr]
type sockaddr_pppol2tpv3in6 sockaddr_l2tp_t[pppol2tpv3in6_addr]

type sockaddr_l2tp_t[ADDR] {
	sa_family	const[AF_PPPOX, int16]
	sa_protocol	const[PX_PROTO_OL2TP, int32]
	addr		ADDR
} [packed]

pppol2tp_addr {
	pid		const[0, int32]
	fd		sock
	addr		sockaddr_in
	s_tunnel	l2tp_tunnel16
	s_session	l2tp_session16
	d_tunnel	l2tp_tunnel16
	d_session	l2tp_session16
}

pppol2tpin6_addr {
	pid		const[0, int32]
	fd		sock
	s_tunnel	l2tp_tunnel16
	s_session	l2tp_session16
	d_tunnel	l2tp_tunnel16
	d_session	l2tp_session16
	addr		sockaddr_in6
}

pppol2tpv3_addr {
	pid		const[0, int32]
	fd		sock
	addr		sockaddr_in
	s_tunnel	l2tp_tunnel32
	s_session	l2tp_session32
	d_tunnel	l2tp_tunnel32
	d_session	l2tp_session32
}

pppol2tpv3in6_addr {
	pid		const[0, int32]
	fd		sock
	s_tunnel	l2tp_tunnel32
	s_session	l2tp_session32
	d_tunnel	l2tp_tunnel32
	d_session	l2tp_session32
	addr		sockaddr_in6
}

sockaddr_pptp {
	sa_family	const[AF_PPPOX, int16]
	sa_protocol	const[PX_PROTO_PPTP, int32]
	pptp		pptp_addr
} [packed, size[SOCKADDR_PPPOX_SIZE]]

pptp_addr {
	call_id		pptp_call_id
	sin_addr	ipv4_addr
}

ppp_flags = SC_COMP_PROT, SC_COMP_AC, SC_COMP_TCP, SC_NO_TCP_CCID, SC_REJ_COMP_AC, SC_REJ_COMP_TCP, SC_CCP_OPEN, SC_CCP_UP, SC_ENABLE_IP, SC_LOOP_TRAFFIC, SC_MULTILINK, SC_MP_SHORTSEQ, SC_COMP_RUN, SC_DECOMP_RUN, SC_MP_XSHORTSEQ, SC_DEBUG, SC_LOG_INPKT, SC_LOG_OUTPKT, SC_LOG_RAWIN, SC_LOG_FLUSH, SC_SYNC, SC_MUST_COMP, SC_RCV_B7_0, SC_RCV_B7_1, SC_RCV_EVNP, SC_RCV_ODDP