^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _NET_DN_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _NET_DN_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/dn.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <net/sock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <net/flow.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <asm/byteorder.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <asm/unaligned.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) struct dn_scp /* Session Control Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) unsigned char state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define DN_O 1 /* Open */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define DN_CR 2 /* Connect Receive */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define DN_DR 3 /* Disconnect Reject */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define DN_DRC 4 /* Discon. Rej. Complete*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define DN_CC 5 /* Connect Confirm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define DN_CI 6 /* Connect Initiate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define DN_NR 7 /* No resources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define DN_NC 8 /* No communication */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define DN_CD 9 /* Connect Delivery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define DN_RJ 10 /* Rejected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define DN_RUN 11 /* Running */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define DN_DI 12 /* Disconnect Initiate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define DN_DIC 13 /* Disconnect Complete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define DN_DN 14 /* Disconnect Notificat */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define DN_CL 15 /* Closed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define DN_CN 16 /* Closed Notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) __le16 addrloc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) __le16 addrrem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) __u16 numdat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) __u16 numoth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __u16 numoth_rcv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __u16 numdat_rcv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __u16 ackxmt_dat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __u16 ackxmt_oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __u16 ackrcv_dat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __u16 ackrcv_oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __u8 flowrem_sw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __u8 flowloc_sw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define DN_SEND 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define DN_DONTSEND 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define DN_NOCHANGE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __u16 flowrem_dat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) __u16 flowrem_oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __u16 flowloc_dat;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) __u16 flowloc_oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __u8 services_rem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) __u8 services_loc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) __u8 info_rem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) __u8 info_loc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) __u16 segsize_rem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) __u16 segsize_loc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) __u8 nonagle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) __u8 multi_ireq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __u8 accept_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) unsigned long seg_total; /* Running total of current segment */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct optdata_dn conndata_in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) struct optdata_dn conndata_out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct optdata_dn discdata_in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct optdata_dn discdata_out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) struct accessdata_dn accessdata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct sockaddr_dn addr; /* Local address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct sockaddr_dn peer; /* Remote address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * In this case the RTT estimation is not specified in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) * docs, nor is any back off algorithm. Here we follow well
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) * known tcp algorithms with a few small variations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) * snd_window: Max number of packets we send before we wait for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * an ack to come back. This will become part of a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) * more complicated scheme when we support flow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) * control.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) * nsp_srtt: Round-Trip-Time (x8) in jiffies. This is a rolling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * average.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * nsp_rttvar: Round-Trip-Time-Varience (x4) in jiffies. This is the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * varience of the smoothed average (but calculated in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * a simpler way than for normal statistical varience
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * calculations).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * nsp_rxtshift: Backoff counter. Value is zero normally, each time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * a packet is lost is increases by one until an ack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) * is received. Its used to index an array of backoff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) * multipliers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define NSP_MIN_WINDOW 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define NSP_MAX_WINDOW (0x07fe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) unsigned long max_window;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) unsigned long snd_window;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define NSP_INITIAL_SRTT (HZ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) unsigned long nsp_srtt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define NSP_INITIAL_RTTVAR (HZ*3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) unsigned long nsp_rttvar;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define NSP_MAXRXTSHIFT 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) unsigned long nsp_rxtshift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * Output queues, one for data, one for otherdata/linkservice
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) struct sk_buff_head data_xmit_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) struct sk_buff_head other_xmit_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * Input queue for other data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) struct sk_buff_head other_receive_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) int other_report;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * Stuff to do with the slow timer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) unsigned long stamp; /* time of last transmit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) unsigned long persist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) int (*persist_fxn)(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) unsigned long keepalive;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) void (*keepalive_fxn)(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) static inline struct dn_scp *DN_SK(struct sock *sk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) return (struct dn_scp *)(sk + 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) * src,dst : Source and Destination DECnet addresses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) * hops : Number of hops through the network
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) * dst_port, src_port : NSP port numbers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) * services, info : Useful data extracted from conninit messages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) * rt_flags : Routing flags byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) * nsp_flags : NSP layer flags byte
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) * segsize : Size of segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) * segnum : Number, for data, otherdata and linkservice
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) * xmit_count : Number of times we've transmitted this skb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) * stamp : Time stamp of most recent transmission, used in RTT calculations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) * iif: Input interface number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) * As a general policy, this structure keeps all addresses in network
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) * byte order, and all else in host byte order. Thus dst, src, dst_port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) * and src_port are in network order. All else is in host order.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define DN_SKB_CB(skb) ((struct dn_skb_cb *)(skb)->cb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) struct dn_skb_cb {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) __le16 dst;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) __le16 src;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __u16 hops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) __le16 dst_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) __le16 src_port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) __u8 services;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) __u8 info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) __u8 rt_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) __u8 nsp_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) __u16 segsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) __u16 segnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) __u16 xmit_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) unsigned long stamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) int iif;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) static inline __le16 dn_eth2dn(unsigned char *ethaddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) return get_unaligned((__le16 *)(ethaddr + 4));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) static inline __le16 dn_saddr2dn(struct sockaddr_dn *saddr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) return *(__le16 *)saddr->sdn_nodeaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) __u16 a = le16_to_cpu(addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) ethaddr[0] = 0xAA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) ethaddr[1] = 0x00;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) ethaddr[2] = 0x04;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ethaddr[3] = 0x00;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) ethaddr[4] = (__u8)(a & 0xff);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) ethaddr[5] = (__u8)(a >> 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) fld->fld_sport = scp->addrloc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) fld->fld_dport = scp->addrrem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) unsigned int dn_mss_from_pmtu(struct net_device *dev, int mtu);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) void dn_register_sysctl(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) void dn_unregister_sysctl(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define DN_MENUVER_ACC 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define DN_MENUVER_USR 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define DN_MENUVER_PRX 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define DN_MENUVER_UIC 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) struct sock *dn_find_by_skb(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define DN_ASCBUF_LEN 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) char *dn_addr2asc(__u16, char *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) int dn_destroy_timer(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) int dn_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) unsigned char type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn *addr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) unsigned char *type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) void dn_start_slow_timer(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) void dn_stop_slow_timer(struct sock *sk);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) extern __le16 decnet_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) extern int decnet_debug_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) extern int decnet_time_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) extern int decnet_dn_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) extern int decnet_di_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) extern int decnet_dr_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) extern int decnet_no_fc_max_cwnd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) extern long sysctl_decnet_mem[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) extern int sysctl_decnet_wmem[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) extern int sysctl_decnet_rmem[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #endif /* _NET_DN_H */