aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/plugins/kernel_netlink/kernel_netlink_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/plugins/kernel_netlink/kernel_netlink_net.c')
-rw-r--r--src/charon/plugins/kernel_netlink/kernel_netlink_net.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/charon/plugins/kernel_netlink/kernel_netlink_net.c b/src/charon/plugins/kernel_netlink/kernel_netlink_net.c
index 1037c8084..ea52d6e70 100644
--- a/src/charon/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/charon/plugins/kernel_netlink/kernel_netlink_net.c
@@ -789,8 +789,9 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
return NULL;
}
this->mutex->lock(this->mutex);
- current = out;
- while (NLMSG_OK(current, len))
+
+ for (current = out; NLMSG_OK(current, len);
+ current = NLMSG_NEXT(current, len))
{
switch (current->nlmsg_type)
{
@@ -832,20 +833,20 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
}
if (msg->rtm_dst_len <= best)
{ /* not better than a previous one */
- goto next;
+ continue;
}
if (this->routing_table != 0 &&
msg->rtm_table == this->routing_table)
{ /* route is from our own ipsec routing table */
- goto next;
+ continue;
}
if (rta_oif && !is_interface_up(this, rta_oif))
{ /* interface is down */
- goto next;
+ continue;
}
if (!addr_in_subnet(chunk, rta_dst, msg->rtm_dst_len))
{ /* route destination does not contain dest */
- goto next;
+ continue;
}
if (nexthop)
@@ -857,7 +858,7 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
gtw = host_create_from_chunk(msg->rtm_family, rta_gtw, 0);
best = msg->rtm_dst_len;
}
- goto next;
+ continue;
}
if (rta_src.ptr)
{
@@ -873,7 +874,7 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
src = new_src;
best = msg->rtm_dst_len;
}
- goto next;
+ continue;
}
if (rta_gtw.ptr)
{ /* no source, but a gateway. Lookup source to reach gtw. */
@@ -886,13 +887,11 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
src = new_src;
best = msg->rtm_dst_len;
}
- goto next;
+ continue;
}
- goto next;
+ continue;
}
default:
- next:
- current = NLMSG_NEXT(current, len);
continue;
}
break;