diff options
Diffstat (limited to 'src/charon/kernel')
-rw-r--r-- | src/charon/kernel/kernel_interface.c | 7 | ||||
-rw-r--r-- | src/charon/kernel/kernel_interface.h | 6 | ||||
-rw-r--r-- | src/charon/kernel/kernel_net.h | 5 |
3 files changed, 13 insertions, 5 deletions
diff --git a/src/charon/kernel/kernel_interface.c b/src/charon/kernel/kernel_interface.c index 4e56a0762..7a0ffa1da 100644 --- a/src/charon/kernel/kernel_interface.c +++ b/src/charon/kernel/kernel_interface.c @@ -160,9 +160,10 @@ static status_t del_policy(private_kernel_interface_t *this, /** * Implementation of kernel_interface_t.get_source_addr */ -static host_t *get_source_addr(private_kernel_interface_t *this, host_t *dest) +static host_t *get_source_addr(private_kernel_interface_t *this, + host_t *dest, host_t *src) { - return this->net->get_source_addr(this->net, dest); + return this->net->get_source_addr(this->net, dest, src); } /** @@ -329,7 +330,7 @@ kernel_interface_t *kernel_interface_create() this->public.query_policy = (status_t(*)(kernel_interface_t*,traffic_selector_t*,traffic_selector_t*,policy_dir_t,u_int32_t*))query_policy; this->public.del_policy = (status_t(*)(kernel_interface_t*,traffic_selector_t*,traffic_selector_t*,policy_dir_t))del_policy; - this->public.get_source_addr = (host_t*(*)(kernel_interface_t*, host_t *dest))get_source_addr; + this->public.get_source_addr = (host_t*(*)(kernel_interface_t*, host_t *dest, host_t *src))get_source_addr; this->public.get_nexthop = (host_t*(*)(kernel_interface_t*, host_t *dest))get_nexthop; this->public.get_interface = (char*(*)(kernel_interface_t*,host_t*))get_interface; this->public.create_address_enumerator = (enumerator_t*(*)(kernel_interface_t*,bool,bool))create_address_enumerator; diff --git a/src/charon/kernel/kernel_interface.h b/src/charon/kernel/kernel_interface.h index 49faf7c0c..c87e82526 100644 --- a/src/charon/kernel/kernel_interface.h +++ b/src/charon/kernel/kernel_interface.h @@ -235,11 +235,15 @@ struct kernel_interface_t { * * Does a route lookup to get the source address used to reach dest. * The returned host is allocated and must be destroyed. + * An optional src address can be used to check if a route is available + * for given source to dest. * * @param dest target destination address + * @param src source address to check, or NULL * @return outgoing source address, NULL if unreachable */ - host_t* (*get_source_addr)(kernel_interface_t *this, host_t *dest); + host_t* (*get_source_addr)(kernel_interface_t *this, + host_t *dest, host_t *src); /** * Get the next hop for a destination. diff --git a/src/charon/kernel/kernel_net.h b/src/charon/kernel/kernel_net.h index 998fef0f1..525a9de0f 100644 --- a/src/charon/kernel/kernel_net.h +++ b/src/charon/kernel/kernel_net.h @@ -42,11 +42,14 @@ struct kernel_net_t { * * Does a route lookup to get the source address used to reach dest. * The returned host is allocated and must be destroyed. + * An optional src address can be used to check if a route is available + * for given source to dest. * * @param dest target destination address + * @param src source address to check, or NULL * @return outgoing source address, NULL if unreachable */ - host_t* (*get_source_addr)(kernel_net_t *this, host_t *dest); + host_t* (*get_source_addr)(kernel_net_t *this, host_t *dest, host_t *src); /** * Get the next hop for a destination. |