mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-04 06:15:24 +00:00
Update to 20150613
Note this version uses pcap instead of bpf Sponsored by: Netgate
This commit is contained in:
parent
ec63f5f84c
commit
ea8a2007b9
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=392497
@ -2,18 +2,31 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= choparp
|
||||
PORTVERSION= 20021107
|
||||
PORTREVISION= 4
|
||||
PORTVERSION= 20150613
|
||||
CATEGORIES= net-mgmt
|
||||
MASTER_SITES= SF
|
||||
MASTER_SITES= GH
|
||||
|
||||
MAINTAINER= garga@FreeBSD.org
|
||||
COMMENT= Simple proxy arp daemon
|
||||
|
||||
LICENSE= BSD3CLAUSE
|
||||
|
||||
USE_GITHUB= yes
|
||||
GH_ACCOUNT= quinot
|
||||
GH_TAGNAME= release/${PORTVERSION}
|
||||
USE_RC_SUBR= choparp
|
||||
LDFLAGS+= -lpcap
|
||||
|
||||
PLIST_FILES= sbin/choparp man/man8/choparp.8.gz
|
||||
|
||||
do-build:
|
||||
( cd ${WRKSRC}/src && \
|
||||
${CC} ${CFLAGS} ${LDFLAGS} -o ${PORTNAME} ${PORTNAME}.c )
|
||||
|
||||
do-install:
|
||||
${INSTALL_PROGRAM} ${WRKSRC}/src/${PORTNAME} \
|
||||
${STAGEDIR}${PREFIX}/sbin
|
||||
${INSTALL_MAN} ${WRKSRC}/src/${PORTNAME}.8 \
|
||||
${STAGEDIR}${MAN8PREFIX}/man/man8
|
||||
|
||||
.include <bsd.port.mk>
|
||||
|
@ -1,2 +1,2 @@
|
||||
SHA256 (choparp-20021107.tar.gz) = 3a79c98868b87513dee19805a00d1262907e42dbca6e688f1550870fa02acd7c
|
||||
SIZE (choparp-20021107.tar.gz) = 6687
|
||||
SHA256 (quinot-choparp-20150613-release-20150613_GH0.tar.gz) = 141cad384dc42f094d0c9a1fd49440adc1bf7f19c1cce122091374d8ca261f19
|
||||
SIZE (quinot-choparp-20150613-release-20150613_GH0.tar.gz) = 6506
|
||||
|
@ -1,14 +0,0 @@
|
||||
--- Makefile.orig 2015-06-07 13:12:33 UTC
|
||||
+++ Makefile
|
||||
@@ -0,0 +1,11 @@
|
||||
+PROG= choparp
|
||||
+MAN8= choparp.8
|
||||
+
|
||||
+BINOWN!= /usr/bin/id -n -u
|
||||
+BINGRP!= /usr/bin/id -n -g
|
||||
+MANOWN= ${BINOWN}
|
||||
+MANGRP= ${BINGRP}
|
||||
+BINDIR= ${PREFIX}/sbin
|
||||
+MANDIR= ${PREFIX}/man/man
|
||||
+
|
||||
+.include <bsd.prog.mk>
|
@ -1,56 +0,0 @@
|
||||
--- choparp.8.orig 2002-11-07 22:36:03 UTC
|
||||
+++ choparp.8
|
||||
@@ -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 +43,7 @@
|
||||
.Sh DESCRIPTION
|
||||
.Pp
|
||||
.Nm choparp
|
||||
-is a easy-to-use proxy ARP daemon.
|
||||
+is an easy-to-use proxy ARP daemon.
|
||||
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 +53,7 @@ for the network specified by
|
||||
.Ar net_addr Ns / Ar net_mask .
|
||||
.Pp
|
||||
.Ar mac_addr
|
||||
-is th MAC address to be published for the specified hosts.
|
||||
+is the MAC address to be published for the specified hosts.
|
||||
It is normally the address of
|
||||
.Ar if_name .
|
||||
The format of
|
||||
@@ -72,7 +73,7 @@ or be a 32 bit hexadecimal value startin
|
||||
.Dq 0x
|
||||
.Pq for example Ad 0x858a0186 .
|
||||
.Ar net_mask
|
||||
-can likewise be speficied as a dotted quad or hexadecimal value,
|
||||
+can likewise be specified as a dotted quad or hexadecimal value,
|
||||
or alternatively as a mask length. The following address specifications
|
||||
are therefore equivalent:
|
||||
.Bl -item -offset indent
|
||||
@@ -89,6 +90,16 @@ Addresses can be
|
||||
.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)
|
||||
+and so the kernel must be compiled with support for the
|
||||
+.Nm bpf
|
||||
+device.
|
||||
.Sh EXAMPLES
|
||||
If you have network interface
|
||||
.Dq ne0
|
@ -1,135 +0,0 @@
|
||||
--- choparp.c.orig 2002-11-07 22:36:03 UTC
|
||||
+++ choparp.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
+#include <sys/event.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <net/bpf.h>
|
||||
@@ -75,6 +76,7 @@ struct cidr {
|
||||
|
||||
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 @@ checkarp(char *arpbuf){
|
||||
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))) {
|
||||
+ 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 +292,22 @@ loop(int fd, char *buf, size_t buflen){
|
||||
char *rframe;
|
||||
char *sframe;
|
||||
size_t frame_len;
|
||||
- fd_set fdset;
|
||||
+ int kq;
|
||||
+ struct kevent kev;
|
||||
|
||||
- FD_ZERO(&fdset);
|
||||
- FD_SET(fd,&fdset);
|
||||
+ if ((kq = kqueue()) < 0) {
|
||||
+ perror("kqueue");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ EV_SET(&kev, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
|
||||
+ if (kevent(kq, &kev, 1, NULL, 0, NULL) < 0 ) {
|
||||
+ perror("kevent");
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
for(;;){
|
||||
- int r = select(fd+1,&fdset, 0, 0, 0);
|
||||
+ int r = kevent(kq, NULL, 0, &kev, 1, NULL);
|
||||
|
||||
if (r < 0) {
|
||||
if (errno == EINTR)
|
||||
@@ -295,7 +316,7 @@ loop(int fd, char *buf, size_t buflen){
|
||||
return;
|
||||
}
|
||||
|
||||
- rlen = read(fd, buf, buflen);
|
||||
+ rlen = read(kev.ident, buf, buflen);
|
||||
if (rlen < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
@@ -307,7 +328,7 @@ loop(int fd, char *buf, size_t buflen){
|
||||
while((rframe = getarp(p, rlen, &nextp, &nextlen)) != NULL){
|
||||
if (checkarp(rframe)){
|
||||
sframe = gen_arpreply(rframe, &frame_len);
|
||||
- write(fd, sframe, frame_len);
|
||||
+ write(kev.ident, sframe, frame_len);
|
||||
}
|
||||
p = nextp;
|
||||
rlen = nextlen;
|
||||
@@ -362,13 +383,13 @@ atoip(char *buf, u_int32_t *ip_addr){
|
||||
|
||||
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 @@ main(int argc, char **argv){
|
||||
} 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 @@ main(int argc, char **argv){
|
||||
#endif
|
||||
if ((fd = openbpf(ifname, &buf, &buflen)) < 0)
|
||||
return(-1);
|
||||
+ #ifndef DEBUG
|
||||
+ daemon(0, 0);
|
||||
+ #endif
|
||||
loop(fd, buf, buflen);
|
||||
return(-1);
|
||||
}
|
@ -4,4 +4,4 @@ proxy arp reply to the sender if the arp request queries the MAC address
|
||||
(ethernet hardware address) for the network speicified by net_addr and
|
||||
net_mask.
|
||||
|
||||
WWW: http://sourceforge.net/projects/choparp/
|
||||
WWW: https://github.com/quinot/choparp
|
||||
|
Loading…
Reference in New Issue
Block a user