babeld: add add_filter function
[feed/routing.git] / babeld / patches / 000-export-add-filters-and-simplify-interface.patch
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.
5
6 ---
7 configuration.c | 32 +++++++++++++++++++++++++-------
8 configuration.h | 6 ++++++
9 2 files changed, 31 insertions(+), 7 deletions(-)
10
11 --- a/configuration.c
12 +++ b/configuration.c
13 @@ -693,9 +693,26 @@ parse_ifconf(int c, gnc_t gnc, void *clo
14 return -2;
15 }
16
17 -static void
18 -add_filter(struct filter *filter, struct filter **filters)
19 +int
20 +add_filter(struct filter *filter, int type)
21 {
22 + struct filter **filters;
23 + switch(type) {
24 + case FILTER_TYPE_INPUT:
25 + filters = &input_filters;
26 + break;
27 + case FILTER_TYPE_OUTPUT:
28 + filters = &output_filters;
29 + break;
30 + case FILTER_TYPE_REDISTRIBUTE:
31 + filters = &redistribute_filters;
32 + break;
33 + case FILTER_TYPE_INSTALL:
34 + filters = &install_filters;
35 + break;
36 + default:
37 + return -1;
38 + }
39 if(*filters == NULL) {
40 filter->next = NULL;
41 *filters = filter;
42 @@ -707,6 +724,7 @@ add_filter(struct filter *filter, struct
43 filter->next = NULL;
44 f->next = filter;
45 }
46 + return 1;
47 }
48
49 static void
50 @@ -1012,7 +1030,7 @@ parse_config_line(int c, gnc_t gnc, void
51 c = parse_filter(c, gnc, closure, &filter);
52 if(c < -1)
53 goto fail;
54 - add_filter(filter, &input_filters);
55 + add_filter(filter, FILTER_TYPE_INPUT);
56 } else if(strcmp(token, "out") == 0) {
57 struct filter *filter;
58 if(config_finalised)
59 @@ -1020,7 +1038,7 @@ parse_config_line(int c, gnc_t gnc, void
60 c = parse_filter(c, gnc, closure, &filter);
61 if(c < -1)
62 goto fail;
63 - add_filter(filter, &output_filters);
64 + add_filter(filter, FILTER_TYPE_OUTPUT);
65 } else if(strcmp(token, "redistribute") == 0) {
66 struct filter *filter;
67 if(config_finalised)
68 @@ -1028,7 +1046,7 @@ parse_config_line(int c, gnc_t gnc, void
69 c = parse_filter(c, gnc, closure, &filter);
70 if(c < -1)
71 goto fail;
72 - add_filter(filter, &redistribute_filters);
73 + add_filter(filter, FILTER_TYPE_REDISTRIBUTE);
74 } else if(strcmp(token, "install") == 0) {
75 struct filter *filter;
76 if(config_finalised)
77 @@ -1036,7 +1054,7 @@ parse_config_line(int c, gnc_t gnc, void
78 c = parse_filter(c, gnc, closure, &filter);
79 if(c < -1)
80 goto fail;
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);
92
93 while(interface_confs) {
94 struct interface_conf *if_conf;
95 --- a/configuration.h
96 +++ b/configuration.h
97 @@ -29,6 +29,11 @@ THE SOFTWARE.
98 #define CONFIG_ACTION_UNMONITOR 4
99 #define CONFIG_ACTION_NO 5
100
101 +#define FILTER_TYPE_INPUT 0
102 +#define FILTER_TYPE_OUTPUT 1
103 +#define FILTER_TYPE_REDISTRIBUTE 2
104 +#define FILTER_TYPE_INSTALL 3
105 +
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
110
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);
115
116 int input_filter(const unsigned char *id,