summaryrefslogtreecommitdiffstats
path: root/sys/netipx/spx.h
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1995-10-31 00:38:57 +0000
committerjulian <julian@FreeBSD.org>1995-10-31 00:38:57 +0000
commitcf1ec3c62f1ae9494424654545a68e49def27ae2 (patch)
treedb79d7b1212267e0038c43ab8897187d3db32b29 /sys/netipx/spx.h
parent6c6d0d30572d95660c79d1a633f279e4617da151 (diff)
downloadFreeBSD-src-cf1ec3c62f1ae9494424654545a68e49def27ae2.zip
FreeBSD-src-cf1ec3c62f1ae9494424654545a68e49def27ae2.tar.gz
Submitted by: Mike Mitchell
revise prototypes etc. cleanups (probably more coming)
Diffstat (limited to 'sys/netipx/spx.h')
-rw-r--r--sys/netipx/spx.h115
1 files changed, 107 insertions, 8 deletions
diff --git a/sys/netipx/spx.h b/sys/netipx/spx.h
index d40467f..d1b18c1 100644
--- a/sys/netipx/spx.h
+++ b/sys/netipx/spx.h
@@ -83,15 +83,114 @@ struct spx_q {
#define si_ack si_s.spx_ack
#define si_alo si_s.spx_alo
+/*
+ * SPX control block, one per connection
+ */
+struct spxpcb {
+ struct spx_q s_q; /* queue for out-of-order receipt */
+ struct ipxpcb *s_ipxpcb; /* backpointer to internet pcb */
+ u_char s_state;
+ u_char s_flags;
+#define SF_ACKNOW 0x01 /* Ack peer immediately */
+#define SF_DELACK 0x02 /* Ack, but try to delay it */
+#define SF_HI 0x04 /* Show headers on input */
+#define SF_HO 0x08 /* Show headers on output */
+#define SF_PI 0x10 /* Packet (datagram) interface */
+#define SF_WIN 0x20 /* Window info changed */
+#define SF_RXT 0x40 /* Rxt info changed */
+#define SF_RVD 0x80 /* Calling from read usrreq routine */
+ u_short s_mtu; /* Max packet size for this stream */
+/* use sequence fields in headers to store sequence numbers for this
+ connection */
+ struct ipx *s_ipx;
+ struct spxhdr s_shdr; /* prototype header to transmit */
+#define s_cc s_shdr.spx_cc /* connection control (for EM bit) */
+#define s_dt s_shdr.spx_dt /* datastream type */
+#define s_sid s_shdr.spx_sid /* source connection identifier */
+#define s_did s_shdr.spx_did /* destination connection identifier */
+#define s_seq s_shdr.spx_seq /* sequence number */
+#define s_ack s_shdr.spx_ack /* acknowledge number */
+#define s_alo s_shdr.spx_alo /* allocation number */
+#define s_dport s_ipx->ipx_dna.x_port /* where we are sending */
+ struct spxhdr s_rhdr; /* last received header (in effect!)*/
+ u_short s_rack; /* their acknowledge number */
+ u_short s_ralo; /* their allocation number */
+ u_short s_smax; /* highest packet # we have sent */
+ u_short s_snxt; /* which packet to send next */
+
+/* congestion control */
+#define CUNIT 1024 /* scaling for ... */
+ int s_cwnd; /* Congestion-controlled window */
+ /* in packets * CUNIT */
+ short s_swnd; /* == tcp snd_wnd, in packets */
+ short s_smxw; /* == tcp max_sndwnd */
+ /* difference of two spx_seq's can be
+ no bigger than a short */
+ u_short s_swl1; /* == tcp snd_wl1 */
+ u_short s_swl2; /* == tcp snd_wl2 */
+ int s_cwmx; /* max allowable cwnd */
+ int s_ssthresh; /* s_cwnd size threshhold for
+ * slow start exponential-to-
+ * linear switch */
+/* transmit timing stuff
+ * srtt and rttvar are stored as fixed point, for convenience in smoothing.
+ * srtt has 3 bits to the right of the binary point, rttvar has 2.
+ */
+ short s_idle; /* time idle */
+#define SPXT_NTIMERS 4
+ short s_timer[SPXT_NTIMERS]; /* timers */
+ short s_rxtshift; /* log(2) of rexmt exp. backoff */
+ short s_rxtcur; /* current retransmit value */
+ u_short s_rtseq; /* packet being timed */
+ short s_rtt; /* timer for round trips */
+ short s_srtt; /* averaged timer */
+ short s_rttvar; /* variance in round trip time */
+ char s_force; /* which timer expired */
+ char s_dupacks; /* counter to intuit xmt loss */
+
+/* out of band data */
+ char s_oobflags;
+#define SF_SOOB 0x08 /* sending out of band data */
+#define SF_IOOB 0x10 /* receiving out of band data */
+ char s_iobc; /* input characters */
+/* debug stuff */
+ u_short s_want; /* Last candidate for sending */
+ char s_outx; /* exit taken from spx_output */
+ char s_inx; /* exit taken from spx_input */
+ u_short s_flags2; /* more flags for testing */
+#define SF_NEWCALL 0x100 /* for new_recvmsg */
+#define SO_NEWCALL 10 /* for new_recvmsg */
+};
+
+#define ipxtospxpcb(np) ((struct spxpcb *)(np)->ipxp_pcb)
+#define sotospxpcb(so) (ipxtospxpcb(sotoipxpcb(so)))
+
#ifdef KERNEL
-int spx_reass(), spx_output();
-int spx_usrreq(), spx_usrreq_sp(), spx_ctloutput();
-void spx_input(), spx_ctlinput();
-void spx_init(), spx_fasttimo(), spx_slowtimo();
-void spx_quench(), spx_setpersist(), spx_template(), spx_abort();
-struct spxpcb *spx_close(), *spx_usrclosed();
-struct spxpcb *spx_disconnect(), *spx_drop();
-struct spxpcb *spx_timers();
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+int spx_reass __P((struct spxpcb *cb, struct spx *si));
+int spx_output __P((struct spxpcb *cb, struct mbuf *m0));
+int spx_usrreq __P((struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *controlp));
+int spx_usrreq_sp __P((struct socket *so, int req, struct mbuf *m, struct mbuf *nam, struct mbuf *controlp));
+int spx_ctloutput __P((int req, struct socket *so, int level, int name, struct mbuf **value));
+void spx_input __P((struct mbuf *m, struct ipxpcb *ipxp));
+void spx_ctlinput __P((int cmd, caddr_t arg));
+void spx_init __P((void));
+void spx_fasttimo __P((void));
+void spx_slowtimo __P((void));
+void spx_quench __P((struct ipxpcb *ipxp));
+void spx_setpersist __P((struct spxpcb *cb));
+void spx_template __P((struct spxpcb *cb));
+void spx_abort __P((struct ipxpcb *ipxp));
+struct spxpcb *spx_close __P((struct spxpcb *cb));
+struct spxpcb *spx_usrclosed __P((struct spxpcb *cb));
+struct spxpcb *spx_disconnect __P((struct spxpcb *cb));
+struct spxpcb *spx_drop __P((struct spxpcb *cb, int errno));
+struct spxpcb *spx_timers __P((struct spxpcb *cb, int timer));
+__END_DECLS
+
#endif
#endif
OpenPOWER on IntegriCloud