diff options
author | William A. Kennington III <william@wkennington.com> | 2015-06-27 23:19:05 -0700 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2015-06-27 23:19:05 -0700 |
commit | 90d041b4b5e530b8c818cfa0d0395b7db2ff1d35 (patch) | |
tree | 5d5c2d4592e6c980eb5582db7267cf906c8f8dd5 /pkgs/tools/networking/keepalived | |
parent | 3ea1c5bc0c40342e4270443d6f8808210de4a045 (diff) | |
download | nixpkgs-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.nix | 3 | ||||
-rw-r--r-- | pkgs/tools/networking/keepalived/fix-ip-release.patch | 39 |
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 + |