#include <sys/param.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <dlfcn.h>
#include <err.h>
#include <errno.h>
#include <grp.h>
#include <limits.h>
#include <netdb.h>
#include <pwd.h>
#include <sysexits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <timeconv.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netinet/tcp.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <net/route.h>
#include <net/ethernet.h>
#include <net/ipfw3/ip_fw3.h>
#include <net/ipfw3_basic/ip_fw3_table.h>
#include <net/ipfw3_basic/ip_fw3_sync.h>
#include <net/ipfw3_basic/ip_fw3_basic.h>
#include <net/ipfw3_nat/ip_fw3_nat.h>
#include <net/dummynet3/ip_dummynet3.h>
#include "ipfw3.h"
#include "ipfw3log.h"
extern int fw3_socket;
extern int do_quiet;
void
resetlog(int ac, char *av[])
{
int rulenum;
int failed = EX_OK;
NEXT_ARG;
if (!ac) {
if (setsockopt(fw3_socket, IPPROTO_IP,
IP_FW_RESETLOG, NULL, 0) < 0)
err(EX_UNAVAILABLE, "setsockopt(IP_FW_RESETLOG)");
if (!do_quiet)
printf("Logging counts reset.\n");
return;
}
while (ac) {
if (isdigit(**av)) {
rulenum = atoi(*av);
NEXT_ARG;
if (setsockopt(fw3_socket, IPPROTO_IP,
IP_FW_RESETLOG, &rulenum, sizeof rulenum)) {
warn("rule %u: setsockopt(IP_FW_RESETLOG)",
rulenum);
failed = EX_UNAVAILABLE;
} else if (!do_quiet)
printf("Entry %d logging count reset\n",
rulenum);
} else {
errx(EX_DATAERR, "invalid rule number ``%s''", *av);
}
}
if (failed != EX_OK)
exit(failed);
}
void
log_main(int ac, char **av)
{
if (!strncmp(*av, "reset", strlen(*av))) {
resetlog(ac, av);
} else if (!strncmp(*av, "off", strlen(*av))) {
} else if (!strncmp(*av, "on", strlen(*av))) {
} else {
errx(EX_USAGE, "bad command `%s'", *av);
}
}