ipf_dotuning.c revision 170268
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/ipf_dotuning.c 170268 2007-06-04 02:54:36Z darrenr $ */ 2145510Sdarrenr 3170268Sdarrenr/* 4170268Sdarrenr * Copyright (C) 2003-2005 by Darren Reed. 5170268Sdarrenr * 6170268Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7170268Sdarrenr * 8170268Sdarrenr * $Id: ipf_dotuning.c,v 1.2.4.3 2006/06/16 17:21:02 darrenr Exp $ 9170268Sdarrenr */ 10170268Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145547Sdarrenr#include "netinet/ipl.h" 13145510Sdarrenr#include <sys/ioctl.h> 14145510Sdarrenr 15145510Sdarrenrvoid ipf_dotuning(fd, tuneargs, iocfn) 16145510Sdarrenrint fd; 17145510Sdarrenrchar *tuneargs; 18145510Sdarrenrioctlfunc_t iocfn; 19145510Sdarrenr{ 20145510Sdarrenr ipfobj_t obj; 21145510Sdarrenr ipftune_t tu; 22145510Sdarrenr char *s, *t; 23145510Sdarrenr 24145510Sdarrenr bzero((char *)&tu, sizeof(tu)); 25145510Sdarrenr obj.ipfo_rev = IPFILTER_VERSION; 26145510Sdarrenr obj.ipfo_size = sizeof(tu);; 27145510Sdarrenr obj.ipfo_ptr = (void *)&tu; 28145510Sdarrenr obj.ipfo_type = IPFOBJ_TUNEABLE; 29145510Sdarrenr 30145510Sdarrenr for (s = strtok(tuneargs, ","); s != NULL; s = strtok(NULL, ",")) { 31145510Sdarrenr if (!strcmp(s, "list")) { 32145510Sdarrenr while (1) { 33145510Sdarrenr if ((*iocfn)(fd, SIOCIPFGETNEXT, &obj) == -1) { 34145510Sdarrenr perror("ioctl(SIOCIPFGETNEXT)"); 35145510Sdarrenr break; 36145510Sdarrenr } 37145510Sdarrenr if (tu.ipft_cookie == NULL) 38145510Sdarrenr break; 39145510Sdarrenr 40145510Sdarrenr tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 41145510Sdarrenr printtunable(&tu); 42145510Sdarrenr } 43145510Sdarrenr } else if ((t = strchr(s, '=')) != NULL) { 44147547Sdarrenr tu.ipft_cookie = NULL; 45145510Sdarrenr *t++ = '\0'; 46145510Sdarrenr strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 47145510Sdarrenr if (sscanf(t, "%lu", &tu.ipft_vlong) == 1) { 48145510Sdarrenr if ((*iocfn)(fd, SIOCIPFSET, &obj) == -1) { 49145510Sdarrenr perror("ioctl(SIOCIPFSET)"); 50145510Sdarrenr return; 51145510Sdarrenr } 52145510Sdarrenr } else { 53145510Sdarrenr fprintf(stderr, "invalid value '%s'\n", s); 54145510Sdarrenr return; 55145510Sdarrenr } 56145510Sdarrenr } else { 57147547Sdarrenr tu.ipft_cookie = NULL; 58145510Sdarrenr strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 59145510Sdarrenr if ((*iocfn)(fd, SIOCIPFGET, &obj) == -1) { 60145510Sdarrenr perror("ioctl(SIOCIPFGET)"); 61145510Sdarrenr return; 62145510Sdarrenr } 63147547Sdarrenr if (tu.ipft_cookie == NULL) { 64147547Sdarrenr fprintf(stderr, "Null cookie for %s\n", s); 65145510Sdarrenr return; 66147547Sdarrenr } 67145510Sdarrenr 68145510Sdarrenr tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 69145510Sdarrenr printtunable(&tu); 70145510Sdarrenr } 71145510Sdarrenr } 72145510Sdarrenr} 73