| .. | .. |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * inet6 interface/address list definitions |
|---|
| 3 | 4 | * Linux INET6 implementation |
|---|
| 4 | 5 | * |
|---|
| 5 | 6 | * Authors: |
|---|
| 6 | 7 | * Pedro Roque <roque@di.fc.ul.pt> |
|---|
| 7 | | - * |
|---|
| 8 | | - * |
|---|
| 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. |
|---|
| 13 | 8 | */ |
|---|
| 14 | 9 | |
|---|
| 15 | 10 | #ifndef _NET_IF_INET6_H |
|---|
| .. | .. |
|---|
| 69 | 64 | |
|---|
| 70 | 65 | struct hlist_node addr_lst; |
|---|
| 71 | 66 | struct list_head if_list; |
|---|
| 67 | + /* |
|---|
| 68 | + * Used to safely traverse idev->addr_list in process context |
|---|
| 69 | + * if the idev->lock needed to protect idev->addr_list cannot be held. |
|---|
| 70 | + * In that case, add the items to this list temporarily and iterate |
|---|
| 71 | + * without holding idev->lock. |
|---|
| 72 | + * See addrconf_ifdown and dev_forward_change. |
|---|
| 73 | + */ |
|---|
| 74 | + struct list_head if_list_aux; |
|---|
| 72 | 75 | |
|---|
| 73 | 76 | struct list_head tmp_list; |
|---|
| 74 | 77 | struct inet6_ifaddr *ifpub; |
|---|
| .. | .. |
|---|
| 83 | 86 | struct ip6_sf_socklist { |
|---|
| 84 | 87 | unsigned int sl_max; |
|---|
| 85 | 88 | unsigned int sl_count; |
|---|
| 86 | | - struct in6_addr sl_addr[0]; |
|---|
| 89 | + struct in6_addr sl_addr[]; |
|---|
| 87 | 90 | }; |
|---|
| 88 | 91 | |
|---|
| 89 | 92 | #define IP6_SFLSIZE(count) (sizeof(struct ip6_sf_socklist) + \ |
|---|
| .. | .. |
|---|
| 94 | 97 | struct ipv6_mc_socklist { |
|---|
| 95 | 98 | struct in6_addr addr; |
|---|
| 96 | 99 | int ifindex; |
|---|
| 100 | + unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ |
|---|
| 97 | 101 | struct ipv6_mc_socklist __rcu *next; |
|---|
| 98 | 102 | rwlock_t sflock; |
|---|
| 99 | | - unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ |
|---|
| 100 | 103 | struct ip6_sf_socklist *sflist; |
|---|
| 101 | 104 | struct rcu_head rcu; |
|---|
| 102 | 105 | }; |
|---|
| .. | .. |
|---|
| 146 | 149 | struct in6_addr aca_addr; |
|---|
| 147 | 150 | struct fib6_info *aca_rt; |
|---|
| 148 | 151 | struct ifacaddr6 *aca_next; |
|---|
| 152 | + struct hlist_node aca_addr_lst; |
|---|
| 149 | 153 | int aca_users; |
|---|
| 150 | 154 | refcount_t aca_refcnt; |
|---|
| 151 | 155 | unsigned long aca_cstamp; |
|---|
| 152 | 156 | unsigned long aca_tstamp; |
|---|
| 157 | + struct rcu_head rcu; |
|---|
| 153 | 158 | }; |
|---|
| 154 | 159 | |
|---|
| 155 | 160 | #define IFA_HOST IPV6_ADDR_LOOPBACK |
|---|
| .. | .. |
|---|
| 193 | 198 | int dead; |
|---|
| 194 | 199 | |
|---|
| 195 | 200 | u32 desync_factor; |
|---|
| 196 | | - u8 rndid[8]; |
|---|
| 197 | 201 | struct list_head tempaddr_list; |
|---|
| 198 | 202 | |
|---|
| 199 | 203 | struct in6_addr token; |
|---|