dn_nsp.h (5524B)
1/* SPDX-License-Identifier: GPL-2.0-or-later */ 2#ifndef _NET_DN_NSP_H 3#define _NET_DN_NSP_H 4/****************************************************************************** 5 (c) 1995-1998 E.M. Serrat emserrat@geocities.com 6 7*******************************************************************************/ 8/* dn_nsp.c functions prototyping */ 9 10void dn_nsp_send_data_ack(struct sock *sk); 11void dn_nsp_send_oth_ack(struct sock *sk); 12void dn_send_conn_ack(struct sock *sk); 13void dn_send_conn_conf(struct sock *sk, gfp_t gfp); 14void dn_nsp_send_disc(struct sock *sk, unsigned char type, 15 unsigned short reason, gfp_t gfp); 16void dn_nsp_return_disc(struct sk_buff *skb, unsigned char type, 17 unsigned short reason); 18void dn_nsp_send_link(struct sock *sk, unsigned char lsflags, char fcval); 19void dn_nsp_send_conninit(struct sock *sk, unsigned char flags); 20 21void dn_nsp_output(struct sock *sk); 22int dn_nsp_check_xmit_queue(struct sock *sk, struct sk_buff *skb, 23 struct sk_buff_head *q, unsigned short acknum); 24void dn_nsp_queue_xmit(struct sock *sk, struct sk_buff *skb, gfp_t gfp, 25 int oob); 26unsigned long dn_nsp_persist(struct sock *sk); 27int dn_nsp_xmit_timeout(struct sock *sk); 28 29int dn_nsp_rx(struct sk_buff *); 30int dn_nsp_backlog_rcv(struct sock *sk, struct sk_buff *skb); 31 32struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri); 33struct sk_buff *dn_alloc_send_skb(struct sock *sk, size_t *size, int noblock, 34 long timeo, int *err); 35 36#define NSP_REASON_OK 0 /* No error */ 37#define NSP_REASON_NR 1 /* No resources */ 38#define NSP_REASON_UN 2 /* Unrecognised node name */ 39#define NSP_REASON_SD 3 /* Node shutting down */ 40#define NSP_REASON_ID 4 /* Invalid destination end user */ 41#define NSP_REASON_ER 5 /* End user lacks resources */ 42#define NSP_REASON_OB 6 /* Object too busy */ 43#define NSP_REASON_US 7 /* Unspecified error */ 44#define NSP_REASON_TP 8 /* Third-Party abort */ 45#define NSP_REASON_EA 9 /* End user has aborted the link */ 46#define NSP_REASON_IF 10 /* Invalid node name format */ 47#define NSP_REASON_LS 11 /* Local node shutdown */ 48#define NSP_REASON_LL 32 /* Node lacks logical-link resources */ 49#define NSP_REASON_LE 33 /* End user lacks logical-link resources */ 50#define NSP_REASON_UR 34 /* Unacceptable RQSTRID or PASSWORD field */ 51#define NSP_REASON_UA 36 /* Unacceptable ACCOUNT field */ 52#define NSP_REASON_TM 38 /* End user timed out logical link */ 53#define NSP_REASON_NU 39 /* Node unreachable */ 54#define NSP_REASON_NL 41 /* No-link message */ 55#define NSP_REASON_DC 42 /* Disconnect confirm */ 56#define NSP_REASON_IO 43 /* Image data field overflow */ 57 58#define NSP_DISCINIT 0x38 59#define NSP_DISCCONF 0x48 60 61/*------------------------- NSP - messages ------------------------------*/ 62/* Data Messages */ 63/*---------------*/ 64 65/* Data Messages (data segment/interrupt/link service) */ 66 67struct nsp_data_seg_msg { 68 __u8 msgflg; 69 __le16 dstaddr; 70 __le16 srcaddr; 71} __packed; 72 73struct nsp_data_opt_msg { 74 __le16 acknum; 75 __le16 segnum; 76 __le16 lsflgs; 77} __packed; 78 79struct nsp_data_opt_msg1 { 80 __le16 acknum; 81 __le16 segnum; 82} __packed; 83 84 85/* Acknowledgment Message (data/other data) */ 86struct nsp_data_ack_msg { 87 __u8 msgflg; 88 __le16 dstaddr; 89 __le16 srcaddr; 90 __le16 acknum; 91} __packed; 92 93/* Connect Acknowledgment Message */ 94struct nsp_conn_ack_msg { 95 __u8 msgflg; 96 __le16 dstaddr; 97} __packed; 98 99 100/* Connect Initiate/Retransmit Initiate/Connect Confirm */ 101struct nsp_conn_init_msg { 102 __u8 msgflg; 103#define NSP_CI 0x18 /* Connect Initiate */ 104#define NSP_RCI 0x68 /* Retrans. Conn Init */ 105 __le16 dstaddr; 106 __le16 srcaddr; 107 __u8 services; 108#define NSP_FC_NONE 0x00 /* Flow Control None */ 109#define NSP_FC_SRC 0x04 /* Seg Req. Count */ 110#define NSP_FC_SCMC 0x08 /* Sess. Control Mess */ 111#define NSP_FC_MASK 0x0c /* FC type mask */ 112 __u8 info; 113 __le16 segsize; 114} __packed; 115 116/* Disconnect Initiate/Disconnect Confirm */ 117struct nsp_disconn_init_msg { 118 __u8 msgflg; 119 __le16 dstaddr; 120 __le16 srcaddr; 121 __le16 reason; 122} __packed; 123 124 125 126struct srcobj_fmt { 127 __u8 format; 128 __u8 task; 129 __le16 grpcode; 130 __le16 usrcode; 131 __u8 dlen; 132} __packed; 133 134/* 135 * A collection of functions for manipulating the sequence 136 * numbers used in NSP. Similar in operation to the functions 137 * of the same name in TCP. 138 */ 139static __inline__ int dn_before(__u16 seq1, __u16 seq2) 140{ 141 seq1 &= 0x0fff; 142 seq2 &= 0x0fff; 143 144 return (int)((seq1 - seq2) & 0x0fff) > 2048; 145} 146 147 148static __inline__ int dn_after(__u16 seq1, __u16 seq2) 149{ 150 seq1 &= 0x0fff; 151 seq2 &= 0x0fff; 152 153 return (int)((seq2 - seq1) & 0x0fff) > 2048; 154} 155 156static __inline__ int dn_equal(__u16 seq1, __u16 seq2) 157{ 158 return ((seq1 ^ seq2) & 0x0fff) == 0; 159} 160 161static __inline__ int dn_before_or_equal(__u16 seq1, __u16 seq2) 162{ 163 return (dn_before(seq1, seq2) || dn_equal(seq1, seq2)); 164} 165 166static __inline__ void seq_add(__u16 *seq, __u16 off) 167{ 168 (*seq) += off; 169 (*seq) &= 0x0fff; 170} 171 172static __inline__ int seq_next(__u16 seq1, __u16 seq2) 173{ 174 return dn_equal(seq1 + 1, seq2); 175} 176 177/* 178 * Can we delay the ack ? 179 */ 180static __inline__ int sendack(__u16 seq) 181{ 182 return (int)((seq & 0x1000) ? 0 : 1); 183} 184 185/* 186 * Is socket congested ? 187 */ 188static __inline__ int dn_congested(struct sock *sk) 189{ 190 return atomic_read(&sk->sk_rmem_alloc) > (sk->sk_rcvbuf >> 1); 191} 192 193#define DN_MAX_NSP_DATA_HEADER (11) 194 195#endif /* _NET_DN_NSP_H */