1999-01-16 00:49:17 +08:00
|
|
|
/*
|
1999-03-17 22:29:39 +08:00
|
|
|
* BIRD Internet Routing Daemon -- Filters
|
1999-01-16 00:49:17 +08:00
|
|
|
*
|
1999-03-17 22:29:39 +08:00
|
|
|
* (c) 1999 Pavel Machek <pavel@ucw.cz>
|
1999-01-16 00:49:17 +08:00
|
|
|
*
|
|
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _BIRD_FILT_H_
|
|
|
|
#define _BIRD_FILT_H_
|
|
|
|
|
|
|
|
#include "lib/resource.h"
|
1999-04-07 20:11:08 +08:00
|
|
|
#include "lib/ip.h"
|
1999-01-16 00:49:17 +08:00
|
|
|
|
1999-03-09 04:30:06 +08:00
|
|
|
struct f_inst { /* Instruction */
|
|
|
|
struct f_inst *next; /* Structure is 16 bytes, anyway */
|
1999-01-16 00:49:17 +08:00
|
|
|
int code;
|
|
|
|
void *arg1, *arg2;
|
|
|
|
};
|
|
|
|
|
1999-04-07 20:11:08 +08:00
|
|
|
struct prefix {
|
|
|
|
ip_addr ip;
|
|
|
|
int len;
|
|
|
|
};
|
|
|
|
|
1999-03-09 04:30:06 +08:00
|
|
|
struct f_val {
|
|
|
|
int type;
|
|
|
|
union {
|
|
|
|
int i;
|
1999-04-07 20:11:08 +08:00
|
|
|
struct prefix *px;
|
|
|
|
char *s;
|
1999-03-09 04:30:06 +08:00
|
|
|
} val;
|
|
|
|
};
|
|
|
|
|
1999-03-17 22:29:39 +08:00
|
|
|
struct filter {
|
|
|
|
char *name;
|
|
|
|
struct f_inst *root;
|
|
|
|
};
|
|
|
|
|
1999-01-16 02:13:55 +08:00
|
|
|
void filters_postconfig(void);
|
1999-03-09 04:30:06 +08:00
|
|
|
struct f_inst *f_new_inst(void);
|
1999-03-03 03:49:28 +08:00
|
|
|
|
1999-04-06 04:10:31 +08:00
|
|
|
int f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struct linpool *tmp_pool);
|
|
|
|
char *filter_name(struct filter *filter);
|
1999-03-17 22:29:39 +08:00
|
|
|
|
1999-04-07 20:11:08 +08:00
|
|
|
|
|
|
|
#define F_NOP 0
|
1999-04-06 04:10:31 +08:00
|
|
|
#define F_ACCEPT 1 /* Need to preserve ordering: accepts < rejects! */
|
|
|
|
#define F_MODIFY 2 /* FIXME: Introduce modification flags instead? */
|
|
|
|
#define F_REJECT 3
|
1999-03-17 18:19:07 +08:00
|
|
|
#define F_ERROR 4
|
|
|
|
#define F_QUITBIRD 5
|
1999-01-16 02:13:55 +08:00
|
|
|
|
1999-04-06 04:10:31 +08:00
|
|
|
#define FILTER_ACCEPT NULL
|
|
|
|
#define FILTER_REJECT ((void *) 1)
|
|
|
|
|
1999-03-30 04:21:28 +08:00
|
|
|
/* Type numbers must be in 0..0xff range */
|
|
|
|
#define T_MASK 0xff
|
|
|
|
|
|
|
|
/* Internal types */
|
1999-03-09 04:30:06 +08:00
|
|
|
#define T_VOID 0
|
1999-03-17 18:19:07 +08:00
|
|
|
#define T_RETURN 1
|
1999-03-30 04:21:28 +08:00
|
|
|
|
|
|
|
/* User visible types, which fit in int */
|
|
|
|
#define T_INT 0x10
|
|
|
|
#define T_BOOL 0x11
|
|
|
|
#define T_PAIR 0x12
|
|
|
|
#define T_ENUM 0x13
|
|
|
|
|
|
|
|
/* Bigger ones */
|
|
|
|
#define T_IP 0x20
|
|
|
|
#define T_PREFIX 0x21
|
|
|
|
#define T_STRING 0x22
|
|
|
|
|
|
|
|
#define T_SET 0x80
|
1999-03-17 18:19:07 +08:00
|
|
|
|
1999-01-16 00:49:17 +08:00
|
|
|
#endif
|