kernel-libipsec: Ignore failures when installing routes for multicast or broadcast policies
This commit is contained in:
@@ -398,8 +398,30 @@ static bool install_route(private_kernel_libipsec_ipsec_t *this,
|
|||||||
if (hydra->kernel_interface->get_address_by_ts(hydra->kernel_interface,
|
if (hydra->kernel_interface->get_address_by_ts(hydra->kernel_interface,
|
||||||
src_ts, &src_ip, &is_virtual) != SUCCESS)
|
src_ts, &src_ip, &is_virtual) != SUCCESS)
|
||||||
{
|
{
|
||||||
|
traffic_selector_t *multicast, *broadcast = NULL;
|
||||||
|
bool ignore = FALSE;
|
||||||
|
|
||||||
this->mutex->unlock(this->mutex);
|
this->mutex->unlock(this->mutex);
|
||||||
return FALSE;
|
switch (src_ts->get_type(src_ts))
|
||||||
|
{
|
||||||
|
case TS_IPV4_ADDR_RANGE:
|
||||||
|
multicast = traffic_selector_create_from_cidr("224.0.0.0/4",
|
||||||
|
0, 0, 0xffff);
|
||||||
|
broadcast = traffic_selector_create_from_cidr("255.255.255.255/32",
|
||||||
|
0, 0, 0xffff);
|
||||||
|
break;
|
||||||
|
case TS_IPV6_ADDR_RANGE:
|
||||||
|
multicast = traffic_selector_create_from_cidr("ff00::/8",
|
||||||
|
0, 0, 0xffff);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
ignore = src_ts->is_contained_in(src_ts, multicast);
|
||||||
|
ignore |= broadcast && src_ts->is_contained_in(src_ts, broadcast);
|
||||||
|
multicast->destroy(multicast);
|
||||||
|
DESTROY_IF(broadcast);
|
||||||
|
return ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT(route,
|
INIT(route,
|
||||||
|
|||||||
Reference in New Issue
Block a user