mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-18 17:18:42 +00:00
Moved filter value union to lib
This commit is contained in:
parent
3fb70b26fa
commit
0b871c1704
@ -16,20 +16,7 @@
|
|||||||
/* Filter value; size of this affects filter memory consumption */
|
/* Filter value; size of this affects filter memory consumption */
|
||||||
struct f_val {
|
struct f_val {
|
||||||
btype type; /* T_* */
|
btype type; /* T_* */
|
||||||
union {
|
union bval_long val;
|
||||||
union bval bval;
|
|
||||||
BVAL_ITEMS;
|
|
||||||
|
|
||||||
u64 ec;
|
|
||||||
lcomm lc;
|
|
||||||
ip_addr ip;
|
|
||||||
const net_addr *net;
|
|
||||||
const char *s;
|
|
||||||
const struct f_tree *t;
|
|
||||||
const struct f_trie *ti;
|
|
||||||
const struct f_path_mask *path_mask;
|
|
||||||
struct f_path_mask_item pmi;
|
|
||||||
} val;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define fputip(a) ({ ip_addr *ax = falloc(sizeof(*ax)); *ax = (a); ax; })
|
#define fputip(a) ({ ip_addr *ax = falloc(sizeof(*ax)); *ax = (a); ax; })
|
||||||
|
20
lib/attrs.h
20
lib/attrs.h
@ -11,7 +11,25 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "lib/unaligned.h"
|
#include "lib/unaligned.h"
|
||||||
#include "lib/route.h"
|
|
||||||
|
typedef struct adata {
|
||||||
|
uint length; /* Length of data */
|
||||||
|
byte data[0];
|
||||||
|
} adata;
|
||||||
|
|
||||||
|
extern const adata null_adata; /* adata of length 0 */
|
||||||
|
|
||||||
|
static inline struct adata *
|
||||||
|
lp_alloc_adata(struct linpool *pool, uint len)
|
||||||
|
{
|
||||||
|
struct adata *ad = lp_alloc(pool, sizeof(struct adata) + len);
|
||||||
|
ad->length = len;
|
||||||
|
return ad;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int adata_same(const struct adata *a, const struct adata *b)
|
||||||
|
{ return (a->length == b->length && !memcmp(a->data, b->data, a->length)); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* a-path.c */
|
/* a-path.c */
|
||||||
|
21
lib/route.h
21
lib/route.h
@ -10,6 +10,8 @@
|
|||||||
#ifndef _BIRD_LIB_ROUTE_H_
|
#ifndef _BIRD_LIB_ROUTE_H_
|
||||||
#define _BIRD_LIB_ROUTE_H_
|
#define _BIRD_LIB_ROUTE_H_
|
||||||
|
|
||||||
|
#include "lib/type.h"
|
||||||
|
|
||||||
struct network;
|
struct network;
|
||||||
struct proto;
|
struct proto;
|
||||||
struct cli;
|
struct cli;
|
||||||
@ -163,25 +165,6 @@ const char *ea_custom_name(uint ea);
|
|||||||
#define EA_BIT(n) ((n) << 24) /* Used in bitfield accessors */
|
#define EA_BIT(n) ((n) << 24) /* Used in bitfield accessors */
|
||||||
#define EA_BIT_GET(ea) ((ea) >> 24)
|
#define EA_BIT_GET(ea) ((ea) >> 24)
|
||||||
|
|
||||||
typedef struct adata {
|
|
||||||
uint length; /* Length of data */
|
|
||||||
byte data[0];
|
|
||||||
} adata;
|
|
||||||
|
|
||||||
extern const adata null_adata; /* adata of length 0 */
|
|
||||||
|
|
||||||
static inline struct adata *
|
|
||||||
lp_alloc_adata(struct linpool *pool, uint len)
|
|
||||||
{
|
|
||||||
struct adata *ad = lp_alloc(pool, sizeof(struct adata) + len);
|
|
||||||
ad->length = len;
|
|
||||||
return ad;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int adata_same(const struct adata *a, const struct adata *b)
|
|
||||||
{ return (a->length == b->length && !memcmp(a->data, b->data, a->length)); }
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct ea_list {
|
typedef struct ea_list {
|
||||||
struct ea_list *next; /* In case we have an override list */
|
struct ea_list *next; /* In case we have an override list */
|
||||||
byte flags; /* Flags: EALF_... */
|
byte flags; /* Flags: EALF_... */
|
||||||
|
19
lib/type.h
19
lib/type.h
@ -10,6 +10,7 @@
|
|||||||
#define _BIRD_TYPE_H_
|
#define _BIRD_TYPE_H_
|
||||||
|
|
||||||
#include "lib/birdlib.h"
|
#include "lib/birdlib.h"
|
||||||
|
#include "lib/attrs.h"
|
||||||
|
|
||||||
union bval {
|
union bval {
|
||||||
#define BVAL_ITEMS \
|
#define BVAL_ITEMS \
|
||||||
@ -18,9 +19,25 @@ union bval {
|
|||||||
const struct adata *ptr; /* Generic attribute data inherited from eattrs */ \
|
const struct adata *ptr; /* Generic attribute data inherited from eattrs */ \
|
||||||
const struct adata *ad; /* Generic attribute data inherited from filters */ \
|
const struct adata *ad; /* Generic attribute data inherited from filters */ \
|
||||||
|
|
||||||
BVAL_ITEMS
|
BVAL_ITEMS;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union bval_long {
|
||||||
|
union bval bval; /* For direct assignments */
|
||||||
|
BVAL_ITEMS; /* For item-wise access */
|
||||||
|
|
||||||
|
u64 ec;
|
||||||
|
lcomm lc;
|
||||||
|
ip_addr ip;
|
||||||
|
const net_addr *net;
|
||||||
|
const char *s;
|
||||||
|
const struct f_tree *t;
|
||||||
|
const struct f_trie *ti;
|
||||||
|
const struct f_path_mask *path_mask;
|
||||||
|
struct f_path_mask_item pmi;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Internal types */
|
/* Internal types */
|
||||||
enum btype {
|
enum btype {
|
||||||
/* Nothing. Simply nothing. */
|
/* Nothing. Simply nothing. */
|
||||||
|
Loading…
Reference in New Issue
Block a user