|
|
1.1 root 1: /*
2: * Declarations of Rose type objects.
3: *
4: * Jonathan Naylor G4KLX 25/8/96
5: */
6:
7: #ifndef _ROSE_H
8: #define _ROSE_H
9: #include <linux/rose.h>
10:
11: #define ROSE_SLOWHZ 10 /* Run timing at 1/10 second */
12:
13: #define ROSE_ADDR_LEN 5
14:
15: #define ROSE_MIN_LEN 3
16:
17: #define ROSE_GFI 0x10
18: #define ROSE_Q_BIT 0x80
19: #define ROSE_D_BIT 0x40
20: #define ROSE_M_BIT 0x10
21: #define M_BIT 0x10
22:
23: #define ROSE_CALL_REQUEST 0x0B
24: #define ROSE_CALL_ACCEPTED 0x0F
25: #define ROSE_CLEAR_REQUEST 0x13
26: #define ROSE_CLEAR_CONFIRMATION 0x17
27: #define ROSE_DATA 0x00
28: #define ROSE_INTERRUPT 0x23
29: #define ROSE_INTERRUPT_CONFIRMATION 0x27
30: #define ROSE_RR 0x01
31: #define ROSE_RNR 0x05
32: #define ROSE_REJ 0x09
33: #define ROSE_RESET_REQUEST 0x1B
34: #define ROSE_RESET_CONFIRMATION 0x1F
35: #define ROSE_REGISTRATION_REQUEST 0xF3
36: #define ROSE_REGISTRATION_CONFIRMATION 0xF7
37: #define ROSE_RESTART_REQUEST 0xFB
38: #define ROSE_RESTART_CONFIRMATION 0xFF
39: #define ROSE_DIAGNOSTIC 0xF1
40: #define ROSE_ILLEGAL 0xFD
41:
42: /* Define Link State constants. */
43:
44: #define ROSE_STATE_0 0 /* Ready */
45: #define ROSE_STATE_1 1 /* Awaiting Call Accepted */
46: #define ROSE_STATE_2 2 /* Awaiting Clear Confirmation */
47: #define ROSE_STATE_3 3 /* Data Transfer */
48: #define ROSE_STATE_4 4 /* Awaiting Reset Confirmation */
49: #define ROSE_STATE_5 5 /* Deferred Call Acceptance */
50:
51: #define ROSE_DEFAULT_T0 (180 * ROSE_SLOWHZ) /* Default T10 T20 value */
52: #define ROSE_DEFAULT_T1 (200 * ROSE_SLOWHZ) /* Default T11 T21 value */
53: #define ROSE_DEFAULT_T2 (180 * ROSE_SLOWHZ) /* Default T12 T22 value */
54: #define ROSE_DEFAULT_T3 (180 * ROSE_SLOWHZ) /* Default T13 T23 value */
55: #define ROSE_DEFAULT_HB (5 * ROSE_SLOWHZ) /* Default Holdback value */
56: #define ROSE_DEFAULT_ROUTING 1 /* Default routing flag */
57: #define ROSE_DEFAULT_FAIL_TIMEOUT (120 * ROSE_SLOWHZ) /* Time until link considered usable */
58: #define ROSE_DEFAULT_MAXVC 50 /* Maximum number of VCs per neighbour */
59: #define ROSE_DEFAULT_WINDOW_SIZE 7 /* Default window value */
60:
61: #define ROSE_MODULUS 8
62: #define ROSE_MAX_PACKET_SIZE 251 /* Maximum Packet Size */
63:
64: #define ROSE_MAX_WINDOW_LEN ((AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN + 300) * 7)
65:
66: #define ROSE_COND_ACK_PENDING 0x01
67: #define ROSE_COND_PEER_RX_BUSY 0x02
68: #define ROSE_COND_OWN_RX_BUSY 0x04
69:
70: #define FAC_NATIONAL 0x00
71: #define FAC_CCITT 0x0F
72:
73: #define FAC_NATIONAL_RAND 0x7F
74: #define FAC_NATIONAL_FLAGS 0x3F
75: #define FAC_NATIONAL_DEST_DIGI 0xE9
76: #define FAC_NATIONAL_SRC_DIGI 0xEB
77: #define FAC_NATIONAL_FAIL_CALL 0xED
78: #define FAC_NATIONAL_FAIL_ADD 0xEE
79: #define FAC_NATIONAL_DIGIS 0xEF
80:
81: #define FAC_CCITT_DEST_NSAP 0xC9
82: #define FAC_CCITT_SRC_NSAP 0xCB
83:
84: struct rose_neigh {
85: struct rose_neigh *next;
86: ax25_address callsign;
87: ax25_digi *digipeat;
88: ax25_cb *ax25;
89: struct device *dev;
90: unsigned short count;
91: unsigned short use;
92: unsigned int number;
93: char restarted;
94: char dce_mode;
95: struct sk_buff_head queue;
96: unsigned short t0timer, ftimer;
97: struct timer_list timer;
98: };
99:
100: #define ROSE_MAX_ALTERNATE 3
101: struct rose_node {
102: struct rose_node *next;
103: rose_address address;
104: unsigned short mask;
105: unsigned char count;
106: struct rose_neigh *neighbour[ROSE_MAX_ALTERNATE];
107: };
108:
109: typedef struct {
110: unsigned int lci;
111: struct rose_neigh *neigh;
112: unsigned short vs, vr, va, vl;
113: unsigned short pending;
114: unsigned char state, condition;
115: struct timer_list timer;
116: } rose_tr;
117:
118: struct rose_route {
119: struct rose_route *next;
120: rose_address src_addr, dest_addr;
121: ax25_address src_call, dest_call;
122: rose_tr tr1, tr2;
123: unsigned int rand;
124: };
125:
126: typedef struct {
127: rose_address source_addr, dest_addr;
128: ax25_address source_call, dest_call;
129: unsigned char source_ndigis, dest_ndigis;
130: ax25_address source_digis[ROSE_MAX_DIGIS];
131: ax25_address dest_digis[ROSE_MAX_DIGIS];
132: struct rose_neigh *neighbour;
133: struct device *device;
134: unsigned int lci, rand;
135: unsigned char state, condition, qbitincl, defer;
136: unsigned char cause, diagnostic;
137: unsigned short vs, vr, va, vl;
138: unsigned short timer;
139: unsigned short t1, t2, t3, hb;
140: #ifdef M_BIT
141: unsigned short fraglen;
142: struct sk_buff_head frag_queue;
143: #endif
144: struct sk_buff_head ack_queue;
145: struct rose_facilities_struct facilities;
146: struct sock *sk; /* Backlink to socket */
147: } rose_cb;
148:
149: /* af_rose.c */
150: extern ax25_address rose_callsign;
151: extern int sysctl_rose_restart_request_timeout;
152: extern int sysctl_rose_call_request_timeout;
153: extern int sysctl_rose_reset_request_timeout;
154: extern int sysctl_rose_clear_request_timeout;
155: extern int sysctl_rose_ack_hold_back_timeout;
156: extern int sysctl_rose_routing_control;
157: extern int sysctl_rose_link_fail_timeout;
158: extern int sysctl_rose_maximum_vcs;
159: extern int sysctl_rose_window_size;
160: extern int rosecmp(rose_address *, rose_address *);
161: extern int rosecmpm(rose_address *, rose_address *, unsigned short);
162: extern char *rose2asc(rose_address *);
163: extern void rose_kill_by_neigh(struct rose_neigh *);
164: extern struct sock *rose_find_socket(unsigned int, struct rose_neigh *);
165: extern unsigned int rose_new_lci(struct rose_neigh *);
166: extern int rose_rx_call_request(struct sk_buff *, struct device *, struct rose_neigh *, unsigned int);
167: extern void rose_destroy_socket(struct sock *);
168:
169: /* rose_dev.c */
170: extern int rose_rx_ip(struct sk_buff *, struct device *);
171: extern int rose_init(struct device *);
172:
173: #include <net/rosecall.h>
174:
175: /* rose_in.c */
176: extern int rose_process_rx_frame(struct sock *, struct sk_buff *);
177:
178: /* rose_link.c */
179: extern void rose_link_set_timer(struct rose_neigh *);
180: extern void rose_link_rx_restart(struct sk_buff *, struct rose_neigh *, unsigned short);
181: extern void rose_transmit_restart_request(struct rose_neigh *);
182: extern void rose_transmit_restart_confirmation(struct rose_neigh *);
183: extern void rose_transmit_diagnostic(struct rose_neigh *, unsigned char);
184: extern void rose_transmit_clear_request(struct rose_neigh *, unsigned int, unsigned char, unsigned char);
185: extern void rose_transmit_link(struct sk_buff *, struct rose_neigh *);
186:
187: /* rose_loopback.c */
188: extern void rose_loopback_init(void);
189: extern void rose_loopback_clear(void);
190: extern int rose_loopback_queue(struct sk_buff *, struct rose_neigh *);
191:
192: /* rose_out.c */
193: extern void rose_kick(struct sock *);
194: extern void rose_enquiry_response(struct sock *);
195:
196: /* rose_route.c */
197: extern void rose_rt_device_down(struct device *);
198: extern void rose_link_device_down(struct device *);
199: extern void rose_clean_neighbour(struct rose_neigh *);
200: extern struct device *rose_dev_first(void);
201: extern struct device *rose_dev_get(rose_address *);
202: extern struct rose_route *rose_route_free_lci(unsigned int, struct rose_neigh *);
203: extern struct device *rose_ax25_dev_get(char *);
204: extern struct rose_neigh *rose_get_neigh(rose_address *, unsigned char *, unsigned char *);
205: extern int rose_rt_ioctl(unsigned int, void *);
206: extern void rose_link_failed(ax25_cb *, int);
207: extern int rose_route_frame(struct sk_buff *, ax25_cb *);
208: extern int rose_nodes_get_info(char *, char **, off_t, int, int);
209: extern int rose_neigh_get_info(char *, char **, off_t, int, int);
210: extern int rose_routes_get_info(char *, char **, off_t, int, int);
211: extern void rose_rt_free(void);
212:
213: /* rose_subr.c */
214: extern void rose_clear_queues(struct sock *);
215: extern void rose_frames_acked(struct sock *, unsigned short);
216: extern int rose_validate_nr(struct sock *, unsigned short);
217: extern void rose_write_internal(struct sock *, int);
218: extern int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *);
219: extern int rose_parse_facilities(unsigned char *, struct rose_facilities_struct *);
220: extern int rose_create_facilities(unsigned char *, rose_cb *);
221:
222: /* rose_timer.c */
223: extern void rose_set_timer(struct sock *);
224:
225: /* sysctl_net_rose.c */
226: extern void rose_register_sysctl(void);
227: extern void rose_unregister_sysctl(void);
228:
229: /* rose_transit.c */
230: void rose_transit(struct sk_buff *, rose_tr *, rose_tr *);
231: void rose_init_transit(rose_tr *, unsigned int, struct rose_neigh *);
232:
233: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.