Init rule variable iif oif and to, from

While foreign rules are added the network part is not attached.
attach manager to rules and use it in routing_policy_rule_free.
This commit is contained in:
Susant Sahani
2017-12-21 21:27:45 +09:00
committed by Yu Watanabe
parent 281bb5c110
commit 36e6e28bce
4 changed files with 15 additions and 9 deletions
+2 -2
View File
@@ -726,11 +726,11 @@ static int manager_rtnl_process_link(sd_netlink *rtnl, sd_netlink_message *messa
int manager_rtnl_process_rule(sd_netlink *rtnl, sd_netlink_message *message, void *userdata) {
uint8_t tos = 0, to_prefixlen = 0, from_prefixlen = 0;
union in_addr_union to = {}, from = {};
RoutingPolicyRule *rule = NULL;
union in_addr_union to, from;
uint32_t fwmark = 0, table = 0;
char *iif = NULL, *oif = NULL;
Manager *m = userdata;
char *iif, *oif;
uint16_t type;
int family;
int r;
+1
View File
@@ -26,6 +26,7 @@ typedef struct NetworkConfigSection NetworkConfigSection;
#include "networkd-network.h"
struct Route {
Manager *m;
Network *network;
NetworkConfigSection *section;
+10 -7
View File
@@ -60,10 +60,11 @@ void routing_policy_rule_free(RoutingPolicyRule *rule) {
network_config_section_free(rule->section);
}
if (rule->network->manager) {
set_remove(rule->network->manager->rules, rule);
set_remove(rule->network->manager->rules_foreign, rule);
}
}
if (rule->m) {
set_remove(rule->m->rules, rule);
set_remove(rule->m->rules_foreign, rule);
}
free(rule->iif);
@@ -236,7 +237,8 @@ int routing_policy_rule_make_local(Manager *m, RoutingPolicyRule *rule) {
return -ENOENT;
}
static int routing_policy_rule_add_internal(Set **rules,
static int routing_policy_rule_add_internal(Manager *m,
Set **rules,
int family,
const union in_addr_union *from,
uint8_t from_prefixlen,
@@ -258,6 +260,7 @@ static int routing_policy_rule_add_internal(Set **rules,
if (r < 0)
return r;
rule->m = m;
rule->family = family;
rule->from = *from;
rule->from_prefixlen = from_prefixlen;
@@ -298,7 +301,7 @@ int routing_policy_rule_add(Manager *m,
char *oif,
RoutingPolicyRule **ret) {
return routing_policy_rule_add_internal(&m->rules, family, from, from_prefixlen, to, to_prefixlen, tos, fwmark, table, iif, oif, ret);
return routing_policy_rule_add_internal(m, &m->rules, family, from, from_prefixlen, to, to_prefixlen, tos, fwmark, table, iif, oif, ret);
}
int routing_policy_rule_add_foreign(Manager *m,
@@ -313,7 +316,7 @@ int routing_policy_rule_add_foreign(Manager *m,
char *iif,
char *oif,
RoutingPolicyRule **ret) {
return routing_policy_rule_add_internal(&m->rules_foreign, family, from, from_prefixlen, to, to_prefixlen, tos, fwmark, table, iif, oif, ret);
return routing_policy_rule_add_internal(m, &m->rules_foreign, family, from, from_prefixlen, to, to_prefixlen, tos, fwmark, table, iif, oif, ret);
}
static int routing_policy_rule_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
@@ -33,8 +33,10 @@ typedef struct RoutingPolicyRule RoutingPolicyRule;
typedef struct Network Network;
typedef struct Link Link;
typedef struct NetworkConfigSection NetworkConfigSection;
typedef struct Manager Manager;
struct RoutingPolicyRule {
Manager *m;
Network *network;
Link *link;
NetworkConfigSection *section;