diff --git a/haproxy/Makefile b/haproxy/Makefile new file mode 100644 index 000000000..69e17c0e4 --- /dev/null +++ b/haproxy/Makefile @@ -0,0 +1,140 @@ +# +# Copyright (C) 2010-2013 OpenWrt.org +# Copyright (C) 2009-2014 Thomas Heil +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=haproxy +PKG_VERSION:=1.5.14 +PKG_RELEASE:=00 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/haproxy/haproxy.git +PKG_SOURCE_SUBDIR:=$(PKG_NAME) +PKG_SOURCE_VERSION:=master + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) +PKG_BUILD_PARALLEL:=1 +PKG_MAINTAINER:=Thomas Heil +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/haproxy/Default + SUBMENU:=Web Servers/Proxies + SECTION:=net + CATEGORY:=Network + TITLE:=The Reliable, High Performance TCP/HTTP Load Balancer + URL:=http://haproxy.1wt.eu/ +endef + +define Package/haproxy/Default/conffiles +/etc/haproxy.cfg +endef + +define Package/haproxy/Default/description + Open source Reliable, High Performance TCP/HTTP Load Balancer. +endef + +define Package/haproxy + DEPENDS+= +libpcre +libltdl +zlib +libpthread +libopenssl + TITLE+= (with SSL support) + VARIANT:=ssl +$(call Package/haproxy/Default) +endef + +define Package/haproxy/conffiles +$(call Package/haproxy/Default/conffiles) +endef + +define Package/haproxy/description +$(call Package/haproxy/Default/description) + This package is built with SSL support. +endef + +define Package/haproxy-nossl + TITLE+= (without SSL support) + VARIANT:=nossl + DEPENDS+= +libpcre +libltdl +zlib +libpthread + TITLE+= (with SSL support) +$(call Package/haproxy/Default) +endef + +define Package/haproxy-nossl/conffiles +$(call Package/haproxy/Default/conffiles) +endef + +define Package/haproxy-nossl/description +$(call Package/haproxy/Default/description) + This package is built without SSL support. +endef + +ifeq ($(CONFIG_avr32),y) + LINUX_TARGET:=linux26 +else + LINUX_TARGET:=linux2628 +endif + +ifeq ($(BUILD_VARIANT),ssl) + USE_OPENSSL=USE_OPENSSL=1 +else + USE_OPENSSL= +endif + +define Build/Compile + $(MAKE) TARGET=$(LINUX_TARGET) -C $(PKG_BUILD_DIR) \ + DESTDIR="$(PKG_INSTALL_DIR)" \ + CC="$(TARGET_CC)" \ + CFLAGS="$(TARGET_CFLAGS) -fno-align-jumps -fno-align-functions -fno-align-labels -fno-align-loops -pipe -fomit-frame-pointer -fhonour-copts" \ + LD="$(TARGET_CC)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + PCREDIR="$(STAGING_DIR)/usr" \ + SMALL_OPTS="-DBUFSIZE=16384 -DMAXREWRITE=1030 -DSYSTEM_MAXCONN=165530 " \ + USE_LINUX_TPROXY=1 USE_LINUX_SPLICE=1 USE_REGPARM=1 $(USE_OPENSSL) \ + USE_ZLIB=yes USE_PCRE=1 \ + VERSION="$(PKG_VERSION)-patch$(PKG_RELEASE)" \ + install + + $(MAKE) -C $(PKG_BUILD_DIR)/contrib/halog \ + CC="$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS)" \ + OPTIMIZE="" \ + halog +endef + +define Package/haproxy/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/haproxy $(1)/usr/sbin/ + $(INSTALL_DIR) $(1)/etc + $(INSTALL_CONF) ./files/haproxy.cfg $(1)/etc/ + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/haproxy.init $(1)/etc/init.d/haproxy + $(INSTALL_DIR) $(1)/etc/hotplug.d/net + $(INSTALL_BIN) ./files/haproxy.hotplug $(1)/etc/hotplug.d/net/90-haproxy +endef + +Package/haproxy-nossl/install = $(Package/haproxy/install) + +define Package/halog + MENU:=1 + $(call Package/haproxy/Default) + TITLE+= halog + DEPENDS:=haproxy +endef + +define Package/halog/description + HAProxy Log Analyzer +endef + +define Package/halog/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/contrib/halog/halog $(1)/usr/bin/ +endef + +$(eval $(call BuildPackage,haproxy-nossl)) +$(eval $(call BuildPackage,haproxy)) +$(eval $(call BuildPackage,halog)) diff --git a/libpcre/Makefile b/libpcre/Makefile new file mode 100644 index 000000000..6af49d4b8 --- /dev/null +++ b/libpcre/Makefile @@ -0,0 +1,108 @@ +# +# Copyright (C) 2006-2015 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=pcre +PKG_VERSION:=8.37 +PKG_RELEASE:=2 + + + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://github.com/vmg/libpcre.git +PKG_SOURCE_SUBDIR:=$(PKG_NAME) +PKG_SOURCE_VERSION:=master + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) +PKG_BUILD_PARALLEL:=1 +PKG_MAINTAINER:=Thomas Heil + +PKG_LICENSE:=BSD-3-Clause +PKG_LICENSE_FILES:=LICENCE + +PKG_FIXUP:=autoreconf + +PKG_INSTALL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/libpcre/default + SECTION:=libs + CATEGORY:=Libraries + URL:=http://www.pcre.org/ +endef + +define Package/libpcre + $(call Package/libpcre/default) + TITLE:=A Perl Compatible Regular Expression library +endef + +define Package/libpcre16 + $(call Package/libpcre/default) + TITLE:=A Perl Compatible Regular Expression library (16bit support) +endef + +define Package/libpcrecpp + $(call Package/libpcre/default) + TITLE:=C++ wrapper for Perl Compatible Regular Expression library + DEPENDS:=+libpcre +libstdcpp +endef + +TARGET_CFLAGS += $(FPIC) + +CONFIGURE_ARGS += \ + --enable-utf8 \ + --enable-unicode-properties \ + --enable-pcre16 \ + +ifneq ($(CONFIG_PACKAGE_libpcrecpp),) + CONFIGURE_ARGS+= --enable-cpp +else + CONFIGURE_ARGS+= --disable-cpp +endif + +MAKE_FLAGS += \ + CFLAGS="$(TARGET_CFLAGS)" + +define Build/InstallDev + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pcre-config $(1)/usr/bin/ + + $(INSTALL_DIR) $(2)/bin + $(LN) $(STAGING_DIR)/usr/bin/pcre-config $(2)/bin + + $(INSTALL_DIR) $(1)/usr/include + $(CP) $(PKG_INSTALL_DIR)/usr/include/pcre*.h $(1)/usr/include/ + + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre*.{a,so*} $(1)/usr/lib/ + + $(INSTALL_DIR) $(1)/usr/lib/pkgconfig + $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libpcre*.pc $(1)/usr/lib/pkgconfig/ +endef + +define Package/libpcre/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre{,posix}.so.* $(1)/usr/lib/ + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre.so $(1)/usr/lib/ +endef + +define Package/libpcre16/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcre16.so* $(1)/usr/lib/ +endef + +define Package/libpcrecpp/install + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/libpcrecpp.so.* $(1)/usr/lib/ +endef + +$(eval $(call BuildPackage,libpcre)) +$(eval $(call BuildPackage,libpcre16)) +$(eval $(call BuildPackage,libpcrecpp)) diff --git a/questd/src/questd.c b/questd/src/questd.c index 92ffc4127..229dfcb96 100644 --- a/questd/src/questd.c +++ b/questd/src/questd.c @@ -800,6 +800,61 @@ router_dump_keys(struct blob_buf *b, bool table) if (table) blobmsg_close_table(b, t); } +static int uci_get_value(const char *config_path, const char *varname, char *output, size_t out_size){ + FILE *fp; + char cmd[256], buffer[256]; + char *ptr = output; + snprintf(cmd, sizeof(cmd), "uci -c %s get %s", config_path, varname); + + if(!(fp = popen(cmd, "r"))) return 0; + + int len; + memset(buffer, 0, sizeof(buffer)); + + while(len = fgets(buffer, sizeof(buffer), fp)){ + if(len > 0) { + remove_newline(buffer); + strcpy(ptr, buffer); + ptr += len; + } + if(len >= (out_size - (ptr - output))) break; + } + + pclose(fp); + + return len; +} + +static void router_dump_boardinfo(struct blob_buf *b){ + void *t, *l, *p; + static char ports[256], port_order[256], lan_ports[256], wan_ports[256]; + + t = blobmsg_open_table(b, "ethernet"); + //p = blobmsg_open_array(b, "ports"); + uci_get_value("/lib/db/config", "hw.board.ethernetPortNames", ports, sizeof(ports)); + uci_get_value("/lib/db/config", "hw.board.ethernetPortOrder", port_order, sizeof(port_order)); + uci_get_value("/lib/db/config", "hw.board.ethernetLanPorts", lan_ports, sizeof(lan_ports)); + uci_get_value("/lib/db/config", "hw.board.ethernetWanPort", wan_ports, sizeof(wan_ports)); + blobmsg_add_string(b, "port_names", ports); + blobmsg_add_string(b, "port_order", port_order); + blobmsg_add_string(b, "lan_ports", lan_ports); + blobmsg_add_string(b, "wan_port", wan_ports); + //blobmsg_close_array(b, p); + blobmsg_close_table(b, t); +} + +static int +quest_board_info(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + blob_buf_init(&bb, 0); + router_dump_boardinfo(&bb); + ubus_send_reply(ctx, req, bb.head); + + return 0; +} + static void router_dump_system_info(struct blob_buf *b, bool table) { @@ -1679,6 +1734,7 @@ quest_reload(struct ubus_context *ctx, struct ubus_object *obj, static struct ubus_method router_object_methods[] = { UBUS_METHOD_NOARG("info", quest_router_info), + UBUS_METHOD_NOARG("boardinfo", quest_board_info), UBUS_METHOD("quest", quest_router_specific, quest_policy), UBUS_METHOD_NOARG("networks", quest_router_networks), UBUS_METHOD_NOARG("dslstats", dslstats_rpc),