From 9b9dad1f998703d3b44fd0e51cb12f0dc6c69213 Mon Sep 17 00:00:00 2001
From: wbx <wbx@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Sun, 11 Sep 2005 11:27:16 +0000
Subject: [PATCH] arpd and libdnet some time ago from johannes 5, thx

git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@1900 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/Config.in                           |  2 +
 package/Makefile                            |  3 +
 package/arpd/Config.in                      | 10 +++
 package/arpd/Makefile                       | 64 ++++++++++++++
 package/arpd/ipkg/arpd.control              |  7 ++
 package/arpd/patches/configure-no-bpf.patch | 12 +++
 package/arpd/patches/function-string.patch  | 42 ++++++++++
 package/arpd/patches/pcap-and-arg.patch     | 75 +++++++++++++++++
 package/libdnet/Config.in                   |  7 ++
 package/libdnet/Makefile                    | 93 +++++++++++++++++++++
 package/libdnet/ipkg/libdnet.control        |  6 ++
 11 files changed, 321 insertions(+)
 create mode 100644 package/arpd/Config.in
 create mode 100644 package/arpd/Makefile
 create mode 100644 package/arpd/ipkg/arpd.control
 create mode 100644 package/arpd/patches/configure-no-bpf.patch
 create mode 100644 package/arpd/patches/function-string.patch
 create mode 100644 package/arpd/patches/pcap-and-arg.patch
 create mode 100644 package/libdnet/Config.in
 create mode 100644 package/libdnet/Makefile
 create mode 100644 package/libdnet/ipkg/libdnet.control

diff --git a/package/Config.in b/package/Config.in
index fe2c82b91..faad94e89 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -35,6 +35,7 @@ source "package/screen/Config.in"
 comment "Networking"
 source "package/aiccu/Config.in"
 source "package/amwall/Config.in"
+source "package/arpd/Config.in"
 source "package/arptables/Config.in"
 source "package/arpwatch/Config.in"
 source "package/asterisk/Config.in"
@@ -126,6 +127,7 @@ source "package/libart/Config.in"
 source "package/curl/Config.in" # libcurl
 source "package/libdaemon/Config.in"
 source "package/libdb/Config.in"
+source "package/libdnet/Config.in"
 source "package/libelf/Config.in"
 source "package/libevent/Config.in"
 source "package/expat/Config.in" # libexpat
diff --git a/package/Makefile b/package/Makefile
index 851578707..337df83a7 100644
--- a/package/Makefile
+++ b/package/Makefile
@@ -5,6 +5,7 @@ package-:=tcp_wrappers
 package-y:=nvram
 package-$(BR2_PACKAGE_AICCU) += aiccu
 package-$(BR2_PACKAGE_AMWALL) += amwall
+package-$(BR2_PACKAGE_ARPD) += arpd
 package-$(BR2_PACKAGE_ARPTABLES) += arptables
 package-$(BR2_PACKAGE_ARPWATCH) += arpwatch
 package-$(BR2_PACKAGE_ASTERISK) += asterisk
@@ -63,6 +64,7 @@ package-$(BR2_PACKAGE_LIBAMSEL) += libamsel
 package-$(BR2_PACKAGE_LIBART) += libart
 package-$(BR2_PACKAGE_LIBDAEMON) += libdaemon
 package-$(BR2_PACKAGE_LIBDB) += libdb
+package-$(BR2_PACKAGE_LIBDNET) += libdnet
 package-$(BR2_PACKAGE_LIBELF) += libelf
 package-$(BR2_PACKAGE_LIBEVENT) += libevent
 package-$(BR2_PACKAGE_LIBFFI_SABLE) += libffi-sable
@@ -190,6 +192,7 @@ $(COMPILE_PACKAGES): base-files-compile
 $(INSTALL_PACKAGES): base-files-install
 
 amwall-compile: libamsel-compile
+arpd-compile: libpcap-compile libdnet-compile libevent-compile
 arpwatch-compile: libpcap-compile
 avahi-compile: libdaemon-compile expat-compile
 bind-compile: openssl-compile
diff --git a/package/arpd/Config.in b/package/arpd/Config.in
new file mode 100644
index 000000000..504f9fada
--- /dev/null
+++ b/package/arpd/Config.in
@@ -0,0 +1,10 @@
+config BR2_PACKAGE_ARPD
+	tristate "arpd - fake ARP replies"
+	default m if CONFIG_DEVEL
+	select BR2_PACKAGE_LIBPCAP
+	select BR2_PACKAGE_LIBDNET
+	select BR2_PACKAGE_LIBEVENT
+	help
+	  Generates ARP responses for (locally unused) IP addresses
+	  
+	  http://www.honeyd.org/tools.php
diff --git a/package/arpd/Makefile b/package/arpd/Makefile
new file mode 100644
index 000000000..ad75e22d0
--- /dev/null
+++ b/package/arpd/Makefile
@@ -0,0 +1,64 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=arpd
+PKG_VERSION:=0.2
+PKG_RELEASE:=1
+PKG_MD5SUM:=e2911fa9de1b92ef50deda1489ae944d
+
+PKG_SOURCE_URL:=http://niels.xtdnet.nl/honeyd
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_CAT:=zcat
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,ARPD,arpd,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured:
+	(cd $(PKG_BUILD_DIR); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
+		LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--program-prefix="" \
+		--program-suffix="" \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--datadir=/usr/share \
+		--includedir=/usr/include \
+		--infodir=/usr/share/info \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--localstatedir=/var \
+		--mandir=/usr/share/man \
+		--sbindir=/usr/sbin \
+		--sysconfdir=/etc \
+		$(DISABLE_NLS) \
+		$(DISABLE_LARGEFILE) \
+		--enable-shared \
+		--disable-static \
+		--with-libdnet=$(STAGING_DIR)/usr \
+		--with-libevent=$(STAGING_DIR)/usr \
+		--with-libpcap=$(STAGING_DIR)/usr \
+	);
+	touch $@
+
+$(PKG_BUILD_DIR)/.built:
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		CCOPT="$(TARGET_CFLAGS)" \
+		INCLS="-I. -I$(STAGING_DIR)/usr/include" \
+		LIBS="-L$(STAGING_DIR)/usr/lib -lpcap -ldnet -levent"
+	touch $@
+
+$(IPKG_ARPD):
+	mkdir -p $(IDIR_ARPD)/usr/sbin
+	cp  $(PKG_BUILD_DIR)/arpd $(IDIR_ARPD)/usr/sbin/
+	$(STRIP) $(IDIR_ARPD)/usr/sbin/*
+	$(IPKG_BUILD) $(IDIR_ARPD) $(PACKAGE_DIR)
diff --git a/package/arpd/ipkg/arpd.control b/package/arpd/ipkg/arpd.control
new file mode 100644
index 000000000..8211d7994
--- /dev/null
+++ b/package/arpd/ipkg/arpd.control
@@ -0,0 +1,7 @@
+Package: arpd
+Priority: optional
+Section: net
+Maintainer: OpenWrt Developer <openwrt-devel@openwrt.org>
+Source: buildroot internal
+Description: Generates ARP responses for IP address ranges
+Depends: libpcap, libdnet, libevent
diff --git a/package/arpd/patches/configure-no-bpf.patch b/package/arpd/patches/configure-no-bpf.patch
new file mode 100644
index 000000000..fb8037807
--- /dev/null
+++ b/package/arpd/patches/configure-no-bpf.patch
@@ -0,0 +1,12 @@
+--- arpd/configure.orig	Sun Feb  9 19:31:28 2003
++++ arpd/configure	Thu Jul 21 16:05:16 2005
+@@ -2258,8 +2258,7 @@
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         PCAPINC="-I$withval -I$withval/bpf"
+         PCAPLIB="-L$withval -lpcap"
+-     elif test -f $withval/include/pcap.h -a \
+-               -f $withval/include/net/bpf.h; then
++     elif test -f $withval/include/pcap.h; then
+         owd=`pwd`
+         if cd $withval; then withval=`pwd`; cd $owd; fi
+         PCAPINC="-I$withval/include"
diff --git a/package/arpd/patches/function-string.patch b/package/arpd/patches/function-string.patch
new file mode 100644
index 000000000..452b810e9
--- /dev/null
+++ b/package/arpd/patches/function-string.patch
@@ -0,0 +1,42 @@
+--- arpd/arpd.c.orig	Sun Feb  9 05:20:40 2003
++++ arpd/arpd.c	Thu Jul 21 17:05:40 2005
+@@ -265,7 +265,7 @@
+ 	    spa->addr_ip, tha->addr_eth, tpa->addr_ip);
+ 	
+ 	if (op == ARP_OP_REQUEST) {
+-		syslog(LOG_DEBUG, __FUNCTION__ ": who-has %s tell %s",
++		syslog(LOG_DEBUG, "%s: who-has %s tell %s", __FUNCTION__,
+ 		    addr_ntoa(tpa), addr_ntoa(spa));
+ 	} else if (op == ARP_OP_REPLY) {
+ 		syslog(LOG_INFO, "arp reply %s is-at %s",
+@@ -282,7 +282,7 @@
+ 	int error;
+ 
+ 	if (addr_cmp(addr, &arpd_ifent.intf_addr) == 0) {
+-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
++		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
+ 		    addr_ntoa(addr), addr_ntoa(&arpd_ifent.intf_link_addr));
+ 		return (0);
+ 	}
+@@ -291,10 +291,10 @@
+ 	error = arp_get(arpd_arp, &arpent);
+ 	
+ 	if (error == -1) {
+-		syslog(LOG_DEBUG, __FUNCTION__ ": no entry for %s",
++		syslog(LOG_DEBUG, "%s: no entry for %s", __FUNCTION__,
+ 		    addr_ntoa(addr));
+ 	} else {
+-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
++		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
+ 		    addr_ntoa(addr), addr_ntoa(&arpent.arp_ha));
+ 	}
+ 	return (error);
+@@ -423,7 +423,7 @@
+ 		if ((req = SPLAY_FIND(tree, &arpd_reqs, &tmp)) != NULL) {
+ 			addr_pack(&src.arp_ha, ADDR_TYPE_ETH, ETH_ADDR_BITS,
+ 			    ethip->ar_sha, ETH_ADDR_LEN);
+-			syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
++			syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
+ 			    addr_ntoa(&req->pa), addr_ntoa(&src.arp_ha));
+ 			
+ 			/* This address is claimed */
diff --git a/package/arpd/patches/pcap-and-arg.patch b/package/arpd/patches/pcap-and-arg.patch
new file mode 100644
index 000000000..7750e2928
--- /dev/null
+++ b/package/arpd/patches/pcap-and-arg.patch
@@ -0,0 +1,75 @@
+--- arpd/arpd.c	Sun Feb  9 05:20:40 2003
++++ arpd/arpd.c.new	Mon Aug  1 00:50:40 2005
+@@ -70,7 +70,7 @@
+ static void
+ usage(void)
+ {
+-	fprintf(stderr, "Usage: arpd [-d] [-i interface] [net]\n");
++	fprintf(stderr, "Usage: arpd [-d] [-i interface] [-a 'pcap_expr'] [{host|net|range} ...]\n");
+ 	exit(1);
+ }
+ 
+@@ -182,7 +182,7 @@
+ }
+ 
+ static void
+-arpd_init(char *dev, int naddresses, char **addresses)
++arpd_init(char *dev, char *and_pcap_exp, int naddresses, char **addresses)
+ {
+ 	struct bpf_program fcode;
+ 	char filter[1024], ebuf[PCAP_ERRBUF_SIZE], *dst;
+@@ -214,9 +214,13 @@
+ 		errx(1, "bad interface configuration: not IP or Ethernet");
+ 	arpd_ifent.intf_addr.addr_bits = IP_ADDR_BITS;
+ 	
+-	snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s",
++	snprintf(filter, sizeof(filter), "arp %s%s%s and not ether src %s%s%s%s",
+ 	    dst ? "and (" : "", dst ? dst : "", dst ? ")" : "",
+-	    addr_ntoa(&arpd_ifent.intf_link_addr));
++	    addr_ntoa(&arpd_ifent.intf_link_addr),
++	    and_pcap_exp ? " and (" : "",
++	    and_pcap_exp ? and_pcap_exp : "",
++	    and_pcap_exp ? ")" : ""
++	    );
+ 	
+ 	if ((arpd_pcap = pcap_open_live(dev, 128, 0, 500, ebuf)) == NULL)
+ 		errx(1, "pcap_open_live: %s", ebuf);
+@@ -465,14 +469,14 @@
+ {
+ 	struct event recv_ev;
+ 	extern int (*event_sigcb)(void);
+-	char *dev;
++	char *dev, *and_pcap_exp;
+ 	int c, debug;
+ 	FILE *fp;
+ 
+ 	dev = NULL;
+ 	debug = 0;
+ 	
+-	while ((c = getopt(argc, argv, "di:h?")) != -1) {
++	while ((c = getopt(argc, argv, "a:di:h?")) != -1) {
+ 		switch (c) {
+ 		case 'd':
+ 			debug = 1;
+@@ -480,6 +484,9 @@
+ 		case 'i':
+ 			dev = optarg;
+ 			break;
++		case 'a':
++			and_pcap_exp = optarg;
++			break;
+ 		default:
+ 			usage();
+ 			break;
+@@ -489,9 +496,9 @@
+ 	argv += optind;
+ 
+ 	if (argc == 0)
+-		arpd_init(dev, 0, NULL);
++		arpd_init(dev, and_pcap_exp, 0, NULL);
+ 	else
+-		arpd_init(dev, argc, argv);
++		arpd_init(dev, and_pcap_exp, argc, argv);
+ 	
+ 	if ((fp = fopen(PIDFILE, "w")) == NULL)
+ 		err(1, "fopen");
diff --git a/package/libdnet/Config.in b/package/libdnet/Config.in
new file mode 100644
index 000000000..6a719b10d
--- /dev/null
+++ b/package/libdnet/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_LIBDNET
+	tristate "libdnet - Low-level network library"
+	default m if CONFIG_DEVEL
+	help
+	  simplified, portable interface to several low-level networking routines
+	  
+	  http://sourceforge.net/projects/libdnet/
diff --git a/package/libdnet/Makefile b/package/libdnet/Makefile
new file mode 100644
index 000000000..e47b34aff
--- /dev/null
+++ b/package/libdnet/Makefile
@@ -0,0 +1,93 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libdnet
+PKG_VERSION:=1.10
+PKG_RELEASE:=1
+PKG_MD5SUM:=416b765e9d9961501ac85e9a366fd219
+
+PKG_SOURCE_URL:=@SF/$(PKG_NAME)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_CAT:=zcat
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/libdnet-$(PKG_VERSION)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,LIBDNET,libdnet,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured:
+	(cd $(PKG_BUILD_DIR); rm -rf config.{cache,status} ; \
+		touch configure.in; \
+		touch include.m4; \
+		touch aclocal.m4; \
+		touch Makefile.in; \
+		touch configure; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
+		LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--program-prefix="" \
+		--program-suffix="" \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--datadir=/usr/share \
+		--includedir=/usr/include \
+		--infodir=/usr/share/info \
+		--libdir=/usr/lib \
+		--libexecdir=/usr/lib \
+		--localstatedir=/var/run \
+		--mandir=/usr/share/man \
+		--sbindir=/usr/sbin \
+		--sysconfdir=/etc \
+		$(DISABLE_NLS) \
+		$(DISABLE_LARGEFILE) \
+		--enable-shared \
+		--enable-static \
+	);
+	touch $@
+
+$(PKG_BUILD_DIR)/.built:
+	rm -rf $(PKG_INSTALL_DIR)
+	mkdir -p $(PKG_INSTALL_DIR)
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		DESTDIR="$(PKG_INSTALL_DIR)" \
+		all install
+	touch $@
+
+$(IPKG_LIBDNET):
+	install -m0755 -d $(IDIR_LIBDNET)/usr/lib
+	cp -fpR $(PKG_INSTALL_DIR)/usr/lib/libdnet.so.* $(IDIR_LIBDNET)/usr/lib/
+	install -m0755 -d $(IDIR_LIBDNET)/usr/sbin
+	cp -fpR $(PKG_INSTALL_DIR)/usr/sbin/dnet $(IDIR_LIBDNET)/usr/sbin/
+	$(RSTRIP) $(IDIR_LIBDNET)
+	$(IPKG_BUILD) $(IDIR_LIBDNET) $(PACKAGE_DIR)
+
+$(STAGING_DIR)/usr/lib/libdnet.so: $(PKG_BUILD_DIR)/.built
+	mkdir -p $(STAGING_DIR)/usr/bin
+	cp -fpR $(PKG_INSTALL_DIR)/usr/bin/dnet-config $(STAGING_DIR)/usr/bin/
+	mkdir -p $(STAGING_DIR)/usr/include
+	cp -fpR $(PKG_INSTALL_DIR)/usr/include/dnet* $(STAGING_DIR)/usr/include/
+	mkdir -p $(STAGING_DIR)/usr/lib
+	cp -fpR $(PKG_INSTALL_DIR)/usr/lib/libdnet.* $(STAGING_DIR)/usr/lib/
+	touch $@
+
+install-dev: $(STAGING_DIR)/usr/lib/libdnet.so
+
+uninstall-dev:
+	rm -rf \
+		$(STAGING_DIR)/usr/bin/dnet-config \
+		$(STAGING_DIR)/usr/include/dnet*  \
+		$(STAGING_DIR)/usr/lib/libdnet.* \
+
+compile: install-dev
+clean: uninstall-dev
diff --git a/package/libdnet/ipkg/libdnet.control b/package/libdnet/ipkg/libdnet.control
new file mode 100644
index 000000000..083f3377f
--- /dev/null
+++ b/package/libdnet/ipkg/libdnet.control
@@ -0,0 +1,6 @@
+Package: libdnet
+Priority: optional
+Section: libs
+Maintainer: OpenWrt Developer <openwrt-devel@openwrt.org>
+Source: buildroot internal
+Description: a low-level networking library
-- 
2.20.1