summaryrefslogtreecommitdiff
path: root/package/arpd
diff options
context:
space:
mode:
Diffstat (limited to 'package/arpd')
-rw-r--r--package/arpd/Config.in10
-rw-r--r--package/arpd/Makefile64
-rw-r--r--package/arpd/ipkg/arpd.control7
-rw-r--r--package/arpd/patches/configure-no-bpf.patch12
-rw-r--r--package/arpd/patches/function-string.patch42
-rw-r--r--package/arpd/patches/pcap-and-arg.patch75
6 files changed, 210 insertions, 0 deletions
diff --git a/package/arpd/Config.in b/package/arpd/Config.in
new file mode 100644
index 0000000000..504f9fada5
--- /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 0000000000..ad75e22d05
--- /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 0000000000..8211d79942
--- /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 0000000000..fb8037807a
--- /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 0000000000..452b810e91
--- /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 0000000000..7750e2928c
--- /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");