Silently install route again, even if it did not change.

Address/interface changes can cause the route to disappear. Afterwards
the route might look the same but that does not mean it is still installed.
This commit is contained in:
Tobias Brunner 2011-11-04 10:03:48 +01:00
parent 25d59e9e2d
commit 051226d5c0
2 changed files with 12 additions and 2 deletions

View File

@ -2154,7 +2154,12 @@ static status_t add_policy_internal(private_kernel_netlink_ipsec_t *this,
{
route_entry_t *old = policy->route;
if (route_entry_equals(old, route))
{ /* keep previously installed route */
{ /* keep previously installed route. since it might have
* still been removed by an address change, we install it
* again but ignore the result */
hydra->kernel_interface->add_route(hydra->kernel_interface,
route->dst_net, route->prefixlen, route->gateway,
route->src_ip, route->if_name);
this->mutex->unlock(this->mutex);
route_entry_destroy(route);
return SUCCESS;

View File

@ -2016,7 +2016,12 @@ static status_t add_policy_internal(private_kernel_pfkey_ipsec_t *this,
{
route_entry_t *old = policy->route;
if (route_entry_equals(old, route))
{ /* keep previously installed route */
{ /* keep previously installed route. since it might have
* still been removed by an address change, we install it
* again but ignore the result */
hydra->kernel_interface->add_route(hydra->kernel_interface,
route->dst_net, route->prefixlen, route->gateway,
route->src_ip, route->if_name);
this->mutex->unlock(this->mutex);
route_entry_destroy(route);
return SUCCESS;