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:
@@ -2154,7 +2154,12 @@ static status_t add_policy_internal(private_kernel_netlink_ipsec_t *this,
|
|||||||
{
|
{
|
||||||
route_entry_t *old = policy->route;
|
route_entry_t *old = policy->route;
|
||||||
if (route_entry_equals(old, 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);
|
this->mutex->unlock(this->mutex);
|
||||||
route_entry_destroy(route);
|
route_entry_destroy(route);
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
@@ -2016,7 +2016,12 @@ static status_t add_policy_internal(private_kernel_pfkey_ipsec_t *this,
|
|||||||
{
|
{
|
||||||
route_entry_t *old = policy->route;
|
route_entry_t *old = policy->route;
|
||||||
if (route_entry_equals(old, 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);
|
this->mutex->unlock(this->mutex);
|
||||||
route_entry_destroy(route);
|
route_entry_destroy(route);
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user