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