mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-13 22:58:42 +00:00
17f91f9e6e
Changes in internal API: * Every route attribute must be defined as struct ea_class somewhere. * Registration of route attributes known at startup must be done by ea_register_init() from protocol build functions. * Every attribute has now its symbol registered in a global symbol table defined as SYM_ATTRIBUTE * All attribute ID's are dynamically allocated. * Attribute value custom formatting hook is defined in the ea_class. * Attribute names are the same for display and filters, always prefixed by protocol name. Also added some unit testing code for filters with route attributes.
43 lines
918 B
C
43 lines
918 B
C
/*
|
|
* Filters: utility functions
|
|
*
|
|
* Copyright 1998 Pavel Machek <pavel@ucw.cz>
|
|
* 2017 Maria Matejka <mq@ucw.cz>
|
|
*
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
*/
|
|
|
|
#include "nest/bird.h"
|
|
#include "conf/conf.h"
|
|
#include "filter/filter.h"
|
|
#include "filter/f-inst.h"
|
|
#include "lib/idm.h"
|
|
#include "nest/protocol.h"
|
|
#include "nest/rt.h"
|
|
|
|
#define P(a,b) ((a<<8) | b)
|
|
|
|
const char *
|
|
filter_name(const struct filter *filter)
|
|
{
|
|
if (!filter)
|
|
return "ACCEPT";
|
|
else if (filter == FILTER_REJECT)
|
|
return "REJECT";
|
|
else if (!filter->sym)
|
|
return "(unnamed)";
|
|
else
|
|
return filter->sym->name;
|
|
}
|
|
|
|
struct filter *f_new_where(struct f_inst *where)
|
|
{
|
|
struct f_inst *cond = f_new_inst(FI_CONDITION, where,
|
|
f_new_inst(FI_DIE, F_ACCEPT),
|
|
f_new_inst(FI_DIE, F_REJECT));
|
|
|
|
struct filter *f = cfg_allocz(sizeof(struct filter));
|
|
f->root = f_linearize(cond);
|
|
return f;
|
|
}
|