1 # Copyright 2018 syzkaller project authors. All rights reserved. 2 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 include <linux/net.h> 5 include <uapi/linux/if_pppox.h> 6 include <uapi/linux/ppp-ioctl.h> 7 include <uapi/linux/if_pppol2tp.h> 8 9 resource sock_pppox[sock] 10 resource sock_pppoe[sock_pppox] 11 resource sock_l2tp[sock_pppox] 12 resource sock_pptp[sock_pppox] 13 14 type pptp_call_id int16be[0:3] 15 type sid_t int16[0:4] 16 type l2tp_tunnel16 int16[0:4] 17 type l2tp_session16 int16[0:4] 18 type l2tp_tunnel32 int32[0:4] 19 type l2tp_session32 int32[0:4] 20 21 socket$pppoe(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_OE]) sock_pppoe 22 connect$pppoe(fd sock_pppoe, addr ptr[in, sockaddr_pppoe], addrlen len[addr]) 23 ioctl$PPPOEIOCSFWD(fd sock_pppoe, cmd const[PPPOEIOCSFWD], arg ptr[in, sockaddr_pppoe]) 24 ioctl$PPPOEIOCDFWD(fd sock_pppoe, cmd const[PPPOEIOCDFWD], arg const[0]) 25 26 socket$l2tp(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_OL2TP]) sock_l2tp 27 connect$l2tp(fd sock_l2tp, addr ptr[in, sockaddr_l2tp], addrlen len[addr]) 28 ioctl$PPPIOCGL2TPSTATS(fd sock_l2tp, cmd const[PPPIOCGL2TPSTATS], arg ptr[in, array[int8]]) 29 ioctl$SIOCGIFMTU(fd sock_l2tp, cmd const[SIOCGIFMTU], arg ptr[out, ifreq_t[int32]]) 30 ioctl$SIOCSIFMTU(fd sock_l2tp, cmd const[SIOCSIFMTU], arg ptr[in, ifreq_t[int32]]) 31 setsockopt$l2tp_PPPOL2TP_SO_DEBUG(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_DEBUG], optval int32, optlen bytesize[optval]) 32 setsockopt$l2tp_PPPOL2TP_SO_RECVSEQ(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_RECVSEQ], optval bool32, optlen bytesize[optval]) 33 setsockopt$l2tp_PPPOL2TP_SO_SENDSEQ(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_SENDSEQ], optval bool32, optlen bytesize[optval]) 34 setsockopt$l2tp_PPPOL2TP_SO_LNSMODE(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_LNSMODE], optval bool32, optlen bytesize[optval]) 35 setsockopt$l2tp_PPPOL2TP_SO_REORDERTO(fd sock_l2tp, level const[SOL_PPPOL2TP], optname const[PPPOL2TP_SO_REORDERTO], optval int32, optlen bytesize[optval]) 36 37 socket$pptp(domain const[AF_PPPOX], type const[SOCK_STREAM], proto const[PX_PROTO_PPTP]) sock_pptp 38 bind$pptp(fd sock_pptp, addr ptr[in, sockaddr_pptp], addrlen len[addr]) 39 connect$pptp(fd sock_pptp, addr ptr[in, sockaddr_pptp], addrlen len[addr]) 40 41 ioctl$PPPIOCGCHAN(fd sock_pppox, cmd const[PPPIOCGCHAN], arg ptr[out, int32]) 42 ioctl$PPPIOCGFLAGS(fd sock_pppox, cmd const[PPPIOCGFLAGS], arg ptr[out, int32]) 43 ioctl$PPPIOCSFLAGS(fd sock_pppox, cmd const[PPPIOCSFLAGS], arg ptr[in, flags[ppp_flags, int32]]) 44 ioctl$PPPIOCGMRU(fd sock_pppox, cmd const[PPPIOCGMRU], arg ptr[out, int32]) 45 ioctl$PPPIOCSMRU(fd sock_pppox, cmd const[PPPIOCSMRU], arg ptr[in, int32]) 46 47 define SOCKADDR_PPPOX_SIZE sizeof(struct sockaddr_pppox) 48 49 sockaddr_pppoe { 50 sa_family const[AF_PPPOX, int16] 51 sa_protocol const[PX_PROTO_OE, int32] 52 pppoe pppoe_addr 53 } [packed, size[SOCKADDR_PPPOX_SIZE]] 54 55 pppoe_addr { 56 sid sid_t 57 remote mac_addr 58 dev devname 59 } 60 61 sockaddr_l2tp [ 62 pppol2tp sockaddr_pppol2tp 63 pppol2tpin6 sockaddr_pppol2tpin6 64 pppol2tpv3 sockaddr_pppol2tpv3 65 pppol2tpv3in6 sockaddr_pppol2tpv3in6 66 ] [varlen] 67 68 type sockaddr_pppol2tp sockaddr_l2tp_t[pppol2tp_addr] 69 type sockaddr_pppol2tpin6 sockaddr_l2tp_t[pppol2tpin6_addr] 70 type sockaddr_pppol2tpv3 sockaddr_l2tp_t[pppol2tpv3_addr] 71 type sockaddr_pppol2tpv3in6 sockaddr_l2tp_t[pppol2tpv3in6_addr] 72 73 type sockaddr_l2tp_t[ADDR] { 74 sa_family const[AF_PPPOX, int16] 75 sa_protocol const[PX_PROTO_OL2TP, int32] 76 addr ADDR 77 } [packed] 78 79 pppol2tp_addr { 80 pid const[0, int32] 81 fd sock 82 addr sockaddr_in 83 s_tunnel l2tp_tunnel16 84 s_session l2tp_session16 85 d_tunnel l2tp_tunnel16 86 d_session l2tp_session16 87 } 88 89 pppol2tpin6_addr { 90 pid const[0, int32] 91 fd sock 92 s_tunnel l2tp_tunnel16 93 s_session l2tp_session16 94 d_tunnel l2tp_tunnel16 95 d_session l2tp_session16 96 addr sockaddr_in6 97 } 98 99 pppol2tpv3_addr { 100 pid const[0, int32] 101 fd sock 102 addr sockaddr_in 103 s_tunnel l2tp_tunnel32 104 s_session l2tp_session32 105 d_tunnel l2tp_tunnel32 106 d_session l2tp_session32 107 } 108 109 pppol2tpv3in6_addr { 110 pid const[0, int32] 111 fd sock 112 s_tunnel l2tp_tunnel32 113 s_session l2tp_session32 114 d_tunnel l2tp_tunnel32 115 d_session l2tp_session32 116 addr sockaddr_in6 117 } 118 119 sockaddr_pptp { 120 sa_family const[AF_PPPOX, int16] 121 sa_protocol const[PX_PROTO_PPTP, int32] 122 pptp pptp_addr 123 } [packed, size[SOCKADDR_PPPOX_SIZE]] 124 125 pptp_addr { 126 call_id pptp_call_id 127 sin_addr ipv4_addr 128 } 129 130 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 131