projects
/
project
/
netifd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nterface-ip: remove superfluous iface check in interface_ip_set_enabled()
[project/netifd.git]
/
interface-ip.c
diff --git
a/interface-ip.c
b/interface-ip.c
index
6ccc03e
..
1e49fe6
100644
(file)
--- a/
interface-ip.c
+++ b/
interface-ip.c
@@
-204,7
+204,7
@@
__find_ip_route_target(struct interface_ip_settings *ip, union if_addr *a,
if (route->flags & DEVROUTE_TABLE)
continue;
if (route->flags & DEVROUTE_TABLE)
continue;
- if (!*res || route->mask
<
(*res)->mask)
+ if (!*res || route->mask
>
(*res)->mask)
*res = route;
}
}
*res = route;
}
}
@@
-229,23
+229,17
@@
interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
{
struct device_route *route, *r_next = NULL;
bool defaultroute_target = false;
{
struct device_route *route, *r_next = NULL;
bool defaultroute_target = false;
+ union if_addr addr_zero;
int addrsize = v6 ? sizeof(addr->in6) : sizeof(addr->in);
int addrsize = v6 ? sizeof(addr->in6) : sizeof(addr->in);
- route = calloc(1, sizeof(*route));
- if (!route)
- return NULL;
-
- route->flags = v6 ? DEVADDR_INET6 : DEVADDR_INET4;
- route->mask = v6 ? 128 : 32;
- if (memcmp(&route->addr, addr, addrsize) == 0)
+ memset(&addr_zero, 0, sizeof(addr_zero));
+ if (memcmp(&addr_zero, addr, addrsize) == 0)
defaultroute_target = true;
defaultroute_target = true;
- else
- memcpy(&route->addr, addr, addrsize);
if (iface) {
/* look for locally addressable target first */
if (interface_ip_find_addr_target(iface, addr, v6))
if (iface) {
/* look for locally addressable target first */
if (interface_ip_find_addr_target(iface, addr, v6))
-
goto don
e;
+
return ifac
e;
/* do not stop at the first route, let the lookup compare
* masks to find the best match */
/* do not stop at the first route, let the lookup compare
* masks to find the best match */
@@
-254,7
+248,7
@@
interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
vlist_for_each_element(&interfaces, iface, node) {
/* look for locally addressable target first */
if (interface_ip_find_addr_target(iface, addr, v6))
vlist_for_each_element(&interfaces, iface, node) {
/* look for locally addressable target first */
if (interface_ip_find_addr_target(iface, addr, v6))
-
goto don
e;
+
return ifac
e;
/* do not stop at the first route, let the lookup compare
* masks to find the best match */
/* do not stop at the first route, let the lookup compare
* masks to find the best match */
@@
-262,22
+256,27
@@
interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
}
}
}
}
-done:
- if (!r_next) {
- free(route);
+ if (!r_next)
return NULL;
return NULL;
- }
iface = r_next->iface;
iface = r_next->iface;
+ if (defaultroute_target)
+ return iface;
+
+ route = calloc(1, sizeof(*route));
+ if (!route)
+ return NULL;
+
+ route->flags = v6 ? DEVADDR_INET6 : DEVADDR_INET4;
+ route->mask = v6 ? 128 : 32;
+ memcpy(&route->addr, addr, addrsize);
memcpy(&route->nexthop, &r_next->nexthop, sizeof(route->nexthop));
route->mtu = r_next->mtu;
route->metric = r_next->metric;
route->table = r_next->table;
route->iface = iface;
memcpy(&route->nexthop, &r_next->nexthop, sizeof(route->nexthop));
route->mtu = r_next->mtu;
route->metric = r_next->metric;
route->table = r_next->table;
route->iface = iface;
- if (defaultroute_target)
- free(route);
- else
- vlist_add(&iface->host_routes, &route->node, route);
+ vlist_add(&iface->host_routes, &route->node, route);
+
return iface;
}
return iface;
}
@@
-995,8
+994,10
@@
static void interface_update_prefix_assignments(struct device_prefix *prefix, bo
}
entry = calloc(1, sizeof(*entry));
}
entry = calloc(1, sizeof(*entry));
- if (!entry)
+ if (!entry) {
+ free(c);
continue;
continue;
+ }
entry->node.key = c;
avl_insert(&assign_later, &entry->node);
entry->node.key = c;
avl_insert(&assign_later, &entry->node);
@@
-1441,7
+1442,7
@@
void interface_ip_set_enabled(struct interface_ip_settings *ip, bool enabled)
if (!strcmp(a->name, ip->iface->name))
interface_set_prefix_address(a, c, ip->iface, enabled);
if (!strcmp(a->name, ip->iface->name))
interface_set_prefix_address(a, c, ip->iface, enabled);
- if (ip->iface
&& ip->iface
->policy_rules_set != enabled &&
+ if (ip->iface->policy_rules_set != enabled &&
ip->iface->l3_dev.dev) {
set_ip_lo_policy(enabled, true, ip->iface);
set_ip_lo_policy(enabled, false, ip->iface);
ip->iface->l3_dev.dev) {
set_ip_lo_policy(enabled, true, ip->iface);
set_ip_lo_policy(enabled, false, ip->iface);