summary refs log tree commit diff
path: root/pkgs/tools/networking/keepalived
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2015-06-27 23:19:05 -0700
committerWilliam A. Kennington III <william@wkennington.com>2015-06-27 23:19:05 -0700
commit90d041b4b5e530b8c818cfa0d0395b7db2ff1d35 (patch)
tree5d5c2d4592e6c980eb5582db7267cf906c8f8dd5 /pkgs/tools/networking/keepalived
parent3ea1c5bc0c40342e4270443d6f8808210de4a045 (diff)
downloadnixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar.gz
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar.bz2
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar.lz
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar.xz
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.tar.zst
nixpkgs-90d041b4b5e530b8c818cfa0d0395b7db2ff1d35.zip
keepalived: Fix ip release
Diffstat (limited to 'pkgs/tools/networking/keepalived')
-rw-r--r--pkgs/tools/networking/keepalived/default.nix3
-rw-r--r--pkgs/tools/networking/keepalived/fix-ip-release.patch39
2 files changed, 42 insertions, 0 deletions
diff --git a/pkgs/tools/networking/keepalived/default.nix b/pkgs/tools/networking/keepalived/default.nix
index 1e4e6f82092..8ad0021e6ae 100644
--- a/pkgs/tools/networking/keepalived/default.nix
+++ b/pkgs/tools/networking/keepalived/default.nix
@@ -10,6 +10,9 @@ stdenv.mkDerivation rec {
 
   buildInputs = [ openssl net_snmp libnl ];
 
+  # Remove in 1.2.18
+  patches = [ ./fix-ip-release.patch ];
+
   postPatch = ''
     sed -i 's,$(DESTDIR)/usr/share,$out/share,g' Makefile.in
   '';
diff --git a/pkgs/tools/networking/keepalived/fix-ip-release.patch b/pkgs/tools/networking/keepalived/fix-ip-release.patch
new file mode 100644
index 00000000000..0fa828a3ee5
--- /dev/null
+++ b/pkgs/tools/networking/keepalived/fix-ip-release.patch
@@ -0,0 +1,39 @@
+From d80c171e7e8fe7fb4e0878a15027ac80c23b0a14 Mon Sep 17 00:00:00 2001
+From: David Stapleton <dstaplet@brocade.com>
+Date: Mon, 15 Jun 2015 13:07:21 +0100
+Subject: [PATCH] Fix vrrp removes incorrect IPv4 address when VIPs are removed
+
+When vrrp has an IPv4 VIP that matches the primary interface
+address, when the VIP is removed from the interface, the original
+address ends up getting removed instead of the VIP.
+
+The kernel receives a netlink message instructing it to remove
+address x from a particular interface. For IPv4, address x can
+be configured multiple times providing the prefix lengths differ.
+If the IFA_ADDRESS attribute is not specified in a RTM_DELADDR
+message, the kernel will delete the first address it finds a
+match on, prefix length is not taken into account.
+
+This fix therefore adds the IFA_ADDRESS attribute when deleting
+IPv4 addresses so that the address removed is actually the VIP.
+---
+ keepalived/vrrp/vrrp_ipaddress.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/keepalived/vrrp/vrrp_ipaddress.c b/keepalived/vrrp/vrrp_ipaddress.c
+index 0f9ce23..698f35c 100644
+--- a/keepalived/vrrp/vrrp_ipaddress.c
++++ b/keepalived/vrrp/vrrp_ipaddress.c
+@@ -86,6 +86,9 @@ netlink_ipaddress(ip_address_t *ipaddress, int cmd)
+ 	} else {
+ 		addattr_l(&req.n, sizeof(req), IFA_LOCAL,
+ 			  &ipaddress->u.sin.sin_addr, sizeof(ipaddress->u.sin.sin_addr));
++		if (cmd == IPADDRESS_DEL)
++			addattr_l(&req.n, sizeof(req), IFA_ADDRESS,
++			  &ipaddress->u.sin.sin_addr, sizeof(ipaddress->u.sin.sin_addr));
+ 		if (ipaddress->u.sin.sin_brd.s_addr)
+ 			addattr_l(&req.n, sizeof(req), IFA_BROADCAST,
+ 				  &ipaddress->u.sin.sin_brd, sizeof(ipaddress->u.sin.sin_brd));
+-- 
+2.4.4
+