]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet/in_pcb.h
xnu-517.12.7.tar.gz
[apple/xnu.git] / bsd / netinet / in_pcb.h
index 0dc2ab78ac2a5ef8165eaa419f06c37b98da041f..a32277efca5c269bb76184ef8d98fe36a9569f88 100644 (file)
  * SUCH DAMAGE.
  *
  *     @(#)in_pcb.h    8.1 (Berkeley) 6/10/93
+ * $FreeBSD: src/sys/netinet/in_pcb.h,v 1.32.2.4 2001/08/13 16:26:17 ume Exp $
  */
 
 #ifndef _NETINET_IN_PCB_H_
 #define _NETINET_IN_PCB_H_
+#include <sys/appleapiopts.h>
 
 #include <sys/queue.h>
-#if IPSEC
-#include <netinet6/ipsec.h>
-#endif
 
-#define in6pcb         inpcb   /* for KAME src sync over BSD*'s */
-#define in6p_sp                inp_sp  /* for KAME src sync over BSD*'s */
+
+#include <netinet6/ipsec.h> /* for IPSEC */
+
+#ifdef __APPLE_API_PRIVATE
+
+#define        in6pcb          inpcb   /* for KAME src sync over BSD*'s */
+#define        in6p_sp         inp_sp  /* for KAME src sync over BSD*'s */
 
 /*
  * Common structure pcb for internet protocol implementation.
@@ -82,8 +86,8 @@ typedef       u_quad_t        inp_gen_t;
  * by utilize following structure. (At last, same as INRIA)
  */
 struct in_addr_4in6 {
-       u_int32_t        ia46_pad32[3];
-       struct in_addr   ia46_addr4;
+       u_int32_t       ia46_pad32[3];
+       struct  in_addr ia46_addr4;
 };
 
 /*
@@ -92,12 +96,12 @@ struct in_addr_4in6 {
  * that position not contain any information which is required to be
  * stable.
  */
-struct icmp6_filter;
+struct icmp6_filter;
 
 struct inpcb {
        LIST_ENTRY(inpcb) inp_hash;     /* hash list */
-       struct  in_addr inp_faddr;      /* foreign host table entry */
-       struct  in_addr inp_laddr;      /* local host table entry */
+       struct  in_addr reserved1;      /* APPLE reserved: inp_faddr defined in protcol indep. part */
+       struct  in_addr reserved2; /* APPLE reserved */
        u_short inp_fport;              /* foreign port */
        u_short inp_lport;              /* local port */
        LIST_ENTRY(inpcb) inp_list;     /* list for all PCBs of this proto */
@@ -121,18 +125,18 @@ struct inpcb {
        /* protocol dependent part */
        union {
                /* foreign host table entry */
-               struct in_addr_4in6 inp46_foreign;
-               struct in6_addr inp6_foreign;
+               struct  in_addr_4in6 inp46_foreign;
+               struct  in6_addr inp6_foreign;
        } inp_dependfaddr;
        union {
                /* local host table entry */
-               struct in_addr_4in6 inp46_local;
-               struct in6_addr inp6_local;
+               struct  in_addr_4in6 inp46_local;
+               struct  in6_addr inp6_local;
        } inp_dependladdr;
        union {
                /* placeholder for routing entry */
-               struct route inp4_route;
-               struct route_in6 inp6_route;
+               struct  route inp4_route;
+               struct  route_in6 inp6_route;
        } inp_dependroute;
        struct {
                /* type of service proto */
@@ -142,54 +146,55 @@ struct inpcb {
                /* IP multicast options */
                struct ip_moptions *inp4_moptions;
        } inp_depend4;
-#define inp_faddr      inp_dependfaddr.inp46_foreign.ia46_addr4
-#define inp_laddr      inp_dependladdr.inp46_local.ia46_addr4
-#define inp_route      inp_dependroute.inp4_route
-#define inp_ip_tos     inp_depend4.inp4_ip_tos
-#define inp_options    inp_depend4.inp4_options
-#define inp_moptions   inp_depend4.inp4_moptions
+#define        inp_faddr       inp_dependfaddr.inp46_foreign.ia46_addr4
+#define        inp_laddr       inp_dependladdr.inp46_local.ia46_addr4
+#define        inp_route       inp_dependroute.inp4_route
+#define        inp_ip_tos      inp_depend4.inp4_ip_tos
+#define        inp_options     inp_depend4.inp4_options
+#define        inp_moptions    inp_depend4.inp4_moptions
        struct {
                /* IP options */
                struct mbuf *inp6_options;
-               /* IP6 options for incoming packets */
-               struct ip6_recvpktopts *inp6_inputopts;
+               u_int8_t        inp6_hlim;
+               u_int8_t        unused_uint8_1;
+               ushort  unused_uint16_1;
                /* IP6 options for outgoing packets */
-               struct ip6_pktopts *inp6_outputopts;
+               struct  ip6_pktopts *inp6_outputopts;
                /* IP multicast options */
-               struct ip6_moptions *inp6_moptions;
+               struct  ip6_moptions *inp6_moptions;
                /* ICMPv6 code type filter */
-               struct icmp6_filter *inp6_icmp6filt;
+               struct  icmp6_filter *inp6_icmp6filt;
                /* IPV6_CHECKSUM setsockopt */
-               int inp6_cksum;
+               int     inp6_cksum;
                u_short inp6_ifindex;
                short   inp6_hops;
        } inp_depend6;
-#define in6p_faddr     inp_dependfaddr.inp6_foreign
-#define in6p_laddr     inp_dependladdr.inp6_local
-#define in6p_route     inp_dependroute.inp6_route
-#define in6p_hops      inp_depend6.inp6_hops   /* default hop limit */
-#define in6p_ip6_nxt   inp_ip_p
-#define in6p_flowinfo  inp_flow
-#define in6p_vflag     inp_vflag
-#define in6p_options   inp_depend6.inp6_options
-#define in6p_inputopts inp_depend6.inp6_inputopts
-#define in6p_outputopts        inp_depend6.inp6_outputopts
-#define in6p_moptions  inp_depend6.inp6_moptions
-#define in6p_icmp6filt inp_depend6.inp6_icmp6filt
-#define in6p_cksum     inp_depend6.inp6_cksum
-#define inp6_ifindex   inp_depend6.inp6_ifindex
-#define in6p_flags     inp_flags  /* for KAME src sync over BSD*'s */
-#define in6p_socket    inp_socket  /* for KAME src sync over BSD*'s */
-#define in6p_lport     inp_lport  /* for KAME src sync over BSD*'s */
-#define in6p_fport     inp_fport  /* for KAME src sync over BSD*'s */
-#define in6p_ppcb      inp_ppcb  /* for KAME src sync over BSD*'s */
-#if IPSEC
-       struct inpcbpolicy *inp_sp;
-#endif
+#define        in6p_faddr      inp_dependfaddr.inp6_foreign
+#define        in6p_laddr      inp_dependladdr.inp6_local
+#define        in6p_route      inp_dependroute.inp6_route
+#define        in6p_ip6_hlim   inp_depend6.inp6_hlim
+#define        in6p_hops       inp_depend6.inp6_hops   /* default hop limit */
+#define        in6p_ip6_nxt    inp_ip_p
+#define        in6p_flowinfo   inp_flow
+#define        in6p_vflag      inp_vflag
+#define        in6p_options    inp_depend6.inp6_options
+#define        in6p_outputopts inp_depend6.inp6_outputopts
+#define        in6p_moptions   inp_depend6.inp6_moptions
+#define        in6p_icmp6filt  inp_depend6.inp6_icmp6filt
+#define        in6p_cksum      inp_depend6.inp6_cksum
+#define        inp6_ifindex    inp_depend6.inp6_ifindex
+#define        in6p_flags      inp_flags  /* for KAME src sync over BSD*'s */
+#define        in6p_socket     inp_socket  /* for KAME src sync over BSD*'s */
+#define        in6p_lport      inp_lport  /* for KAME src sync over BSD*'s */
+#define        in6p_fport      inp_fport  /* for KAME src sync over BSD*'s */
+#define        in6p_ppcb       inp_ppcb  /* for KAME src sync over BSD*'s */
+
        int     hash_element;           /* Array index of pcb's hash list    */
        caddr_t inp_saved_ppcb;         /* place to save pointer while cached */
-       u_long  reserved[4];
+       struct inpcbpolicy *inp_sp;
+       u_long  reserved[3];            /* For future use */
 };
+#endif /* __APPLE_API_PRIVATE */
 /*
  * The range of the generation count, as used in this implementation,
  * is 9e19.  We would have to create 300 billion connections per
@@ -217,6 +222,7 @@ struct      xinpgen {
 };
 #endif /* _SYS_SOCKETVAR_H_ */
 
+#ifdef __APPLE_API_PRIVATE
 struct inpcbport {
        LIST_ENTRY(inpcbport) phd_hash;
        struct inpcbhead phd_pcblist;
@@ -225,7 +231,9 @@ struct inpcbport {
 
 struct inpcbinfo {             /* XXX documentation, prefixes */
        struct  inpcbhead *hashbase;
+#ifdef __APPLE__
        u_long  hashsize; /* in elements */
+#endif
        u_long  hashmask;
        struct  inpcbporthead *porthashbase;
        u_long  porthashmask;
@@ -236,10 +244,12 @@ struct inpcbinfo {                /* XXX documentation, prefixes */
        void   *ipi_zone; /* zone to allocate pcbs from */
        u_int   ipi_count;      /* number of pcbs in this list */
        u_quad_t ipi_gencnt;    /* current generation count */
-     u_char   all_owners;
-     struct    socket nat_dummy_socket;
+#ifdef __APPLE__
+       u_char   all_owners;
+       struct  socket nat_dummy_socket;
        struct  inpcb *last_pcb;
-     caddr_t  dummy_cb;
+       caddr_t  dummy_cb;
+#endif
 };
 
 #define INP_PCBHASH(faddr, lport, fport, mask) \
@@ -257,22 +267,32 @@ struct inpcbinfo {                /* XXX documentation, prefixes */
 #define        INP_ANONPORT            0x40    /* port chosen for user */
 #define        INP_RECVIF              0x80    /* receive incoming interface */
 #define        INP_MTUDISC             0x100   /* user can do MTU discovery */
-#define        INP_STRIPHDR            0x200   /* drop receive of raw IP header */
-#define        INP_FAITH                       0x400   /* accept FAITH'ed connections */
-#define        IN6P_PKTINFO            0x010000 /* receive IP6 dst and I/F */
-#define        IN6P_HOPLIMIT           0x020000 /* receive hoplimit */
-#define        IN6P_HOPOPTS            0x040000 /* receive hop-by-hop options */
-#define        IN6P_DSTOPTS            0x080000 /* receive dst options after rthdr */
-#define        IN6P_RTHDR              0x100000 /* receive routing header */
-#define        IN6P_RTHDRDSTOPTS       0x200000 /* receive dstoptions before rthdr */
-#define        IN6P_BINDV6ONLY 0x10000000 /* do not grab IPv4 traffic */
-#define        IN6P_MINMTU             0x20000000 /* use minimum MTU */
+#ifdef __APPLE__
+#define INP_STRIPHDR   0x200   /* Strip headers in raw_ip, for OT support */
+#endif
+#define  INP_FAITH                     0x400   /* accept FAITH'ed connections */
+#define  INP_INADDR_ANY        0x800   /* local address wasn't specified */
+
+#define INP_RECVTTL                    0x1000
+
+#define IN6P_IPV6_V6ONLY       0x008000 /* restrict AF_INET6 socket for v6 */
+
+#define        IN6P_PKTINFO            0x010000 /* receive IP6 dst and I/F */
+#define        IN6P_HOPLIMIT           0x020000 /* receive hoplimit */
+#define        IN6P_HOPOPTS            0x040000 /* receive hop-by-hop options */
+#define        IN6P_DSTOPTS            0x080000 /* receive dst options after rthdr */
+#define        IN6P_RTHDR              0x100000 /* receive routing header */
+#define        IN6P_RTHDRDSTOPTS       0x200000 /* receive dstoptions before rthdr */
+#define IN6P_AUTOFLOWLABEL     0x800000 /* attach flowlabel automatically */
+#define        IN6P_BINDV6ONLY         0x10000000 /* do not grab IPv4 traffic */
 
 #define        INP_CONTROLOPTS         (INP_RECVOPTS|INP_RECVRETOPTS|INP_RECVDSTADDR|\
                                        INP_RECVIF|\
                                 IN6P_PKTINFO|IN6P_HOPLIMIT|IN6P_HOPOPTS|\
-                                IN6P_DSTOPTS|IN6P_RTHDR|IN6P_RTHDRDSTOPTS)
-#define INP_UNMAPPABLEOPTS     (IN6P_HOPOPTS|IN6P_DSTOPTS|IN6P_RTHDR)
+                                IN6P_DSTOPTS|IN6P_RTHDR|IN6P_RTHDRDSTOPTS|\
+                                IN6P_AUTOFLOWLABEL|INP_RECVTTL)
+#define        INP_UNMAPPABLEOPTS      (IN6P_HOPOPTS|IN6P_DSTOPTS|IN6P_RTHDR|\
+                                IN6P_AUTOFLOWLABEL)
 
  /* for KAME src sync over BSD*'s */
 #define        IN6P_HIGHPORT           INP_HIGHPORT
@@ -281,35 +301,38 @@ struct inpcbinfo {                /* XXX documentation, prefixes */
 #define        IN6P_RECVIF             INP_RECVIF
 #define        IN6P_MTUDISC            INP_MTUDISC
 #define        IN6P_FAITH              INP_FAITH
-#define IN6P_CONTROLOPTS INP_CONTROLOPTS
+#define        IN6P_CONTROLOPTS INP_CONTROLOPTS
        /*
-        * socket AF version is {newer than,or include} 
+        * socket AF version is {newer than,or include}
         * actual datagram AF version
         */
 
 #define        INPLOOKUP_WILDCARD      1
+#ifdef __APPLE__
 #define INPCB_ALL_OWNERS       0xff
 #define INPCB_NO_OWNER         0x0
 #define INPCB_OWNED_BY_X       0x80
 #define INPCB_MAX_IDS          7
+#endif
 
 #define        sotoinpcb(so)   ((struct inpcb *)(so)->so_pcb)
 #define        sotoin6pcb(so)  sotoinpcb(so) /* for KAME src sync over BSD*'s */
 
-#define INP_SOCKAF(so) so->so_proto->pr_domain->dom_family
+#define        INP_SOCKAF(so) so->so_proto->pr_domain->dom_family
 
-#define        INP_CHECK_SOCKAF(so, af) \
-       (INP_SOCKAF(so) == af)
+#define        INP_CHECK_SOCKAF(so, af)        (INP_SOCKAF(so) == af)
 
 #ifdef KERNEL
-extern int ipport_lowfirstauto;
-extern int ipport_lowlastauto;
-extern int ipport_firstauto;
-extern int ipport_lastauto;
-extern int ipport_hifirstauto;
-extern int ipport_hilastauto;
-
+extern int     ipport_lowfirstauto;
+extern int     ipport_lowlastauto;
+extern int     ipport_firstauto;
+extern int     ipport_lastauto;
+extern int     ipport_hifirstauto;
+extern int     ipport_hilastauto;
+
+void   in_pcbpurgeif0 __P((struct inpcb *, struct ifnet *));
 void   in_losing __P((struct inpcb *));
+void   in_rtchange __P((struct inpcb *, int));
 int    in_pcballoc __P((struct socket *, struct inpcbinfo *, struct proc *));
 int    in_pcbbind __P((struct inpcb *, struct sockaddr *, struct proc *));
 int    in_pcbconnect __P((struct inpcb *, struct sockaddr *, struct proc *));
@@ -323,13 +346,15 @@ struct inpcb *
            struct in_addr, u_int, int));
 struct inpcb *
        in_pcblookup_hash __P((struct inpcbinfo *,
-           struct in_addr, u_int, struct in_addr, u_int, int, struct ifnet *));
-void   in_pcbnotify __P((struct inpcbhead *, struct sockaddr *,
-           u_int, struct in_addr, u_int, int, void (*)(struct inpcb *, int)));
+                              struct in_addr, u_int, struct in_addr, u_int,
+                              int, struct ifnet *));
+void   in_pcbnotifyall __P((struct inpcbhead *, struct in_addr,
+           int, void (*)(struct inpcb *, int)));
 void   in_pcbrehash __P((struct inpcb *));
 int    in_setpeeraddr __P((struct socket *so, struct sockaddr **nam));
 int    in_setsockaddr __P((struct socket *so, struct sockaddr **nam));
 
+#ifdef __APPLE__
 int    
 in_pcb_grab_port  __P((struct inpcbinfo *pcbinfo,
                       u_short          options,
@@ -363,12 +388,13 @@ in_pcb_new_share_client(struct inpcbinfo *pcbinfo, u_char *owner_id);
 
 int
 in_pcb_rem_share_client(struct inpcbinfo *pcbinfo, u_char owner_id);
+#endif /* __APPLE__ */
 
 void   in_pcbremlists __P((struct inpcb *inp));
-#if INET6
-int    in6_selecthlim __P((struct inpcb *, struct ifnet *));
+#ifndef __APPLE__
+int    prison_xinpcb __P((struct proc *p, struct inpcb *inp));
 #endif
-
-#endif /* KERNEL */
+#endif /* _KERNEL */
+#endif /* __APPLE_API_PRIVATE */
 
 #endif /* !_NETINET_IN_PCB_H_ */