1 1.27 msaitoh /* $NetBSD: ip6protosw.h,v 1.27 2019/03/19 13:38:53 msaitoh Exp $ */ 2 1.10 itojun /* $KAME: ip6protosw.h,v 1.22 2001/02/08 18:02:08 itojun Exp $ */ 3 1.3 thorpej 4 1.2 itojun /* 5 1.2 itojun * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 6 1.2 itojun * All rights reserved. 7 1.7 itojun * 8 1.2 itojun * Redistribution and use in source and binary forms, with or without 9 1.2 itojun * modification, are permitted provided that the following conditions 10 1.2 itojun * are met: 11 1.2 itojun * 1. Redistributions of source code must retain the above copyright 12 1.2 itojun * notice, this list of conditions and the following disclaimer. 13 1.2 itojun * 2. Redistributions in binary form must reproduce the above copyright 14 1.2 itojun * notice, this list of conditions and the following disclaimer in the 15 1.2 itojun * documentation and/or other materials provided with the distribution. 16 1.2 itojun * 3. Neither the name of the project nor the names of its contributors 17 1.2 itojun * may be used to endorse or promote products derived from this software 18 1.2 itojun * without specific prior written permission. 19 1.7 itojun * 20 1.2 itojun * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 21 1.2 itojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 1.2 itojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 1.2 itojun * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 24 1.2 itojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 1.2 itojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26 1.2 itojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27 1.2 itojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28 1.2 itojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29 1.2 itojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 1.2 itojun * SUCH DAMAGE. 31 1.2 itojun * 32 1.2 itojun */ 33 1.2 itojun 34 1.2 itojun /* BSDI protosw.h,v 2.3 1996/10/11 16:02:40 pjd Exp */ 35 1.2 itojun 36 1.2 itojun /*- 37 1.2 itojun * Copyright (c) 1982, 1986, 1993 38 1.2 itojun * The Regents of the University of California. All rights reserved. 39 1.2 itojun * 40 1.2 itojun * Redistribution and use in source and binary forms, with or without 41 1.2 itojun * modification, are permitted provided that the following conditions 42 1.2 itojun * are met: 43 1.2 itojun * 1. Redistributions of source code must retain the above copyright 44 1.2 itojun * notice, this list of conditions and the following disclaimer. 45 1.2 itojun * 2. Redistributions in binary form must reproduce the above copyright 46 1.2 itojun * notice, this list of conditions and the following disclaimer in the 47 1.2 itojun * documentation and/or other materials provided with the distribution. 48 1.13 agc * 3. Neither the name of the University nor the names of its contributors 49 1.2 itojun * may be used to endorse or promote products derived from this software 50 1.2 itojun * without specific prior written permission. 51 1.2 itojun * 52 1.2 itojun * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 53 1.2 itojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 54 1.2 itojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 55 1.2 itojun * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 56 1.2 itojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 57 1.2 itojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 58 1.2 itojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 59 1.2 itojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 60 1.2 itojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 61 1.2 itojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 62 1.2 itojun * SUCH DAMAGE. 63 1.2 itojun * 64 1.2 itojun * @(#)protosw.h 8.1 (Berkeley) 6/2/93 65 1.2 itojun */ 66 1.2 itojun 67 1.2 itojun #ifndef _NETINET6_IP6PROTOSW_H_ 68 1.2 itojun #define _NETINET6_IP6PROTOSW_H_ 69 1.2 itojun 70 1.2 itojun /* 71 1.2 itojun * Protocol switch table for IPv6. 72 1.2 itojun * All other definitions should refer to sys/protosw.h 73 1.2 itojun */ 74 1.2 itojun 75 1.2 itojun struct mbuf; 76 1.2 itojun struct sockaddr; 77 1.2 itojun struct socket; 78 1.2 itojun struct domain; 79 1.2 itojun struct proc; 80 1.2 itojun struct ip6_hdr; 81 1.7 itojun struct icmp6_hdr; 82 1.7 itojun struct in6_addr; 83 1.4 itojun 84 1.4 itojun /* 85 1.4 itojun * argument type for the last arg of pr_ctlinput(). 86 1.4 itojun * should be consulted only with AF_INET6 family. 87 1.7 itojun * 88 1.27 msaitoh * IPv6 ICMP IPv6 [exthdrs] finalhdr payload 89 1.7 itojun * ^ ^ ^ ^ 90 1.7 itojun * | | ip6c_ip6 ip6c_off 91 1.7 itojun * | ip6c_icmp6 92 1.7 itojun * ip6c_m 93 1.7 itojun * 94 1.7 itojun * ip6c_finaldst usually points to ip6c_ip6->ip6_dst. if the original 95 1.7 itojun * (internal) packet carries a routing header, it may point the final 96 1.27 msaitoh * destination address in the routing header. 97 1.10 itojun * 98 1.10 itojun * ip6c_src: ip6c_ip6->ip6_src + scope info + flowlabel in ip6c_ip6 99 1.10 itojun * (beware of flowlabel, if you try to compare it against others) 100 1.10 itojun * ip6c_dst: ip6c_finaldst + scope info 101 1.4 itojun */ 102 1.4 itojun struct ip6ctlparam { 103 1.4 itojun struct mbuf *ip6c_m; /* start of mbuf chain */ 104 1.7 itojun struct icmp6_hdr *ip6c_icmp6; /* icmp6 header of target packet */ 105 1.4 itojun struct ip6_hdr *ip6c_ip6; /* ip6 header of target packet */ 106 1.4 itojun int ip6c_off; /* offset of the target proto header */ 107 1.10 itojun struct sockaddr_in6 *ip6c_src; /* srcaddr w/ additional info */ 108 1.10 itojun struct sockaddr_in6 *ip6c_dst; /* (final) dstaddr w/ additional info */ 109 1.7 itojun struct in6_addr *ip6c_finaldst; /* final destination address */ 110 1.10 itojun void *ip6c_cmdarg; /* control command dependent data */ 111 1.10 itojun u_int8_t ip6c_nxt; /* final next header field */ 112 1.4 itojun }; 113 1.2 itojun 114 1.2 itojun struct ip6protosw { 115 1.25 riastrad int pr_type; /* socket type used for */ 116 1.25 riastrad struct domain *pr_domain; /* domain protocol a member of */ 117 1.25 riastrad short pr_protocol; /* protocol number */ 118 1.25 riastrad short pr_flags; /* see below */ 119 1.25 riastrad 120 1.25 riastrad /* protocol-protocol hooks */ 121 1.25 riastrad int (*pr_input) /* input to protocol (from below) */ 122 1.25 riastrad (struct mbuf **, int *, int); 123 1.25 riastrad void *(*pr_ctlinput) /* control input (from below) */ 124 1.25 riastrad (int, const struct sockaddr *, void *); 125 1.25 riastrad int (*pr_ctloutput) /* control output (from above) */ 126 1.25 riastrad (int, struct socket *, struct sockopt *); 127 1.25 riastrad 128 1.25 riastrad /* user-protocol hook */ 129 1.25 riastrad const struct pr_usrreqs *pr_usrreqs; 130 1.25 riastrad 131 1.25 riastrad /* utility hooks */ 132 1.25 riastrad void (*pr_init) /* initialization hook */ 133 1.25 riastrad (void); 134 1.25 riastrad 135 1.25 riastrad void (*pr_fasttimo) /* fast timeout (200ms) */ 136 1.25 riastrad (void); 137 1.25 riastrad void (*pr_slowtimo) /* slow timeout (500ms) */ 138 1.25 riastrad (void); 139 1.25 riastrad void (*pr_drain) /* flush any excess space possible */ 140 1.25 riastrad (void); 141 1.2 itojun }; 142 1.6 darrenr 143 1.26 ozaki #ifdef _KERNEL 144 1.26 ozaki #define PR_WRAP_INPUT6(name) \ 145 1.26 ozaki static int \ 146 1.26 ozaki name##_wrapper(struct mbuf **mp, int *offp, int proto) \ 147 1.26 ozaki { \ 148 1.26 ozaki int rv; \ 149 1.26 ozaki mutex_enter(softnet_lock); \ 150 1.26 ozaki rv = name(mp, offp, proto); \ 151 1.26 ozaki mutex_exit(softnet_lock); \ 152 1.26 ozaki return rv; \ 153 1.26 ozaki } 154 1.26 ozaki #endif 155 1.26 ozaki 156 1.15 matt extern const struct ip6protosw inet6sw[]; 157 1.2 itojun 158 1.2 itojun #endif /* !_NETINET6_IP6PROTOSW_H_ */ 159