^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Declarations of Rose type objects.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Jonathan Naylor G4KLX 25/8/96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #ifndef _ROSE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define _ROSE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/rose.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <net/sock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define ROSE_ADDR_LEN 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define ROSE_MIN_LEN 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define ROSE_CALL_REQ_ADDR_LEN_OFF 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define ROSE_CALL_REQ_ADDR_LEN_VAL 0xAA /* each address is 10 digits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define ROSE_CALL_REQ_DEST_ADDR_OFF 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define ROSE_CALL_REQ_SRC_ADDR_OFF 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define ROSE_CALL_REQ_FACILITIES_OFF 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define ROSE_GFI 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define ROSE_Q_BIT 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define ROSE_D_BIT 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define ROSE_M_BIT 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define ROSE_CALL_REQUEST 0x0B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define ROSE_CALL_ACCEPTED 0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define ROSE_CLEAR_REQUEST 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define ROSE_CLEAR_CONFIRMATION 0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define ROSE_DATA 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define ROSE_INTERRUPT 0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define ROSE_INTERRUPT_CONFIRMATION 0x27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define ROSE_RR 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define ROSE_RNR 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define ROSE_REJ 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define ROSE_RESET_REQUEST 0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define ROSE_RESET_CONFIRMATION 0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define ROSE_REGISTRATION_REQUEST 0xF3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define ROSE_REGISTRATION_CONFIRMATION 0xF7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define ROSE_RESTART_REQUEST 0xFB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define ROSE_RESTART_CONFIRMATION 0xFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define ROSE_DIAGNOSTIC 0xF1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define ROSE_ILLEGAL 0xFD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) /* Define Link State constants. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ROSE_STATE_0, /* Ready */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ROSE_STATE_1, /* Awaiting Call Accepted */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ROSE_STATE_2, /* Awaiting Clear Confirmation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) ROSE_STATE_3, /* Data Transfer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) ROSE_STATE_4, /* Awaiting Reset Confirmation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ROSE_STATE_5 /* Deferred Call Acceptance */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define ROSE_DEFAULT_T0 180000 /* Default T10 T20 value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define ROSE_DEFAULT_T1 200000 /* Default T11 T21 value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define ROSE_DEFAULT_T2 180000 /* Default T12 T22 value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define ROSE_DEFAULT_T3 180000 /* Default T13 T23 value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define ROSE_DEFAULT_HB 5000 /* Default Holdback value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define ROSE_DEFAULT_IDLE 0 /* No Activity Timeout - none */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define ROSE_DEFAULT_ROUTING 1 /* Default routing flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define ROSE_DEFAULT_FAIL_TIMEOUT 120000 /* Time until link considered usable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define ROSE_DEFAULT_MAXVC 50 /* Maximum number of VCs per neighbour */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define ROSE_DEFAULT_WINDOW_SIZE 7 /* Default window size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define ROSE_MODULUS 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define ROSE_MAX_PACKET_SIZE 251 /* Maximum packet size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define ROSE_COND_ACK_PENDING 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define ROSE_COND_PEER_RX_BUSY 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define ROSE_COND_OWN_RX_BUSY 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define FAC_NATIONAL 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define FAC_CCITT 0x0F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define FAC_NATIONAL_RAND 0x7F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define FAC_NATIONAL_FLAGS 0x3F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define FAC_NATIONAL_DEST_DIGI 0xE9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define FAC_NATIONAL_SRC_DIGI 0xEB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define FAC_NATIONAL_FAIL_CALL 0xED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define FAC_NATIONAL_FAIL_ADD 0xEE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define FAC_NATIONAL_DIGIS 0xEF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define FAC_CCITT_DEST_NSAP 0xC9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define FAC_CCITT_SRC_NSAP 0xCB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) struct rose_neigh {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) struct rose_neigh *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) ax25_address callsign;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) ax25_digi *digipeat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ax25_cb *ax25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) struct net_device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) unsigned short count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) unsigned short use;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) unsigned int number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) char restarted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) char dce_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) char loopback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct sk_buff_head queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) struct timer_list t0timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) struct timer_list ftimer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) struct rose_node {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct rose_node *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) rose_address address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) unsigned short mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) unsigned char count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) char loopback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) struct rose_neigh *neighbour[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) struct rose_route {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) struct rose_route *next;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) unsigned int lci1, lci2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) rose_address src_addr, dest_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ax25_address src_call, dest_call;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct rose_neigh *neigh1, *neigh2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) unsigned int rand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) struct rose_sock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct sock sock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) rose_address source_addr, dest_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) ax25_address source_call, dest_call;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) unsigned char source_ndigis, dest_ndigis;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ax25_address source_digis[ROSE_MAX_DIGIS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) ax25_address dest_digis[ROSE_MAX_DIGIS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct rose_neigh *neighbour;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) struct net_device *device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) unsigned int lci, rand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) unsigned char state, condition, qbitincl, defer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) unsigned char cause, diagnostic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) unsigned short vs, vr, va, vl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) unsigned long t1, t2, t3, hb, idle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #ifdef M_BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) unsigned short fraglen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct sk_buff_head frag_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct sk_buff_head ack_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) struct rose_facilities_struct facilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) struct timer_list timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct timer_list idletimer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define rose_sk(sk) ((struct rose_sock *)(sk))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) /* af_rose.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) extern ax25_address rose_callsign;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) extern int sysctl_rose_restart_request_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) extern int sysctl_rose_call_request_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) extern int sysctl_rose_reset_request_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) extern int sysctl_rose_clear_request_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) extern int sysctl_rose_no_activity_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) extern int sysctl_rose_ack_hold_back_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) extern int sysctl_rose_routing_control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) extern int sysctl_rose_link_fail_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) extern int sysctl_rose_maximum_vcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) extern int sysctl_rose_window_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) int rosecmp(rose_address *, rose_address *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) int rosecmpm(rose_address *, rose_address *, unsigned short);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) char *rose2asc(char *buf, const rose_address *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) struct sock *rose_find_socket(unsigned int, struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) void rose_kill_by_neigh(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) unsigned int rose_new_lci(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) int rose_rx_call_request(struct sk_buff *, struct net_device *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct rose_neigh *, unsigned int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) void rose_destroy_socket(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) /* rose_dev.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) void rose_setup(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* rose_in.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) int rose_process_rx_frame(struct sock *, struct sk_buff *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) /* rose_link.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) void rose_start_ftimer(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) void rose_stop_ftimer(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) void rose_stop_t0timer(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) int rose_ftimer_running(struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) void rose_link_rx_restart(struct sk_buff *, struct rose_neigh *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) unsigned short);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) void rose_transmit_clear_request(struct rose_neigh *, unsigned int,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) unsigned char, unsigned char);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) void rose_transmit_link(struct sk_buff *, struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* rose_loopback.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) void rose_loopback_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) void rose_loopback_clear(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) int rose_loopback_queue(struct sk_buff *, struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) /* rose_out.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) void rose_kick(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) void rose_enquiry_response(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* rose_route.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) extern struct rose_neigh *rose_loopback_neigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) extern const struct seq_operations rose_neigh_seqops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) extern const struct seq_operations rose_node_seqops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) extern struct seq_operations rose_route_seqops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) void rose_add_loopback_neigh(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) int __must_check rose_add_loopback_node(rose_address *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) void rose_del_loopback_node(rose_address *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) void rose_rt_device_down(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) void rose_link_device_down(struct net_device *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct net_device *rose_dev_first(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) struct net_device *rose_dev_get(rose_address *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) struct rose_route *rose_route_free_lci(unsigned int, struct rose_neigh *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) struct rose_neigh *rose_get_neigh(rose_address *, unsigned char *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) unsigned char *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) int rose_rt_ioctl(unsigned int, void __user *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) void rose_link_failed(ax25_cb *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) int rose_route_frame(struct sk_buff *, ax25_cb *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) void rose_rt_free(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) /* rose_subr.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) void rose_clear_queues(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) void rose_frames_acked(struct sock *, unsigned short);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) void rose_requeue_frames(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) int rose_validate_nr(struct sock *, unsigned short);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) void rose_write_internal(struct sock *, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) int rose_parse_facilities(unsigned char *, unsigned int,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) struct rose_facilities_struct *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) void rose_disconnect(struct sock *, int, int, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) /* rose_timer.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) void rose_start_heartbeat(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) void rose_start_t1timer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) void rose_start_t2timer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) void rose_start_t3timer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) void rose_start_hbtimer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) void rose_start_idletimer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) void rose_stop_heartbeat(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) void rose_stop_timer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) void rose_stop_idletimer(struct sock *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) /* sysctl_net_rose.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) void rose_register_sysctl(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) void rose_unregister_sysctl(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) #endif