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