1 From 7c053fe7584b7b4fe4effc09624ae620304d6717 Mon Sep 17 00:00:00 2001
2 From: Juliusz Chroboczek <jch@irif.fr>
3 Date: Tue, 29 Mar 2022 19:26:50 +0200
4 Subject: [PATCH] Export add_filters and simplify interface.
7 configuration.c | 32 +++++++++++++++++++++++++-------
8 configuration.h | 6 ++++++
9 2 files changed, 31 insertions(+), 7 deletions(-)
13 @@ -693,9 +693,26 @@ parse_ifconf(int c, gnc_t gnc, void *clo
18 -add_filter(struct filter *filter, struct filter **filters)
20 +add_filter(struct filter *filter, int type)
22 + struct filter **filters;
24 + case FILTER_TYPE_INPUT:
25 + filters = &input_filters;
27 + case FILTER_TYPE_OUTPUT:
28 + filters = &output_filters;
30 + case FILTER_TYPE_REDISTRIBUTE:
31 + filters = &redistribute_filters;
33 + case FILTER_TYPE_INSTALL:
34 + filters = &install_filters;
39 if(*filters == NULL) {
42 @@ -707,6 +724,7 @@ add_filter(struct filter *filter, struct
50 @@ -1012,7 +1030,7 @@ parse_config_line(int c, gnc_t gnc, void
51 c = parse_filter(c, gnc, closure, &filter);
54 - add_filter(filter, &input_filters);
55 + add_filter(filter, FILTER_TYPE_INPUT);
56 } else if(strcmp(token, "out") == 0) {
57 struct filter *filter;
59 @@ -1020,7 +1038,7 @@ parse_config_line(int c, gnc_t gnc, void
60 c = parse_filter(c, gnc, closure, &filter);
63 - add_filter(filter, &output_filters);
64 + add_filter(filter, FILTER_TYPE_OUTPUT);
65 } else if(strcmp(token, "redistribute") == 0) {
66 struct filter *filter;
68 @@ -1028,7 +1046,7 @@ parse_config_line(int c, gnc_t gnc, void
69 c = parse_filter(c, gnc, closure, &filter);
72 - add_filter(filter, &redistribute_filters);
73 + add_filter(filter, FILTER_TYPE_REDISTRIBUTE);
74 } else if(strcmp(token, "install") == 0) {
75 struct filter *filter;
77 @@ -1036,7 +1054,7 @@ parse_config_line(int c, gnc_t gnc, void
78 c = parse_filter(c, gnc, closure, &filter);
81 - add_filter(filter, &install_filters);
82 + add_filter(filter, FILTER_TYPE_INSTALL);
83 } else if(strcmp(token, "interface") == 0) {
84 struct interface_conf *if_conf;
85 c = parse_ifconf(c, gnc, closure, &if_conf);
86 @@ -1360,7 +1378,7 @@ finalise_config()
87 filter->proto = RTPROT_BABEL_LOCAL;
88 filter->plen_le = 128;
89 filter->src_plen_le = 128;
90 - add_filter(filter, &redistribute_filters);
91 + add_filter(filter, FILTER_TYPE_REDISTRIBUTE);
93 while(interface_confs) {
94 struct interface_conf *if_conf;
97 @@ -29,6 +29,11 @@ THE SOFTWARE.
98 #define CONFIG_ACTION_UNMONITOR 4
99 #define CONFIG_ACTION_NO 5
101 +#define FILTER_TYPE_INPUT 0
102 +#define FILTER_TYPE_OUTPUT 1
103 +#define FILTER_TYPE_REDISTRIBUTE 2
104 +#define FILTER_TYPE_INSTALL 3
106 struct filter_result {
107 unsigned int add_metric; /* allow = 0, deny = INF, metric = <0..INF> */
108 unsigned char *src_prefix;
109 @@ -60,6 +65,7 @@ void flush_ifconf(struct interface_conf
111 int parse_config_from_file(const char *filename, int *line_return);
112 int parse_config_from_string(char *string, int n, const char **message_return);
113 +int add_filter(struct filter *filter, int type);
114 void renumber_filters(void);
116 int input_filter(const unsigned char *id,