The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netinet/in_pcb.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2004 Jeffrey M. Hsu.  All rights reserved.
    3  * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
    4  *
    5  * This code is derived from software contributed to The DragonFly Project
    6  * by Jeffrey M. Hsu.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. Neither the name of The DragonFly Project nor the names of its
   17  *    contributors may be used to endorse or promote products derived
   18  *    from this software without specific, prior written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
   24  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   25  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
   26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   28  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   29  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   30  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  */
   33 
   34 /*
   35  * Copyright (c) 1982, 1986, 1990, 1993
   36  *      The Regents of the University of California.  All rights reserved.
   37  *
   38  * Redistribution and use in source and binary forms, with or without
   39  * modification, are permitted provided that the following conditions
   40  * are met:
   41  * 1. Redistributions of source code must retain the above copyright
   42  *    notice, this list of conditions and the following disclaimer.
   43  * 2. Redistributions in binary form must reproduce the above copyright
   44  *    notice, this list of conditions and the following disclaimer in the
   45  *    documentation and/or other materials provided with the distribution.
   46  * 3. All advertising materials mentioning features or use of this software
   47  *    must display the following acknowledgement:
   48  *      This product includes software developed by the University of
   49  *      California, Berkeley and its contributors.
   50  * 4. Neither the name of the University nor the names of its contributors
   51  *    may be used to endorse or promote products derived from this software
   52  *    without specific prior written permission.
   53  *
   54  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   55  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   56  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   57  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   58  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   59  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   60  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   61  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   62  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   63  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   64  * SUCH DAMAGE.
   65  *
   66  *      @(#)in_pcb.h    8.1 (Berkeley) 6/10/93
   67  * $FreeBSD: src/sys/netinet/in_pcb.h,v 1.32.2.7 2003/01/24 05:11:34 sam Exp $
   68  * $DragonFly: src/sys/netinet/in_pcb.h,v 1.24 2008/09/04 09:08:22 hasso Exp $
   69  */
   70 
   71 #ifndef _NETINET_IN_PCB_H_
   72 #define _NETINET_IN_PCB_H_
   73 
   74 #ifndef _SYS_QUEUE_H_
   75 #include <sys/queue.h>
   76 #endif
   77 #ifndef _SYS_SYSCTL_H_
   78 #include <sys/sysctl.h>
   79 #endif
   80 #ifndef _NETINET_IN_H_
   81 #include <netinet/in.h>
   82 #endif
   83 #ifndef _NET_ROUTE_H_
   84 #include <net/route.h>
   85 #endif
   86 
   87 #define in6pcb          inpcb   /* for KAME src sync over BSD*'s */
   88 #define in6p_sp         inp_sp  /* for KAME src sync over BSD*'s */
   89 struct inpcbpolicy;
   90 
   91 /*
   92  * Common structure pcb for internet protocol implementation.
   93  * Here are stored pointers to local and foreign host table
   94  * entries, local and foreign socket numbers, and pointers
   95  * up (to a socket structure) and down (to a protocol-specific)
   96  * control block.
   97  */
   98 LIST_HEAD(inpcbhead, inpcb);
   99 LIST_HEAD(inpcbporthead, inpcbport);
  100 typedef u_quad_t        inp_gen_t;
  101 
  102 struct inpcontainer {
  103         struct inpcb                    *ic_inp;
  104         LIST_ENTRY(inpcontainer)        ic_list;
  105 };
  106 LIST_HEAD(inpcontainerhead, inpcontainer);
  107 
  108 /*
  109  * PCB with AF_INET6 null bind'ed laddr can receive AF_INET input packet.
  110  * So, AF_INET6 null laddr is also used as AF_INET null laddr,
  111  * by utilize following structure. (At last, same as INRIA)
  112  */
  113 struct in_addr_4in6 {
  114         u_int32_t       ia46_pad32[3];
  115         struct  in_addr ia46_addr4;
  116 };
  117 
  118 union in_dependaddr {
  119         struct in_addr_4in6 id46_addr;
  120         struct in6_addr id6_addr;
  121 };
  122 
  123 /*
  124  * NOTE: ipv6 addrs should be 64-bit aligned, per RFC 2553.
  125  * in_conninfo has some extra padding to accomplish this.
  126  */
  127 struct in_endpoints {
  128         u_int16_t       ie_fport;               /* foreign port */
  129         u_int16_t       ie_lport;               /* local port */
  130         /* protocol dependent part, local and foreign addr */
  131         union in_dependaddr ie_dependfaddr;     /* foreign host table entry */
  132         union in_dependaddr ie_dependladdr;     /* local host table entry */
  133 #define ie_faddr        ie_dependfaddr.id46_addr.ia46_addr4
  134 #define ie_laddr        ie_dependladdr.id46_addr.ia46_addr4
  135 #define ie6_faddr       ie_dependfaddr.id6_addr
  136 #define ie6_laddr       ie_dependladdr.id6_addr
  137 };
  138 
  139 struct inp_localgroup {
  140         LIST_ENTRY(inp_localgroup) il_list;
  141         uint16_t        il_lport;
  142         u_char          il_vflag;
  143         u_char          il_pad;
  144         uint32_t        il_factor;
  145         union in_dependaddr il_dependladdr;
  146 #define il_laddr        il_dependladdr.id46_addr.ia46_addr4
  147 #define il6_laddr       il_dependladdr.id6_addr
  148         int             il_inpsiz;      /* size of il_inp[] */
  149         int             il_inpcnt;      /* # of elem in il_inp[] */
  150         struct inpcb    *il_inp[];
  151 };
  152 LIST_HEAD(inp_localgrphead, inp_localgroup);
  153 
  154 /*
  155  * XXX
  156  * At some point struct route should possibly change to:
  157  *   struct rtentry *rt
  158  *   struct in_endpoints *ie;
  159  */
  160 struct in_conninfo {
  161         u_int8_t        inc_flags;
  162         u_int8_t        inc_len;
  163         u_int16_t       inc_pad;        /* XXX alignment for in_endpoints */
  164         /* protocol dependent part; cached route */
  165         struct  in_endpoints inc_ie;
  166         union {
  167                 /* placeholder for routing entry */
  168                 struct  route inc4_route;
  169                 struct  route_in6 inc6_route;
  170         } inc_dependroute;
  171 };
  172 #define inc_isipv6      inc_flags       /* temp compatibility */
  173 #define inc_fport       inc_ie.ie_fport
  174 #define inc_lport       inc_ie.ie_lport
  175 #define inc_faddr       inc_ie.ie_faddr
  176 #define inc_laddr       inc_ie.ie_laddr
  177 #define inc_route       inc_dependroute.inc4_route
  178 #define inc6_faddr      inc_ie.ie6_faddr
  179 #define inc6_laddr      inc_ie.ie6_laddr
  180 #define inc6_route      inc_dependroute.inc6_route
  181 
  182 /*
  183  * NB: the zone allocator is type-stable EXCEPT FOR THE FIRST TWO LONGS
  184  * of the structure.  Therefore, it is important that the members in
  185  * that position not contain any information which is required to be
  186  * stable.
  187  */
  188 struct  icmp6_filter;
  189 
  190 struct inpcb {
  191         LIST_ENTRY(inpcb) inp_hash; /* hash list */
  192         LIST_ENTRY(inpcb) inp_list; /* list for all PCBs of this proto */
  193         u_int32_t       inp_flow;
  194 
  195         /* local and foreign ports, local and foreign addr */
  196         struct  in_conninfo inp_inc;
  197 
  198         void    *inp_ppcb;              /* pointer to per-protocol pcb */
  199         struct  inpcbinfo *inp_pcbinfo; /* PCB list info */
  200         struct  inpcbinfo *inp_cpcbinfo;/* back pointer for connection table */
  201         struct  socket *inp_socket;     /* back pointer to socket */
  202                                         /* list for this PCB's local port */
  203         int     inp_flags;              /* generic IP/datagram flags */
  204 
  205         struct  inpcbpolicy *inp_sp; /* for IPSEC */
  206         u_char  inp_vflag;
  207 #define INP_IPV4        0x1
  208 #define INP_IPV6        0x2
  209         u_char  inp_ip_ttl;             /* time to live proto */
  210         u_char  inp_ip_p;               /* protocol proto */
  211         u_char  inp_ip_minttl;          /* minimum TTL or drop */
  212 
  213         /* protocol dependent part; options */
  214         struct {
  215                 u_char  inp4_ip_tos;            /* type of service proto */
  216                 struct  mbuf *inp4_options;     /* IP options */
  217                 struct  ip_moptions *inp4_moptions; /* IP multicast options */
  218         } inp_depend4;
  219 #define inp_fport       inp_inc.inc_fport
  220 #define inp_lport       inp_inc.inc_lport
  221 #define inp_faddr       inp_inc.inc_faddr
  222 #define inp_laddr       inp_inc.inc_laddr
  223 #define inp_route       inp_inc.inc_route
  224 #define inp_ip_tos      inp_depend4.inp4_ip_tos
  225 #define inp_options     inp_depend4.inp4_options
  226 #define inp_moptions    inp_depend4.inp4_moptions
  227         struct {
  228                 /* IP options */
  229                 struct  mbuf *inp6_options;
  230                 /* IP6 options for outgoing packets */
  231                 struct  ip6_pktopts *inp6_outputopts;
  232                 /* IP multicast options */
  233                 struct  ip6_moptions *inp6_moptions;
  234                 /* ICMPv6 code type filter */
  235                 struct  icmp6_filter *inp6_icmp6filt;
  236                 /* IPV6_CHECKSUM setsockopt */
  237                 int     inp6_cksum;
  238                 u_short inp6_ifindex;
  239                 short   inp6_hops;
  240                 u_int8_t        inp6_hlim;
  241         } inp_depend6;
  242         LIST_ENTRY(inpcb) inp_portlist;
  243         struct  inpcbport *inp_phd;     /* head of this list */
  244         inp_gen_t       inp_gencnt;     /* generation count of this instance */
  245 #define in6p_faddr      inp_inc.inc6_faddr
  246 #define in6p_laddr      inp_inc.inc6_laddr
  247 #define in6p_route      inp_inc.inc6_route
  248 #define in6p_ip6_hlim   inp_depend6.inp6_hlim
  249 #define in6p_hops       inp_depend6.inp6_hops   /* default hop limit */
  250 #define in6p_ip6_nxt    inp_ip_p
  251 #define in6p_flowinfo   inp_flow
  252 #define in6p_vflag      inp_vflag
  253 #define in6p_options    inp_depend6.inp6_options
  254 #define in6p_outputopts inp_depend6.inp6_outputopts
  255 #define in6p_moptions   inp_depend6.inp6_moptions
  256 #define in6p_icmp6filt  inp_depend6.inp6_icmp6filt
  257 #define in6p_cksum      inp_depend6.inp6_cksum
  258 #define inp6_ifindex    inp_depend6.inp6_ifindex
  259 #define in6p_flags      inp_flags  /* for KAME src sync over BSD*'s */
  260 #define in6p_socket     inp_socket  /* for KAME src sync over BSD*'s */
  261 #define in6p_lport      inp_lport  /* for KAME src sync over BSD*'s */
  262 #define in6p_fport      inp_fport  /* for KAME src sync over BSD*'s */
  263 #define in6p_ppcb       inp_ppcb  /* for KAME src sync over BSD*'s */
  264 
  265         void    *inp_pf_sk;
  266 };
  267 /*
  268  * The range of the generation count, as used in this implementation,
  269  * is 9e19.  We would have to create 300 billion connections per
  270  * second for this number to roll over in a year.  This seems sufficiently
  271  * unlikely that we simply don't concern ourselves with that possibility.
  272  */
  273 
  274 /*
  275  * Interface exported to userland by various protocols which use
  276  * inpcbs.  Hack alert -- only define if struct xsocket is in scope.
  277  */
  278 #ifdef _SYS_SOCKETVAR_H_
  279 struct  xinpcb {
  280         size_t  xi_len;         /* length of this structure */
  281         struct  inpcb xi_inp;
  282         struct  xsocket xi_socket;
  283         u_quad_t        xi_alignment_hack;
  284 };
  285 #endif /* _SYS_SOCKETVAR_H_ */
  286 
  287 struct inpcbport {
  288         LIST_ENTRY(inpcbport) phd_hash;
  289         struct inpcbhead phd_pcblist;
  290         u_short phd_port;
  291 };
  292 
  293 struct lwkt_token;
  294 
  295 struct inpcbinfo {              /* XXX documentation, prefixes */
  296         struct  inpcbhead *hashbase;
  297         u_long  hashmask;
  298         struct  inpcbporthead *porthashbase;
  299         u_long  porthashmask;
  300         struct  lwkt_token *porttoken;  /* if porthashbase is shared */
  301         struct  inpcbport *portsave;    /* port allocation cache */
  302         struct  inpcontainerhead *wildcardhashbase;
  303         u_long  wildcardhashmask;
  304         struct  inp_localgrphead *localgrphashbase;
  305         u_long  localgrphashmask;
  306         struct  inpcbhead pcblisthead;  /* head of queue of active pcb's */
  307         u_short lastport;
  308         u_short lastlow;
  309         u_short lasthi;
  310         size_t  ipi_size;       /* allocation size for pcbs */
  311         u_int   ipi_count;      /* number of pcbs in this list */
  312         u_quad_t ipi_gencnt;    /* current generation count */
  313         int     cpu;            /* related protocol thread cpu or -1 */
  314 };
  315 
  316 
  317 #define INP_PCBCONNHASH(faddr, fport, laddr, lport, mask)               \
  318     (((faddr) ^ ((faddr) >> 16) ^ (laddr) ^ ntohs((lport) ^ (fport))) & (mask))
  319 
  320 #define INP_PCBPORTHASH(lport, mask)            (ntohs(lport) & (mask))
  321 
  322 #define INP_PCBWILDCARDHASH(lport, mask)        (ntohs(lport) & (mask))
  323 
  324 #define INP_PCBLOCALGRPHASH(lport, mask)        (ntohs(lport) & (mask))
  325 
  326 /* flags in inp_flags: */
  327 #define INP_RECVOPTS            0x01    /* receive incoming IP options */
  328 #define INP_RECVRETOPTS         0x02    /* receive IP options for reply */
  329 #define INP_RECVDSTADDR         0x04    /* receive IP dst address */
  330 #define INP_HDRINCL             0x08    /* user supplies entire IP header */
  331 #define INP_HIGHPORT            0x10    /* user wants "high" port binding */
  332 #define INP_LOWPORT             0x20    /* user wants "low" port binding */
  333 #define INP_ANONPORT            0x40    /* port chosen for user */
  334 #define INP_RECVIF              0x80    /* receive incoming interface */
  335 #define INP_MTUDISC             0x100   /* user can do MTU discovery */
  336 #define INP_FAITH               0x200   /* accept FAITH'ed connections */
  337 #define INP_WILDCARD            0x400   /* wildcard match */
  338 #define INP_WILDCARD_MP         0x800   /* distributed wildcard match */
  339 #define INP_CONNECTED           0x1000  /* exact match */
  340 #define INP_WASBOUND_NOTANY     0x2000  /* was bound to non-null laddr */
  341 #define INP_PLACEMARKER         0x4000  /* skip this pcb, its a placemarker */
  342 
  343 #define IN6P_IPV6_V6ONLY        0x008000 /* restrict AF_INET6 socket for v6 */
  344 
  345 #define IN6P_PKTINFO            0x010000 /* receive IP6 dst and I/F */
  346 #define IN6P_HOPLIMIT           0x020000 /* receive hoplimit */
  347 #define IN6P_HOPOPTS            0x040000 /* receive hop-by-hop options */
  348 #define IN6P_DSTOPTS            0x080000 /* receive dst options after rthdr */
  349 #define IN6P_RTHDR              0x100000 /* receive routing header */
  350 #define IN6P_RTHDRDSTOPTS       0x200000 /* receive dstoptions before rthdr */
  351 #define IN6P_AUTOFLOWLABEL      0x800000 /* attach flowlabel automatically */
  352 /* 
  353  * RFC3542 Definition 
  354  */
  355 #define IN6P_TCLASS             0x400000 /* receive traffic class value */
  356 #define IN6P_RFC2292            0x40000000 /* used RFC2292 API on the socket */
  357 #define IN6P_MTU                0x80000000 /* receive path MTU */
  358 
  359 #define INP_RECVTTL             0x80000000 /* receive incoming IP TTL */
  360 
  361 #define INP_CONTROLOPTS         (INP_RECVOPTS|INP_RECVRETOPTS|INP_RECVDSTADDR|\
  362                                  INP_RECVIF|INP_RECVTTL|\
  363                                  IN6P_PKTINFO|IN6P_HOPLIMIT|IN6P_HOPOPTS|\
  364                                  IN6P_DSTOPTS|IN6P_RTHDR|IN6P_RTHDRDSTOPTS|\
  365                                  IN6P_TCLASS|IN6P_AUTOFLOWLABEL|IN6P_RFC2292|\
  366                                  IN6P_MTU)
  367                                  
  368 #define INP_UNMAPPABLEOPTS      (IN6P_HOPOPTS|IN6P_DSTOPTS|IN6P_RTHDR|\
  369                                  IN6P_TCLASS|IN6P_AUTOFLOWLABEL)
  370 
  371  /* for KAME src sync over BSD*'s */
  372 #define IN6P_HIGHPORT           INP_HIGHPORT
  373 #define IN6P_LOWPORT            INP_LOWPORT
  374 #define IN6P_ANONPORT           INP_ANONPORT
  375 #define IN6P_RECVIF             INP_RECVIF
  376 #define IN6P_MTUDISC            INP_MTUDISC
  377 #define IN6P_FAITH              INP_FAITH
  378 #define IN6P_CONTROLOPTS INP_CONTROLOPTS
  379         /*
  380          * socket AF version is {newer than,or include}
  381          * actual datagram AF version
  382          */
  383 
  384 #define INPLOOKUP_WILDCARD      1
  385 #define sotoinpcb(so)   ((struct inpcb *)(so)->so_pcb)
  386 #define sotoin6pcb(so)  sotoinpcb(so) /* for KAME src sync over BSD*'s */
  387 
  388 /* macros for handling bitmap of ports not to allocate dynamically */
  389 #define DP_MAPBITS      (sizeof(u_int32_t) * NBBY)
  390 #define DP_MAPSIZE      (howmany(65536, DP_MAPBITS))
  391 #define DP_SET(m, p)    ((m)[(p) / DP_MAPBITS] |= (1 << ((p) % DP_MAPBITS)))
  392 #define DP_CLR(m, p)    ((m)[(p) / DP_MAPBITS] &= ~(1 << ((p) % DP_MAPBITS)))
  393 #define DP_ISSET(m, p)  ((m)[(p) / DP_MAPBITS] & (1 << ((p) % DP_MAPBITS)))
  394 
  395 /* default values for baddynamicports [see ip_init()] */
  396 #define DEFBADDYNAMICPORTS_TCP  { \
  397         587, 749, 750, 751, 871, 2049, \
  398         6000, 6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 6009, 6010, \
  399         0 }
  400 #define DEFBADDYNAMICPORTS_UDP  { 623, 664, 749, 750, 751, 2049, 0 }
  401 
  402 struct baddynamicports {
  403         u_int32_t tcp[DP_MAPSIZE];
  404         u_int32_t udp[DP_MAPSIZE];
  405 };
  406 
  407 
  408 #define INP_SOCKAF(so) so->so_proto->pr_domain->dom_family
  409 
  410 #define INP_CHECK_SOCKAF(so, af)        (INP_SOCKAF(so) == af)
  411 
  412 #ifdef _KERNEL
  413 extern int      ipport_lowfirstauto;
  414 extern int      ipport_lowlastauto;
  415 extern int      ipport_firstauto;
  416 extern int      ipport_lastauto;
  417 extern int      ipport_hifirstauto;
  418 extern int      ipport_hilastauto;
  419 
  420 union netmsg;
  421 struct xinpcb;
  422 
  423 void    in_pcbpurgeif0 (struct inpcb *, struct ifnet *);
  424 void    in_losing (struct inpcb *);
  425 void    in_rtchange (struct inpcb *, int);
  426 void    in_pcbinfo_init (struct inpcbinfo *);
  427 int     in_pcballoc (struct socket *, struct inpcbinfo *);
  428 void    in_pcbunlink (struct inpcb *, struct inpcbinfo *);
  429 void    in_pcblink (struct inpcb *, struct inpcbinfo *);
  430 int     in_pcbbind (struct inpcb *, struct sockaddr *, struct thread *);
  431 int     in_pcbconn_bind(struct inpcb *, const struct sockaddr *,
  432             struct thread *);
  433 int     in_pcbconnect (struct inpcb *, struct sockaddr *, struct thread *);
  434 void    in_pcbdetach (struct inpcb *);
  435 void    in_pcbdisconnect (struct inpcb *);
  436 void    in_pcbinswildcardhash(struct inpcb *inp);
  437 void    in_pcbinswildcardhash_oncpu(struct inpcb *, struct inpcbinfo *);
  438 void    in_pcbinsconnhash(struct inpcb *inp);
  439 int     in_pcbinsporthash (struct inpcb *);
  440 int     in_pcbladdr (struct inpcb *, struct sockaddr *,
  441             struct sockaddr_in **, struct thread *);
  442 int     in_pcbladdr_find (struct inpcb *, struct sockaddr *,
  443             struct sockaddr_in **, struct thread *, int);
  444 struct inpcb *
  445         in_pcblookup_local (struct inpcbinfo *, struct in_addr, u_int, int,
  446                             struct ucred *);
  447 struct inpcb *
  448         in_pcblookup_hash (struct inpcbinfo *,
  449                                struct in_addr, u_int, struct in_addr, u_int,
  450                                int, struct ifnet *);
  451 struct inpcb *
  452         in_pcblookup_pkthash (struct inpcbinfo *,
  453                                struct in_addr, u_int, struct in_addr, u_int,
  454                                int, struct ifnet *, const struct mbuf *);
  455 void    in_pcbnotifyall (struct inpcbhead *, struct in_addr,
  456             int, void (*)(struct inpcb *, int));
  457 int     in_setpeeraddr (struct socket *so, struct sockaddr **nam);
  458 void    in_setpeeraddr_dispatch(union netmsg *);
  459 int     in_setsockaddr (struct socket *so, struct sockaddr **nam);
  460 void    in_setsockaddr_dispatch(netmsg_t msg);
  461 int     in_baddynamic(u_int16_t, u_int16_t);
  462 void    in_pcbremwildcardhash(struct inpcb *inp);
  463 void    in_pcbremwildcardhash_oncpu(struct inpcb *, struct inpcbinfo *);
  464 void    in_pcbremconnhash(struct inpcb *inp);
  465 void    in_pcbremlists (struct inpcb *inp);
  466 int     prison_xinpcb (struct thread *p, struct inpcb *inp);
  467 void    in_savefaddr (struct socket *so, const struct sockaddr *faddr);
  468 struct inpcb *
  469         in_pcblocalgroup_last(const struct inpcbinfo *, const struct inpcb *);
  470 
  471 int     in_pcblist_global(SYSCTL_HANDLER_ARGS);
  472 int     in_pcblist_global_nomarker(SYSCTL_HANDLER_ARGS,
  473             struct xinpcb **, int *);
  474 #endif /* _KERNEL */
  475 
  476 #endif /* !_NETINET_IN_PCB_H_ */

Cache object: aef8d141344bab0a1f8875149691f53b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.