aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pingu_iface.c4
-rw-r--r--pingu_netlink.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/pingu_iface.c b/pingu_iface.c
index 9f63587..c7388b0 100644
--- a/pingu_iface.c
+++ b/pingu_iface.c
@@ -163,7 +163,7 @@ void pingu_iface_gw_action(struct pingu_iface *iface,
break;
}
if (is_default_gw(gw))
- kernel_route_multipath(action, &iface_list, RT_TABLE_MAIN);
+ kernel_route_multipath(RTM_NEWROUTE, &iface_list, RT_TABLE_MAIN);
}
void pingu_iface_update_routes(struct pingu_iface *iface, int action)
@@ -173,7 +173,7 @@ void pingu_iface_update_routes(struct pingu_iface *iface, int action)
if (is_default_gw(route) && iface->has_address)
kernel_route_modify(action, route, iface, RT_TABLE_MAIN);
}
- kernel_route_multipath(action, &iface_list, RT_TABLE_MAIN);
+ kernel_route_multipath(RTM_NEWROUTE, &iface_list, RT_TABLE_MAIN);
}
int pingu_iface_set_route_table(struct pingu_iface *iface, int table)
diff --git a/pingu_netlink.c b/pingu_netlink.c
index 5c63a51..e9781fa 100644
--- a/pingu_netlink.c
+++ b/pingu_netlink.c
@@ -375,8 +375,10 @@ static int add_nexthops(struct nlmsghdr *nlh, size_t nlh_size,
host = pingu_host_find_by_iface(iface);
if ((!iface->balance) || iface->index == 0
|| (host != NULL && host->status == PINGU_HOST_STATUS_OFFLINE)
- || route == NULL)
+ || route == NULL) {
+ iface->has_multipath = 0;
continue;
+ }
iface->has_multipath = 1;
break;
case RTM_DELROUTE:
@@ -430,7 +432,7 @@ int netlink_route_multipath(struct netlink_fd *fd, int action_type,
count = add_nexthops(&req.nlh, sizeof(req), iface_list, action_type);
if (count == 0)
- return 0;
+ req.nlh.nlmsg_type = RTM_DELROUTE;
if (!netlink_talk(fd, &req.nlh, sizeof(req), &req.nlh))
return -1;