projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert "vlan: reset device state on init"
[project/netifd.git]
/
iprule.c
diff --git
a/iprule.c
b/iprule.c
index
7172f29
..
4e3dd15
100644
(file)
--- a/
iprule.c
+++ b/
iprule.c
@@
-15,7
+15,6
@@
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
-#include <unistd.h>
#include <arpa/inet.h>
#include <arpa/inet.h>
@@
-29,6
+28,7
@@
struct vlist_tree iprules;
static bool iprules_flushed = false;
struct vlist_tree iprules;
static bool iprules_flushed = false;
+static unsigned int iprules_counter[2];
enum {
RULE_INTERFACE_IN,
enum {
RULE_INTERFACE_IN,
@@
-59,7
+59,7
@@
static const struct blobmsg_policy rule_attr[__RULE_MAX] = {
[RULE_GOTO] = { .name = "goto", .type = BLOBMSG_TYPE_INT32 },
};
[RULE_GOTO] = { .name = "goto", .type = BLOBMSG_TYPE_INT32 },
};
-const struct
config
_param_list rule_attr_list = {
+const struct
uci_blob
_param_list rule_attr_list = {
.n_params = __RULE_MAX,
.params = rule_attr,
};
.n_params = __RULE_MAX,
.params = rule_attr,
};
@@
-111,6
+111,7
@@
iprule_add(struct blob_attr *attr, bool v6)
return;
rule->flags = v6 ? IPRULE_INET6 : IPRULE_INET4;
return;
rule->flags = v6 ? IPRULE_INET6 : IPRULE_INET4;
+ rule->order = iprules_counter[rule->flags]++;
if ((cur = tb[RULE_INVERT]) != NULL)
rule->invert = blobmsg_get_bool(cur);
if ((cur = tb[RULE_INVERT]) != NULL)
rule->invert = blobmsg_get_bool(cur);
@@
-197,13
+198,6
@@
iprule_add(struct blob_attr *attr, bool v6)
rule->flags |= IPRULE_GOTO;
}
rule->flags |= IPRULE_GOTO;
}
- /* trigger flush of existing rules when adding first uci rule the first time */
- if (!iprules_flushed)
- {
- system_flush_iprules();
- iprules_flushed = true;
- }
-
vlist_add(&iprules, &rule->node, &rule->flags);
return;
vlist_add(&iprules, &rule->node, &rule->flags);
return;
@@
-214,6
+208,13
@@
error:
void
iprule_update_start(void)
{
void
iprule_update_start(void)
{
+ if (!iprules_flushed) {
+ system_flush_iprules();
+ iprules_flushed = true;
+ }
+
+ iprules_counter[0] = 1;
+ iprules_counter[1] = 1;
vlist_update(&iprules);
}
vlist_update(&iprules);
}