root/include/net/lapb.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LAPB_H
   3 #define _LAPB_H 
   4 #include <linux/lapb.h>
   5 #include <linux/refcount.h>
   6 
   7 #define LAPB_HEADER_LEN 20              /* LAPB over Ethernet + a bit more */
   8 
   9 #define LAPB_ACK_PENDING_CONDITION      0x01
  10 #define LAPB_REJECT_CONDITION           0x02
  11 #define LAPB_PEER_RX_BUSY_CONDITION     0x04
  12 
  13 /* Control field templates */
  14 #define LAPB_I          0x00    /* Information frames */
  15 #define LAPB_S          0x01    /* Supervisory frames */
  16 #define LAPB_U          0x03    /* Unnumbered frames */
  17 
  18 #define LAPB_RR         0x01    /* Receiver ready */
  19 #define LAPB_RNR        0x05    /* Receiver not ready */
  20 #define LAPB_REJ        0x09    /* Reject */
  21 
  22 #define LAPB_SABM       0x2F    /* Set Asynchronous Balanced Mode */
  23 #define LAPB_SABME      0x6F    /* Set Asynchronous Balanced Mode Extended */
  24 #define LAPB_DISC       0x43    /* Disconnect */
  25 #define LAPB_DM         0x0F    /* Disconnected mode */
  26 #define LAPB_UA         0x63    /* Unnumbered acknowledge */
  27 #define LAPB_FRMR       0x87    /* Frame reject */
  28 
  29 #define LAPB_ILLEGAL    0x100   /* Impossible to be a real frame type */
  30 
  31 #define LAPB_SPF        0x10    /* Poll/final bit for standard LAPB */
  32 #define LAPB_EPF        0x01    /* Poll/final bit for extended LAPB */
  33 
  34 #define LAPB_FRMR_W     0x01    /* Control field invalid        */
  35 #define LAPB_FRMR_X     0x02    /* I field invalid              */
  36 #define LAPB_FRMR_Y     0x04    /* I field too long             */
  37 #define LAPB_FRMR_Z     0x08    /* Invalid N(R)                 */
  38 
  39 #define LAPB_POLLOFF    0
  40 #define LAPB_POLLON     1
  41 
  42 /* LAPB C-bit */
  43 #define LAPB_COMMAND    1
  44 #define LAPB_RESPONSE   2
  45 
  46 #define LAPB_ADDR_A     0x03
  47 #define LAPB_ADDR_B     0x01
  48 #define LAPB_ADDR_C     0x0F
  49 #define LAPB_ADDR_D     0x07
  50 
  51 /* Define Link State constants. */
  52 enum {
  53         LAPB_STATE_0,   /* Disconnected State           */
  54         LAPB_STATE_1,   /* Awaiting Connection State    */
  55         LAPB_STATE_2,   /* Awaiting Disconnection State */
  56         LAPB_STATE_3,   /* Data Transfer State          */
  57         LAPB_STATE_4    /* Frame Reject State           */
  58 };
  59 
  60 #define LAPB_DEFAULT_MODE               (LAPB_STANDARD | LAPB_SLP | LAPB_DTE)
  61 #define LAPB_DEFAULT_WINDOW             7               /* Window=7 */
  62 #define LAPB_DEFAULT_T1                 (5 * HZ)        /* T1=5s    */
  63 #define LAPB_DEFAULT_T2                 (1 * HZ)        /* T2=1s    */
  64 #define LAPB_DEFAULT_N2                 20              /* N2=20    */
  65 
  66 #define LAPB_SMODULUS   8
  67 #define LAPB_EMODULUS   128
  68 
  69 /*
  70  *      Information about the current frame.
  71  */
  72 struct lapb_frame {
  73         unsigned short          type;           /* Parsed type          */
  74         unsigned short          nr, ns;         /* N(R), N(S)           */
  75         unsigned char           cr;             /* Command/Response     */
  76         unsigned char           pf;             /* Poll/Final           */
  77         unsigned char           control[2];     /* Original control data*/
  78 };
  79 
  80 /*
  81  *      The per LAPB connection control structure.
  82  */
  83 struct lapb_cb {
  84         struct list_head        node;
  85         struct net_device       *dev;
  86 
  87         /* Link status fields */
  88         unsigned int            mode;
  89         unsigned char           state;
  90         unsigned short          vs, vr, va;
  91         unsigned char           condition;
  92         unsigned short          n2, n2count;
  93         unsigned short          t1, t2;
  94         struct timer_list       t1timer, t2timer;
  95 
  96         /* Internal control information */
  97         struct sk_buff_head     write_queue;
  98         struct sk_buff_head     ack_queue;
  99         unsigned char           window;
 100         const struct lapb_register_struct *callbacks;
 101 
 102         /* FRMR control information */
 103         struct lapb_frame       frmr_data;
 104         unsigned char           frmr_type;
 105 
 106         refcount_t              refcnt;
 107 };
 108 
 109 /* lapb_iface.c */
 110 void lapb_connect_confirmation(struct lapb_cb *lapb, int);
 111 void lapb_connect_indication(struct lapb_cb *lapb, int);
 112 void lapb_disconnect_confirmation(struct lapb_cb *lapb, int);
 113 void lapb_disconnect_indication(struct lapb_cb *lapb, int);
 114 int lapb_data_indication(struct lapb_cb *lapb, struct sk_buff *);
 115 int lapb_data_transmit(struct lapb_cb *lapb, struct sk_buff *);
 116 
 117 /* lapb_in.c */
 118 void lapb_data_input(struct lapb_cb *lapb, struct sk_buff *);
 119 
 120 /* lapb_out.c */
 121 void lapb_kick(struct lapb_cb *lapb);
 122 void lapb_transmit_buffer(struct lapb_cb *lapb, struct sk_buff *, int);
 123 void lapb_establish_data_link(struct lapb_cb *lapb);
 124 void lapb_enquiry_response(struct lapb_cb *lapb);
 125 void lapb_timeout_response(struct lapb_cb *lapb);
 126 void lapb_check_iframes_acked(struct lapb_cb *lapb, unsigned short);
 127 void lapb_check_need_response(struct lapb_cb *lapb, int, int);
 128 
 129 /* lapb_subr.c */
 130 void lapb_clear_queues(struct lapb_cb *lapb);
 131 void lapb_frames_acked(struct lapb_cb *lapb, unsigned short);
 132 void lapb_requeue_frames(struct lapb_cb *lapb);
 133 int lapb_validate_nr(struct lapb_cb *lapb, unsigned short);
 134 int lapb_decode(struct lapb_cb *lapb, struct sk_buff *, struct lapb_frame *);
 135 void lapb_send_control(struct lapb_cb *lapb, int, int, int);
 136 void lapb_transmit_frmr(struct lapb_cb *lapb);
 137 
 138 /* lapb_timer.c */
 139 void lapb_start_t1timer(struct lapb_cb *lapb);
 140 void lapb_start_t2timer(struct lapb_cb *lapb);
 141 void lapb_stop_t1timer(struct lapb_cb *lapb);
 142 void lapb_stop_t2timer(struct lapb_cb *lapb);
 143 int lapb_t1timer_running(struct lapb_cb *lapb);
 144 
 145 /*
 146  * Debug levels.
 147  *      0 = Off
 148  *      1 = State Changes
 149  *      2 = Packets I/O and State Changes
 150  *      3 = Hex dumps, Packets I/O and State Changes.
 151  */
 152 #define LAPB_DEBUG      0
 153 
 154 #define lapb_dbg(level, fmt, ...)                       \
 155 do {                                                    \
 156         if (level < LAPB_DEBUG)                         \
 157                 pr_debug(fmt, ##__VA_ARGS__);           \
 158 } while (0)
 159 
 160 #endif

/* [<][>][^][v][top][bottom][index][help] */