Port arpd to -ng
authorFlorian Fainelli <florian@openwrt.org>
Sun, 30 Jul 2006 17:40:39 +0000 (17:40 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Sun, 30 Jul 2006 17:40:39 +0000 (17:40 +0000)
SVN-Revision: 4339

net/arpd/Makefile [new file with mode: 0644]
net/arpd/patches/configure-no-bpf.patch [new file with mode: 0644]
net/arpd/patches/function-string.patch [new file with mode: 0644]
net/arpd/patches/pcap-and-arg.patch [new file with mode: 0644]

diff --git a/net/arpd/Makefile b/net/arpd/Makefile
new file mode 100644 (file)
index 0000000..08498fd
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# $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)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/arpd
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libpcap +libdnet +libevent
+  TITLE:=A daemon to fake ARP replies
+  DESCRIPTION:=A daemon to fake ARP replies
+  URL:=http://niels.xtdnet.nl/honeyd
+endef
+
+define Build/Configure
+$(call Build/Configure/Default,--enable-shared --disable-static \
+--with-libdnet=$(STAGING_DIR)/usr \
+--with-libevent=$(STAGING_DIR)/usr \
+--with-libpcap=$(STAGING_DIR)/usr \
+)
+endef
+
+define Build/Compile
+       rm -rf $(PKG_INSTALL_DIR)
+       mkdir -p $(PKG_INSTALL_DIR)
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CCOPT="$(TARGET_CFLAGS)" \
+               INCLS="-I. -I$(STAGING_DIR)/usr/include" \
+               LIBS="-L$(STAGING_DIR)/usr/lib -lpcap -ldnet -levent"
+endef
+
+define Package/arpd/install
+       install -d -m0755 $(1)/usr/sbin
+       $(CP) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,arpd))
diff --git a/net/arpd/patches/configure-no-bpf.patch b/net/arpd/patches/configure-no-bpf.patch
new file mode 100644 (file)
index 0000000..fb80378
--- /dev/null
@@ -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/net/arpd/patches/function-string.patch b/net/arpd/patches/function-string.patch
new file mode 100644 (file)
index 0000000..452b810
--- /dev/null
@@ -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/net/arpd/patches/pcap-and-arg.patch b/net/arpd/patches/pcap-and-arg.patch
new file mode 100644 (file)
index 0000000..7750e29
--- /dev/null
@@ -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");