]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet6/ip6protosw.h
xnu-344.tar.gz
[apple/xnu.git] / bsd / netinet6 / ip6protosw.h
index 61edf5ccf39a8dbc860fe9c36bb9c98ff1197139..3f8758f9dae74e57bd0579cb422a858c7e3c8431 100644 (file)
@@ -1,7 +1,10 @@
+/*     $FreeBSD: src/sys/netinet6/ip6protosw.h,v 1.2.2.3 2001/07/03 11:01:54 ume Exp $ */
+/*     $KAME: ip6protosw.h,v 1.22 2001/02/08 18:02:08 itojun Exp $     */
+
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
  * All rights reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
@@ -13,7 +16,7 @@
  * 3. Neither the name of the project nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  * SUCH DAMAGE.
  *
  *     @(#)protosw.h   8.1 (Berkeley) 6/2/93
- *     $Id: ip6protosw.h,v 1.2 2000/09/14 20:35:15 lindak Exp $
  */
 
 #ifndef _NETINET6_IP6PROTOSW_H_
 #define _NETINET6_IP6PROTOSW_H_
+#include <sys/appleapiopts.h>
+#ifdef __APPLE_API_PRIVATE
 
 /*
  * Protocol switch table for IPv6.
@@ -80,20 +84,38 @@ struct socket;
 struct domain;
 struct proc;
 struct ip6_hdr;
-#ifdef __FreeBSD__
+struct icmp6_hdr;
+struct in6_addr;
 struct pr_usrreqs;
-#endif
 
-#include <sys/socketvar.h>
-#include <sys/queue.h>
 /*
  * argument type for the last arg of pr_ctlinput().
  * should be consulted only with AF_INET6 family.
+ *
+ * IPv6 ICMP IPv6 [exthdrs] finalhdr paylaod
+ * ^    ^    ^              ^
+ * |    |    ip6c_ip6       ip6c_off
+ * |    ip6c_icmp6
+ * ip6c_m
+ *
+ * ip6c_finaldst usually points to ip6c_ip6->ip6_dst.  if the original
+ * (internal) packet carries a routing header, it may point the final
+ * dstination address in the routing header.
+ *
+ * ip6c_src: ip6c_ip6->ip6_src + scope info + flowlabel in ip6c_ip6
+ *     (beware of flowlabel, if you try to compare it against others)
+ * ip6c_dst: ip6c_finaldst + scope info
  */
 struct ip6ctlparam {
        struct mbuf *ip6c_m;            /* start of mbuf chain */
+       struct icmp6_hdr *ip6c_icmp6;   /* icmp6 header of target packet */
        struct ip6_hdr *ip6c_ip6;       /* ip6 header of target packet */
        int ip6c_off;                   /* offset of the target proto header */
+       struct sockaddr_in6 *ip6c_src;  /* srcaddr w/ additional info */
+       struct sockaddr_in6 *ip6c_dst;  /* (final) dstaddr w/ additional info */
+       struct in6_addr *ip6c_finaldst; /* final destination address */
+       void *ip6c_cmdarg;              /* control command dependent data */
+       u_int8_t ip6c_nxt;              /* final next header field */
 };
 
 struct ip6protosw {
@@ -102,7 +124,7 @@ struct ip6protosw {
        short   pr_protocol;            /* protocol number */
         unsigned int pr_flags;          /* see below */
 /* protocol-protocol hooks */
-       int     (*pr_input) __P((struct mbuf **, int *, int));
+       int     (*pr_input) __P((struct mbuf **, int *));
                                        /* input to protocol (from below) */
        int     (*pr_output)    __P((struct mbuf *m, struct socket *so,
                                     struct sockaddr_in6 *, struct mbuf *));
@@ -125,13 +147,19 @@ struct ip6protosw {
                                        /* slow timeout (500ms) */
        void    (*pr_drain) __P((void));
                                        /* flush any excess space possible */
-/* ### Added for MacOS X */
+#ifdef __APPLE__
+       /* for compat. with IPv4 protosw */
        int     (*pr_sysctl)();         /* sysctl for protocol */
+#endif
 
        struct  pr_usrreqs *pr_usrreqs; /* supersedes pr_usrreq() */
-/* ### Added MacOS X Implant hooks */
+#ifdef __APPLE__
+       /* Filter hooks */
        TAILQ_HEAD(pr6_sfilter, NFDescriptor) pr_sfilter;
-       struct protosw *pr_next;        /* Chain for domain */
+       struct ip6protosw *pr_next;     /* Chain for domain */
+       u_long reserved[4];
+#endif
 };
 
+#endif /* __APPLE_API_PRIVATE */
 #endif