Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _NET_DN_H
0003 #define _NET_DN_H
0004 
0005 #include <linux/dn.h>
0006 #include <net/sock.h>
0007 #include <net/flow.h>
0008 #include <asm/byteorder.h>
0009 #include <asm/unaligned.h>
0010 
0011 struct dn_scp                                   /* Session Control Port */
0012 {
0013         unsigned char           state;
0014 #define DN_O     1                      /* Open                 */
0015 #define DN_CR    2                      /* Connect Receive      */
0016 #define DN_DR    3                      /* Disconnect Reject    */
0017 #define DN_DRC   4                      /* Discon. Rej. Complete*/
0018 #define DN_CC    5                      /* Connect Confirm      */
0019 #define DN_CI    6                      /* Connect Initiate     */
0020 #define DN_NR    7                      /* No resources         */
0021 #define DN_NC    8                      /* No communication     */
0022 #define DN_CD    9                      /* Connect Delivery     */
0023 #define DN_RJ    10                     /* Rejected             */
0024 #define DN_RUN   11                     /* Running              */
0025 #define DN_DI    12                     /* Disconnect Initiate  */
0026 #define DN_DIC   13                     /* Disconnect Complete  */
0027 #define DN_DN    14                     /* Disconnect Notificat */
0028 #define DN_CL    15                     /* Closed               */
0029 #define DN_CN    16                     /* Closed Notification  */
0030 
0031         __le16          addrloc;
0032         __le16          addrrem;
0033         __u16          numdat;
0034         __u16          numoth;
0035         __u16          numoth_rcv;
0036         __u16          numdat_rcv;
0037         __u16          ackxmt_dat;
0038         __u16          ackxmt_oth;
0039         __u16          ackrcv_dat;
0040         __u16          ackrcv_oth;
0041         __u8           flowrem_sw;
0042     __u8           flowloc_sw;
0043 #define DN_SEND         2
0044 #define DN_DONTSEND     1
0045 #define DN_NOCHANGE     0
0046     __u16       flowrem_dat;
0047     __u16       flowrem_oth;
0048     __u16       flowloc_dat;
0049     __u16       flowloc_oth;
0050     __u8        services_rem;
0051     __u8        services_loc;
0052     __u8        info_rem;
0053     __u8        info_loc;
0054 
0055     __u16       segsize_rem;
0056     __u16       segsize_loc;
0057 
0058     __u8        nonagle;
0059     __u8        multi_ireq;
0060     __u8        accept_mode;
0061     unsigned long       seg_total; /* Running total of current segment */
0062 
0063     struct optdata_dn     conndata_in;
0064     struct optdata_dn     conndata_out;
0065     struct optdata_dn     discdata_in;
0066     struct optdata_dn     discdata_out;
0067         struct accessdata_dn  accessdata;
0068 
0069         struct sockaddr_dn addr; /* Local address  */
0070     struct sockaddr_dn peer; /* Remote address */
0071 
0072     /*
0073      * In this case the RTT estimation is not specified in the
0074      * docs, nor is any back off algorithm. Here we follow well
0075      * known tcp algorithms with a few small variations.
0076      *
0077      * snd_window: Max number of packets we send before we wait for
0078      *             an ack to come back. This will become part of a
0079      *             more complicated scheme when we support flow
0080      *             control.
0081      *
0082      * nsp_srtt:   Round-Trip-Time (x8) in jiffies. This is a rolling
0083      *             average.
0084      * nsp_rttvar: Round-Trip-Time-Varience (x4) in jiffies. This is the
0085      *             varience of the smoothed average (but calculated in
0086      *             a simpler way than for normal statistical varience
0087      *             calculations).
0088      *
0089      * nsp_rxtshift: Backoff counter. Value is zero normally, each time
0090      *               a packet is lost is increases by one until an ack
0091      *               is received. Its used to index an array of backoff
0092      *               multipliers.
0093      */
0094 #define NSP_MIN_WINDOW 1
0095 #define NSP_MAX_WINDOW (0x07fe)
0096     unsigned long max_window;
0097     unsigned long snd_window;
0098 #define NSP_INITIAL_SRTT (HZ)
0099     unsigned long nsp_srtt;
0100 #define NSP_INITIAL_RTTVAR (HZ*3)
0101     unsigned long nsp_rttvar;
0102 #define NSP_MAXRXTSHIFT 12
0103     unsigned long nsp_rxtshift;
0104 
0105     /*
0106      * Output queues, one for data, one for otherdata/linkservice
0107      */
0108     struct sk_buff_head data_xmit_queue;
0109     struct sk_buff_head other_xmit_queue;
0110 
0111     /*
0112      * Input queue for other data
0113      */
0114     struct sk_buff_head other_receive_queue;
0115     int other_report;
0116 
0117     /*
0118      * Stuff to do with the slow timer
0119      */
0120     unsigned long stamp;          /* time of last transmit */
0121     unsigned long persist;
0122     int (*persist_fxn)(struct sock *sk);
0123     unsigned long keepalive;
0124     void (*keepalive_fxn)(struct sock *sk);
0125 
0126 };
0127 
0128 static inline struct dn_scp *DN_SK(struct sock *sk)
0129 {
0130     return (struct dn_scp *)(sk + 1);
0131 }
0132 
0133 /*
0134  * src,dst : Source and Destination DECnet addresses
0135  * hops : Number of hops through the network
0136  * dst_port, src_port : NSP port numbers
0137  * services, info : Useful data extracted from conninit messages
0138  * rt_flags : Routing flags byte
0139  * nsp_flags : NSP layer flags byte
0140  * segsize : Size of segment
0141  * segnum : Number, for data, otherdata and linkservice
0142  * xmit_count : Number of times we've transmitted this skb
0143  * stamp : Time stamp of most recent transmission, used in RTT calculations
0144  * iif: Input interface number
0145  *
0146  * As a general policy, this structure keeps all addresses in network
0147  * byte order, and all else in host byte order. Thus dst, src, dst_port
0148  * and src_port are in network order. All else is in host order.
0149  * 
0150  */
0151 #define DN_SKB_CB(skb) ((struct dn_skb_cb *)(skb)->cb)
0152 struct dn_skb_cb {
0153     __le16 dst;
0154     __le16 src;
0155     __u16 hops;
0156     __le16 dst_port;
0157     __le16 src_port;
0158     __u8 services;
0159     __u8 info;
0160     __u8 rt_flags;
0161     __u8 nsp_flags;
0162     __u16 segsize;
0163     __u16 segnum;
0164     __u16 xmit_count;
0165     unsigned long stamp;
0166     int iif;
0167 };
0168 
0169 static inline __le16 dn_eth2dn(const unsigned char *ethaddr)
0170 {
0171     return get_unaligned((__le16 *)(ethaddr + 4));
0172 }
0173 
0174 static inline __le16 dn_saddr2dn(struct sockaddr_dn *saddr)
0175 {
0176     return *(__le16 *)saddr->sdn_nodeaddr;
0177 }
0178 
0179 static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr)
0180 {
0181     __u16 a = le16_to_cpu(addr);
0182     ethaddr[0] = 0xAA;
0183     ethaddr[1] = 0x00;
0184     ethaddr[2] = 0x04;
0185     ethaddr[3] = 0x00;
0186     ethaddr[4] = (__u8)(a & 0xff);
0187     ethaddr[5] = (__u8)(a >> 8);
0188 }
0189 
0190 static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp)
0191 {
0192     fld->fld_sport = scp->addrloc;
0193     fld->fld_dport = scp->addrrem;
0194 }
0195 
0196 unsigned int dn_mss_from_pmtu(struct net_device *dev, int mtu);
0197 void dn_register_sysctl(void);
0198 void dn_unregister_sysctl(void);
0199 
0200 #define DN_MENUVER_ACC 0x01
0201 #define DN_MENUVER_USR 0x02
0202 #define DN_MENUVER_PRX 0x04
0203 #define DN_MENUVER_UIC 0x08
0204 
0205 struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr);
0206 struct sock *dn_find_by_skb(struct sk_buff *skb);
0207 #define DN_ASCBUF_LEN 9
0208 char *dn_addr2asc(__u16, char *);
0209 int dn_destroy_timer(struct sock *sk);
0210 
0211 int dn_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf,
0212              unsigned char type);
0213 int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *addr,
0214              unsigned char *type);
0215 
0216 void dn_start_slow_timer(struct sock *sk);
0217 void dn_stop_slow_timer(struct sock *sk);
0218 
0219 extern __le16 decnet_address;
0220 extern int decnet_debug_level;
0221 extern int decnet_time_wait;
0222 extern int decnet_dn_count;
0223 extern int decnet_di_count;
0224 extern int decnet_dr_count;
0225 extern int decnet_no_fc_max_cwnd;
0226 
0227 extern long sysctl_decnet_mem[3];
0228 extern int sysctl_decnet_wmem[3];
0229 extern int sysctl_decnet_rmem[3];
0230 
0231 #endif /* _NET_DN_H */