mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-02 08:42:48 +00:00
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.
This commit is contained in:
parent
db77c5b943
commit
23c608c8f6
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=187983
@ -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
|
||||
|
||||
|
150
sbin/ipfw/altq.c
Normal file
150
sbin/ipfw/altq.c
Normal file
@ -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);
|
||||
}
|
||||
}
|
@ -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"
|
||||
@ -37,13 +38,12 @@
|
||||
#include <string.h>
|
||||
#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 },
|
||||
|
@ -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>
|
||||
@ -585,106 +581,6 @@ strtoport(char *s, char **end, int base, int proto)
|
||||
return 0; /* not found */
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
@ -1206,13 +1102,7 @@ show_ipfw(struct ip_fw *rule, int pcwidth, int bcwidth)
|
||||
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 @@ ipfw_add(int ac, char *av[])
|
||||
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;
|
||||
|
@ -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);
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user