1 /* $NetBSD: in_pcb_hdr.h,v 1.11 2014/05/30 01:39:03 christos Exp $ */ 2 3 /* 4 * Copyright (C) 2003 WIDE Project. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the project nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 /* 33 * Copyright (c) 1982, 1986, 1990, 1993 34 * The Regents of the University of California. All rights reserved. 35 * 36 * Redistribution and use in source and binary forms, with or without 37 * modification, are permitted provided that the following conditions 38 * are met: 39 * 1. Redistributions of source code must retain the above copyright 40 * notice, this list of conditions and the following disclaimer. 41 * 2. Redistributions in binary form must reproduce the above copyright 42 * notice, this list of conditions and the following disclaimer in the 43 * documentation and/or other materials provided with the distribution. 44 * 3. Neither the name of the University nor the names of its contributors 45 * may be used to endorse or promote products derived from this software 46 * without specific prior written permission. 47 * 48 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 51 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 58 * SUCH DAMAGE. 59 * 60 * @(#)in_pcb.h 8.1 (Berkeley) 6/10/93 61 */ 62 63 #ifndef _NETINET_IN_PCB_HDR_H_ 64 #define _NETINET_IN_PCB_HDR_H_ 65 66 #include <sys/queue.h> 67 68 struct inpcbpolicy; 69 70 /* 71 * align it with inpcb and in6pcb! 72 */ 73 struct inpcb_hdr { 74 LIST_ENTRY(inpcb_hdr) inph_hash; 75 LIST_ENTRY(inpcb_hdr) inph_lhash; 76 TAILQ_ENTRY(inpcb_hdr) inph_queue; 77 int inph_af; /* address family - AF_INET */ 78 void * inph_ppcb; /* pointer to per-protocol pcb */ 79 int inph_state; /* bind/connect state */ 80 int inph_portalgo; 81 struct socket *inph_socket; /* back pointer to socket */ 82 struct inpcbtable *inph_table; 83 struct inpcbpolicy *inph_sp; /* security policy */ 84 }; 85 86 #define sotoinpcb_hdr(so) ((struct inpcb_hdr *)(so)->so_pcb) 87 88 LIST_HEAD(inpcbhead, inpcb_hdr); 89 90 struct vestigial_inpcb; 91 92 /* Hooks for vestigial pcb entries. 93 * If vestigial entries exist for a table (TCP only) 94 * the vestigial pointer is set. 95 */ 96 typedef struct vestigial_hooks { 97 /* IPv4 hooks */ 98 void *(*init_ports4)(struct in_addr, u_int, int); 99 int (*next_port4)(void *, struct vestigial_inpcb *); 100 int (*lookup4)(struct in_addr, uint16_t, 101 struct in_addr, uint16_t, 102 struct vestigial_inpcb *); 103 /* IPv6 hooks */ 104 void *(*init_ports6)(const struct in6_addr*, u_int, int); 105 int (*next_port6)(void *, struct vestigial_inpcb *); 106 int (*lookup6)(const struct in6_addr *, uint16_t, 107 const struct in6_addr *, uint16_t, 108 struct vestigial_inpcb *); 109 } vestigial_hooks_t; 110 111 TAILQ_HEAD(inpcbqueue, inpcb_hdr); 112 113 struct inpcbtable { 114 struct inpcbqueue inpt_queue; 115 struct inpcbhead *inpt_porthashtbl; 116 struct inpcbhead *inpt_bindhashtbl; 117 struct inpcbhead *inpt_connecthashtbl; 118 u_long inpt_porthash; 119 u_long inpt_bindhash; 120 u_long inpt_connecthash; 121 u_int16_t inpt_lastport; 122 u_int16_t inpt_lastlow; 123 124 vestigial_hooks_t *vestige; 125 }; 126 #define inpt_lasthi inpt_lastport 127 128 /* states in inp_state: */ 129 #define INP_ATTACHED 0 130 #define INP_BOUND 1 131 #define INP_CONNECTED 2 132 133 #endif /* !_NETINET_IN_PCB_HDR_H_ */ 134