root/net/netlabel/netlabel_domainhash.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   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  *
  10  * Author: Paul Moore <paul@paul-moore.com>
  11  */
  12 
  13 /*
  14  * (c) Copyright Hewlett-Packard Development Company, L.P., 2006, 2008
  15  */
  16 
  17 #ifndef _NETLABEL_DOMAINHASH_H
  18 #define _NETLABEL_DOMAINHASH_H
  19 
  20 #include <linux/types.h>
  21 #include <linux/rcupdate.h>
  22 #include <linux/list.h>
  23 
  24 #include "netlabel_addrlist.h"
  25 
  26 /* Domain hash table size */
  27 /* XXX - currently this number is an uneducated guess */
  28 #define NETLBL_DOMHSH_BITSIZE       7
  29 
  30 /* Domain mapping definition structures */
  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;
  40                 struct calipso_doi *calipso;
  41         };
  42 };
  43 #define netlbl_domhsh_addr4_entry(iter) \
  44         container_of(iter, struct netlbl_domaddr4_map, list)
  45 struct netlbl_domaddr4_map {
  46         struct netlbl_dommap_def def;
  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 {
  53         struct netlbl_dommap_def def;
  54 
  55         struct netlbl_af6list list;
  56 };
  57 
  58 struct netlbl_dom_map {
  59         char *domain;
  60         u16 family;
  61         struct netlbl_dommap_def def;
  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 */
  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);
  76 int netlbl_domhsh_remove_entry(struct netlbl_dom_map *entry,
  77                                struct netlbl_audit *audit_info);
  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);
  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);
  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);
  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);
  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);
  99 #endif /* IPv6 */
 100 
 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);
 105 
 106 #endif

/* [<][>][^][v][top][bottom][index][help] */