Date: Sun, 1 Feb 2009 16:00:50 +0000 (UTC) From: Luigi Rizzo <luigi@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r187983 - head/sbin/ipfw Message-ID: <200902011600.n11G0osL060567@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luigi Date: Sun Feb 1 16:00:49 2009 New Revision: 187983 URL: http://svn.freebsd.org/changeset/base/187983 Log: put the altq-related functions into a separate file. Minor cleanup of the includes used by the various source files, including annotations of why certain headers are used. Added: head/sbin/ipfw/altq.c (contents, props changed) Modified: head/sbin/ipfw/Makefile head/sbin/ipfw/dummynet.c head/sbin/ipfw/ipfw2.c head/sbin/ipfw/ipfw2.h head/sbin/ipfw/nat.c Modified: head/sbin/ipfw/Makefile ============================================================================== --- head/sbin/ipfw/Makefile Sun Feb 1 10:13:18 2009 (r187982) +++ head/sbin/ipfw/Makefile Sun Feb 1 16:00:49 2009 (r187983) @@ -1,7 +1,7 @@ # $FreeBSD$ PROG= ipfw -SRCS= ipfw2.c dummynet.c ipv6.c main.c nat.c +SRCS= ipfw2.c dummynet.c ipv6.c main.c nat.c altq.c WARNS?= 2 MAN= ipfw.8 Added: head/sbin/ipfw/altq.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sbin/ipfw/altq.c Sun Feb 1 16:00:49 2009 (r187983) @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2002-2003 Luigi Rizzo + * Copyright (c) 1996 Alex Nash, Paul Traina, Poul-Henning Kamp + * Copyright (c) 1994 Ugen J.S.Antsilevich + * + * Idea and grammar partially left from: + * Copyright (c) 1993 Daniel Boulet + * + * Redistribution and use in source forms, with and without modification, + * are permitted provided that this entire comment appears intact. + * + * Redistribution in binary form may occur without any restrictions. + * Obviously, it would be nice if you gave credit where credit is due + * but requiring it would be too onerous. + * + * This software is provided ``AS IS'' without any warranties of any kind. + * + * NEW command line interface for IP firewall facility + * + * $FreeBSD$ + * + * altq interface + */ + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/sockio.h> + +#include "ipfw2.h" + +#include <err.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sysexits.h> +#include <unistd.h> +#include <fcntl.h> + +#include <net/if.h> /* IFNAMSIZ */ +#include <net/pfvar.h> +#include <netinet/ip_fw.h> + +/* + * Map between current altq queue id numbers and names. + */ +static TAILQ_HEAD(, pf_altq) altq_entries = + TAILQ_HEAD_INITIALIZER(altq_entries); + +void +altq_set_enabled(int enabled) +{ + int pffd; + + pffd = open("/dev/pf", O_RDWR); + if (pffd == -1) + err(EX_UNAVAILABLE, + "altq support opening pf(4) control device"); + if (enabled) { + if (ioctl(pffd, DIOCSTARTALTQ) != 0 && errno != EEXIST) + err(EX_UNAVAILABLE, "enabling altq"); + } else { + if (ioctl(pffd, DIOCSTOPALTQ) != 0 && errno != ENOENT) + err(EX_UNAVAILABLE, "disabling altq"); + } + close(pffd); +} + +static void +altq_fetch(void) +{ + struct pfioc_altq pfioc; + struct pf_altq *altq; + int pffd; + unsigned int mnr; + static int altq_fetched = 0; + + if (altq_fetched) + return; + altq_fetched = 1; + pffd = open("/dev/pf", O_RDONLY); + if (pffd == -1) { + warn("altq support opening pf(4) control device"); + return; + } + bzero(&pfioc, sizeof(pfioc)); + if (ioctl(pffd, DIOCGETALTQS, &pfioc) != 0) { + warn("altq support getting queue list"); + close(pffd); + return; + } + mnr = pfioc.nr; + for (pfioc.nr = 0; pfioc.nr < mnr; pfioc.nr++) { + if (ioctl(pffd, DIOCGETALTQ, &pfioc) != 0) { + if (errno == EBUSY) + break; + warn("altq support getting queue list"); + close(pffd); + return; + } + if (pfioc.altq.qid == 0) + continue; + altq = safe_calloc(1, sizeof(*altq)); + *altq = pfioc.altq; + TAILQ_INSERT_TAIL(&altq_entries, altq, entries); + } + close(pffd); +} + +u_int32_t +altq_name_to_qid(const char *name) +{ + struct pf_altq *altq; + + altq_fetch(); + TAILQ_FOREACH(altq, &altq_entries, entries) + if (strcmp(name, altq->qname) == 0) + break; + if (altq == NULL) + errx(EX_DATAERR, "altq has no queue named `%s'", name); + return altq->qid; +} + +const char * +altq_qid_to_name(u_int32_t qid) +{ + struct pf_altq *altq; + + altq_fetch(); + TAILQ_FOREACH(altq, &altq_entries, entries) + if (qid == altq->qid) + break; + if (altq == NULL) + return NULL; + return altq->qname; +} + +void +print_altq_cmd(ipfw_insn_altq *altqptr) +{ + if (altqptr) { + const char *qname; + + qname = altq_qid_to_name(altqptr->qid); + if (qname == NULL) + printf(" altq ?<%u>", altqptr->qid); + else + printf(" altq %s", qname); + } +} Modified: head/sbin/ipfw/dummynet.c ============================================================================== --- head/sbin/ipfw/dummynet.c Sun Feb 1 10:13:18 2009 (r187982) +++ head/sbin/ipfw/dummynet.c Sun Feb 1 16:00:49 2009 (r187983) @@ -24,7 +24,8 @@ #include <sys/types.h> #include <sys/socket.h> -#include <sys/sockio.h> +#include <sys/queue.h> +/* XXX there are several sysctl leftover here */ #include <sys/sysctl.h> #include "ipfw2.h" @@ -38,12 +39,11 @@ #include <sysexits.h> #include <net/if.h> +#include <net/if.h> #include <netinet/in.h> -#include <netinet/in_systm.h> -#include <netinet/ip.h> #include <netinet/ip_fw.h> #include <netinet/ip_dummynet.h> -#include <arpa/inet.h> +#include <arpa/inet.h> /* inet_ntoa */ static struct _s_x dummynet_params[] = { { "plr", TOK_PLR }, Modified: head/sbin/ipfw/ipfw2.c ============================================================================== --- head/sbin/ipfw/ipfw2.c Sun Feb 1 10:13:18 2009 (r187982) +++ head/sbin/ipfw/ipfw2.c Sun Feb 1 16:00:49 2009 (r187983) @@ -37,19 +37,15 @@ #include <stdlib.h> #include <string.h> #include <sysexits.h> +#include <time.h> /* ctime */ #include <timeconv.h> /* _long_to_time */ #include <unistd.h> #include <fcntl.h> -#define IPFW_INTERNAL /* Access to protected structures in ip_fw.h. */ - #include <net/ethernet.h> -#include <net/if.h> -#include <net/if_dl.h> -#include <net/pfvar.h> -#include <net/route.h> /* def. of struct route */ +#include <net/if.h> /* only IFNAMSIZ */ #include <netinet/in.h> -#include <netinet/in_systm.h> +#include <netinet/in_systm.h> /* only n_short, n_long */ #include <netinet/ip.h> #include <netinet/ip_icmp.h> #include <netinet/ip_fw.h> @@ -586,106 +582,6 @@ strtoport(char *s, char **end, int base, } /* - * Map between current altq queue id numbers and names. - */ -static int altq_fetched = 0; -static TAILQ_HEAD(, pf_altq) altq_entries = - TAILQ_HEAD_INITIALIZER(altq_entries); - -static void -altq_set_enabled(int enabled) -{ - int pffd; - - pffd = open("/dev/pf", O_RDWR); - if (pffd == -1) - err(EX_UNAVAILABLE, - "altq support opening pf(4) control device"); - if (enabled) { - if (ioctl(pffd, DIOCSTARTALTQ) != 0 && errno != EEXIST) - err(EX_UNAVAILABLE, "enabling altq"); - } else { - if (ioctl(pffd, DIOCSTOPALTQ) != 0 && errno != ENOENT) - err(EX_UNAVAILABLE, "disabling altq"); - } - close(pffd); -} - -static void -altq_fetch(void) -{ - struct pfioc_altq pfioc; - struct pf_altq *altq; - int pffd; - unsigned int mnr; - - if (altq_fetched) - return; - altq_fetched = 1; - pffd = open("/dev/pf", O_RDONLY); - if (pffd == -1) { - warn("altq support opening pf(4) control device"); - return; - } - bzero(&pfioc, sizeof(pfioc)); - if (ioctl(pffd, DIOCGETALTQS, &pfioc) != 0) { - warn("altq support getting queue list"); - close(pffd); - return; - } - mnr = pfioc.nr; - for (pfioc.nr = 0; pfioc.nr < mnr; pfioc.nr++) { - if (ioctl(pffd, DIOCGETALTQ, &pfioc) != 0) { - if (errno == EBUSY) - break; - warn("altq support getting queue list"); - close(pffd); - return; - } - if (pfioc.altq.qid == 0) - continue; - altq = safe_calloc(1, sizeof(*altq)); - *altq = pfioc.altq; - TAILQ_INSERT_TAIL(&altq_entries, altq, entries); - } - close(pffd); -} - -static u_int32_t -altq_name_to_qid(const char *name) -{ - struct pf_altq *altq; - - altq_fetch(); - TAILQ_FOREACH(altq, &altq_entries, entries) - if (strcmp(name, altq->qname) == 0) - break; - if (altq == NULL) - errx(EX_DATAERR, "altq has no queue named `%s'", name); - return altq->qid; -} - -static const char * -altq_qid_to_name(u_int32_t qid) -{ - struct pf_altq *altq; - - altq_fetch(); - TAILQ_FOREACH(altq, &altq_entries, entries) - if (qid == altq->qid) - break; - if (altq == NULL) - return NULL; - return altq->qname; -} - -static void -fill_altq_qid(u_int32_t *qid, const char *av) -{ - *qid = altq_name_to_qid(av); -} - -/* * Fill the body of the command with the list of port ranges. */ static int @@ -1206,13 +1102,7 @@ show_ipfw(struct ip_fw *rule, int pcwidt printf(" log"); } if (altqptr) { - const char *qname; - - qname = altq_qid_to_name(altqptr->qid); - if (qname == NULL) - printf(" altq ?<%u>", altqptr->qid); - else - printf(" altq %s", qname); + print_altq_cmd(altqptr); } if (tagptr) { if (tagptr->len & F_NOT) @@ -2945,7 +2835,7 @@ chkarg: have_altq = (ipfw_insn *)a; cmd->len = F_INSN_SIZE(ipfw_insn_altq); cmd->opcode = O_ALTQ; - fill_altq_qid(&a->qid, *av); + a->qid = altq_name_to_qid(*av); ac--; av++; } break; Modified: head/sbin/ipfw/ipfw2.h ============================================================================== --- head/sbin/ipfw/ipfw2.h Sun Feb 1 10:13:18 2009 (r187982) +++ head/sbin/ipfw/ipfw2.h Sun Feb 1 16:00:49 2009 (r187983) @@ -219,6 +219,7 @@ int contigmask(uint8_t *p, int len); * functions involved, so we do not lose error checking. */ struct _ipfw_insn; +struct _ipfw_insn_altq; struct _ipfw_insn_u32; struct _ipfw_insn_ip6; struct _ipfw_insn_icmp6; @@ -243,6 +244,12 @@ void ipfw_flush(int force); void ipfw_zero(int ac, char *av[], int optname); void ipfw_list(int ac, char *av[], int show_counters); +/* altq.c */ +void altq_set_enabled(int enabled); +u_int32_t altq_name_to_qid(const char *name); + +void print_altq_cmd(struct _ipfw_insn_altq *altqptr); + /* dummynet.c */ void ipfw_list_pipes(void *data, uint nbytes, int ac, char *av[]); int ipfw_delete_pipe(int pipe_or_queue, int n); Modified: head/sbin/ipfw/nat.c ============================================================================== --- head/sbin/ipfw/nat.c Sun Feb 1 10:13:18 2009 (r187982) +++ head/sbin/ipfw/nat.c Sun Feb 1 16:00:49 2009 (r187983) @@ -24,7 +24,6 @@ #include <sys/types.h> #include <sys/socket.h> -#include <sys/sockio.h> #include <sys/sysctl.h> #include "ipfw2.h" @@ -43,7 +42,6 @@ #include <net/if_dl.h> #include <net/route.h> /* def. of struct route */ #include <netinet/in.h> -#include <netinet/in_systm.h> #include <netinet/ip_fw.h> #include <arpa/inet.h> #include <alias.h>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902011600.n11G0osL060567>