1 /* $FreeBSD: src/sys/netinet6/scope6_var.h,v 1.4 2005/01/07 02:30:35 imp Exp $ */
2 /* $KAME: scope6_var.h,v 1.4 2000/05/18 15:03:27 jinmei Exp $ */
3
4 /*-
5 * Copyright (C) 2000 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 #ifndef _NETINET6_SCOPE6_VAR_H_
34 #define _NETINET6_SCOPE6_VAR_H_
35
36 #ifdef _KERNEL
37
38 /*
39 * IPv6 Core Protocols Implementation
40 * By Qing Li, Tatuya Jinmei, Keiichi Shima
41 *
42 * Some information from Chapter 2.9 (Handling Scope Zones) Figure 2.12, p.56
43 *
44 * User Space
45 *
46 * Normal App Statistics/Mgmt App Routing App
47 * /---------------\ /-------------------\ /------------------\
48 * | sin6_scope_id | | embedded form | | embedded form |
49 * | only | | (+ sin6_scope_id) | | or sin6_scope_id |
50 * \---------------/ \-------------------/ \------------------/
51 * ^ ^ ^ |
52 * | | | |
53 * no conversion parse parse embed
54 * | embedded embbeded ID
55 * | ID ID (if necessary)
56 * | | | |
57 * v | | v
58 * /---------------\ /-------------------\ /------------------\
59 * ------ | AF_INET6 | | kvm | | Routing |
60 * Kernel | socket | | interface | | socket |
61 * \---------------/ \-------------------/ \------------------/
62 * ^ | ^ ^
63 * | | | |
64 * clear embed no conversion |
65 * embedded ID | no conversion
66 * ID | ---------------------------------- |
67 * | V | | v
68 * /---------------\ /--------------------\
69 * | |---- clear sin_scope_id --->| embedded form only |
70 * | |<--- set sin_scope_id ----| |
71 * | | \--------------------/
72 * | embedded form | ^
73 * | + | |
74 * | sin_scope_id | no conversion
75 * | | |
76 * | | V
77 * | | /--------------------\
78 * | |---- clear sin_scope_id --->| embedded form only |
79 * | |<--- set sin_scope_id ----| |
80 * \---------------/ \--------------------/
81 * -------- ^ |
82 * Physical | clear
83 * Network embed ID, embedded
84 * set ID
85 * sin_scope_id |
86 * | v
87 * /---------------\
88 * | 128-bit IPv6 |
89 * | address |
90 * | (ID not |
91 * | included) |
92 * \---------------/
93 */
94
95
96 struct scope6_id {
97 /*
98 * 16 is correspondent to 4bit multicast scope field.
99 * i.e. from interface-local to global with some
100 * reserved/unassigned types.
101 */
102 uint32_t s6id_list[16];
103 };
104
105 void scope6_init(void);
106 struct scope6_id *scope6_ifattach(struct ifnet *);
107 void scope6_ifdetach(struct scope6_id *);
108 uint32_t scope6_in6_addrscope(struct in6_addr *);
109 uint32_t scope6_addr2default(const struct in6_addr *);
110 int sa6_embedscope(struct sockaddr_in6 *, int);
111 int sa6_recoverscope(struct sockaddr_in6 *);
112 int in6_setzoneid(struct in6_addr *, uint32_t);
113 int in6_setscope(struct in6_addr *, const struct ifnet *, u_int32_t *);
114 int in6_clearscope(struct in6_addr *);
115 const char *in6_getscopename(const struct in6_addr *);
116 #endif /* _KERNEL */
117
118 #endif /* _NETINET6_SCOPE6_VAR_H_ */
Cache object: 03148daa37bf2ce675676b20c73eede1
|