svn commit: r197886 - user/eri/pf45/head/contrib/pf/pfctl

Ermal Luçi eri at FreeBSD.org
Thu Oct 8 22:42:09 UTC 2009


Author: eri
Date: Thu Oct  8 22:42:07 2009
New Revision: 197886
URL: http://svn.freebsd.org/changeset/base/197886

Log:
  Make pfctl compile as well. This allows pf(4) 4.5 to be tested.

Modified:
  user/eri/pf45/head/contrib/pf/pfctl/pf_print_state.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl.h
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_altq.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_optimize.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.h
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_qstats.c
  user/eri/pf45/head/contrib/pf/pfctl/pfctl_radix.c

Modified: user/eri/pf45/head/contrib/pf/pfctl/pf_print_state.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pf_print_state.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pf_print_state.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -30,6 +30,9 @@
  *
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <net/if.h>

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -31,6 +31,9 @@
  *
  */
 
+ #include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+ 
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
@@ -56,6 +59,10 @@
 #include "pfctl_parser.h"
 #include "pfctl.h"
 
+ #ifdef __FreeBSD__
+ #define HTONL(x)       (x) = htonl((__uint32_t)(x))
+ #endif
+
 void	 usage(void);
 int	 pfctl_enable(int, int);
 int	 pfctl_disable(int, int);
@@ -244,6 +251,10 @@ pfctl_enable(int dev, int opts)
 	if (ioctl(dev, DIOCSTART)) {
 		if (errno == EEXIST)
 			errx(1, "pf already enabled");
+ #ifdef __FreeBSD__
+                else if (errno == ESRCH)
+                        errx(1, "pfil registeration failed");
+ #endif
 		else
 			err(1, "DIOCSTART");
 	}
@@ -2182,7 +2193,11 @@ main(int argc, char *argv[])
 		/* turn off options */
 		opts &= ~ (PF_OPT_DISABLE | PF_OPT_ENABLE);
 		clearopt = showopt = debugopt = NULL;
+ #if defined(__FreeBSD__) && !defined(ENABLE_ALTQ)
+                altqsupport = 0;
+ #else
 		altqsupport = 1;
+#endif
 	}
 
 	if (opts & PF_OPT_DISABLE)

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl.h
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl.h	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl.h	Thu Oct  8 22:42:07 2009	(r197886)
@@ -85,6 +85,11 @@ void	 warn_namespace_collision(const cha
 int	 pfctl_show_ifaces(const char *, int);
 FILE	*pfctl_fopen(const char *, const char *);
 
+#ifdef __FreeBSD__
+extern int altqsupport;
+extern int dummynetsupport;
+#endif
+
 #ifndef DEFAULT_PRIORITY
 #define DEFAULT_PRIORITY	1
 #endif

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_altq.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_altq.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_altq.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -18,6 +18,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
@@ -74,7 +77,11 @@ static int		 gsc_add_seg(struct gen_sc *
 			     double);
 static double		 sc_x2y(struct service_curve *, double);
 
+#ifdef __FreeBSD__
+u_int32_t	getifspeed(int, char *);
+#else
 u_int32_t	 getifspeed(char *);
+#endif
 u_long		 getifmtu(char *);
 int		 eval_queue_opts(struct pf_altq *, struct node_queue_opt *,
 		     u_int32_t);
@@ -146,6 +153,11 @@ print_altq(const struct pf_altq *a, unsi
 		return;
 	}
 
+#ifdef __FreeBSD__
+	if (a->local_flags & PFALTQ_FLAG_IF_REMOVED)
+		printf("INACTIVE ");
+#endif
+
 	printf("altq on %s ", a->ifname);
 
 	switch (a->scheduler) {
@@ -181,6 +193,10 @@ print_queue(const struct pf_altq *a, uns
 {
 	unsigned int	i;
 
+#ifdef __FreeBSD__
+        if (a->local_flags & PFALTQ_FLAG_IF_REMOVED)
+                printf("INACTIVE ");
+#endif
 	printf("queue ");
 	for (i = 0; i < level; ++i)
 		printf(" ");
@@ -223,7 +239,11 @@ eval_pfaltq(struct pfctl *pf, struct pf_
 	if (bw->bw_absolute > 0)
 		pa->ifbandwidth = bw->bw_absolute;
 	else
+#ifdef __FreeBSD__
+		if ((rate = getifspeed(pf->dev, pa->ifname)) == 0) {
+#else
 		if ((rate = getifspeed(pa->ifname)) == 0) {
+#endif
 			fprintf(stderr, "interface %s does not know its bandwidth, "
 			    "please specify an absolute bandwidth\n",
 			    pa->ifname);
@@ -1075,6 +1095,26 @@ rate2str(double rate)
 	return (buf);
 }
 
+-#ifdef __FreeBSD__
+-/*
+- * XXX
+- * FreeBSD does not have SIOCGIFDATA.
+- * To emulate this, DIOCGIFSPEED ioctl added to pf.
+- */
+u_int32_t
+getifspeed(int pfdev, char *ifname)
+{
+	struct pf_ifspeed io;
+
+	bzero(&io, sizeof io);
+	if (strlcpy(io.ifname, ifname, IFNAMSIZ) >=
+	    sizeof(io.ifname)) 
+		errx(1, "getifspeed: strlcpy");
+	if (ioctl(pfdev, DIOCGIFSPEED, &io) == -1)
+		err(1, "DIOCGIFSPEED");
+	return ((u_int32_t)io.baudrate);
+}
+#else
 u_int32_t
 getifspeed(char *ifname)
 {
@@ -1095,6 +1135,7 @@ getifspeed(char *ifname)
 		err(1, "close");
 	return ((u_int32_t)ifrdat.ifi_baudrate);
 }
+#endif
 
 u_long
 getifmtu(char *ifname)
@@ -1109,7 +1150,11 @@ getifmtu(char *ifname)
 	    sizeof(ifr.ifr_name))
 		errx(1, "getifmtu: strlcpy");
 	if (ioctl(s, SIOCGIFMTU, (caddr_t)&ifr) == -1)
+#ifdef __FreeBSD__
+		ifr.ifr_mtu = 1500;
+#else
 		err(1, "SIOCGIFMTU");
+#endif
 	if (close(s))
 		err(1, "close");
 	if (ifr.ifr_mtu > 0)

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_optimize.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_optimize.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_optimize.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -16,6 +16,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
@@ -859,7 +862,11 @@ block_feedback(struct pfctl *pf, struct 
 				break;
 			}
 		}
+#ifdef __FreeBSD__
+		if (por2 == NULL)
+#else
 		if (por2 == TAILQ_END(&block->sb_rules))
+#endif
 			TAILQ_INSERT_TAIL(&block->sb_rules, por1, por_entry);
 	}
 

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -31,6 +31,9 @@
  *
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
@@ -594,7 +597,11 @@ print_status(struct pf_status *s, int op
 		printf("Limit Counters\n");
 		for (i = 0; i < LCNT_MAX; i++) {
 			printf("  %-25s %14lld ", pf_lcounters[i],
+#ifdef __FreeBSD__
+				    (unsigned long long)s->lcounters[i]);
+#else
 				    s->lcounters[i]);
+#endif
 			if (runtime > 0)
 				printf("%14.1f/s\n",
 				    (double)s->lcounters[i] / (double)runtime);
@@ -639,8 +646,13 @@ print_src_node(struct pf_src_node *sn, i
 			    sn->expire, min, sec);
 		}
 		printf(", %llu pkts, %llu bytes",
+#ifdef __FreeBSD__
+		    (unsigned long long)(sn->packets[0] + sn->packets[1]),
+		    (unsigned long long)(sn->bytes[0] + sn->bytes[1]));
+#else
 		    sn->packets[0] + sn->packets[1],
 		    sn->bytes[0] + sn->bytes[1]);
+#endif
 		switch (sn->ruletype) {
 		case PF_NAT:
 			if (sn->rule.nr != -1)

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.h
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.h	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_parser.h	Thu Oct  8 22:42:07 2009	(r197886)
@@ -157,6 +157,30 @@ struct node_queue_opt {
 	}			 data;
 };
 
+#ifdef __FreeBSD__
+/*
+ * XXX
+ * Absolutely this is not correct location to define this.
+ * Should we use an another sperate header file?
+ */
+#define        SIMPLEQ_HEAD                    STAILQ_HEAD
+#define        SIMPLEQ_HEAD_INITIALIZER        STAILQ_HEAD_INITIALIZER
+#define        SIMPLEQ_ENTRY                   STAILQ_ENTRY
+#define        SIMPLEQ_FIRST                   STAILQ_FIRST
+#define        SIMPLEQ_END(head)               NULL
+#define        SIMPLEQ_EMPTY                   STAILQ_EMPTY
+#define        SIMPLEQ_NEXT                    STAILQ_NEXT
+/*#define SIMPLEQ_FOREACH              STAILQ_FOREACH*/
+#define        SIMPLEQ_FOREACH(var, head, field)       \
+    for((var) = SIMPLEQ_FIRST(head);           \
+       (var) != SIMPLEQ_END(head);             \
+       (var) = SIMPLEQ_NEXT(var, field))
+#define        SIMPLEQ_INIT                    STAILQ_INIT
+#define        SIMPLEQ_INSERT_HEAD             STAILQ_INSERT_HEAD
+#define        SIMPLEQ_INSERT_TAIL             STAILQ_INSERT_TAIL
+#define        SIMPLEQ_INSERT_AFTER            STAILQ_INSERT_AFTER
+#define        SIMPLEQ_REMOVE_HEAD             STAILQ_REMOVE_HEAD
+#endif
 SIMPLEQ_HEAD(node_tinithead, node_tinit);
 struct node_tinit {	/* table initializer */
 	SIMPLEQ_ENTRY(node_tinit)	 entries;

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_qstats.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_qstats.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_qstats.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -16,6 +16,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
@@ -86,6 +89,10 @@ pfctl_show_altq(int dev, const char *ifa
 	struct pf_altq_node	*root = NULL, *node;
 	int			 nodes, dotitle = (opts & PF_OPT_SHOWALL);
 
+#ifdef __FreeBSD__
+	if (!altqsupport)
+		return (-1);
+#endif
 
 	if ((nodes = pfctl_update_qstats(dev, &root)) < 0)
 		return (-1);
@@ -111,6 +118,10 @@ pfctl_show_altq(int dev, const char *ifa
 		for (node = root; node != NULL; node = node->next) {
 			if (iface != NULL && strcmp(node->altq.ifname, iface))
 				continue;
+#ifdef __FreeBSD__
+			if (node->altq.local_flags & PFALTQ_FLAG_IF_REMOVED)
+				continue;
+#endif
 			pfctl_print_altq_node(dev, node, 0, opts);
 		}
 	}
@@ -150,7 +161,12 @@ pfctl_update_qstats(int dev, struct pf_a
 			warn("DIOCGETALTQ");
 			return (-1);
 		}
+#ifdef __FreeBSD__
+		if (pa.altq.qid > 0 &&
+		    !(pa.altq.local_flags & PFALTQ_FLAG_IF_REMOVED)) {
+#else
 		if (pa.altq.qid > 0) {
+#endif
 			pq.nr = nr;
 			pq.ticket = pa.ticket;
 			pq.buf = &qstats.data;
@@ -168,6 +184,19 @@ pfctl_update_qstats(int dev, struct pf_a
 				pfctl_insert_altq_node(root, pa.altq, qstats);
 			}
 		}
+#ifdef __FreeBSD__
+                  else if (pa.altq.local_flags & PFALTQ_FLAG_IF_REMOVED) {
+                        memset(&qstats.data, 0, sizeof(qstats.data));
+                        if ((node = pfctl_find_altq_node(*root, pa.altq.qname,
+                            pa.altq.ifname)) != NULL) {
+                                memcpy(&node->qstats.data, &qstats.data,
+                                    sizeof(qstats.data));
+                                update_avg(node);
+                        } else {
+                                pfctl_insert_altq_node(root, pa.altq, qstats);
+                        }               
+                }
+#endif
 	}
 	return (mnr);
 }
@@ -274,6 +303,10 @@ pfctl_print_altq_nodestat(int dev, const
 	if (a->altq.qid == 0)
 		return;
 
+#ifdef __FreeBSD__
+        if (a->altq.local_flags & PFALTQ_FLAG_IF_REMOVED)
+                return;
+#endif
 	switch (a->altq.scheduler) {
 	case ALTQT_CBQ:
 		print_cbqstats(a->qstats);

Modified: user/eri/pf45/head/contrib/pf/pfctl/pfctl_radix.c
==============================================================================
--- user/eri/pf45/head/contrib/pf/pfctl/pfctl_radix.c	Thu Oct  8 22:38:46 2009	(r197885)
+++ user/eri/pf45/head/contrib/pf/pfctl/pfctl_radix.c	Thu Oct  8 22:42:07 2009	(r197886)
@@ -30,6 +30,9 @@
  *
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>


More information about the svn-src-user mailing list