+#include "../net/in_pcb.h"
+
+/*
+ * Routines to manage internet protocol control blocks.
+ *
+ * At PRU_ATTACH time a protocol control block is allocated in
+ * in_pcballoc() and inserted on a doubly-linked list of such blocks
+ * for the protocol. A port address is either requested (and verified
+ * to not be in use) or assigned at this time. We also allocate
+ * space in the socket sockbuf structures here, although this is
+ * not a clearly correct place to put this function.
+ *
+ * A connectionless protocol will have its protocol control block
+ * removed at PRU_DETACH time, when the socket will be freed (freeing
+ * the space reserved) and the block will be removed from the list of
+ * blocks for its protocol.
+ *
+ * A connection-based protocol may be connected to a remote peer at
+ * PRU_CONNECT time through the routine in_pcbconnect(). In the normal
+ * case a PRU_DISCONNECT occurs causing a in_pcbdisconnect().
+ * It is also possible that higher-level routines will opt out of the
+ * relationship with the connection before the connection shut down
+ * is complete. This often occurs in protocols like TCP where we must
+ * hold on to the protocol control block for a unreasonably long time
+ * after the connection is used up to avoid races in later connection
+ * establishment. To handle this we allow higher-level routines to
+ * disassociate themselves from the socket, marking it SS_USERGONE while
+ * the disconnect is in progress. We notice that this has happened
+ * when the disconnect is complete, and perform the PRU_DETACH operation,
+ * freeing the socket.
+ *
+ * TODO:
+ * use hashing
+ */
+struct in_addr zeroin_addr;