2 * inet6 interface/address list definitions
3 * Linux INET6 implementation
6 * Pedro Roque <roque@di.fc.ul.pt>
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version
12 * 2 of the License, or (at your option) any later version.
15 #ifndef _NET_IF_INET6_H
16 #define _NET_IF_INET6_H
18 #define IF_RA_RCVD 0x20
19 #define IF_RS_SENT 0x10
39 struct timer_list timer;
41 struct inet6_dev *idev;
43 struct inet6_ifaddr *lst_next; /* next addr in addr_lst */
44 struct inet6_ifaddr *if_next; /* next addr in inet6_dev */
49 struct ipv6_mc_socklist
53 struct ipv6_mc_socklist *next;
56 #define MAF_TIMER_RUNNING 0x01
57 #define MAF_LAST_REPORTER 0x02
58 #define MAF_LOADED 0x04
62 struct in6_addr mca_addr;
63 struct inet6_dev *idev;
64 struct ifmcaddr6 *next;
65 struct timer_list mca_timer;
72 #define IFA_HOST IPV6_ADDR_LOOPBACK
73 #define IFA_LINK IPV6_ADDR_LINKLOCAL
74 #define IFA_SITE IPV6_ADDR_SITELOCAL
75 #define IFA_GLOBAL 0x0000U
87 int rtr_solicit_interval;
88 int rtr_solicit_delay;
95 struct net_device *dev;
97 struct inet6_ifaddr *addr_list;
98 struct ifmcaddr6 *mc_list;
104 struct neigh_parms *nd_parms;
105 struct inet6_dev *next;
106 struct ipv6_devconf cnf;
109 extern struct ipv6_devconf ipv6_devconf;
111 static inline void ipv6_eth_mc_map(struct in6_addr *addr, char *buf)
114 * +-------+-------+-------+-------+-------+-------+
115 * | 33 | 33 | DST13 | DST14 | DST15 | DST16 |
116 * +-------+-------+-------+-------+-------+-------+
122 memcpy(buf + 2, &addr->s6_addr32[3], sizeof(__u32));
125 static inline void ipv6_tr_mc_map(struct in6_addr *addr, char *buf)
127 /* All nodes FF01::1, FF02::1, FF02::1:FFxx:xxxx */
129 if (((addr->s6_addr[0] == 0xFF) &&
130 ((addr->s6_addr[1] == 0x01) || (addr->s6_addr[1] == 0x02)) &&
131 (addr->s6_addr16[1] == 0) &&
132 (addr->s6_addr32[1] == 0) &&
133 (addr->s6_addr32[2] == 0) &&
134 (addr->s6_addr16[6] == 0) &&
135 (addr->s6_addr[15] == 1)) ||
136 ((addr->s6_addr[0] == 0xFF) &&
137 (addr->s6_addr[1] == 0x02) &&
138 (addr->s6_addr16[1] == 0) &&
139 (addr->s6_addr32[1] == 0) &&
140 (addr->s6_addr16[4] == 0) &&
141 (addr->s6_addr[10] == 0) &&
142 (addr->s6_addr[11] == 1) &&
143 (addr->s6_addr[12] == 0xff)))
151 /* All routers FF0x::2 */
152 } else if ((addr->s6_addr[0] ==0xff) &&
153 ((addr->s6_addr[1] & 0xF0) == 0) &&
154 (addr->s6_addr16[1] == 0) &&
155 (addr->s6_addr32[1] == 0) &&
156 (addr->s6_addr32[2] == 0) &&
157 (addr->s6_addr16[6] == 0) &&
158 (addr->s6_addr[15] == 2))
169 i = addr->s6_addr[15] & 7 ;