+/* $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:
* 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.
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 {
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 *));
/* 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