aboutsummaryrefslogtreecommitdiff
path: root/net-mgmt/choparp
diff options
context:
space:
mode:
authorNorikatsu Shigemura <nork@FreeBSD.org>2010-05-04 14:03:14 +0000
committerNorikatsu Shigemura <nork@FreeBSD.org>2010-05-04 14:03:14 +0000
commite36a78f95b5efbfbca2d17a88c3153425589ee8b (patch)
tree494f1f64e117d32055ddd7858618e118d938d031 /net-mgmt/choparp
parent655db7f5a0f75bd4d4fb7d962fc248e77c0e3a1d (diff)
downloadports-e36a78f95b5efbfbca2d17a88c3153425589ee8b.tar.gz
ports-e36a78f95b5efbfbca2d17a88c3153425589ee8b.zip
Notes
Diffstat (limited to 'net-mgmt/choparp')
-rw-r--r--net-mgmt/choparp/Makefile2
-rw-r--r--net-mgmt/choparp/files/patch-choparp.818
-rw-r--r--net-mgmt/choparp/files/patch-choparp.c75
3 files changed, 79 insertions, 16 deletions
diff --git a/net-mgmt/choparp/Makefile b/net-mgmt/choparp/Makefile
index af6e8ef215d9..2234bb93c3dd 100644
--- a/net-mgmt/choparp/Makefile
+++ b/net-mgmt/choparp/Makefile
@@ -7,7 +7,7 @@
PORTNAME= choparp
PORTVERSION= 20021107
-PORTREVISION= 3
+PORTREVISION= 4
CATEGORIES= net-mgmt
MASTER_SITES= SF
diff --git a/net-mgmt/choparp/files/patch-choparp.8 b/net-mgmt/choparp/files/patch-choparp.8
index f1b7ab7c10dd..f7424511948c 100644
--- a/net-mgmt/choparp/files/patch-choparp.8
+++ b/net-mgmt/choparp/files/patch-choparp.8
@@ -1,15 +1,16 @@
---- choparp.8.orig Fri Feb 13 20:28:33 2004
-+++ choparp.8 Fri Feb 13 20:30:23 2004
-@@ -34,7 +34,7 @@
+--- choparp.8.orig 2002-11-08 07:36:03.000000000 +0900
++++ choparp.8 2010-05-04 20:39:28.291199414 +0900
+@@ -34,7 +34,8 @@
.Nm choparp
.Nd cheap and omitted proxy ARP
.Sh SYNOPSIS
-.Nm chpoarp
+.Nm choparp
++.Op Fl v
.Ar if_name mac_addr
.Oo Fl Oc Ns Ar net_addr Ns
.Op / Ns Ar net_mask
-@@ -42,7 +42,7 @@
+@@ -42,7 +43,7 @@
.Sh DESCRIPTION
.Pp
.Nm choparp
@@ -18,7 +19,7 @@
It watches ARP request packets visible on the interface specified by argument
.Ar if_name ,
and sends proxy ARP reply to the sender if the ARP request queries the
-@@ -52,7 +52,7 @@
+@@ -52,7 +53,7 @@
.Ar net_addr Ns / Ar net_mask .
.Pp
.Ar mac_addr
@@ -27,7 +28,7 @@
It is normally the address of
.Ar if_name .
The format of
-@@ -72,7 +72,7 @@
+@@ -72,7 +73,7 @@
.Dq 0x
.Pq for example Ad 0x858a0186 .
.Ar net_mask
@@ -36,11 +37,14 @@
or alternatively as a mask length. The following address specifications
are therefore equivalent:
.Bl -item -offset indent
-@@ -89,6 +89,13 @@
+@@ -89,6 +90,16 @@
.Em excluded
by preceding them with
.Fl
+.Pp
++.Fl v
++option enables verbose mode, showing warning for invalid ARP packets.
++.Pp
+.Nm choparp
+uses the Berkeley Packet Filter
+.Nm bpf(4)
diff --git a/net-mgmt/choparp/files/patch-choparp.c b/net-mgmt/choparp/files/patch-choparp.c
index eb0351cdbc73..dce53bc45021 100644
--- a/net-mgmt/choparp/files/patch-choparp.c
+++ b/net-mgmt/choparp/files/patch-choparp.c
@@ -1,5 +1,5 @@
---- choparp.c.orig Fri Nov 8 07:36:03 2002
-+++ choparp.c Thu Apr 20 23:56:38 2006
+--- choparp.c.orig 2002-11-08 07:36:03.000000000 +0900
++++ choparp.c 2010-05-04 20:39:28.279310506 +0900
@@ -42,6 +42,7 @@
#include <string.h>
#include <sys/types.h>
@@ -8,18 +8,32 @@
#include <sys/time.h>
#include <sys/ioctl.h>
#include <net/bpf.h>
-@@ -239,6 +240,10 @@
+@@ -75,6 +76,7 @@
+
+ struct cidr *targets = NULL, *excludes = NULL;
+ u_char target_mac[ETHER_ADDR_LEN]; /* target MAC address */
++int verbose = 0;
+
+ /*
+ ARP filter program
+@@ -239,6 +241,16 @@
fprintf(stderr,"checkarp: WARNING: received unknown type ARP request.\n");
return(0);
}
+ if (ntohl(*(u_int32_t *)(arp->arp_tpa)) == ntohl(*(u_int32_t *)(arp->arp_spa))) {
-+ fprintf(stderr,"checkarp: WARNING: sender equal dest.\n");
++ if (verbose != 0)
++ fprintf(stderr,"checkarp: WARNING: sender equal dest.\n");
++ return(0);
++ }
++ if (0 == ntohl(*(u_int32_t *)(arp->arp_spa))) {
++ if (verbose != 0)
++ fprintf(stderr,"checkarp: WARNING: zero sender address.\n");
+ return(0);
+ }
target_ip = ntohl(*(u_int32_t *)(arp->arp_tpa));
return match(target_ip, targets) && !match(target_ip, excludes);
}
-@@ -280,13 +285,22 @@
+@@ -280,13 +292,22 @@
char *rframe;
char *sframe;
size_t frame_len;
@@ -46,7 +60,7 @@
if (r < 0) {
if (errno == EINTR)
-@@ -295,7 +309,7 @@
+@@ -295,7 +316,7 @@
return;
}
@@ -55,7 +69,7 @@
if (rlen < 0) {
if (errno == EINTR)
continue;
-@@ -307,7 +321,7 @@
+@@ -307,7 +328,7 @@
while((rframe = getarp(p, rlen, &nextp, &nextlen)) != NULL){
if (checkarp(rframe)){
sframe = gen_arpreply(rframe, &frame_len);
@@ -64,7 +78,52 @@
}
p = nextp;
rlen = nextlen;
-@@ -437,6 +451,9 @@
+@@ -362,13 +383,13 @@
+
+ void
+ usage(void){
+- fprintf(stderr,"usage: choparp if_name mac_addr [-]addr/mask...\n");
++ fprintf(stderr,"usage: choparp [-v] if_name mac_addr [-]addr/mask...\n");
+ exit(-1);
+ }
+
+ int
+ main(int argc, char **argv){
+- int fd;
++ int ch, fd;
+ char *buf, *ifname;
+ struct cidr **targets_tail = &targets, **excludes_tail = &excludes;
+ #define APPEND(LIST,ADDR,MASK) \
+@@ -381,13 +402,24 @@
+ } while (0)
+ size_t buflen;
+
+- if (argc < 4)
++ while ((ch = getopt(argc, argv, "v")) != -1)
++ switch (ch) {
++ case 'v':
++ verbose++;
++ break;
++ default:
++ usage();
++ }
++ argc -= optind;
++ argv += optind;
++
++ if (argc < 3)
+ usage();
+
+- ifname = argv[1];
+- if (setmac(argv[2], ifname))
++ ifname = argv[0];
++ if (setmac(argv[1], ifname))
+ usage();
+- argv += 3; argc -= 3;
++ argv += 2; argc -= 2;
+
+ while (argc > 0) {
+ u_int32_t addr, mask = ~0;
+@@ -437,6 +469,9 @@
#endif
if ((fd = openbpf(ifname, &buf, &buflen)) < 0)
return(-1);