Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  *  Declarations of Rose type objects.
0004  *
0005  *  Jonathan Naylor G4KLX   25/8/96
0006  */
0007 
0008 #ifndef _ROSE_H
0009 #define _ROSE_H 
0010 
0011 #include <linux/rose.h>
0012 #include <net/ax25.h>
0013 #include <net/sock.h>
0014 
0015 #define ROSE_ADDR_LEN           5
0016 
0017 #define ROSE_MIN_LEN            3
0018 
0019 #define ROSE_CALL_REQ_ADDR_LEN_OFF  3
0020 #define ROSE_CALL_REQ_ADDR_LEN_VAL  0xAA    /* each address is 10 digits */
0021 #define ROSE_CALL_REQ_DEST_ADDR_OFF 4
0022 #define ROSE_CALL_REQ_SRC_ADDR_OFF  9
0023 #define ROSE_CALL_REQ_FACILITIES_OFF    14
0024 
0025 #define ROSE_GFI            0x10
0026 #define ROSE_Q_BIT          0x80
0027 #define ROSE_D_BIT          0x40
0028 #define ROSE_M_BIT          0x10
0029 
0030 #define ROSE_CALL_REQUEST       0x0B
0031 #define ROSE_CALL_ACCEPTED      0x0F
0032 #define ROSE_CLEAR_REQUEST      0x13
0033 #define ROSE_CLEAR_CONFIRMATION     0x17
0034 #define ROSE_DATA           0x00
0035 #define ROSE_INTERRUPT          0x23
0036 #define ROSE_INTERRUPT_CONFIRMATION 0x27
0037 #define ROSE_RR             0x01
0038 #define ROSE_RNR            0x05
0039 #define ROSE_REJ            0x09
0040 #define ROSE_RESET_REQUEST      0x1B
0041 #define ROSE_RESET_CONFIRMATION     0x1F
0042 #define ROSE_REGISTRATION_REQUEST   0xF3
0043 #define ROSE_REGISTRATION_CONFIRMATION  0xF7
0044 #define ROSE_RESTART_REQUEST        0xFB
0045 #define ROSE_RESTART_CONFIRMATION   0xFF
0046 #define ROSE_DIAGNOSTIC         0xF1
0047 #define ROSE_ILLEGAL            0xFD
0048 
0049 /* Define Link State constants. */
0050 
0051 enum {
0052     ROSE_STATE_0,           /* Ready */
0053     ROSE_STATE_1,           /* Awaiting Call Accepted */
0054     ROSE_STATE_2,           /* Awaiting Clear Confirmation */
0055     ROSE_STATE_3,           /* Data Transfer */
0056     ROSE_STATE_4,           /* Awaiting Reset Confirmation */
0057     ROSE_STATE_5            /* Deferred Call Acceptance */
0058 };
0059 
0060 #define ROSE_DEFAULT_T0         180000      /* Default T10 T20 value */
0061 #define ROSE_DEFAULT_T1         200000      /* Default T11 T21 value */
0062 #define ROSE_DEFAULT_T2         180000      /* Default T12 T22 value */
0063 #define ROSE_DEFAULT_T3         180000      /* Default T13 T23 value */
0064 #define ROSE_DEFAULT_HB         5000        /* Default Holdback value */
0065 #define ROSE_DEFAULT_IDLE       0       /* No Activity Timeout - none */
0066 #define ROSE_DEFAULT_ROUTING        1       /* Default routing flag */
0067 #define ROSE_DEFAULT_FAIL_TIMEOUT   120000      /* Time until link considered usable */
0068 #define ROSE_DEFAULT_MAXVC      50      /* Maximum number of VCs per neighbour */
0069 #define ROSE_DEFAULT_WINDOW_SIZE    7       /* Default window size */
0070 
0071 #define ROSE_MODULUS            8
0072 #define ROSE_MAX_PACKET_SIZE        251     /* Maximum packet size */
0073 
0074 #define ROSE_COND_ACK_PENDING       0x01
0075 #define ROSE_COND_PEER_RX_BUSY      0x02
0076 #define ROSE_COND_OWN_RX_BUSY       0x04
0077 
0078 #define FAC_NATIONAL            0x00
0079 #define FAC_CCITT           0x0F
0080 
0081 #define FAC_NATIONAL_RAND       0x7F
0082 #define FAC_NATIONAL_FLAGS      0x3F
0083 #define FAC_NATIONAL_DEST_DIGI      0xE9
0084 #define FAC_NATIONAL_SRC_DIGI       0xEB
0085 #define FAC_NATIONAL_FAIL_CALL      0xED
0086 #define FAC_NATIONAL_FAIL_ADD       0xEE
0087 #define FAC_NATIONAL_DIGIS          0xEF
0088 
0089 #define FAC_CCITT_DEST_NSAP     0xC9
0090 #define FAC_CCITT_SRC_NSAP      0xCB
0091 
0092 struct rose_neigh {
0093     struct rose_neigh   *next;
0094     ax25_address        callsign;
0095     ax25_digi       *digipeat;
0096     ax25_cb         *ax25;
0097     struct net_device       *dev;
0098     unsigned short      count;
0099     unsigned short      use;
0100     unsigned int        number;
0101     char            restarted;
0102     char            dce_mode;
0103     char            loopback;
0104     struct sk_buff_head queue;
0105     struct timer_list   t0timer;
0106     struct timer_list   ftimer;
0107 };
0108 
0109 struct rose_node {
0110     struct rose_node    *next;
0111     rose_address        address;
0112     unsigned short      mask;
0113     unsigned char       count;
0114     char            loopback;
0115     struct rose_neigh   *neighbour[3];
0116 };
0117 
0118 struct rose_route {
0119     struct rose_route   *next;
0120     unsigned int        lci1, lci2;
0121     rose_address        src_addr, dest_addr;
0122     ax25_address        src_call, dest_call;
0123     struct rose_neigh   *neigh1, *neigh2;
0124     unsigned int        rand;
0125 };
0126 
0127 struct rose_sock {
0128     struct sock     sock;
0129     rose_address        source_addr,   dest_addr;
0130     ax25_address        source_call,   dest_call;
0131     unsigned char       source_ndigis, dest_ndigis;
0132     ax25_address        source_digis[ROSE_MAX_DIGIS];
0133     ax25_address        dest_digis[ROSE_MAX_DIGIS];
0134     struct rose_neigh   *neighbour;
0135     struct net_device   *device;
0136     netdevice_tracker   dev_tracker;
0137     unsigned int        lci, rand;
0138     unsigned char       state, condition, qbitincl, defer;
0139     unsigned char       cause, diagnostic;
0140     unsigned short      vs, vr, va, vl;
0141     unsigned long       t1, t2, t3, hb, idle;
0142 #ifdef M_BIT
0143     unsigned short      fraglen;
0144     struct sk_buff_head frag_queue;
0145 #endif
0146     struct sk_buff_head ack_queue;
0147     struct rose_facilities_struct facilities;
0148     struct timer_list   timer;
0149     struct timer_list   idletimer;
0150 };
0151 
0152 #define rose_sk(sk) ((struct rose_sock *)(sk))
0153 
0154 /* af_rose.c */
0155 extern ax25_address rose_callsign;
0156 extern int  sysctl_rose_restart_request_timeout;
0157 extern int  sysctl_rose_call_request_timeout;
0158 extern int  sysctl_rose_reset_request_timeout;
0159 extern int  sysctl_rose_clear_request_timeout;
0160 extern int  sysctl_rose_no_activity_timeout;
0161 extern int  sysctl_rose_ack_hold_back_timeout;
0162 extern int  sysctl_rose_routing_control;
0163 extern int  sysctl_rose_link_fail_timeout;
0164 extern int  sysctl_rose_maximum_vcs;
0165 extern int  sysctl_rose_window_size;
0166 
0167 int rosecmp(const rose_address *, const rose_address *);
0168 int rosecmpm(const rose_address *, const rose_address *, unsigned short);
0169 char *rose2asc(char *buf, const rose_address *);
0170 struct sock *rose_find_socket(unsigned int, struct rose_neigh *);
0171 void rose_kill_by_neigh(struct rose_neigh *);
0172 unsigned int rose_new_lci(struct rose_neigh *);
0173 int rose_rx_call_request(struct sk_buff *, struct net_device *,
0174              struct rose_neigh *, unsigned int);
0175 void rose_destroy_socket(struct sock *);
0176 
0177 /* rose_dev.c */
0178 void rose_setup(struct net_device *);
0179 
0180 /* rose_in.c */
0181 int rose_process_rx_frame(struct sock *, struct sk_buff *);
0182 
0183 /* rose_link.c */
0184 void rose_start_ftimer(struct rose_neigh *);
0185 void rose_stop_ftimer(struct rose_neigh *);
0186 void rose_stop_t0timer(struct rose_neigh *);
0187 int rose_ftimer_running(struct rose_neigh *);
0188 void rose_link_rx_restart(struct sk_buff *, struct rose_neigh *,
0189               unsigned short);
0190 void rose_transmit_clear_request(struct rose_neigh *, unsigned int,
0191                  unsigned char, unsigned char);
0192 void rose_transmit_link(struct sk_buff *, struct rose_neigh *);
0193 
0194 /* rose_loopback.c */
0195 void rose_loopback_init(void);
0196 void rose_loopback_clear(void);
0197 int rose_loopback_queue(struct sk_buff *, struct rose_neigh *);
0198 
0199 /* rose_out.c */
0200 void rose_kick(struct sock *);
0201 void rose_enquiry_response(struct sock *);
0202 
0203 /* rose_route.c */
0204 extern struct rose_neigh *rose_loopback_neigh;
0205 extern const struct seq_operations rose_neigh_seqops;
0206 extern const struct seq_operations rose_node_seqops;
0207 extern struct seq_operations rose_route_seqops;
0208 
0209 void rose_add_loopback_neigh(void);
0210 int __must_check rose_add_loopback_node(const rose_address *);
0211 void rose_del_loopback_node(const rose_address *);
0212 void rose_rt_device_down(struct net_device *);
0213 void rose_link_device_down(struct net_device *);
0214 struct net_device *rose_dev_first(void);
0215 struct net_device *rose_dev_get(rose_address *);
0216 struct rose_route *rose_route_free_lci(unsigned int, struct rose_neigh *);
0217 struct rose_neigh *rose_get_neigh(rose_address *, unsigned char *,
0218                   unsigned char *, int);
0219 int rose_rt_ioctl(unsigned int, void __user *);
0220 void rose_link_failed(ax25_cb *, int);
0221 int rose_route_frame(struct sk_buff *, ax25_cb *);
0222 void rose_rt_free(void);
0223 
0224 /* rose_subr.c */
0225 void rose_clear_queues(struct sock *);
0226 void rose_frames_acked(struct sock *, unsigned short);
0227 void rose_requeue_frames(struct sock *);
0228 int rose_validate_nr(struct sock *, unsigned short);
0229 void rose_write_internal(struct sock *, int);
0230 int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *);
0231 int rose_parse_facilities(unsigned char *, unsigned int,
0232               struct rose_facilities_struct *);
0233 void rose_disconnect(struct sock *, int, int, int);
0234 
0235 /* rose_timer.c */
0236 void rose_start_heartbeat(struct sock *);
0237 void rose_start_t1timer(struct sock *);
0238 void rose_start_t2timer(struct sock *);
0239 void rose_start_t3timer(struct sock *);
0240 void rose_start_hbtimer(struct sock *);
0241 void rose_start_idletimer(struct sock *);
0242 void rose_stop_heartbeat(struct sock *);
0243 void rose_stop_timer(struct sock *);
0244 void rose_stop_idletimer(struct sock *);
0245 
0246 /* sysctl_net_rose.c */
0247 void rose_register_sysctl(void);
0248 void rose_unregister_sysctl(void);
0249 
0250 #endif