All,

Part 3/3 includes /etc/init.d/ipvsadm script, uci configuration and cron job to 
check for
real servers' availability and re-configure the ipvs tables accordingly (using 
ipvsadm).

This patch depends on the ipvs kernel modules patch 1/3 and ipvsadm tool 2/3

This last patch is not necessary like the previous 2 to add load balancing 
capability
to OpenWRT. One could write his own scripts and configuration files, however
I thought it would be helpful to provide an OpenWRT standard configuration 
using uci.
This can be further extended to support more or all ipvs options.

I tested the configuration file and scripts on a router with a static subnet on 
the wan side.
I run both internet facing and intranet facing load balanced servers and it 
works perfectly.
It does not include NAT Masquerade configuration. This can be easily added, 
however
since personally I do not use ipvs NAT (and I would not advise to do so because 
the
real servers would not be able to track the original client's source IP) I have 
not
implemented it.

Should you find issues with the scripts please feel free just not to push this 
last
patch into the mainstream trunk.

Mauro


Author: Mauro Mozzarelli <[email protected]>
Date:   Tue Feb 23 19:22:51 2016 +0000

    This ipvsadm package adds Linux IP Virtual Server capability to OpenWRT 
IPVS (IP Virtual Server) implements
transport-layer load balancing inside the Linux kernel, so called Layer-4 
switching.
IPVS running on a host acts as a load balancer at the front of a cluster of 
real servers, it can direct requests for TCP/UDP
based services to the real servers, and makes services of the real servers to 
appear as a virtual service on a single IP
address.

    More information at: http://www.linuxvirtualserver.org/software/

    This package contains:
    - ipvsadm utility to configure IP VS tables, virtual and real servers

    Dependencies:
    - ipvs kernel modules

    Signed-off-by: Mauro Mozzarelli <[email protected]>

diff --git a/package/network/utils/ipvsadm/Makefile 
b/package/network/utils/ipvsadm/Makefile new file mode 100644
index 0000000..8abde77
--- /dev/null
+++ b/package/network/utils/ipvsadm/Makefile
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2016 OpenWRT, Mauro Mozzarelli
+#
+# This is free software, licensed under the GNU General Public License v2. +# 
See /LICENSE for more information.
+#
+# AUTHOR: Mauro Mozzarelli
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ipvsadm
+PKG_VERSION:=1.26
+PKG_MAINTAINER:=Mauro Mozzarelli <[email protected]>
+PKG_LICENSE:=GPL-1.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://www.linuxvirtualserver.org/software/kernel-2.6/ 
+PKG_MD5SUM:=eac3ba3f62cd4dea2da353aeddd353a8
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+ifeq ($(CONFIG_DEVEL),y)
+       export QUILT=1
+endif
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/$(PKG_NAME)
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=IP Virtual Server Configuration Manager
+  URL:=http://www.linuxvirtualserver.org
+  DEPENDS:= +kmod-ipvs +libnl-tiny +libpopt
+endef
+
+#      -I$(STAGING_DIR)/usr/include/libnl/linux -fPIC -DLIBIPVS_USE_NL 
+TARGET_CFLAGS += \
+       -I$(STAGING_DIR)/usr/include/libnl-tiny -fPIC -DLIBIPVS_USE_NL 
-D_GNU_SOURCE +
+MAKE_FLAGS += \
+       CC="$(TOOLCHAIN_DIR)/bin/$(TARGET_CC)" \
+       CXX="$(TOOLCHAIN_DIR)/bin/$(TARGET_CXX)" \
+       CFLAGS="$(TARGET_CFLAGS)" \
+       LIBS="-lnl-tiny -lpopt"
+
+define Build/Compile
+       $(call Build/Compile/Default)
+endef
+
+define Package/ipvsadm/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm-save $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/ipvsadm-restore $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,$(PKG_NAME)))
diff --git a/package/network/utils/ipvsadm/patches/001-ipvsadm.patch 
b/package/network/utils/ipvsadm/patches/001-ipvsadm.patch
new file mode 100644
index 0000000..643d5ae
--- /dev/null
+++ b/package/network/utils/ipvsadm/patches/001-ipvsadm.patch
@@ -0,0 +1,199 @@
+diff -Naur ipvsadm-1.26/ipvsadm.spec ipvsadm-1.26.owrt/ipvsadm.spec +--- 
ipvsadm-1.26/ipvsadm.spec     2011-02-08
00:25:36.000000000 +0000 ++++ ipvsadm-1.26.owrt/ipvsadm.spec    1970-01-01 
01:00:00.000000000 +0100 +@@ -1,100 +0,0 @@
+-%define prefix   /usr
+-
+-Summary: Utility to administer the Linux Virtual Server
+-Name: ipvsadm
+-Version: 1.26
+-Release: 1
+-License: GPL
+-URL: http://www.LinuxVirtualServer.org/
+-Group: Applications/System
+-Source0: http://www.LinuxVirtualServer.org/software/ipvsadm-%{version}.tar.gz 
+-BuildRoot:
/var/tmp/%name-%{PACKAGE_VERSION}-root
+-Provides: %{name}-%{version}
+-Conflicts: piranha <= 0.4.14
+-
+-%description
+-ipvsadm is a utility to administer the IP Virtual Server services +-offered 
by the latest Linux kernel 2.6.x.
+-
+-
+-%prep
+-%setup -n %{name}-%{version}
+-
+-
+-%build
+-CFLAGS="${RPM_OPT_FLAGS}" make
+-
+-
+-%install
+-rm -rf $RPM_BUILD_ROOT
+-mkdir -p ${RPM_BUILD_ROOT}/{sbin,%{_mandir}/man8,etc/rc.d/init.d} +-make 
install BUILD_ROOT=${RPM_BUILD_ROOT} MANDIR=%{_mandir}
+-
+-
+-%files
+-%defattr(-,root,root)
+-%doc README
+-%config /etc/rc.d/init.d/ipvsadm
+-/sbin/ipvsadm*
+-%{_mandir}/man8/ipvsadm*
+-
+-%post
+-/sbin/chkconfig --add ipvsadm
+-
+-%preun
+-/sbin/chkconfig --del ipvsadm
+-
+-
+-%clean
+-rm -rf $RPM_BUILD_DIR/%{name}
+-rm -rf $RPM_BUILD_ROOT
+-
+-
+-%changelog
+-* Thu Jun 23 2005 Steve Nielsen <[email protected]>
+-- Respect rpmmacros that might be set (by using rpm --eval)
+-
+-* Sat Dec 20 2003 Wensong Zhang <[email protected]>
+-- tidy up the description
+-
+-* Sat Apr  5 2003 Wensong Zhang <[email protected]>
+-- Removed the unnecessary Docdir setting.
+-
+-* Thu Dec 16 2001 Wensong Zhang <[email protected]> +-- Changed 
to install ipvsadm man pages according to the
%{_mandir} +-
+-* Thu Dec 30 2000 Wensong Zhang <[email protected]> +-- update 
the %file section
+-
+-* Thu Dec 17 2000 Wensong Zhang <[email protected]> +-- Added a 
if-condition to keep both new or old rpm
utility building +-  the package happily.
+-
+-* Tue Dec 12 2000 P.Copeland <[email protected]>
+-- Small modifications to make the compiler happy in RH7 and the Alpha +-- 
Fixed the documentation file that got missed off
in building
+-  the rpm
+-- Made a number of -pedantic mods though popt will not compile with +-  
-pedantic
+-
+-* Wed Aug 9 2000 Horms <[email protected]>
+-- Removed Obseletes tag as ipvsadm is back in /sbin where it belongs +-  as 
it is more or less analogous to both route and
ipchains both of +-  which reside in /sbin.
+-- Create directory to install init script into. Init scripts won't install +- 
 into build directory unless this is done
+-
+-* Thu Jul  6 2000 Wensong Zhang <[email protected]> +-- Changed 
to build rpms on the ipvsadm tar ball directly
+-
+-* Wed Jun 21 2000 P.Copeland <[email protected]>
+-- fixed silly install permission settings
+-
+-* Mon Jun 19 2000 P.Copeland <[email protected]>
+-- Added 'dist' and 'rpms' to the Makefile
+-- Added Obsoletes tag since there were early versions
+-  of ipvsadm-*.rpm that installed in /sbin
+-- Obsolete tag was a bit vicious re: piranha
+-
+-* Mon Apr 10 2000 Horms <[email protected]>
+-- created for version 1.9
+diff -Naur ipvsadm-1.26/libipvs/ip_vs.h ipvsadm-1.26.owrt/libipvs/ip_vs.h +--- 
ipvsadm-1.26/libipvs/ip_vs.h    2011-02-07
02:38:57.000000000 +0000 ++++ ipvsadm-1.26.owrt/libipvs/ip_vs.h 2016-01-24 
19:59:27.304631247 +0000 +@@ -10,6 +10,7 @@
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
+ #include <linux/types.h>      /* For __beXX types in userland */
++#include <sys/types.h>
+
+ #ifdef LIBIPVS_USE_NL
+ #include <netlink/netlink.h>
+diff -Naur ipvsadm-1.26/libipvs/libipvs.c ipvsadm-1.26.owrt/libipvs/libipvs.c 
+--- ipvsadm-1.26/libipvs/libipvs.c      2011-02-07
02:38:57.000000000 +0000 ++++ ipvsadm-1.26.owrt/libipvs/libipvs.c       
2016-01-24 20:02:49.840430677 +0000 +@@ -32,7 +32,7 @@
+ struct ip_vs_getinfo ipvs_info;
+
+ #ifdef LIBIPVS_USE_NL
+-static struct nl_handle *sock = NULL;
++static struct nl_sock *sock = NULL;
+ static int family, try_nl = 1;
+ #endif
+
+@@ -73,7 +73,7 @@
+ {
+       int err = EINVAL;
+
+-      sock = nl_handle_alloc();
++      sock = nl_socket_alloc();
+       if (!sock) {
+               nlmsg_free(msg);
+               return -1;
+@@ -88,7 +88,7 @@
+
+       /* To test connections and set the family */
+       if (msg == NULL) {
+-              nl_handle_destroy(sock);
++              nl_socket_free(sock);
+               sock = NULL;
+               return 0;
+       }
+@@ -104,12 +104,12 @@
+
+       nlmsg_free(msg);
+
+-      nl_handle_destroy(sock);
++      nl_socket_free(sock);
+
+       return 0;
+
+ fail_genl:
+-      nl_handle_destroy(sock);
++      nl_socket_free(sock);
+       sock = NULL;
+       nlmsg_free(msg);
+       errno = err;
+diff -Naur ipvsadm-1.26/Makefile ipvsadm-1.26.owrt/Makefile
+--- ipvsadm-1.26/Makefile      2011-02-08 00:24:23.000000000 +0000
++++ ipvsadm-1.26.owrt/Makefile 2016-01-24 12:40:39.427307725 +0000 +@@ -37,18 
+37,17 @@
+
+ CC            = gcc
+ INCLUDE               =
+-SBIN          = $(BUILD_ROOT)/sbin
++SBIN          = $(DESTDIR)/usr/sbin
+ MANDIR                = usr/man
+-MAN           = $(BUILD_ROOT)/$(MANDIR)/man8
+-INIT          = $(BUILD_ROOT)/etc/rc.d/init.d
++INIT          = $(DESTDIR)/etc/rc.d/init.d
+ MKDIR         = mkdir
+ INSTALL               = install
+ STATIC_LIBS   = libipvs/libipvs.a
+
+ ifeq "${ARCH}" "sparc64"
+-    CFLAGS = -Wall -Wunused -Wstrict-prototypes -g -m64 -pipe 
-mcpu=ultrasparc -mcmodel=medlow ++    CFLAGS += -Wall
-Wunused -Wstrict-prototypes -g -m64 -pipe -mcpu=ultrasparc -mcmodel=medlow + 
else
+-    CFLAGS = -Wall -Wunused -Wstrict-prototypes -g
++    CFLAGS += -Wall -Wunused -Wstrict-prototypes -g
+ endif
+
+
+@@ -104,12 +103,6 @@
+               $(INSTALL) -m 0755 ipvsadm $(SBIN)
+               $(INSTALL) -m 0755 ipvsadm-save $(SBIN)
+               $(INSTALL) -m 0755 ipvsadm-restore $(SBIN)
+-              [ -d $(MAN) ] || $(MKDIR) -p $(MAN)
+-              $(INSTALL) -m 0644 ipvsadm.8 $(MAN)
+-              $(INSTALL) -m 0644 ipvsadm-save.8 $(MAN)
+-              $(INSTALL) -m 0644 ipvsadm-restore.8 $(MAN)
+-              [ -d $(INIT) ] || $(MKDIR) -p $(INIT)
+-              $(INSTALL) -m 0755 ipvsadm.sh $(INIT)/ipvsadm
+
+ clean:
+               rm -f ipvsadm $(NAME).spec $(NAME)-$(VERSION).tar.gz
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to