Commit | Line | Data |
---|---|---|
1ccea77e | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
d15c345f PM |
2 | /* |
3 | * NetLabel Domain Hash Table | |
4 | * | |
5 | * This file manages the domain hash table that NetLabel uses to determine | |
6 | * which network labeling protocol to use for a given domain. The NetLabel | |
7 | * system manages static and dynamic label mappings for network protocols such | |
8 | * as CIPSO and RIPSO. | |
9 | * | |
82c21bfa | 10 | * Author: Paul Moore <paul@paul-moore.com> |
d15c345f PM |
11 | */ |
12 | ||
13 | /* | |
63c41688 | 14 | * (c) Copyright Hewlett-Packard Development Company, L.P., 2006, 2008 |
d15c345f PM |
15 | */ |
16 | ||
17 | #ifndef _NETLABEL_DOMAINHASH_H | |
18 | #define _NETLABEL_DOMAINHASH_H | |
19 | ||
7a0e1d60 PM |
20 | #include <linux/types.h> |
21 | #include <linux/rcupdate.h> | |
22 | #include <linux/list.h> | |
23 | ||
63c41688 PM |
24 | #include "netlabel_addrlist.h" |
25 | ||
d15c345f PM |
26 | /* Domain hash table size */ |
27 | /* XXX - currently this number is an uneducated guess */ | |
28 | #define NETLBL_DOMHSH_BITSIZE 7 | |
29 | ||
63c41688 | 30 | /* Domain mapping definition structures */ |
6a8b7f0c PM |
31 | struct netlbl_domaddr_map { |
32 | struct list_head list4; | |
33 | struct list_head list6; | |
34 | }; | |
35 | struct netlbl_dommap_def { | |
36 | u32 type; | |
37 | union { | |
38 | struct netlbl_domaddr_map *addrsel; | |
39 | struct cipso_v4_doi *cipso; | |
dc7de73f | 40 | struct calipso_doi *calipso; |
6a8b7f0c PM |
41 | }; |
42 | }; | |
63c41688 PM |
43 | #define netlbl_domhsh_addr4_entry(iter) \ |
44 | container_of(iter, struct netlbl_domaddr4_map, list) | |
45 | struct netlbl_domaddr4_map { | |
6a8b7f0c | 46 | struct netlbl_dommap_def def; |
63c41688 PM |
47 | |
48 | struct netlbl_af4list list; | |
49 | }; | |
50 | #define netlbl_domhsh_addr6_entry(iter) \ | |
51 | container_of(iter, struct netlbl_domaddr6_map, list) | |
52 | struct netlbl_domaddr6_map { | |
6a8b7f0c | 53 | struct netlbl_dommap_def def; |
63c41688 PM |
54 | |
55 | struct netlbl_af6list list; | |
56 | }; | |
6a8b7f0c | 57 | |
d15c345f PM |
58 | struct netlbl_dom_map { |
59 | char *domain; | |
6a8b7f0c | 60 | struct netlbl_dommap_def def; |
f0d95264 | 61 | u16 family; |
d15c345f PM |
62 | |
63 | u32 valid; | |
64 | struct list_head list; | |
65 | struct rcu_head rcu; | |
66 | }; | |
67 | ||
68 | /* init function */ | |
69 | int netlbl_domhsh_init(u32 size); | |
70 | ||
71 | /* Manipulate the domain hash table */ | |
95d4e6be PM |
72 | int netlbl_domhsh_add(struct netlbl_dom_map *entry, |
73 | struct netlbl_audit *audit_info); | |
74 | int netlbl_domhsh_add_default(struct netlbl_dom_map *entry, | |
75 | struct netlbl_audit *audit_info); | |
b1edeb10 PM |
76 | int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry, |
77 | struct netlbl_audit *audit_info); | |
6c2e8ac0 PM |
78 | int netlbl_domhsh_remove_af4(const char *domain, |
79 | const struct in_addr *addr, | |
80 | const struct in_addr *mask, | |
81 | struct netlbl_audit *audit_info); | |
3f09354a HD |
82 | int netlbl_domhsh_remove_af6(const char *domain, |
83 | const struct in6_addr *addr, | |
84 | const struct in6_addr *mask, | |
85 | struct netlbl_audit *audit_info); | |
8f18e675 HD |
86 | int netlbl_domhsh_remove(const char *domain, u16 family, |
87 | struct netlbl_audit *audit_info); | |
88 | int netlbl_domhsh_remove_default(u16 family, struct netlbl_audit *audit_info); | |
89 | struct netlbl_dom_map *netlbl_domhsh_getentry(const char *domain, u16 family); | |
6a8b7f0c PM |
90 | struct netlbl_dommap_def *netlbl_domhsh_getentry_af4(const char *domain, |
91 | __be32 addr); | |
92 | #if IS_ENABLED(CONFIG_IPV6) | |
93 | struct netlbl_dommap_def *netlbl_domhsh_getentry_af6(const char *domain, | |
94 | const struct in6_addr *addr); | |
3f09354a HD |
95 | int netlbl_domhsh_remove_af6(const char *domain, |
96 | const struct in6_addr *addr, | |
97 | const struct in6_addr *mask, | |
98 | struct netlbl_audit *audit_info); | |
6a8b7f0c PM |
99 | #endif /* IPv6 */ |
100 | ||
fcd48280 PM |
101 | int netlbl_domhsh_walk(u32 *skip_bkt, |
102 | u32 *skip_chain, | |
103 | int (*callback) (struct netlbl_dom_map *entry, void *arg), | |
104 | void *cb_arg); | |
d15c345f PM |
105 | |
106 | #endif |