1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2/*
3 * These are the public elements of the Linux kernel Rose implementation.
4 * For kernel AX.25 see the file ax25.h. This file requires ax25.h for the
5 * definition of the ax25_address structure.
6 */
7
8#ifndef	ROSE_KERNEL_H
9#define	ROSE_KERNEL_H
10
11#include <linux/socket.h>
12#include <linux/ax25.h>
13
14#define ROSE_MTU	251
15
16#define ROSE_MAX_DIGIS 6
17
18#define	ROSE_DEFER	1
19#define ROSE_T1		2
20#define	ROSE_T2		3
21#define	ROSE_T3		4
22#define	ROSE_IDLE	5
23#define	ROSE_QBITINCL	6
24#define	ROSE_HOLDBACK	7
25
26#define	SIOCRSGCAUSE		(SIOCPROTOPRIVATE+0)
27#define	SIOCRSSCAUSE		(SIOCPROTOPRIVATE+1)
28#define	SIOCRSL2CALL		(SIOCPROTOPRIVATE+2)
29#define	SIOCRSSL2CALL		(SIOCPROTOPRIVATE+2)
30#define	SIOCRSACCEPT		(SIOCPROTOPRIVATE+3)
31#define	SIOCRSCLRRT		(SIOCPROTOPRIVATE+4)
32#define	SIOCRSGL2CALL		(SIOCPROTOPRIVATE+5)
33#define	SIOCRSGFACILITIES	(SIOCPROTOPRIVATE+6)
34
35#define	ROSE_DTE_ORIGINATED	0x00
36#define	ROSE_NUMBER_BUSY	0x01
37#define	ROSE_INVALID_FACILITY	0x03
38#define	ROSE_NETWORK_CONGESTION	0x05
39#define	ROSE_OUT_OF_ORDER	0x09
40#define	ROSE_ACCESS_BARRED	0x0B
41#define	ROSE_NOT_OBTAINABLE	0x0D
42#define	ROSE_REMOTE_PROCEDURE	0x11
43#define	ROSE_LOCAL_PROCEDURE	0x13
44#define	ROSE_SHIP_ABSENT	0x39
45
46typedef struct {
47	char		rose_addr[5];
48} rose_address;
49
50struct sockaddr_rose {
51	__kernel_sa_family_t srose_family;
52	rose_address	srose_addr;
53	ax25_address	srose_call;
54	int		srose_ndigis;
55	ax25_address	srose_digi;
56};
57
58struct full_sockaddr_rose {
59	__kernel_sa_family_t srose_family;
60	rose_address	srose_addr;
61	ax25_address	srose_call;
62	unsigned int	srose_ndigis;
63	ax25_address	srose_digis[ROSE_MAX_DIGIS];
64};
65
66struct rose_route_struct {
67	rose_address	address;
68	unsigned short	mask;
69	ax25_address	neighbour;
70	char		device[16];
71	unsigned char	ndigis;
72	ax25_address	digipeaters[AX25_MAX_DIGIS];
73};
74
75struct rose_cause_struct {
76	unsigned char	cause;
77	unsigned char	diagnostic;
78};
79
80struct rose_facilities_struct {
81	rose_address	source_addr,   dest_addr;
82	ax25_address	source_call,   dest_call;
83	unsigned char	source_ndigis, dest_ndigis;
84	ax25_address	source_digis[ROSE_MAX_DIGIS];
85	ax25_address	dest_digis[ROSE_MAX_DIGIS];
86	unsigned int	rand;
87	rose_address	fail_addr;
88	ax25_address	fail_call;
89};
90
91#endif
92