Import IPFilter 4.1.28

This commit is contained in:
Darren Reed 2007-10-18 21:42:51 +00:00
parent 4a9a9e0514
commit 39ff65a633
52 changed files with 774 additions and 142 deletions

View File

@ -485,13 +485,21 @@ install:
cp if_ipl.o /lkm; \
fi
-if [ -d /modules -a -f ipf.ko ] ; then \
cp ipf.ko /modules; \
if [ -f /modules/ipl.ko ] ; then \
cp ipf.ko /modules/ipl.ko; \
else \
cp ipf.ko /modules; \
fi \
fi
-if [ -d /modules -a -f ipfrule.ko ] ; then \
cp ipfrule.ko /modules; \
fi
-if [ -d /boot/kernel -a -f ipf.ko ] ; then \
cp ipf.ko /boot/kernel; \
if [ -f /boot/kernel/ipl.ko ] ; then \
cp ipf.ko /boot/kernel/ipl.ko; \
else \
cp ipf.ko /boot/kernel; \
fi \
fi
-if [ -d /boot/kernel -a -f ipfrule.ko ] ; then \
cp ipfrule.ko /boot/kernel; \

View File

@ -32,11 +32,15 @@ else
fi
if [ ! -f ip_rules.c -o ! -f ip_rules.h ] ; then
echo "Please do a build of ipfilter and then run the following"
echo "command to build extra files:"
echo
echo "make ip_rules.c"
exit 1
echo "Trying to build ip_rules.c and ip_rules.h"
make ip_rules.c
if [ ! -f ip_rules.c -o ! -f ip_rules.h ] ; then
echo "Please do a build of ipfilter and then run the following"
echo "command to build extra files:"
echo
echo "make ip_rules.c"
exit 1
fi
fi
echo -n "Installing "

View File

@ -10,12 +10,110 @@
# and especially those who have found the time to port IP Filter to new
# platforms.
#
4.1.28 - Release 16 October 2007
backout changes (B1) & (B2) as they've caused NAT entries to persist for
too long and possibly other side effects.
Still need to compile in our own radix.c for Solaris as the one in S10U4
has a different alignment of structure members (causes panic)
keep state doesn't work with multicast/broadcast packets (makes UPnP easier)
ippool -l may only lists every 2nd pool's contents
4.1.27 - Released 29 September 2007
SunOS5/replace script does not deal with i386 systems that have the
i86/amd64 directory pair.
make BSD/kupgrade try to build ip_rules.[ch] before complaining
Need to look for ipl.ko LKM on FreeBSD, not just ipf.ko
Cleanup SunOS5 Makefile pieces, removing CPU, sunos5x86; buildsunos needs
to drive 32bit cc builds differently for sparc/i386 now.
Update instructions for rebuilding FreeBSD kernels
Make the target "freebsd" work for building ipfilter
destroying NAT entries for blocked packets can lead to NAT table entry leak,
provide a counter of orphan'd NAT entries to track this problem.
4.1.26 - Released 24 September 2007
Fix build problem for Solaris prior to S10U4
4.1.25 - Released 20 September 2007
stepping through structures with ioctls can lead to the wrong things
being free'd and panics
if a NAT entry (such as an rdr) is created but the packet ends up being
blocked, tear down the NAT entry.
fix fragment cache preventing keep state from functioning
fix handling of \ to indicate a continued line in .conf files
include port ranges in the allowed input for ipf when using "port = ()"
only advance TCP state for packets on the leading edge of the window. (B1)
using ipnat -l can lead to memory corruption in high stress situations
track TCP sequence numbers with NAT so that it can do timeout advances
correctly inline with state
ICMP checksums for some redirect'd packets are not adjusted correctly.
IPv6 address components need to be explicitly cast to a 32bit pointer
boundary so that compilers don't try to access them as two 64bit
pieces (no guarantee is made that an Ipv6 address is on a 64bit
aligned address)
filling up the ipauth packet queue can lead to no more packets being
processed.
locking used to deref a nat entry causes a significant performance hit
m_pulldown isn't properly handled, leading to possible panics with ICMPv6
packets
IPv6 fragment handling doesn't allow for "keep frag" to work
build on Solaris10 Update4 with pfhooks in the kernel
logging of Ipv6 packets with extension headers fix - Miroslaw Luc
4.1.24 - Released 8 July 2007
patch from Stuart Remphrey to address recursive mutex lock with TCP state
add hash table bucket stats display to ipnat -s
give ASSERT some teeth for user compiles
initialising ipf_global, ipf_frcache, ipf_mutex should all be done very
early on
do some caddr_t cleanup, where possible
fr_ref no longer tracks the number of children rules in a group for head rules
make sure all BCOPY* have a value assigned to something
fix possible use of icmp pointer after pullup makes it invalid
resolve compile problems related to FreeBSD tree
4.1.23 - Released 31 May 2007
NAT was not always correctly fixing ICMP headers for errors
some TCP state steps when closing do not update timeouts, leading to
them being removed prematurely.
them being removed prematurely. (B2)
fix compilation problems for netbsd 4.99

View File

@ -5,7 +5,7 @@
# provided that this notice is preserved and due credit is given
# to the original author and the contributors.
#
# $Id: Makefile,v 2.76.2.21 2007/05/11 21:57:25 darrenr Exp $
# $Id: Makefile,v 2.76.2.24 2007/09/26 10:04:03 darrenr Exp $
#
SHELL=/bin/sh
BINDEST=/usr/local/bin
@ -131,10 +131,7 @@ all:
@echo "openbsd - compile for OpenBSD"
@echo "freebsd20 - compile for FreeBSD 2.0, 2.1 or earlier"
@echo "freebsd22 - compile for FreeBSD-2.2 or greater"
@echo "freebsd3 - compile for FreeBSD-3.x"
@echo "freebsd4 - compile for FreeBSD-4.x"
@echo "freebsd5 - compile for FreeBSD-5.x"
@echo "freebsd6 - compile for FreeBSD-6.x"
@echo "freebsd - compile for all other versions of FreeBSD"
@echo "bsd - compile for generic 4.4BSD systems"
@echo "bsdi - compile for BSD/OS"
@echo "irix - compile for SGI IRIX"
@ -151,6 +148,7 @@ retest:
else echo test directory not present, sorry; fi
include:
-mkdir -p net netinet
if [ ! -f netinet/done ] ; then \
(cd netinet; ln -s ../*.h .; ln -s ../ip_*_pxy.c .;); \
(cd netinet; ln -s ../ipsend/tcpip.h tcpip.h); \
@ -166,6 +164,9 @@ sunos solaris: include
MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" BPFILTER=$(BPFILTER) \
CC="$(CC)" DEBUG="$(DEBUG)" ./buildsunos
freebsd:
make freebsd`uname -r|cut -c1`
freebsd22: include
make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
-rm -f BSD/$(CPUDIR)/ioconf.h
@ -350,13 +351,9 @@ sunos4 solaris1:
(cd SunOS4; make -f Makefile.ipsend build "CC=$(CC)" TOP=.. $(DEST) $(MFLAGS); cd ..)
sunos5 solaris2: null
(cd SunOS5/$(CPUDIR); $(MAKE) build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)" "CPU=-Dsparc -D__sparc__"; cd ..)
(cd SunOS5/$(CPUDIR); $(MAKE) build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)"; cd ..)
(cd SunOS5/$(CPUDIR); $(MAKE) -f Makefile.ipsend build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
sunos5x86 solaris2x86: null
(cd SunOS5/$(CPUDIR); make build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)" "CPU=-Di86pc -Di386 -D__i386__"; cd ..)
(cd SunOS5/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
linux: include
(cd Linux; make build LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL); cd ..)
(cd Linux; make ipflkm LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL) WORKDIR=`pwd`; cd ..)
@ -373,7 +370,7 @@ install-sunos4: solaris
(cd SunOS4; $(MAKE) CPU=$(CPU) TOP=.. install)
install-sunos5: solaris null
(cd SunOS5; $(MAKE) CPU=$(CPU) TOP=.. install)
(cd SunOS5; $(MAKE) TOP=.. install)
install-aix:
(cd AIX/`AIX/cpurev`; make install "TOP=../.." $(MFLAGS); cd ..)

View File

@ -5,7 +5,7 @@
*/
#if !defined(lint)
static const char sccsid[] = "@(#)ip_fil.c 2.41 6/5/96 (C) 1993-2000 Darren Reed";
static const char rcsid[] = "@(#)$Id: ip_fil.c,v 2.133.2.16 2007/05/28 11:56:22 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: ip_fil.c,v 2.133.2.18 2007/09/09 11:32:05 darrenr Exp $";
#endif
#ifndef SOLARIS
@ -79,7 +79,7 @@ struct file;
#include <sys/hashing.h>
# endif
#endif
#if defined(__FreeBSD__)
#if defined(__FreeBSD__) || defined(SOLARIS2)
# include "radix_ipf.h"
#endif
#ifndef __osf__
@ -388,7 +388,7 @@ int v;
*addr++ = '\0';
for (ifpp = ifneta; ifpp && (ifp = *ifpp); ifpp++) {
COPYIFNAME(ifp, ifname);
COPYIFNAME(v, ifp, ifname);
if (!strcmp(name, ifname)) {
if (addr != NULL)
fr_setifpaddr(ifp, addr);
@ -427,6 +427,9 @@ int v;
}
ifp = ifneta[nifs - 1];
#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
TAILQ_INIT(&ifp->if_addrlist);
#endif
#if (defined(NetBSD) && (NetBSD <= 1991011) && (NetBSD >= 199606)) || \
(defined(OpenBSD) && (OpenBSD >= 199603)) || defined(linux) || \
(defined(__FreeBSD__) && (__FreeBSD_version >= 501113))

View File

@ -3,20 +3,21 @@
#
#CC=gcc -Wuninitialized -Wstrict-prototypes -Werror -O
CFLAGS=-I..
CCARGS=$(DEBUG) -I. -I.. $(CFLAGS) -I$(DESTDIR) -I$(DESTDIR)/.. -I../ipsend
all: $(DESTDIR)/iplang_y.o $(DESTDIR)/iplang_l.o
$(DESTDIR)/iplang_y.o: $(DESTDIR)/iplang_y.c
$(CC) $(DEBUG) -I. -I.. -I$(DESTDIR) -I../ipsend $(CFLAGS) $(LINUX) -c $(DESTDIR)/iplang_y.c -o $@
$(CC) $(CCARGS) $(LINUX) -c $(DESTDIR)/iplang_y.c -o $@
$(DESTDIR)/iplang_l.o: $(DESTDIR)/iplang_l.c
$(CC) $(DEBUG) -I. -I.. -I$(DESTDIR) -I../ipsend $(CFLAGS) $(LINUX) -c $(DESTDIR)/iplang_l.c -o $@
$(CC) $(CCARGS) $(LINUX) -c $(DESTDIR)/iplang_l.c -o $@
iplang_y.o: iplang_y.c
$(CC) $(DEBUG) -I. -I.. -I../ipsend $(CFLAGS) $(LINUX) -c $< -o $@
$(CC) $(CCARGS) $< -o $@
iplang_l.o: iplang_l.c
$(CC) $(DEBUG) -I. -I.. -I../ipsend $(CFLAGS) $(LINUX) -c $< -o $@
$(CC) $(CCARGS) $< -o $@
$(DESTDIR)/iplang_l.c: iplang_l.l $(DESTDIR)/iplang_y.h
lex iplang_l.l

View File

@ -6,7 +6,7 @@
*/
#if !defined(lint)
static const char sccsid[] = "%W% %G% (C)1995 Darren Reed";
static const char rcsid[] = "@(#)$Id: iptests.c,v 2.8.2.8 2007/02/17 12:41:51 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: iptests.c,v 2.8.2.9 2007/09/13 07:19:34 darrenr Exp $";
#endif
#include <sys/param.h>
#include <sys/types.h>
@ -20,6 +20,9 @@ typedef int boolean_t;
#endif
#include <sys/time.h>
#if !defined(__osf__)
# ifdef __NetBSD__
# include <machine/lock.h>
# endif
# define _KERNEL
# define KERNEL
# if !defined(solaris) && !defined(linux) && !defined(__sgi) && !defined(hpux)
@ -1095,7 +1098,8 @@ int ptest;
struct tcpcb *tcbp, tcb;
struct tcpiphdr ti;
struct sockaddr_in sin;
int fd, slen;
int fd;
socklen_t slen;
bzero((char *)&sin, sizeof(sin));

View File

@ -6,7 +6,7 @@
*/
#if !defined(lint)
static const char sccsid[] = "@(#)sock.c 1.2 1/11/96 (C)1995 Darren Reed";
static const char rcsid[] = "@(#)$Id: sock.c,v 2.8.4.6 2007/02/17 12:41:51 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: sock.c,v 2.8.4.7 2007/09/13 07:19:34 darrenr Exp $";
#endif
#include <sys/param.h>
#include <sys/types.h>
@ -29,6 +29,9 @@ typedef int boolean_t;
# include <sys/dir.h>
#endif
#if !defined(__osf__)
# ifdef __NetBSD__
# include <machine/lock.h>
# endif
# define _KERNEL
# define KERNEL
# ifdef ultrix
@ -384,7 +387,8 @@ struct in_addr gwip;
{
struct sockaddr_in rsin, lsin;
struct tcpcb *t, tcb;
int fd, nfd, len;
int fd, nfd;
socklen_t len;
printf("Dest. Port: %d\n", ti->ti_dport);

View File

@ -4,7 +4,7 @@
all: l4check
l4check: l4check.c
$(CC) -g -I.. $(CFLAGS) $(LIBS) l4check.c -o $@
$(CC) -g -I.. -Wall $(CFLAGS) $(LIBS) l4check.c -o $@
clean:
/bin/rm -f l4check

View File

@ -25,6 +25,7 @@
#include "ip_compat.h"
#include "ip_fil.h"
#include "ip_nat.h"
#include "ipl.h"
#include "ipf.h"
@ -96,13 +97,21 @@ char *dst, *src;
void addnat(l4)
l4cfg_t *l4;
{
ipnat_t *ipn = &l4->l4_nat;
printf("Add NAT rule for %s/%#x,%u -> ", inet_ntoa(ipn->in_out[0]),
printf("Add NAT rule for %s/%#x,%u -> ", inet_ntoa(ipn->in_out[0].in4),
ipn->in_outmsk, ntohs(ipn->in_pmin));
printf("%s,%u\n", inet_ntoa(ipn->in_in[0]), ntohs(ipn->in_pnext));
printf("%s,%u\n", inet_ntoa(ipn->in_in[0].in4), ntohs(ipn->in_pnext));
if (!(opts & OPT_DONOTHING)) {
if (ioctl(natfd, SIOCADNAT, &ipn) == -1)
ipfobj_t obj;
bzero(&obj, sizeof(obj));
obj.ipfo_rev = IPFILTER_VERSION;
obj.ipfo_size = sizeof(*ipn);
obj.ipfo_ptr = ipn;
if (ioctl(natfd, SIOCADNAT, &obj) == -1)
perror("ioctl(SIOCADNAT)");
}
}
@ -114,9 +123,16 @@ l4cfg_t *l4;
ipnat_t *ipn = &l4->l4_nat;
printf("Remove NAT rule for %s/%#x,%u -> ",
inet_ntoa(ipn->in_out[0]), ipn->in_outmsk, ipn->in_pmin);
printf("%s,%u\n", inet_ntoa(ipn->in_in[0]), ipn->in_pnext);
inet_ntoa(ipn->in_out[0].in4), ipn->in_outmsk, ipn->in_pmin);
printf("%s,%u\n", inet_ntoa(ipn->in_in[0].in4), ipn->in_pnext);
if (!(opts & OPT_DONOTHING)) {
ipfobj_t obj;
bzero(&obj, sizeof(obj));
obj.ipfo_rev = IPFILTER_VERSION;
obj.ipfo_size = sizeof(*ipn);
obj.ipfo_ptr = ipn;
if (ioctl(natfd, SIOCRMNAT, &ipn) == -1)
perror("ioctl(SIOCRMNAT)");
}
@ -176,7 +192,6 @@ l4cfg_t *l4;
void writefd(l4)
l4cfg_t *l4;
{
char buf[80], *ptr;
int n, i, fd;
fd = l4->l4_fd;
@ -408,7 +423,6 @@ u_short *portp;
struct servent *sp;
struct hostent *hp;
char *host, *port;
struct in_addr ip;
host = str;
port = strchr(host, ',');
@ -553,7 +567,8 @@ char *filename;
break;
}
strncpy(ipn->in_ifname, s, sizeof(ipn->in_ifname));
strncpy(ipn->in_ifnames[0], s, LIFNAMSIZ);
strncpy(ipn->in_ifnames[1], s, LIFNAMSIZ);
if (!gethostport(t, num, &ipn->in_outip,
&ipn->in_pmin)) {
errtxt = line;
@ -565,11 +580,11 @@ char *filename;
if (opts & OPT_VERBOSE)
fprintf(stderr,
"Interface %s %s/%#x port %u\n",
ipn->in_ifname,
inet_ntoa(ipn->in_out[0]),
ipn->in_ifnames[0],
inet_ntoa(ipn->in_out[0].in4),
ipn->in_outmsk, ipn->in_pmin);
} else if (!strcasecmp(t, "remote")) {
if (!*ipn->in_ifname) {
if (!*ipn->in_ifnames[0]) {
fprintf(stderr,
"%d: ifname not set prior to remote\n",
num);
@ -604,7 +619,7 @@ char *filename;
break;
}
bcopy((char *)&template, (char *)l4, sizeof(*l4));
l4->l4_sin.sin_addr = ipn->in_in[0];
l4->l4_sin.sin_addr = ipn->in_in[0].in4;
l4->l4_sin.sin_port = ipn->in_pnext;
l4->l4_next = l4list;
l4list = l4;
@ -791,7 +806,7 @@ char *argv[];
}
if (!(opts & OPT_DONOTHING)) {
natfd = open(IPL_NAT, O_RDWR);
natfd = open(IPNAT_NAME, O_RDWR);
if (natfd == -1) {
perror("open(IPL_NAT)");
exit(1);
@ -802,4 +817,6 @@ char *argv[];
fprintf(stderr, "Starting...\n");
while (runconfig() == 0)
;
exit(1);
}

View File

@ -3,7 +3,7 @@
#
# See the IPFILTER.LICENCE file for details on licencing.
#
# $Id: Makefile,v 1.41.2.13 2007/05/10 06:02:19 darrenr Exp $
# $Id: Makefile,v 1.41.2.14 2007/09/21 08:30:43 darrenr Exp $
#
INCDEP=$(TOP)/ip_compat.h $(TOP)/ip_fil.h $(TOP)/ipf.h
@ -135,8 +135,6 @@ $(DEST)/fill6bits.o: $(LIBSRC)/fill6bits.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/fill6bits.c -o $@
$(DEST)/flags.o: $(LIBSRC)/flags.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/flags.c -o $@
$(DEST)/getline.o: $(LIBSRC)/getline.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/getline.c -o $@
$(DEST)/gethost.o: $(LIBSRC)/gethost.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/gethost.c -o $@
$(DEST)/getifname.o: $(LIBSRC)/getifname.c $(INCDEP)
@ -218,10 +216,6 @@ $(DEST)/optvalue.o: $(LIBSRC)/optvalue.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/optvalue.c -o $@
$(DEST)/portname.o: $(LIBSRC)/portname.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/portname.c -o $@
$(DEST)/portnum.o: $(LIBSRC)/portnum.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/portnum.c -o $@
$(DEST)/ports.o: $(LIBSRC)/ports.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/ports.c -o $@
$(DEST)/print_toif.o: $(LIBSRC)/print_toif.c $(INCDEP)
$(CC) $(CCARGS) -c $(LIBSRC)/print_toif.c -o $@
$(DEST)/printactivenat.o: $(LIBSRC)/printactivenat.c $(INCDEP)

View File

@ -3,7 +3,7 @@
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* $Id: alist_new.c,v 1.1.2.2 2006/08/25 22:43:21 darrenr Exp $
* $Id: alist_new.c,v 1.1.2.3 2007/06/06 08:05:33 darrenr Exp $
*/
#include "ipf.h"
@ -53,12 +53,14 @@ alist_new(int v, char *host)
}
if (gethost(host, &al->al_addr) == -1) {
*slash = '/';
if (slash != NULL)
*slash = '/';
fprintf(stderr, "Cannot parse hostname\n");
free(al);
return NULL;
}
al->al_mask = htonl(mask);
*slash = '/';
if (slash != NULL)
*slash = '/';
return al;
}

View File

@ -3,11 +3,11 @@
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* $Id: ipft_tx.c,v 1.15.2.9 2006/06/16 17:21:04 darrenr Exp $
* $Id: ipft_tx.c,v 1.15.2.10 2007/09/03 21:54:44 darrenr Exp $
*/
#if !defined(lint)
static const char sccsid[] = "@(#)ipft_tx.c 1.7 6/5/96 (C) 1993 Darren Reed";
static const char rcsid[] = "@(#)$Id: ipft_tx.c,v 1.15.2.9 2006/06/16 17:21:04 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: ipft_tx.c,v 1.15.2.10 2007/09/03 21:54:44 darrenr Exp $";
#endif
#include <ctype.h>
@ -257,19 +257,30 @@ int *out;
}
ip->ip_dst.s_addr = tx_hostnum(*cpp, &r);
cpp++;
if (*cpp && ip->ip_p == IPPROTO_TCP) {
char *s, *t;
if (ip->ip_p == IPPROTO_TCP) {
if (*cpp != NULL) {
char *s, *t;
tcp->th_flags = 0;
for (s = *cpp; *s; s++)
if ((t = strchr(myflagset, *s)))
tcp->th_flags |= myflags[t-myflagset];
if (tcp->th_flags)
cpp++;
}
tcp->th_flags = 0;
for (s = *cpp; *s; s++)
if ((t = strchr(myflagset, *s)))
tcp->th_flags |= myflags[t - myflagset];
if (tcp->th_flags)
cpp++;
if (tcp->th_flags == 0)
abort();
if (tcp->th_flags & TH_URG)
tcp->th_urp = htons(1);
if (*cpp && !strncasecmp(*cpp, "seq=", 4)) {
tcp->th_seq = htonl(atoi(*cpp + 4));
cpp++;
}
if (*cpp && !strncasecmp(*cpp, "ack=", 4)) {
tcp->th_ack = htonl(atoi(*cpp + 4));
cpp++;
}
} else if (*cpp && ip->ip_p == IPPROTO_ICMP) {
extern char *tx_icmptypes[];
char **s, *t;

View File

@ -11,7 +11,7 @@
#if !defined(lint)
static const char rcsid[] = "@(#)$Id: printnat.c,v 1.22.2.13 2006/12/09 10:37:47 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: printnat.c,v 1.22.2.14 2007/09/06 16:40:11 darrenr Exp $";
#endif
/*
@ -134,6 +134,8 @@ int opts;
if (opts & OPT_DEBUG)
printf("\tpmax %u\n", np->in_pmax);
} else {
int protoprinted = 0;
if (!(np->in_flags & IPN_FILTER)) {
printf("%s/", inet_ntoa(np->in_in[0].in4));
bits = count4bits(np->in_inmsk);
@ -170,6 +172,7 @@ int opts;
printf(" %.*s/", (int)sizeof(np->in_plabel),
np->in_plabel);
printproto(pr, np->in_p, NULL);
protoprinted = 1;
} else if (np->in_redir == NAT_MAPBLK) {
if ((np->in_pmin == 0) &&
(np->in_flags & IPN_AUTOPORTMAP))
@ -185,6 +188,7 @@ int opts;
printf(" portmap ");
}
printproto(pr, np->in_p, np);
protoprinted = 1;
if (np->in_flags & IPN_AUTOPORTMAP) {
printf(" auto");
if (opts & OPT_DEBUG)
@ -196,9 +200,6 @@ int opts;
printf(" %d:%d", ntohs(np->in_pmin),
ntohs(np->in_pmax));
}
} else if (np->in_flags & IPN_TCPUDP || np->in_p) {
putchar(' ');
printproto(pr, np->in_p, np);
}
if (np->in_flags & IPN_FRAG)
@ -210,6 +211,10 @@ int opts;
printf(" mssclamp %d", np->in_mssclamp);
if (np->in_tag.ipt_tag[0] != '\0')
printf(" tag %s", np->in_tag.ipt_tag);
if (!protoprinted && (np->in_flags & IPN_TCPUDP || np->in_p)) {
putchar(' ');
printproto(pr, np->in_p, np);
}
printf("\n");
if (opts & OPT_DEBUG) {
struct in_addr nip;

View File

@ -3,7 +3,7 @@
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* $Id: printpacket.c,v 1.12.4.4 2006/09/30 21:44:43 darrenr Exp $
* $Id: printpacket.c,v 1.12.4.5 2007/09/09 22:15:30 darrenr Exp $
*/
#include "ipf.h"
@ -54,7 +54,7 @@ struct ip *ip;
printf("ip #%d %d(%d) %d", ntohs(ip->ip_id), ntohs(ip->ip_len),
IP_HL(ip) << 2, ip->ip_p);
if (off & IP_OFFMASK)
printf(" @%d", off << 3);
printf(" @%d", (off & IP_OFFMASK) << 3);
printf(" %s", inet_ntoa(ip->ip_src));
if (!(off & IP_OFFMASK))
if (ip->ip_p == IPPROTO_TCP || ip->ip_p == IPPROTO_UDP)

View File

@ -52,11 +52,12 @@ int opts;
while (!last && (ioctl(fd, SIOCLOOKUPITER, &obj) == 0)) {
if (entry.ipn_next == NULL)
last = 1;
entry.ipn_next = top;
top = malloc(sizeof(*top));
if (top == NULL)
node = malloc(sizeof(*top));
if (node == NULL)
break;
bcopy(&entry, top, sizeof(entry));
bcopy(&entry, node, sizeof(entry));
node->ipn_next = top;
top = node;
}
while (top != NULL) {
@ -74,5 +75,9 @@ int opts;
if ((opts & OPT_DEBUG) == 0)
PRINTF(" };\n");
if (ioctl(fd, SIOCIPFDELTOK, &iter.ili_key) != 0)
perror("SIOCIPFDELTOK");
return pool->ipo_next;
}

View File

@ -33,8 +33,8 @@ u_long now;
sp->is_send, sp->is_dend,
sp->is_maxswin, sp->is_swinscale,
sp->is_maxdwin, sp->is_dwinscale);
PRINTF("\tcmsk %04x smsk %04x isc %p s0 %08x/%08x\n",
sp->is_smsk[0], sp->is_smsk[1], sp->is_isc,
PRINTF("\tcmsk %04x smsk %04x s0 %08x/%08x\n",
sp->is_smsk[0], sp->is_smsk[1],
sp->is_s0[0], sp->is_s0[1]);
PRINTF("\tFWD:ISN inc %x sumd %x\n",
sp->is_isninc[0], sp->is_sumd[0]);

View File

@ -92,7 +92,7 @@ to use the tree data storage type with
configuration entries.
.SH POOL ROLES
.PP
When a pool is defined in the configruation file, it must have an associated
When a pool is defined in the configuration file, it must have an associated
role. At present the only supported role is
.B ipf.
Future development will see futher expansion of their use by other sections

View File

@ -37,7 +37,7 @@
***********************************************************************
*/
#ifndef __MD5_INCLUDE__
#if !defined(__MD5_INCLUDE__) && !defined(_SYS_MD5_H)
#ifndef __P
# ifdef __STDC__

View File

@ -74,8 +74,14 @@ void panic __P((char *str));
#include <netinet/in.h>
#include <sys/socket.h>
#include <net/if.h>
#ifdef SOLARIS2
# define _RADIX_H_
#endif
#include "netinet/ip_compat.h"
#include "netinet/ip_fil.h"
#ifdef SOLARIS2
# undef _RADIX_H_
#endif
/* END OF INCLUDES */
#include "radix_ipf.h"
#ifndef min

View File

@ -40,7 +40,7 @@
# endif
#endif
#if defined(__sgi) || defined(__osf__)
#if defined(__sgi) || defined(__osf__) || defined(sun)
# define radix_mask ipf_radix_mask
# define radix_node ipf_radix_node
# define radix_node_head ipf_radix_node_head
@ -161,7 +161,7 @@ struct radix_node_head {
#define FreeS(p, z) KFREES(p, z)
#define Free(p) KFREE(p)
#if (defined(__osf__) || defined(AIX) || (IRIX >= 60516)) && defined(_KERNEL)
#if (defined(__osf__) || defined(AIX) || (IRIX >= 60516) || defined(sun)) && defined(_KERNEL)
# define rn_init ipf_rn_init
# define rn_fini ipf_rn_fini
# define rn_inithead ipf_rn_inithead

View File

@ -6,7 +6,10 @@
BINDEST=/usr/local/bin
SBINDEST=/sbin
MANDIR=/usr/share/man
all: results tests
all: expected.d results tests
expected.d:
(cd expected; make)
results:
mkdir -p results
@ -21,13 +24,13 @@ first:
-mkdir -p results
# Filtering tests
ftests: f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20
ftests: f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f24
# Rule parsing tests
ptests: i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19 \
i20 i21
ntests: n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14
ntests: n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14 n16
nitests: ni1 ni2 ni3 ni4 ni5 ni6 ni7 ni8 ni9 ni10 ni11 ni12 ni13 ni14 ni15 \
ni16 ni19 ni20 ni21 ni23
@ -38,20 +41,20 @@ logtests: l1
pools: p1 p2 p3 p5 ip1 ip2
ipv6: ipv6.1 ipv6.2 ipv6.3 ipv6.5
ipv6: ipv6.1 ipv6.2 ipv6.3 ipv6.5 ipv6.6
bpf: bpf1 bpf-f1
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f19:
@/bin/sh ./dotest `awk "/^$@ / { print; } " test.format`
f15 f16 f17 f18 f20:
f15 f16 f17 f18 f20 f24:
@/bin/sh ./mtest `awk "/^$@ / { print; } " test.format`
i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19 i20 i21 bpf1:
@/bin/sh ./itest `awk "/^$@ / { print; } " test.format`
n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14:
n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14 n16:
@/bin/sh ./nattest `awk "/^$@ / { print; } " test.format`
ni2 ni3 ni4 ni5 ni7 ni8 ni9 ni10 ni11 ni12 ni13 ni14 ni15 ni16 ni19 ni20:
@ -66,7 +69,7 @@ in1 in2 in3 in4 in5 in6:
l1:
@/bin/sh ./logtest `awk "/^$@ / { print; } " test.format`
ipv6.1 ipv6.2 ipv6.3 ipv6.5:
ipv6.1 ipv6.2 ipv6.3 ipv6.5 ipv6.6:
@/bin/sh ./dotest6 `awk "/^$@ / { print; } " test.format`
p1 p2 p3 p5:
@ -79,17 +82,18 @@ bpf-f1:
/bin/sh ./bpftest `awk "/^$@ / { print; } " test.format`
clean:
/bin/rm -f f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20
/bin/rm -f f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 f17 f18 f19 f20 f24
/bin/rm -f i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19 i20 i21
/bin/rm -f n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14
/bin/rm -f n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11 n12 n13 n14 n16
/bin/rm -f ni1 ni2 ni3 ni4 ni5 ni6 ni7 ni8 ni9
/bin/rm -f ni10 ni11 ni12 ni13 ni14 ni15 ni16 ni19 ni20 ni21 ni23
/bin/rm -f in1 in2 in3 in4 in5 in6
/bin/rm -f p1 p2 p3 p5 ip1 ip2
/bin/rm -f l1
/bin/rm -f ipv6.1 ipv6.2 ipv6.3 ipv6.5
/bin/rm -f ipv6.1 ipv6.2 ipv6.3 ipv6.5 ipv6.6
/bin/rm -f bpf1 bpf-f1
/bin/rm -f results/* logout
(cd expected; make clean)
diffs:
-cd expected; for i in *; do if [ -f $$i -a ! -f ../$$i -a -f ../results/$$i ] ; then diff -c $$i ../results/$$i >> ../diff.out; fi done

View File

@ -15,7 +15,13 @@ else
fi
fi
if [ "$tuning" != "" ] ; then
tuning="-T $tuning"
case $tuning in
-*)
;;
*)
tuning="-T $tuning"
;;
esac
fi
echo "${thistest}...";
/bin/cp /dev/null results/${thistest}

View File

@ -0,0 +1,41 @@
#
# (C)opyright 2007 by Darren Reed.
#
# See the IPFILTER.LICENCE file for details on licencing.
#
all: i19
i19: i19.dist Makefile
-if [ "`grep LOG_SECURITY /usr/include/sys/syslog.h 2>&1`" = "" ] ; then \
if [ "`grep LOG_AUDIT /usr/include/sys/syslog.h 2>&1`" = "" ] ; then \
sed -e 's/security/!!!/g' i19.dist > i19.p1; \
else \
sed -e 's/security/audit/g' i19.dist > i19.p1; \
fi \
else \
/bin/cp i19.dist i19.p1; \
fi
-if [ "`grep LOG_AUTHPRIV /usr/include/sys/syslog.h 2>&1`" = "" ] ; then \
sed -e 's/authpriv/!!!/g' i19.p1 > i19.p2; \
else \
/bin/cp i19.p1 i19.p2; \
fi
-if [ "`grep LOG_LOGALERT /usr/include/sys/syslog.h 2>&1`" = "" ] ; then \
sed -e 's/logalert/!!!/g' i19.p2 > i19.p1; \
else \
/bin/cp i19.p2 i19.p1; \
fi
-if [ "`grep LOG_FTP /usr/include/sys/syslog.h 2>&1`" = "" ] ; then \
sed -e 's/ftp/!!!/g' i19.p1 > i19.p2; \
else \
/bin/cp i19.p1 i19.p2; \
fi
-if [ "`egrep 'LOG_CRON.*15' /usr/include/sys/syslog.h 2>&1`" != "" ] ; then \
sed -e 's/cron/cron2/g' i19.p2 > i19; \
else \
/bin/cp i19.p2 i19; \
fi
/bin/rm i19.p?
clean:
/bin/rm -f i19

View File

@ -14,6 +14,16 @@ nomatch
nomatch
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
block
nomatch
@ -31,6 +41,16 @@ nomatch
nomatch
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
nomatch
nomatch
@ -48,6 +68,16 @@ pass
nomatch
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
nomatch
nomatch
@ -65,6 +95,16 @@ block
nomatch
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
nomatch
nomatch
@ -82,6 +122,36 @@ pass
pass
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
2.2.2.2 -> 4.4.4.4 pass 0x40008402 pr 17 state 0/0
tag 0 ttl 240 2 -> 53
forward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
backward: pkts in 0 bytes in 0 pkts out 0 bytes out 0
pass in keep state IPv4
pkt_flags & 0(0) = 0, pkt_options & ffffffff = 0, ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
is_flx 0x8001 0 0 0
interfaces: in X[e1],X[] out X[],X[]
Sync status: not synchronized
1.1.1.1 -> 4.4.4.4 pass 0x40008402 pr 17 state 0/0
tag 0 ttl 24 1 -> 53
forward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
backward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
pass in keep state IPv4
pkt_flags & 0(0) = 0, pkt_options & ffffffff = 0, ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
is_flx 0x8001 0x8001 0 0
interfaces: in X[e1],X[e0] out X[],X[]
Sync status: not synchronized
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
nomatch
nomatch
@ -99,6 +169,36 @@ block
block
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
2.2.2.2 -> 4.4.4.4 pass 0x40008401 pr 17 state 0/0
tag 0 ttl 240 2 -> 53
forward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
backward: pkts in 0 bytes in 0 pkts out 0 bytes out 0
block in keep state IPv4
pkt_flags & 0(0) = 0, pkt_options & ffffffff = 0, ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
is_flx 0x8001 0 0 0
interfaces: in X[e1],X[] out X[],X[]
Sync status: not synchronized
1.1.1.1 -> 4.4.4.4 pass 0x40008401 pr 17 state 0/0
tag 0 ttl 24 1 -> 53
forward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
backward: pkts in 1 bytes in 28 pkts out 0 bytes out 0
block in keep state IPv4
pkt_flags & 0(0) = 0, pkt_options & ffffffff = 0, ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
is_flx 0x8001 0x8001 0 0
interfaces: in X[e1],X[e0] out X[],X[]
Sync status: not synchronized
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------
nomatch
nomatch
@ -116,4 +216,28 @@ nomatch
nomatch
nomatch
nomatch
List of active MAP/Redirect filters:
List of active sessions:
Hostmap table:
List of active state sessions:
1.1.1.1 -> 2.1.2.2 pass 0x40008402 pr 6 state 3/4
tag 0 ttl 864000
1 -> 25 2:66 4096<<0:16384<<0
cmsk 0000 smsk 0000 s0 00000000/00000000
FWD:ISN inc 0 sumd 0
REV:ISN inc 0 sumd 0
forward: pkts in 1 bytes in 40 pkts out 0 bytes out 0
backward: pkts in 1 bytes in 40 pkts out 0 bytes out 0
pass in keep state IPv4
pkt_flags & 0(0) = 0, pkt_options & ffffffff = 0, ffffffff = 0
pkt_security & ffff = 0, pkt_auth & ffff = 0
is_flx 0x8001 0x8001 0 0
interfaces: in X[e0],X[e1] out X[],X[]
Sync status: not synchronized
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
--------

View File

@ -0,0 +1,5 @@
pass
pass
pass
pass
--------

View File

@ -0,0 +1,22 @@
block in log level user.debug quick proto icmp from any to any
block in log level mail.info quick proto icmp from any to any
block in log level daemon.notice quick proto icmp from any to any
block in log level auth.warn quick proto icmp from any to any
block in log level syslog.err quick proto icmp from any to any
block in log level lpr.crit quick proto icmp from any to any
block in log level news.alert quick proto icmp from any to any
block in log level uucp.emerg quick proto icmp from any to any
block in log level cron.debug quick proto icmp from any to any
block in log level ftp.info quick proto icmp from any to any
block in log level authpriv.notice quick proto icmp from any to any
block in log level logalert.warn quick proto icmp from any to any
block in log level local0.err quick proto icmp from any to any
block in log level local1.crit quick proto icmp from any to any
block in log level local2.alert quick proto icmp from any to any
block in log level local3.emerg quick proto icmp from any to any
block in log level local4.debug quick proto icmp from any to any
block in log level local5.info quick proto icmp from any to any
block in log level local6.notice quick proto icmp from any to any
block in log level local7.warn quick proto icmp from any to any
block in log level kern.err quick proto icmp from any to any
block in log level security.emerg quick proto icmp from any to any

View File

@ -8,3 +8,9 @@ pass out from any to any port = 7
pass out from any to any port = 9
block in from any port = 20 to any
block in from any port = 25 to any
pass in from any port 11:12 to any port 1:2
pass in from any port 21:22 to any port 1:2
pass in from any port 11:12 to any port 4:5
pass in from any port 21:22 to any port 4:5
pass in from any port 11:12 to any port 8:9
pass in from any port 21:22 to any port 8:9

View File

@ -28,3 +28,4 @@ map fxp0 from 192.168.0.0/18 to any port = 21 -> 1.2.3.4/32 proxy port 21 ftp/tc
map thisisalonginte 0.0.0.0/0 -> 0.0.0.0/32 mssclamp 1452 tag freddyliveshere
map bar0 0.0.0.0/0 -> 0.0.0.0/32 icmpidmap icmp 1000:2000
map ppp0,adsl0 0.0.0.0/0 -> 0.0.0.0/32
map ppp0 from 192.168.0.0/16 to any port = 123 -> 0.0.0.0/32 age 30/1 udp

View File

@ -5,3 +5,4 @@ map foo0 from any port < 1 to any port > 0 -> 0.0.0.0/32 tcp
map foo0 from any port <= 1 to any port >= 0 -> 0.0.0.0/32 tcp/udp
map foo0 from any port <= 1 to any port >= 0 -> 0.0.0.0/32 tcp/udp
map foo0 from any port 1 >< 20 to any port 20 <> 40 -> 0.0.0.0/32 tcp/udp
map foo0 from any port 10:20 to any port 30:40 -> 0.0.0.0/32 tcp/udp

View File

@ -0,0 +1,3 @@
pass
pass
--------

View File

@ -0,0 +1,21 @@
4520 0068 17e4 0000 6b11 cbba c05b ac33 ac1f 5318 1194 07dd 0054 0000 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
4520 0068 17e4 0000 6a11 ccba c05b ac33 ac1f 5318 1194 07dd 0054 0000 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
4500 0084 ee0f 0000 8001 e0a2 ac1f 5318 c05b ac33 0303 4ca1 0000 0000 4520 0068 17e4 0000 6a11 ccba c05b ac33 ac1f 5318 1194 07dd 0054 0000 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
4500 0084 ee0f 0000 8001 4a21 45f8 4fc1 c05b ac33 0303 bf85 0000 0000 4520 0068 17e4 0000 6a11 3639 c05b ac33 45f8 4fc1 1194 94f8 0054 0000 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
List of active MAP/Redirect filters:
rdr vlan0 from any to 69.248.79.193/32 port = 38136 -> 172.31.83.24 port 2013 udp
List of active sessions:
RDR 172.31.83.24 2013 <- -> 69.248.79.193 38136 [192.91.172.51 4500]
Hostmap table:
List of active state sessions:
List of configured pools
List of configured hash tables
List of groups configured (set 0)
List of groups configured (set 1)
-------------------------------

View File

@ -1,14 +1,14 @@
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 S
in on e0 tcp 1.1.1.1,1 2.1.2.2,24 SA
in on e1 tcp 2.1.2.2,23 1.1.1.1,2 SA
in on e1 tcp 2.1.2.2,23 1.1.1.1,1 SA
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A
in on e0 tcp 1.1.1.1,1 2.1.2.2,25 A
in on e1 tcp 2.1.2.2,23 1.1.1.1,1 A
in on e1 tcp 2.1.2.2,25 1.1.1.1,1 A
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 FA
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A
in on e0 tcp 1.1.1.1,2 2.1.2.2,23 A
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 S seq=1 ack=0
in on e0 tcp 1.1.1.1,1 2.1.2.2,24 SA seq=1 ack=1
in on e1 tcp 2.1.2.2,23 1.1.1.1,2 SA seq=101 ack=2
in on e1 tcp 2.1.2.2,23 1.1.1.1,1 SA seq=101 ack=2
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A seq=2 ack=102
in on e0 tcp 1.1.1.1,1 2.1.2.2,25 A seq=2 ack=102
in on e1 tcp 2.1.2.2,23 1.1.1.1,1 A seq=102 ack=2
in on e1 tcp 2.1.2.2,25 1.1.1.1,1 A seq=102 ack=2
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 FA seq=2 ack=102
in on e0 tcp 1.1.1.1,1 2.1.2.2,23 A seq=2 ack=102
in on e0 tcp 1.1.1.1,2 2.1.2.2,23 A seq=2 ack=102
in on e1 udp 1.1.1.1,1 4.4.4.4,53
in on e1 udp 2.2.2.2,2 4.4.4.4,53
in on e0 udp 4.4.4.4,53 1.1.1.1,1

View File

@ -0,0 +1,27 @@
[out,hme0]
4500 003f 6e48 0000 4011 8816 c0a8 0101
c0a8 01fe eb22 0035 002b d9e6 4a82 0100
0001 0000 0000 0000 0663 6f6f 6d62 7303
616e 7503 6564 7502 6175 0000 0100 01
[in,hme0]
4500 004c fc96 2000 4011 d9ba c0a8 01fe
c0a8 0101 0035 eb22 00a9 d7b9 4a82 8180
0001 0001 0003 0003 0663 6f6f 6d62 7303
616e 7503 6564 7502 6175 0000 0100 01c0
0c00 0100 0100 0000 3c00 0496
[in,hme0]
4500 004c fc96 2006 4011 d9b4 c0a8 01fe
c0a8 0101 cbe7 50c0 1300 0200 0100 0078
8c00 0603 6e73 31c0 13c0 1300 0200 0100
0078 8c00 0e02 6e73 0861 6465 6c61 6964
65c0 17c0 1300 0200 0100 0078
[in,hme0]
4500 004d fc96 000c 4011 f9ad c0a8 01fe
c0a8 0101 8c00 0603 756e 61c0 13c0 6b00
0100 0100 0027 5800 0496 cb16 1cc0 5100
0100 0100 0018 4700 0481 7f28 03c0 3f00
0100 0100 0027 5800 0496 cb01 0a

View File

@ -0,0 +1,17 @@
[out,gif0]
6000 0000 0020 2c01
ef00 1001 2002 0001 0000 0000 0000 0070
2001 1002 3333 0001 0000 0000 0000 0001
1100 0001 0000 0001
8083 829a
0020
f4c1
0000 0000 0000 0000 0000 0000 0000 0000
[out,gif0]
6000 0000 0020 2c01
ef00 1001 2002 0001 0000 0000 0000 0070
2001 1002 3333 0001 0000 0000 0000 0001
1100 0008 0000 0001
0000 0000 0000 0000 0000 0000 0000 0000

View File

@ -1,36 +1,36 @@
# 1.1.1.1,1025 -> 2.2.2.2,25 TTL=63 TCP DF SYN
[]
4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
0401 0019 0000 0000 0000 0000 5002 2000 85c3 0000
0401 0019 0000 0001 0000 0000 5002 2000 85c2 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
[]
4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
0401 0019 0000 0001 0000 0000 5010 2000 85b4 0000
#in on e1 tcp 2.1.2.2,25 1.1.1.1,1025 AS
[]
4500 0028 0000 4000 3f06 35cb 0202 0202 0101 0101
0019 0401 0000 0000 0000 0000 5012 2000 85b3 0000
0019 0401 0000 0011 0000 0002 5012 2000 85a0 0000
#in on e1 tcp 2.1.2.2,25 1.1.1.1,1025 A
[out,e1] 4500 0028 0000 4000 3f06 35cb 0202 0202 0101 0101
0019 0401 0000 0000 0000 0000 5010 2000 85b5 0000
0019 0401 0000 0012 0000 0002 5010 2000 85a1 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 F
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 AF
[]
4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
0401 0019 0000 0000 0000 0000 5011 2000 85b4 0000
0401 0019 0000 0002 0000 0012 5011 2000 85a0 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
[]
4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
0401 0019 0000 0012 0000 0003 5010 2000 85a0 0000
#in on e0 tcp 1.1.1.1,1025 2.1.2.2,25 A
[]
4500 0028 0000 4000 3f06 35cb 0101 0101 0202 0202
0401 0019 0000 0000 0000 0000 5010 2000 85b5 0000
0401 0019 0000 0012 0000 0003 5010 2000 85a0 0000
#in on e1 udp 1.1.1.1,1 4.4.4.4,53
[]

View File

@ -0,0 +1,40 @@
[in,vlan0]
4520 0068 17e4 0000 6b11 3539 c05b ac33 45f8 4fc1
1194 94f8 0054 0000
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
[out,vlan2]
4520 0068 17e4 0000 6a11 ccba c05b ac33
ac1f 5318 1194 07dd 0054 0000 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5
[in,vlan2]
4500 0084 ee0f 0000 8001 e0a2 ac1f 5318
c05b ac33 0303 4ca1 0000 0000 4520 0068
17e4 0000 6a11 ccba c05b ac33 ac1f 5318
1194 07dd 0054 0000 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5
[out,vlan0]
4500 0084 ee0f 0000 8001 e0a2 ac1f 5318
c05b ac33 0303 4ca1 0000 0000 4520 0068
17e4 0000 6a11 ccba c05b ac33 ac1f 5318
1194 07dd 0054 0000 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5 a5a5
a5a5 a5a5

View File

@ -5,7 +5,14 @@ else
format="-F $2"
fi
if [ "$4" != "" ] ; then
format="-T $4 $format"
case $4 in
-*)
format="$4 $format"
;;
*)
format="-T $4 $format"
;;
esac
fi
if [ -f /usr/ucb/touch ] ; then
TOUCH=/usr/ucb/touch

View File

@ -0,0 +1 @@
pass out quick proto udp all keep state keep frags

View File

@ -4,3 +4,4 @@ block in from port 20:21
block out from any to port 10 <> 100
pass out from any to port = (3,5,7,9)
block in from port = (20,25)
pass in from any port = (11:12, 21:22) to any port = (1:2, 4:5, 8:9)

View File

@ -1,7 +1,9 @@
log in all
pass in from 128.16/16 to 129.10.10/24
pass in from 128.0.0.1/24 to 128\
.0.0.1/16
pass in from 128.0.0.1/24 to 1\
28\
.\
0.0.1/16
pass in from 128.0.0.1/0xffffff00 to 128.0.0.1/0xffff0000
pass in from 128.0.0.1/255.255.255.0 to 128.0.0.1/255.255.0.0
pass in from 128.0.0.1 mask 0xffffff00 to 128.0.0.1 mask 0xffff0000

View File

@ -28,3 +28,4 @@ map fxp0 from 192.168.0.0/18 to 0/0 port = 21 -> 1.2.3.4/32 proxy port 21 ftp/tc
map thisisalonginte 0/0 -> 0/32 mssclamp 1452 tag freddyliveshere
map bar0 0/0 -> 0/32 icmpidmap icmp 1000:2000
map ppp0,adsl0 0/0 -> 0/32
map ppp0 from 192.168.0.0/16 to any port = 123 -> 0/32 age 30/1 udp

View File

@ -5,3 +5,4 @@ map foo0 from any port lt 1 to any port gt 0 -> 0/32 tcp
map foo0 from any port <= 1 to any port >= 0 -> 0/32 tcp/udp
map foo0 from any port le 1 to any port ge 0 -> 0/32 tcp/udp
map foo0 from any port 1 >< 20 to any port 20 <> 40 -> 0/32 tcp/udp
map foo0 from any port 10:20 to any port 30:40 -> 0/32 tcp/udp

View File

@ -0,0 +1 @@
pass out on gif0 proto udp all keep frag

View File

@ -0,0 +1 @@
rdr vlan0 from any to 69.248.79.193 port = 38136 -> 172.31.83.24 port 2013 udp

View File

@ -11,7 +11,7 @@ f7 text text
f8 text text
f9 text text
f10 text text
f11 text text
f11 text text -D
f12 hex hex
f13 hex hex
f14 text text
@ -94,3 +94,6 @@ p2 text text
p3 text text
p4 text text
p5 text text
n16 hex hex -D
f24 hex text
ipv6.6 hex text

View File

@ -770,8 +770,20 @@ fromport:
srcportlist:
portnum { DOREM(fr->fr_scmp = FR_EQUAL; fr->fr_sport = $1;) }
| portnum ':' portnum
{ DOREM(fr->fr_scmp = FR_INCRANGE; fr->fr_sport = $1; \
fr->fr_stop = $3;) }
| portnum YY_RANGE_IN portnum
{ DOREM(fr->fr_scmp = FR_INRANGE; fr->fr_sport = $1; \
fr->fr_stop = $3;) }
| srcportlist lmore portnum
{ DOREM(fr->fr_scmp = FR_EQUAL; fr->fr_sport = $3;) }
| srcportlist lmore portnum ':' portnum
{ DOREM(fr->fr_scmp = FR_INCRANGE; fr->fr_sport = $3; \
fr->fr_stop = $5;) }
| srcportlist lmore portnum YY_RANGE_IN portnum
{ DOREM(fr->fr_scmp = FR_INRANGE; fr->fr_sport = $3; \
fr->fr_stop = $5;) }
;
dstobject:
@ -836,8 +848,20 @@ toport:
dstportlist:
portnum { DOREM(fr->fr_dcmp = FR_EQUAL; fr->fr_dport = $1;) }
| portnum ':' portnum
{ DOREM(fr->fr_dcmp = FR_INCRANGE; fr->fr_dport = $1; \
fr->fr_dtop = $3;) }
| portnum YY_RANGE_IN portnum
{ DOREM(fr->fr_dcmp = FR_INRANGE; fr->fr_dport = $1; \
fr->fr_dtop = $3;) }
| dstportlist lmore portnum
{ DOREM(fr->fr_dcmp = FR_EQUAL; fr->fr_dport = $3;) }
| dstportlist lmore portnum ':' portnum
{ DOREM(fr->fr_dcmp = FR_INCRANGE; fr->fr_dport = $3; \
fr->fr_dtop = $5;) }
| dstportlist lmore portnum YY_RANGE_IN portnum
{ DOREM(fr->fr_dcmp = FR_INRANGE; fr->fr_dport = $3; \
fr->fr_dtop = $5;) }
;
addr: pool '/' YY_NUMBER { pooled = 1;

View File

@ -69,7 +69,7 @@
#if !defined(lint)
static const char sccsid[] = "@(#)fils.c 1.21 4/20/96 (C) 1993-2000 Darren Reed";
static const char rcsid[] = "@(#)$Id: ipfstat.c,v 1.44.2.23 2007/05/31 13:13:02 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: ipfstat.c,v 1.44.2.25 2007/06/30 09:48:50 darrenr Exp $";
#endif
#ifdef __hpux
@ -1118,7 +1118,7 @@ ips_stat_t *ipsp;
PRINTF("\t%u%% hash efficiency\n", ipsp->iss_active ?
(u_int)(ipsp->iss_inuse * 100 / ipsp->iss_active) : 0);
minlen = ipsp->iss_max;
minlen = ipsp->iss_inuse;
totallen = 0;
maxlen = 0;
@ -1126,7 +1126,7 @@ ips_stat_t *ipsp;
if (buckets[i] > maxlen)
maxlen = buckets[i];
if (buckets[i] < minlen)
minlen = buckets[i];
minlen = buckets[i];
totallen += buckets[i];
}
@ -1809,7 +1809,7 @@ int *port;
*port = -1;
} else if (!sscanf(comma + 1, "%d", port) ||
(*port < 0) || (*port > 65535)) {
fprintf(stderr, "Invalid port specfication in %s\n",
fprintf(stderr, "Invalid port specification in %s\n",
argument);
free(s);
exit(-2);
@ -1821,6 +1821,7 @@ int *port;
/* get ip address */
if (!strcasecmp(s, "any")) {
ip->in4.s_addr = INADDR_ANY;
ok = 1;
#ifdef USE_INET6
ip->in6 = in6addr_any;
} else if (use_inet6 && inet_pton(AF_INET6, s, &ip->in6)) {

View File

@ -76,7 +76,7 @@
#if !defined(lint)
static const char sccsid[] = "@(#)ipmon.c 1.21 6/5/96 (C)1993-2000 Darren Reed";
static const char rcsid[] = "@(#)$Id: ipmon.c,v 1.33.2.18 2007/05/27 11:12:12 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: ipmon.c,v 1.33.2.20 2007/09/20 12:51:56 darrenr Exp $";
#endif
@ -750,6 +750,8 @@ int blen;
strcpy(t, "NAT:MAPBLOCK ");
else if (nl->nl_type == NL_CLONE)
strcpy(t, "NAT:CLONE ");
else if (nl->nl_type == NL_DESTROY)
strcpy(t, "NAT:DESTROY ");
else
sprintf(t, "Type: %d ", nl->nl_type);
t += strlen(t);
@ -762,8 +764,9 @@ int blen;
(void) sprintf(t, "%s,%s ", HOSTNAME_V4(res, nl->nl_outip),
portname(res, proto, (u_int)nl->nl_outport));
t += strlen(t);
(void) sprintf(t, "[%s,%s]", HOSTNAME_V4(res, nl->nl_origip),
portname(res, proto, (u_int)nl->nl_origport));
(void) sprintf(t, "[%s,%s PR %s]", HOSTNAME_V4(res, nl->nl_origip),
portname(res, proto, (u_int)nl->nl_origport),
getproto(nl->nl_p));
t += strlen(t);
if (nl->nl_type == NL_EXPIRE) {
#ifdef USE_QUAD_T
@ -1000,7 +1003,10 @@ int blen;
ipflog_t *ipf;
iplog_t *ipl;
#ifdef USE_INET6
struct ip6_ext *ehp;
u_short ehl;
ip6_t *ip6;
int go;
#endif
ipl = (iplog_t *)buf;
@ -1109,6 +1115,29 @@ int blen;
s = (u_32_t *)&ip6->ip6_src;
d = (u_32_t *)&ip6->ip6_dst;
plen = hl + ntohs(ip6->ip6_plen);
go = 1;
ehp = (struct ip6_ext *)((char *)ip6 + hl);
while (go == 1) {
switch (p)
{
case IPPROTO_HOPOPTS :
case IPPROTO_MOBILITY :
case IPPROTO_DSTOPTS :
case IPPROTO_ROUTING :
case IPPROTO_AH :
p = ehp->ip6e_nxt;
ehl = 8 + (ehp->ip6e_len << 3);
hl += ehl;
ehp = (struct ip6_ext *)((char *)ehp + ehl);
break;
case IPPROTO_FRAGMENT :
hl += sizeof(struct ip6_frag);
/* FALLTHROUGH */
default :
go = 0;
break;
}
}
#else
sprintf(t, "ipv6");
goto printipflog;

View File

@ -65,7 +65,7 @@ extern char *sys_errlist[];
#if !defined(lint)
static const char sccsid[] ="@(#)ipnat.c 1.9 6/5/96 (C) 1993 Darren Reed";
static const char rcsid[] = "@(#)$Id: ipnat.c,v 1.24.2.6 2007/05/11 11:16:55 darrenr Exp $";
static const char rcsid[] = "@(#)$Id: ipnat.c,v 1.24.2.11 2007/09/25 08:27:34 darrenr Exp $";
#endif
@ -78,6 +78,7 @@ char thishost[MAXHOSTNAMELEN];
extern char *optarg;
void dostats __P((int, natstat_t *, int, int));
void dotable __P((natstat_t *, int, int));
void flushtable __P((int, int));
void usage __P((char *));
int main __P((int, char*[]));
@ -357,9 +358,10 @@ int fd, opts, alive;
nsp->ns_added, nsp->ns_expire);
printf("no memory\t%lu\tbad nat\t%lu\n",
nsp->ns_memfail, nsp->ns_badnat);
printf("inuse\t%lu\nrules\t%lu\n",
nsp->ns_inuse, nsp->ns_rules);
printf("inuse\t%lu\norphans\t%u\nrules\t%lu\n",
nsp->ns_inuse, nsp->ns_orphans, nsp->ns_rules);
printf("wilds\t%u\n", nsp->ns_wilds);
dotable(nsp, fd, alive);
if (opts & OPT_VERBOSE)
printf("table %p list %p\n",
nsp->ns_table, nsp->ns_list);
@ -376,6 +378,63 @@ int fd, opts, alive;
}
void dotable(nsp, fd, alive)
natstat_t *nsp;
int fd, alive;
{
int sz, i, used, totallen, maxlen, minlen;
ipftable_t table;
u_long *buckets;
ipfobj_t obj;
sz = sizeof(*buckets) * nsp->ns_nattab_sz;
buckets = (u_long *)malloc(sz);
obj.ipfo_rev = IPFILTER_VERSION;
obj.ipfo_type = IPFOBJ_GTABLE;
obj.ipfo_size = sizeof(table);
obj.ipfo_ptr = &table;
table.ita_type = IPFTABLE_BUCKETS_NATIN;
table.ita_table = buckets;
if (alive) {
if (ioctl(fd, SIOCGTABL, &obj) != 0) {
free(buckets);
return;
}
} else {
if (kmemcpy((char *)buckets, (u_long)nsp->ns_nattab_sz, sz)) {
free(buckets);
return;
}
}
totallen = 0;
maxlen = 0;
minlen = nsp->ns_inuse;
used = 0;
for (i = 0; i < nsp->ns_nattab_sz; i++) {
if (buckets[i] > maxlen)
maxlen = buckets[i];
if (buckets[i] < minlen)
minlen = buckets[i];
if (buckets[i] != 0)
used++;
totallen += buckets[i];
}
printf("hash efficiency\t%2.2f%%\n",
totallen ? ((float)used / totallen) * 100.0 : 0.0);
printf("bucket usage\t%2.2f%%\n",
((float)used / nsp->ns_nattab_sz) * 100.0);
printf("minimal length\t%d\n", minlen);
printf("maximal length\t%d\n", maxlen);
printf("average length\t%.3f\n", used ? (float)totallen / used : 0.0);
}
/*
* Display NAT statistics.
*/

View File

@ -609,6 +609,7 @@ compare:
range:
YY_RANGE_OUT { $$ = FR_OUTRANGE; }
| YY_RANGE_IN { $$ = FR_INRANGE; }
| ':' { $$ = FR_INCRANGE; }
;
ipv4: YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER '.' YY_NUMBER

View File

@ -36,6 +36,7 @@ extern int yydebug;
char *yystr = NULL;
int yytext[YYBUFSIZ+1];
char yychars[YYBUFSIZ+1];
int yylineNum = 1;
int yypos = 0;
int yylast = -1;
@ -49,13 +50,15 @@ wordtab_t *yysavewords[30];
static wordtab_t *yyfindkey __P((char *));
static int yygetc __P((void));
static int yygetc __P((int));
static void yyunputc __P((int));
static int yyswallow __P((int));
static char *yytexttostr __P((int, int));
static void yystrtotext __P((char *));
static char *yytexttochar __P((void));
static int yygetc()
static int yygetc(docont)
int docont;
{
int c;
@ -74,6 +77,13 @@ static int yygetc()
yypos++;
} else {
c = fgetc(yyin);
if (docont && (c == '\\')) {
c = fgetc(yyin);
if (c == '\n') {
yylineNum++;
c = fgetc(yyin);
}
}
}
if (c == '\n')
yylineNum++;
@ -99,7 +109,7 @@ int last;
{
int c;
while (((c = yygetc()) > '\0') && (c != last))
while (((c = yygetc(0)) > '\0') && (c != last))
;
if (c != EOF)
@ -110,6 +120,17 @@ int last;
}
static char *yytexttochar()
{
int i;
for (i = 0; i < yypos; i++)
yychars[i] = (char)(yytext[i] & 0xff);
yychars[i] = '\0';
return yychars;
}
static void yystrtotext(str)
char *str;
{
@ -165,7 +186,9 @@ int yylex()
}
nextchar:
c = yygetc();
c = yygetc(0);
if (yydebug > 1)
printf("yygetc = (%x) %c [%*.*s]\n", c, c, yypos, yypos, yytexttochar());
switch (c)
{
@ -228,20 +251,20 @@ int yylex()
yyunputc(c);
goto done;
}
n = yygetc();
n = yygetc(0);
if (n == '{') {
if (yyswallow('}') == -1) {
rval = -2;
goto done;
}
(void) yygetc();
(void) yygetc(0);
} else {
if (!ISALPHA(n)) {
yyunputc(n);
break;
}
do {
n = yygetc();
n = yygetc(1);
} while (ISALPHA(n) || ISDIGIT(n) || n == '_');
yyunputc(n);
}
@ -273,7 +296,7 @@ int yylex()
goto done;
}
do {
n = yygetc();
n = yygetc(1);
if (n == EOF || n == TOOLONG) {
rval = -2;
goto done;
@ -323,7 +346,7 @@ int yylex()
break;
if (isbuilding == 1)
break;
n = yygetc();
n = yygetc(0);
if (n == '>') {
isbuilding = 1;
goto done;
@ -337,7 +360,7 @@ int yylex()
yyunputc(c);
goto done;
}
n = yygetc();
n = yygetc(0);
if (n == '=') {
rval = YY_CMP_NE;
goto done;
@ -353,7 +376,7 @@ int yylex()
yyunputc(c);
goto done;
}
n = yygetc();
n = yygetc(0);
if (n == '=') {
rval = YY_CMP_LE;
goto done;
@ -373,7 +396,7 @@ int yylex()
yyunputc(c);
goto done;
}
n = yygetc();
n = yygetc(0);
if (n == '=') {
rval = YY_CMP_GE;
goto done;
@ -410,7 +433,7 @@ int yylex()
*/
do {
*s++ = c;
c = yygetc();
c = yygetc(1);
} while ((ishex(c) || c == ':' || c == '.') &&
(s - ipv6buf < 46));
yyunputc(c);
@ -436,10 +459,10 @@ int yylex()
}
if (isbuilding == 0 && c == '0') {
n = yygetc();
n = yygetc(0);
if (n == 'x') {
do {
n = yygetc();
n = yygetc(1);
} while (ishex(n));
yyunputc(n);
rval = YY_HEX;
@ -453,7 +476,7 @@ int yylex()
*/
if (isbuilding == 0 && ISDIGIT(c)) {
do {
n = yygetc();
n = yygetc(1);
} while (ISDIGIT(n));
yyunputc(n);
rval = YY_NUMBER;