linux/security/selinux/ss/ebitmap.h

/* SPDX-License-Identifier: GPL-2.0 */
/*
 * An extensible bitmap is a bitmap that supports an
 * arbitrary number of bits.  Extensible bitmaps are
 * used to represent sets of values, such as types,
 * roles, categories, and classes.
 *
 * Each extensible bitmap is implemented as a linked
 * list of bitmap nodes, where each bitmap node has
 * an explicitly specified starting bit position within
 * the total bitmap.
 *
 * Author : Stephen Smalley, <[email protected]>
 */

#ifndef _SS_EBITMAP_H_
#define _SS_EBITMAP_H_

#include <net/netlabel.h>

#ifdef CONFIG_64BIT
#define EBITMAP_NODE_SIZE
#else
#define EBITMAP_NODE_SIZE
#endif

#define EBITMAP_UNIT_NUMS
#define EBITMAP_UNIT_SIZE
#define EBITMAP_SIZE
#define EBITMAP_BIT
#define EBITMAP_SHIFT_UNIT_SIZE(x)

struct ebitmap_node {};

struct ebitmap {};

#define ebitmap_length(e)

static inline u32 ebitmap_start_positive(const struct ebitmap *e,
					 struct ebitmap_node **n)
{}

static inline void ebitmap_init(struct ebitmap *e)
{}

static inline u32 ebitmap_next_positive(const struct ebitmap *e,
					struct ebitmap_node **n, u32 bit)
{}

#define EBITMAP_NODE_INDEX(node, bit)
#define EBITMAP_NODE_OFFSET(node, bit)

static inline int ebitmap_node_get_bit(const struct ebitmap_node *n, u32 bit)
{}

static inline void ebitmap_node_set_bit(struct ebitmap_node *n, u32 bit)
{}

static inline void ebitmap_node_clr_bit(struct ebitmap_node *n, u32 bit)
{}

#define ebitmap_for_each_positive_bit(e, n, bit)

int ebitmap_cmp(const struct ebitmap *e1, const struct ebitmap *e2);
int ebitmap_cpy(struct ebitmap *dst, const struct ebitmap *src);
int ebitmap_and(struct ebitmap *dst, const struct ebitmap *e1,
		const struct ebitmap *e2);
int ebitmap_contains(const struct ebitmap *e1, const struct ebitmap *e2,
		     u32 last_e2bit);
int ebitmap_get_bit(const struct ebitmap *e, u32 bit);
int ebitmap_set_bit(struct ebitmap *e, u32 bit, int value);
void ebitmap_destroy(struct ebitmap *e);
int ebitmap_read(struct ebitmap *e, void *fp);
int ebitmap_write(const struct ebitmap *e, void *fp);
u32 ebitmap_hash(const struct ebitmap *e, u32 hash);

#ifdef CONFIG_NETLABEL
int ebitmap_netlbl_export(struct ebitmap *ebmap,
			  struct netlbl_lsm_catmap **catmap);
int ebitmap_netlbl_import(struct ebitmap *ebmap,
			  struct netlbl_lsm_catmap *catmap);
#else
static inline int ebitmap_netlbl_export(struct ebitmap *ebmap,
					struct netlbl_lsm_catmap **catmap)
{
	return -ENOMEM;
}
static inline int ebitmap_netlbl_import(struct ebitmap *ebmap,
					struct netlbl_lsm_catmap *catmap)
{
	return -ENOMEM;
}
#endif

#endif /* _SS_EBITMAP_H_ */