dn.h 7.6 KB

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