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