Blame view
net/netlabel/netlabel_addrlist.h
6.1 KB
61e106821 netlabel: Add a g... |
1 2 3 4 5 6 7 8 |
/* * NetLabel Network Address Lists * * This file contains network address list functions used to manage ordered * lists of network addresses for use by the NetLabel subsystem. The NetLabel * system manages static and dynamic label mappings for network protocols such * as CIPSO and RIPSO. * |
82c21bfab doc: Update the e... |
9 |
* Author: Paul Moore <paul@paul-moore.com> |
61e106821 netlabel: Add a g... |
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
* */ /* * (c) Copyright Hewlett-Packard Development Company, L.P., 2008 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License |
d484ff154 netlabel: Fix FSF... |
27 |
* along with this program; if not, see <http://www.gnu.org/licenses/>. |
61e106821 netlabel: Add a g... |
28 29 30 31 32 33 34 35 36 37 |
* */ #ifndef _NETLABEL_ADDRLIST_H #define _NETLABEL_ADDRLIST_H #include <linux/types.h> #include <linux/rcupdate.h> #include <linux/list.h> #include <linux/in6.h> |
63c416887 netlabel: Add net... |
38 |
#include <linux/audit.h> |
61e106821 netlabel: Add a g... |
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
/** * struct netlbl_af4list - NetLabel IPv4 address list * @addr: IPv4 address * @mask: IPv4 address mask * @valid: valid flag * @list: list structure, used internally */ struct netlbl_af4list { __be32 addr; __be32 mask; u32 valid; struct list_head list; }; /** * struct netlbl_af6list - NetLabel IPv6 address list * @addr: IPv6 address * @mask: IPv6 address mask * @valid: valid flag * @list: list structure, used internally */ struct netlbl_af6list { struct in6_addr addr; struct in6_addr mask; u32 valid; struct list_head list; }; #define __af4list_entry(ptr) container_of(ptr, struct netlbl_af4list, list) static inline struct netlbl_af4list *__af4list_valid(struct list_head *s, struct list_head *h) { struct list_head *i = s; struct netlbl_af4list *n = __af4list_entry(s); while (i != h && !n->valid) { i = i->next; n = __af4list_entry(i); } return n; } static inline struct netlbl_af4list *__af4list_valid_rcu(struct list_head *s, struct list_head *h) { struct list_head *i = s; struct netlbl_af4list *n = __af4list_entry(s); while (i != h && !n->valid) { i = rcu_dereference(i->next); n = __af4list_entry(i); } return n; } #define netlbl_af4list_foreach(iter, head) \ for (iter = __af4list_valid((head)->next, head); \ |
a1e4891fd Remove prefetch()... |
98 |
&iter->list != (head); \ |
61e106821 netlabel: Add a g... |
99 100 101 102 |
iter = __af4list_valid(iter->list.next, head)) #define netlbl_af4list_foreach_rcu(iter, head) \ for (iter = __af4list_valid_rcu((head)->next, head); \ |
a1e4891fd Remove prefetch()... |
103 |
&iter->list != (head); \ |
61e106821 netlabel: Add a g... |
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
iter = __af4list_valid_rcu(iter->list.next, head)) #define netlbl_af4list_foreach_safe(iter, tmp, head) \ for (iter = __af4list_valid((head)->next, head), \ tmp = __af4list_valid(iter->list.next, head); \ &iter->list != (head); \ iter = tmp, tmp = __af4list_valid(iter->list.next, head)) int netlbl_af4list_add(struct netlbl_af4list *entry, struct list_head *head); struct netlbl_af4list *netlbl_af4list_remove(__be32 addr, __be32 mask, struct list_head *head); void netlbl_af4list_remove_entry(struct netlbl_af4list *entry); struct netlbl_af4list *netlbl_af4list_search(__be32 addr, struct list_head *head); |
63c416887 netlabel: Add net... |
119 120 121 |
struct netlbl_af4list *netlbl_af4list_search_exact(__be32 addr, __be32 mask, struct list_head *head); |
47b676c0e netlabel: Fix com... |
122 123 |
#ifdef CONFIG_AUDIT |
63c416887 netlabel: Add net... |
124 125 126 |
void netlbl_af4list_audit_addr(struct audit_buffer *audit_buf, int src, const char *dev, __be32 addr, __be32 mask); |
47b676c0e netlabel: Fix com... |
127 128 129 130 131 |
#else static inline void netlbl_af4list_audit_addr(struct audit_buffer *audit_buf, int src, const char *dev, __be32 addr, __be32 mask) { |
47b676c0e netlabel: Fix com... |
132 133 |
} #endif |
61e106821 netlabel: Add a g... |
134 |
|
dfd56b8b3 net: use IS_ENABL... |
135 |
#if IS_ENABLED(CONFIG_IPV6) |
61e106821 netlabel: Add a g... |
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
#define __af6list_entry(ptr) container_of(ptr, struct netlbl_af6list, list) static inline struct netlbl_af6list *__af6list_valid(struct list_head *s, struct list_head *h) { struct list_head *i = s; struct netlbl_af6list *n = __af6list_entry(s); while (i != h && !n->valid) { i = i->next; n = __af6list_entry(i); } return n; } static inline struct netlbl_af6list *__af6list_valid_rcu(struct list_head *s, struct list_head *h) { struct list_head *i = s; struct netlbl_af6list *n = __af6list_entry(s); while (i != h && !n->valid) { i = rcu_dereference(i->next); n = __af6list_entry(i); } return n; } #define netlbl_af6list_foreach(iter, head) \ for (iter = __af6list_valid((head)->next, head); \ |
a1e4891fd Remove prefetch()... |
165 |
&iter->list != (head); \ |
61e106821 netlabel: Add a g... |
166 167 168 169 |
iter = __af6list_valid(iter->list.next, head)) #define netlbl_af6list_foreach_rcu(iter, head) \ for (iter = __af6list_valid_rcu((head)->next, head); \ |
a1e4891fd Remove prefetch()... |
170 |
&iter->list != (head); \ |
61e106821 netlabel: Add a g... |
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
iter = __af6list_valid_rcu(iter->list.next, head)) #define netlbl_af6list_foreach_safe(iter, tmp, head) \ for (iter = __af6list_valid((head)->next, head), \ tmp = __af6list_valid(iter->list.next, head); \ &iter->list != (head); \ iter = tmp, tmp = __af6list_valid(iter->list.next, head)) int netlbl_af6list_add(struct netlbl_af6list *entry, struct list_head *head); struct netlbl_af6list *netlbl_af6list_remove(const struct in6_addr *addr, const struct in6_addr *mask, struct list_head *head); void netlbl_af6list_remove_entry(struct netlbl_af6list *entry); struct netlbl_af6list *netlbl_af6list_search(const struct in6_addr *addr, struct list_head *head); |
63c416887 netlabel: Add net... |
187 188 189 |
struct netlbl_af6list *netlbl_af6list_search_exact(const struct in6_addr *addr, const struct in6_addr *mask, struct list_head *head); |
47b676c0e netlabel: Fix com... |
190 191 |
#ifdef CONFIG_AUDIT |
63c416887 netlabel: Add net... |
192 193 194 195 196 |
void netlbl_af6list_audit_addr(struct audit_buffer *audit_buf, int src, const char *dev, const struct in6_addr *addr, const struct in6_addr *mask); |
47b676c0e netlabel: Fix com... |
197 198 199 200 201 202 203 |
#else static inline void netlbl_af6list_audit_addr(struct audit_buffer *audit_buf, int src, const char *dev, const struct in6_addr *addr, const struct in6_addr *mask) { |
47b676c0e netlabel: Fix com... |
204 205 |
} #endif |
61e106821 netlabel: Add a g... |
206 207 208 |
#endif /* IPV6 */ #endif |