linux/include/net/x25.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 *      Declarations of X.25 Packet Layer type objects.
   4 *
   5 *      History
   6 *      nov/17/96       Jonathan Naylor   Initial version.              
   7 *      mar/20/00       Daniela Squassoni Disabling/enabling of facilities 
   8 *                                        negotiation.
   9 */
  10
  11#ifndef _X25_H
  12#define _X25_H 
  13#include <linux/x25.h>
  14#include <linux/slab.h>
  15#include <linux/refcount.h>
  16#include <net/sock.h>
  17
  18#define X25_ADDR_LEN                    16
  19
  20#define X25_MAX_L2_LEN                  18      /* 802.2 LLC */
  21
  22#define X25_STD_MIN_LEN                 3
  23#define X25_EXT_MIN_LEN                 4
  24
  25#define X25_GFI_SEQ_MASK                0x30
  26#define X25_GFI_STDSEQ                  0x10
  27#define X25_GFI_EXTSEQ                  0x20
  28
  29#define X25_Q_BIT                       0x80
  30#define X25_D_BIT                       0x40
  31#define X25_STD_M_BIT                   0x10
  32#define X25_EXT_M_BIT                   0x01
  33
  34#define X25_CALL_REQUEST                0x0B
  35#define X25_CALL_ACCEPTED               0x0F
  36#define X25_CLEAR_REQUEST               0x13
  37#define X25_CLEAR_CONFIRMATION          0x17
  38#define X25_DATA                        0x00
  39#define X25_INTERRUPT                   0x23
  40#define X25_INTERRUPT_CONFIRMATION      0x27
  41#define X25_RR                          0x01
  42#define X25_RNR                         0x05
  43#define X25_REJ                         0x09
  44#define X25_RESET_REQUEST               0x1B
  45#define X25_RESET_CONFIRMATION          0x1F
  46#define X25_REGISTRATION_REQUEST        0xF3
  47#define X25_REGISTRATION_CONFIRMATION   0xF7
  48#define X25_RESTART_REQUEST             0xFB
  49#define X25_RESTART_CONFIRMATION        0xFF
  50#define X25_DIAGNOSTIC                  0xF1
  51#define X25_ILLEGAL                     0xFD
  52
  53/* Define the various conditions that may exist */
  54
  55#define X25_COND_ACK_PENDING    0x01
  56#define X25_COND_OWN_RX_BUSY    0x02
  57#define X25_COND_PEER_RX_BUSY   0x04
  58
  59/* Define Link State constants. */
  60enum {
  61        X25_STATE_0,            /* Ready */
  62        X25_STATE_1,            /* Awaiting Call Accepted */
  63        X25_STATE_2,            /* Awaiting Clear Confirmation */
  64        X25_STATE_3,            /* Data Transfer */
  65        X25_STATE_4,            /* Awaiting Reset Confirmation */
  66        X25_STATE_5             /* Call Accepted / Call Connected pending */
  67};
  68
  69enum {
  70        X25_LINK_STATE_0,
  71        X25_LINK_STATE_1,
  72        X25_LINK_STATE_2,
  73        X25_LINK_STATE_3
  74};
  75
  76#define X25_DEFAULT_T20         (180 * HZ)              /* Default T20 value */
  77#define X25_DEFAULT_T21         (200 * HZ)              /* Default T21 value */
  78#define X25_DEFAULT_T22         (180 * HZ)              /* Default T22 value */
  79#define X25_DEFAULT_T23         (180 * HZ)              /* Default T23 value */
  80#define X25_DEFAULT_T2          (3   * HZ)              /* Default ack holdback value */
  81
  82#define X25_DEFAULT_WINDOW_SIZE 2                       /* Default Window Size  */
  83#define X25_DEFAULT_PACKET_SIZE X25_PS128               /* Default Packet Size */
  84#define X25_DEFAULT_THROUGHPUT  0x0A                    /* Deafult Throughput */
  85#define X25_DEFAULT_REVERSE     0x00                    /* Default Reverse Charging */
  86
  87#define X25_SMODULUS            8
  88#define X25_EMODULUS            128
  89
  90/*
  91 *      X.25 Facilities constants.
  92 */
  93
  94#define X25_FAC_CLASS_MASK      0xC0
  95
  96#define X25_FAC_CLASS_A         0x00
  97#define X25_FAC_CLASS_B         0x40
  98#define X25_FAC_CLASS_C         0x80
  99#define X25_FAC_CLASS_D         0xC0
 100
 101#define X25_FAC_REVERSE         0x01                    /* also fast select */
 102#define X25_FAC_THROUGHPUT      0x02
 103#define X25_FAC_PACKET_SIZE     0x42
 104#define X25_FAC_WINDOW_SIZE     0x43
 105
 106#define X25_MAX_FAC_LEN         60
 107#define X25_MAX_CUD_LEN         128
 108
 109#define X25_FAC_CALLING_AE      0xCB
 110#define X25_FAC_CALLED_AE       0xC9
 111
 112#define X25_MARKER              0x00
 113#define X25_DTE_SERVICES        0x0F
 114#define X25_MAX_AE_LEN          40                      /* Max num of semi-octets in AE - OSI Nw */
 115#define X25_MAX_DTE_FACIL_LEN   21                      /* Max length of DTE facility params */
 116
 117/* Bitset in x25_sock->flags for misc flags */
 118#define X25_Q_BIT_FLAG          0
 119#define X25_INTERRUPT_FLAG      1
 120#define X25_ACCPT_APPRV_FLAG    2
 121
 122/**
 123 *      struct x25_route - x25 routing entry
 124 *      @node - entry in x25_list_lock
 125 *      @address - Start of address range
 126 *      @sigdigits - Number of sig digits
 127 *      @dev - More than one for MLP
 128 *      @refcnt - reference counter
 129 */
 130struct x25_route {
 131        struct list_head        node;           
 132        struct x25_address      address;
 133        unsigned int            sigdigits;
 134        struct net_device       *dev;
 135        refcount_t              refcnt;
 136};
 137
 138struct x25_neigh {
 139        struct list_head        node;
 140        struct net_device       *dev;
 141        unsigned int            state;
 142        unsigned int            extended;
 143        struct sk_buff_head     queue;
 144        unsigned long           t20;
 145        struct timer_list       t20timer;
 146        unsigned long           global_facil_mask;
 147        refcount_t              refcnt;
 148};
 149
 150struct x25_sock {
 151        struct sock             sk;
 152        struct x25_address      source_addr, dest_addr;
 153        struct x25_neigh        *neighbour;
 154        unsigned int            lci, cudmatchlength;
 155        unsigned char           state, condition;
 156        unsigned short          vs, vr, va, vl;
 157        unsigned long           t2, t21, t22, t23;
 158        unsigned short          fraglen;
 159        unsigned long           flags;
 160        struct sk_buff_head     ack_queue;
 161        struct sk_buff_head     fragment_queue;
 162        struct sk_buff_head     interrupt_in_queue;
 163        struct sk_buff_head     interrupt_out_queue;
 164        struct timer_list       timer;
 165        struct x25_causediag    causediag;
 166        struct x25_facilities   facilities;
 167        struct x25_dte_facilities dte_facilities;
 168        struct x25_calluserdata calluserdata;
 169        unsigned long           vc_facil_mask;  /* inc_call facilities mask */
 170};
 171
 172struct x25_forward {
 173        struct list_head        node;
 174        unsigned int            lci;
 175        struct net_device       *dev1;
 176        struct net_device       *dev2;
 177        atomic_t                refcnt;
 178};
 179
 180static inline struct x25_sock *x25_sk(const struct sock *sk)
 181{
 182        return (struct x25_sock *)sk;
 183}
 184
 185/* af_x25.c */
 186extern int  sysctl_x25_restart_request_timeout;
 187extern int  sysctl_x25_call_request_timeout;
 188extern int  sysctl_x25_reset_request_timeout;
 189extern int  sysctl_x25_clear_request_timeout;
 190extern int  sysctl_x25_ack_holdback_timeout;
 191extern int  sysctl_x25_forward;
 192
 193int x25_parse_address_block(struct sk_buff *skb,
 194                            struct x25_address *called_addr,
 195                            struct x25_address *calling_addr);
 196
 197int x25_addr_ntoa(unsigned char *, struct x25_address *, struct x25_address *);
 198int x25_addr_aton(unsigned char *, struct x25_address *, struct x25_address *);
 199struct sock *x25_find_socket(unsigned int, struct x25_neigh *);
 200void x25_destroy_socket_from_timer(struct sock *);
 201int x25_rx_call_request(struct sk_buff *, struct x25_neigh *, unsigned int);
 202void x25_kill_by_neigh(struct x25_neigh *);
 203
 204/* x25_dev.c */
 205void x25_send_frame(struct sk_buff *, struct x25_neigh *);
 206int x25_lapb_receive_frame(struct sk_buff *, struct net_device *,
 207                           struct packet_type *, struct net_device *);
 208void x25_establish_link(struct x25_neigh *);
 209void x25_terminate_link(struct x25_neigh *);
 210
 211/* x25_facilities.c */
 212int x25_parse_facilities(struct sk_buff *, struct x25_facilities *,
 213                         struct x25_dte_facilities *, unsigned long *);
 214int x25_create_facilities(unsigned char *, struct x25_facilities *,
 215                          struct x25_dte_facilities *, unsigned long);
 216int x25_negotiate_facilities(struct sk_buff *, struct sock *,
 217                             struct x25_facilities *,
 218                             struct x25_dte_facilities *);
 219void x25_limit_facilities(struct x25_facilities *, struct x25_neigh *);
 220
 221/* x25_forward.c */
 222void x25_clear_forward_by_lci(unsigned int lci);
 223void x25_clear_forward_by_dev(struct net_device *);
 224int x25_forward_data(int, struct x25_neigh *, struct sk_buff *);
 225int x25_forward_call(struct x25_address *, struct x25_neigh *, struct sk_buff *,
 226                     int);
 227
 228/* x25_in.c */
 229int x25_process_rx_frame(struct sock *, struct sk_buff *);
 230int x25_backlog_rcv(struct sock *, struct sk_buff *);
 231
 232/* x25_link.c */
 233void x25_link_control(struct sk_buff *, struct x25_neigh *, unsigned short);
 234void x25_link_device_up(struct net_device *);
 235void x25_link_device_down(struct net_device *);
 236void x25_link_established(struct x25_neigh *);
 237void x25_link_terminated(struct x25_neigh *);
 238void x25_transmit_clear_request(struct x25_neigh *, unsigned int,
 239                                unsigned char);
 240void x25_transmit_link(struct sk_buff *, struct x25_neigh *);
 241int x25_subscr_ioctl(unsigned int, void __user *);
 242struct x25_neigh *x25_get_neigh(struct net_device *);
 243void x25_link_free(void);
 244
 245/* x25_neigh.c */
 246static __inline__ void x25_neigh_hold(struct x25_neigh *nb)
 247{
 248        refcount_inc(&nb->refcnt);
 249}
 250
 251static __inline__ void x25_neigh_put(struct x25_neigh *nb)
 252{
 253        if (refcount_dec_and_test(&nb->refcnt))
 254                kfree(nb);
 255}
 256
 257/* x25_out.c */
 258int x25_output(struct sock *, struct sk_buff *);
 259void x25_kick(struct sock *);
 260void x25_enquiry_response(struct sock *);
 261
 262/* x25_route.c */
 263struct x25_route *x25_get_route(struct x25_address *addr);
 264struct net_device *x25_dev_get(char *);
 265void x25_route_device_down(struct net_device *dev);
 266int x25_route_ioctl(unsigned int, void __user *);
 267void x25_route_free(void);
 268
 269static __inline__ void x25_route_hold(struct x25_route *rt)
 270{
 271        refcount_inc(&rt->refcnt);
 272}
 273
 274static __inline__ void x25_route_put(struct x25_route *rt)
 275{
 276        if (refcount_dec_and_test(&rt->refcnt))
 277                kfree(rt);
 278}
 279
 280/* x25_subr.c */
 281void x25_clear_queues(struct sock *);
 282void x25_frames_acked(struct sock *, unsigned short);
 283void x25_requeue_frames(struct sock *);
 284int x25_validate_nr(struct sock *, unsigned short);
 285void x25_write_internal(struct sock *, int);
 286int x25_decode(struct sock *, struct sk_buff *, int *, int *, int *, int *,
 287               int *);
 288void x25_disconnect(struct sock *, int, unsigned char, unsigned char);
 289
 290/* x25_timer.c */
 291void x25_init_timers(struct sock *sk);
 292void x25_start_heartbeat(struct sock *);
 293void x25_start_t2timer(struct sock *);
 294void x25_start_t21timer(struct sock *);
 295void x25_start_t22timer(struct sock *);
 296void x25_start_t23timer(struct sock *);
 297void x25_stop_heartbeat(struct sock *);
 298void x25_stop_timer(struct sock *);
 299unsigned long x25_display_timer(struct sock *);
 300void x25_check_rbuf(struct sock *);
 301
 302/* sysctl_net_x25.c */
 303#ifdef CONFIG_SYSCTL
 304int x25_register_sysctl(void);
 305void x25_unregister_sysctl(void);
 306#else
 307static inline int x25_register_sysctl(void) { return 0; };
 308static inline void x25_unregister_sysctl(void) {};
 309#endif /* CONFIG_SYSCTL */
 310
 311struct x25_skb_cb {
 312        unsigned int flags;
 313};
 314#define X25_SKB_CB(s) ((struct x25_skb_cb *) ((s)->cb))
 315
 316extern struct hlist_head x25_list;
 317extern rwlock_t x25_list_lock;
 318extern struct list_head x25_route_list;
 319extern rwlock_t x25_route_list_lock;
 320extern struct list_head x25_forward_list;
 321extern rwlock_t x25_forward_list_lock;
 322extern struct list_head x25_neigh_list;
 323extern rwlock_t x25_neigh_list_lock;
 324
 325int x25_proc_init(void);
 326void x25_proc_exit(void);
 327#endif
 328