# 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