| # 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/socket.h> |
| include <linux/net.h> |
| include <uapi/linux/rose.h> |
| |
| resource sock_rose[sock] |
| |
| syz_init_net_socket$rose(domain const[AF_ROSE], type const[SOCK_SEQPACKET], proto const[0]) sock_rose |
| bind$rose(fd sock_rose, addr ptr[in, sockaddr_rose_any], addrlen len[addr]) |
| connect$rose(fd sock_rose, addr ptr[in, sockaddr_rose_any], addrlen len[addr]) |
| accept4$rose(fd sock_rose, peer ptr[out, sockaddr_rose_any, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock_rose |
| sendto$rose(fd sock_rose, buf ptr[in, array[int8]], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_rose_any, opt], addrlen len[addr]) |
| recvfrom$rose(fd sock_rose, buf ptr[out, array[int8]], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_rose_any, opt], addrlen len[addr]) |
| setsockopt$rose(fd sock_rose, level const[SOL_ROSE], opt flags[rose_sockopts], arg ptr[in, int32], arglen len[arg]) |
| getsockopt$rose(fd sock_rose, level const[SOL_ROSE], opt flags[rose_sockopts], arg ptr[out, int32], arglen ptr[inout, len[arg, int32]]) |
| |
| rose_sockopts = ROSE_DEFER, ROSE_T1, ROSE_T2, ROSE_T3, ROSE_IDLE, ROSE_QBITINCL, ROSE_HOLDBACK |
| |
| ioctl$sock_rose_SIOCADDRT(fd sock_rose, cmd const[SIOCADDRT], arg ptr[in, rose_route_struct]) |
| ioctl$sock_rose_SIOCDELRT(fd sock_rose, cmd const[SIOCDELRT], arg ptr[in, rose_route_struct]) |
| ioctl$sock_rose_SIOCRSCLRRT(fd sock_rose, cmd const[SIOCRSCLRRT]) |
| ioctl$SIOCRSGCAUSE(fd sock_rose, cmd const[SIOCRSGCAUSE], arg ptr[out, int16]) |
| ioctl$SIOCRSSCAUSE(fd sock_rose, cmd const[SIOCRSSCAUSE], arg ptr[in, int16]) |
| ioctl$SIOCRSSL2CALL(fd sock_rose, cmd const[SIOCRSSL2CALL], arg ptr[in, ax25_address]) |
| ioctl$SIOCRSGL2CALL(fd sock_rose, cmd const[SIOCRSGL2CALL], arg ptr[out, ax25_address]) |
| ioctl$SIOCRSACCEPT(fd sock_rose, cmd const[SIOCRSACCEPT]) |
| |
| sockaddr_rose_any [ |
| short sockaddr_rose |
| full full_sockaddr_rose |
| ] [varlen] |
| |
| sockaddr_rose { |
| srose_family const[AF_ROSE, int16] |
| srose_addr rose_address |
| srose_call ax25_address |
| srose_ndigis const[1, int32] |
| srose_digi ax25_address |
| } |
| |
| full_sockaddr_rose { |
| srose_family const[AF_ROSE, int16] |
| srose_addr rose_address |
| srose_call ax25_address |
| srose_ndigis int32[0:ROSE_MAX_DIGIS] |
| srose_digis array[ax25_address, ROSE_MAX_DIGIS] |
| } |
| |
| rose_address [ |
| remote rose_address_remote |
| dev rose_address_dev |
| ] [size[5]] |
| |
| # Just some address without special meaning. |
| rose_address_remote { |
| b0 const[0xcc, int8] |
| b1 const[0xcc, int8] |
| b2 const[0xcc, int8] |
| b3 const[0xcc, int8] |
| b4 proc[0, 4, int8] |
| } |
| |
| # This is what we assign to rose* devices in initialize_netdevices_init: bb:bb:bb:01:%02hx |
| rose_address_dev { |
| b0 const[0xbb, int8] |
| b1 const[0xbb, int8] |
| b2 const[0xbb, int8] |
| b3 const[0x1, int8] |
| b4 proc[0, 1, int8] |
| } |
| |
| rose_route_struct { |
| address rose_address |
| mask int16 |
| neighbour ax25_address |
| device ax25_devname |
| ndigis int8[0:AX25_MAX_DIGIS] |
| digipeaters array[ax25_address, AX25_MAX_DIGIS] |
| } |