Home | History | Annotate | Download | only in linux
      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