+struct ip; /* forward declaration */
+typedef void in_input_t(struct mbuf *, int);
+/*
+ * Grrr... `netstat' expects to be able to include this file
+ * with KERNEL defined, to get all sorts of interesting structures,
+ * but without having to get all these prototypes. (Well, it's not
+ * really netstat's fault, but this should get fixed when KERNEL gets
+ * changed to _KERNEL.)
+ */
+struct socket;
+typedef int in_output_t(struct mbuf *, struct socket *);
+typedef void in_ctlinput_t(int, struct sockaddr *, struct ip *);
+typedef int in_ctloutput_t(int, struct socket *, int, int, struct mbuf **);
+
+/*
+ * This structure is a pun for `struct protosw'. The difference is that it
+ * has appropriate interprotocol hook prototypes for the Internet family.
+ */
+struct in_protosw {
+ short pr_type; /* socket type used for */
+ struct domain *pr_domain; /* domain protocol a member of */
+ short pr_protocol; /* protocol number */
+ short pr_flags; /* see below */
+/* protocol-protocol hooks */
+ in_input_t *pr_input;
+ in_output_t *pr_output;
+ in_ctlinput_t *pr_ctlinput;
+ in_ctloutput_t *pr_ctloutput;
+/* user-protocol hook */
+ int (*pr_usrreq)(struct socket *, int, struct mbuf *,
+ struct mbuf *, struct mbuf *, struct mbuf *);
+/* utility hooks */
+ void (*pr_init)(void); /* initialization hook */
+ void (*pr_fasttimo)(void); /* fast timeout (200ms) */
+ void (*pr_slowtimo)(void); /* slow timeout (500ms) */
+ void (*pr_drain)(void); /* flush any excess space possible */
+};
+
+