Install virtual IPs via interface name, and use an interface lookup where required

This commit is contained in:
Martin Willi
2012-11-29 10:22:51 +01:00
parent 0a54d3e1a1
commit b185cdd16d
9 changed files with 49 additions and 55 deletions
+9 -2
View File
@@ -824,8 +824,15 @@ METHOD(child_sa_t, add_policies, status_t,
*/
static void reinstall_vip(host_t *vip, host_t *me)
{
hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1);
hydra->kernel_interface->add_ip(hydra->kernel_interface, vip, -1, me);
char *iface;
if (hydra->kernel_interface->get_interface(hydra->kernel_interface,
me, &iface))
{
hydra->kernel_interface->del_ip(hydra->kernel_interface, vip, -1);
hydra->kernel_interface->add_ip(hydra->kernel_interface, vip, -1, iface);
free(iface);
}
}
METHOD(child_sa_t, update, status_t,
+16 -5
View File
@@ -741,15 +741,26 @@ METHOD(ike_sa_t, add_virtual_ip, void,
{
if (local)
{
DBG1(DBG_IKE, "installing new virtual IP %H", ip);
if (hydra->kernel_interface->add_ip(hydra->kernel_interface,
ip, -1, this->my_host) == SUCCESS)
char *iface;
if (hydra->kernel_interface->get_interface(hydra->kernel_interface,
this->my_host, &iface))
{
this->my_vips->insert_last(this->my_vips, ip->clone(ip));
DBG1(DBG_IKE, "installing new virtual IP %H", ip);
if (hydra->kernel_interface->add_ip(hydra->kernel_interface,
ip, -1, iface) == SUCCESS)
{
this->my_vips->insert_last(this->my_vips, ip->clone(ip));
}
else
{
DBG1(DBG_IKE, "installing virtual IP %H failed", ip);
}
free(iface);
}
else
{
DBG1(DBG_IKE, "installing virtual IP %H failed", ip);
DBG1(DBG_IKE, "looking up interface for virtual IP %H failed", ip);
}
}
else