From 9b04da8406dc4704315eb16ba5e3e50bef339070 Mon Sep 17 00:00:00 2001 From: Sukru Senli Date: Tue, 6 Sep 2016 11:07:52 +0200 Subject: [PATCH] ndisc package --- ndisc/Makefile | 98 ++++++++++++++++ ndisc/patches/100-favor_bsd.patch | 20 ++++ ndisc/patches/110-strverscmp.patch | 175 +++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+) create mode 100644 ndisc/Makefile create mode 100644 ndisc/patches/100-favor_bsd.patch create mode 100644 ndisc/patches/110-strverscmp.patch diff --git a/ndisc/Makefile b/ndisc/Makefile new file mode 100644 index 000000000..78b7f17cb --- /dev/null +++ b/ndisc/Makefile @@ -0,0 +1,98 @@ +# +# Copyright (C) 2006-2012 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:=ndisc6 +PKG_VERSION:=1.0.2 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_URL:=http://www.remlab.net/files/ndisc6 +PKG_MD5SUM:=50cb4c19606cf6ff2b7388e71832f579 + +PKG_INSTALL:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/ndisc + SECTION:=net + CATEGORY:=Network + SUBMENU:=IPv6 discovery tools + TITLE:=IPv6 discovery tools + URL:=http://www.remlab.net/ndisc6/ + DEPENDS:=+libpthread +librt +endef + +define Package/ndisc/description +IPv6 discovery tools +endef + +define Package/ndisc6 + $(call Package/ndisc) + TITLE:=An ICMPv6 neighbour discovery tool +endef + +define Package/ndisc6/description +An ICMPv6 neighbour discovery tools +endef + +define Package/rdisc6 + $(call Package/ndisc) + TITLE:=An ICMPv6 router discovery tool +endef + +define Package/rdisc6/description +An ICMPv6 router discovery tool +endef + +define Package/traceroute6 + $(call Package/ndisc) + TITLE:=An IPv6-based traceroute implementation +endef + +define Package/traceroute6/description +An IPv6-based traceroute implementation +endef + +define Package/rdnssd + $(call Package/ndisc) + TITLE:=DNS server discovery daemon +endef + +define Package/rdnssd/description +A recursive DNS server discovery daemon gathering +information through stateless IPv6 autoconfiguration (RFC5006) +endef + +TARGET_CFLAGS += -std=c99 + +define Package/ndisc6/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ndisc6 $(1)/usr/bin/ +endef + +define Package/rdisc6/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rdisc6 $(1)/usr/bin/ +endef + +define Package/traceroute6/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/{rl,tcp}traceroute6 $(1)/usr/bin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/tracert6 $(1)/usr/bin/ +endef + +define Package/rdnssd/install + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/rdnssd $(1)/usr/sbin/ +endef + +$(eval $(call BuildPackage,ndisc6)) +$(eval $(call BuildPackage,rdisc6)) +$(eval $(call BuildPackage,traceroute6)) +$(eval $(call BuildPackage,rdnssd)) diff --git a/ndisc/patches/100-favor_bsd.patch b/ndisc/patches/100-favor_bsd.patch new file mode 100644 index 000000000..ed6090d33 --- /dev/null +++ b/ndisc/patches/100-favor_bsd.patch @@ -0,0 +1,20 @@ +--- a/src/trace-tcp.c ++++ b/src/trace-tcp.c +@@ -24,6 +24,7 @@ + + #undef _GNU_SOURCE + #define _BSD_SOURCE 1 ++#define __FAVOR_BSD 1 + + #include + #include +--- a/src/trace-udp.c ++++ b/src/trace-udp.c +@@ -24,6 +24,7 @@ + + #undef _GNU_SOURCE + #define _BSD_SOURCE 1 ++#define __FAVOR_BSD 1 + + #include + #include diff --git a/ndisc/patches/110-strverscmp.patch b/ndisc/patches/110-strverscmp.patch new file mode 100644 index 000000000..345661fef --- /dev/null +++ b/ndisc/patches/110-strverscmp.patch @@ -0,0 +1,175 @@ +--- a/rdnssd/Makefile.am ++++ b/rdnssd/Makefile.am +@@ -30,7 +30,8 @@ conf_SCRIPTS = merge-hook + # rdnssd + rdnssd_SOURCES = rdnssd.c rdnssd.h \ + icmp.c \ +- netlink.c ++ netlink.c \ ++ strverscmp.c + rdnssd_LDADD = $(LIBRT) \ + @top_builddir@/compat/libcompat.a + +--- a/rdnssd/Makefile.in ++++ b/rdnssd/Makefile.in +@@ -60,7 +60,7 @@ CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(confdir)" + PROGRAMS = $(sbin_PROGRAMS) +-am_rdnssd_OBJECTS = rdnssd.$(OBJEXT) icmp.$(OBJEXT) netlink.$(OBJEXT) ++am_rdnssd_OBJECTS = rdnssd.$(OBJEXT) icmp.$(OBJEXT) netlink.$(OBJEXT) strverscmp.$(OBJEXT) + rdnssd_OBJECTS = $(am_rdnssd_OBJECTS) + am__DEPENDENCIES_1 = + rdnssd_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@@ -251,7 +251,8 @@ conf_SCRIPTS = merge-hook + # rdnssd + rdnssd_SOURCES = rdnssd.c rdnssd.h \ + icmp.c \ +- netlink.c ++ netlink.c \ ++ strverscmp.c + + rdnssd_LDADD = $(LIBRT) \ + @top_builddir@/compat/libcompat.a +@@ -373,6 +374,7 @@ distclean-compile: + + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/icmp.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netlink.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdnssd.Po@am__quote@ + + .c.o: +--- /dev/null ++++ b/rdnssd/strverscmp.c +@@ -0,0 +1,131 @@ ++/* Compare strings while treating digits characters numerically. ++ Copyright (C) 1997, 2000, 2002, 2004 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Jean-François Bignolles , 1997. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2, or (at your option) ++ any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++/* states: S_N: normal, S_I: comparing integral part, S_F: comparing ++ fractional parts, S_Z: idem but with leading Zeroes only */ ++#define S_N 0x0 ++#define S_I 0x4 ++#define S_F 0x8 ++#define S_Z 0xC ++ ++/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ ++#define CMP 2 ++#define LEN 3 ++ ++ ++/* ISDIGIT differs from isdigit, as follows: ++ - Its arg may be any int or unsigned int; it need not be an unsigned char. ++ - It's guaranteed to evaluate its argument exactly once. ++ - It's typically faster. ++ POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to ++ ISDIGIT_LOCALE unless it's important to use the locale's definition ++ of `digit' even when the host does not conform to POSIX. */ ++#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) ++ ++#undef __strverscmp ++#undef strverscmp ++ ++#ifndef weak_alias ++# define __strverscmp strverscmp ++#endif ++ ++/* Compare S1 and S2 as strings holding indices/version numbers, ++ returning less than, equal to or greater than zero if S1 is less than, ++ equal to or greater than S2 (for more info, see the texinfo doc). ++*/ ++ ++int ++__strverscmp (const char *s1, const char *s2) ++{ ++ const unsigned char *p1 = (const unsigned char *) s1; ++ const unsigned char *p2 = (const unsigned char *) s2; ++ unsigned char c1, c2; ++ int state; ++ int diff; ++ ++ /* Symbol(s) 0 [1-9] others (padding) ++ Transition (10) 0 (01) d (00) x (11) - */ ++ static const unsigned int next_state[] = ++ { ++ /* state x d 0 - */ ++ /* S_N */ S_N, S_I, S_Z, S_N, ++ /* S_I */ S_N, S_I, S_I, S_I, ++ /* S_F */ S_N, S_F, S_F, S_F, ++ /* S_Z */ S_N, S_F, S_Z, S_Z ++ }; ++ ++ static const int result_type[] = ++ { ++ /* state x/x x/d x/0 x/- d/x d/d d/0 d/- ++ 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */ ++ ++ /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, ++ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, ++ /* S_I */ CMP, -1, -1, CMP, 1, LEN, LEN, CMP, ++ 1, LEN, LEN, CMP, CMP, CMP, CMP, CMP, ++ /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, ++ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, ++ /* S_Z */ CMP, 1, 1, CMP, -1, CMP, CMP, CMP, ++ -1, CMP, CMP, CMP ++ }; ++ ++ if (p1 == p2) ++ return 0; ++ ++ c1 = *p1++; ++ c2 = *p2++; ++ /* Hint: '0' is a digit too. */ ++ state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0)); ++ ++ while ((diff = c1 - c2) == 0 && c1 != '\0') ++ { ++ state = next_state[state]; ++ c1 = *p1++; ++ c2 = *p2++; ++ state |= (c1 == '0') + (ISDIGIT (c1) != 0); ++ } ++ ++ state = result_type[state << 2 | ((c2 == '0') + (ISDIGIT (c2) != 0))]; ++ ++ switch (state) ++ { ++ case CMP: ++ return diff; ++ ++ case LEN: ++ while (ISDIGIT (*p1++)) ++ if (!ISDIGIT (*p2++)) ++ return 1; ++ ++ return ISDIGIT (*p2) ? -1 : diff; ++ ++ default: ++ return state; ++ } ++} ++#ifdef weak_alias ++weak_alias (__strverscmp, strverscmp) ++#endif