X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/d52fe63fc81f7e44faaae711812a211a78434976..9bccf70c0258c7cac2dcb80011b2a964d884c552:/bsd/netinet/in_pcb.h?ds=sidebyside diff --git a/bsd/netinet/in_pcb.h b/bsd/netinet/in_pcb.h index 0dc2ab78a..38acfdf50 100644 --- a/bsd/netinet/in_pcb.h +++ b/bsd/netinet/in_pcb.h @@ -52,18 +52,22 @@ * 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 #include -#if IPSEC -#include -#endif -#define in6pcb inpcb /* for KAME src sync over BSD*'s */ -#define in6p_sp inp_sp /* for KAME src sync over BSD*'s */ + +#include /* 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,7 +96,7 @@ 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 */ @@ -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,29 @@ 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 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) +#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 +298,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 +343,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 +385,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_ */