ipf_dotuning.c revision 147547
1145519Sdarrenr/* $FreeBSD: head/contrib/ipfilter/lib/ipf_dotuning.c 147547 2005-06-23 14:19:02Z darrenr $ */ 2145510Sdarrenr 3145510Sdarrenr#include "ipf.h" 4145547Sdarrenr#include "netinet/ipl.h" 5145510Sdarrenr#include <sys/ioctl.h> 6145510Sdarrenr 7145510Sdarrenrvoid ipf_dotuning(fd, tuneargs, iocfn) 8145510Sdarrenrint fd; 9145510Sdarrenrchar *tuneargs; 10145510Sdarrenrioctlfunc_t iocfn; 11145510Sdarrenr{ 12145510Sdarrenr ipfobj_t obj; 13145510Sdarrenr ipftune_t tu; 14145510Sdarrenr char *s, *t; 15145510Sdarrenr 16145510Sdarrenr bzero((char *)&tu, sizeof(tu)); 17145510Sdarrenr obj.ipfo_rev = IPFILTER_VERSION; 18145510Sdarrenr obj.ipfo_size = sizeof(tu);; 19145510Sdarrenr obj.ipfo_ptr = (void *)&tu; 20145510Sdarrenr obj.ipfo_type = IPFOBJ_TUNEABLE; 21145510Sdarrenr 22145510Sdarrenr for (s = strtok(tuneargs, ","); s != NULL; s = strtok(NULL, ",")) { 23145510Sdarrenr if (!strcmp(s, "list")) { 24145510Sdarrenr while (1) { 25145510Sdarrenr if ((*iocfn)(fd, SIOCIPFGETNEXT, &obj) == -1) { 26145510Sdarrenr perror("ioctl(SIOCIPFGETNEXT)"); 27145510Sdarrenr break; 28145510Sdarrenr } 29145510Sdarrenr if (tu.ipft_cookie == NULL) 30145510Sdarrenr break; 31145510Sdarrenr 32145510Sdarrenr tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 33145510Sdarrenr printtunable(&tu); 34145510Sdarrenr } 35145510Sdarrenr } else if ((t = strchr(s, '=')) != NULL) { 36147547Sdarrenr tu.ipft_cookie = NULL; 37145510Sdarrenr *t++ = '\0'; 38145510Sdarrenr strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 39145510Sdarrenr if (sscanf(t, "%lu", &tu.ipft_vlong) == 1) { 40145510Sdarrenr if ((*iocfn)(fd, SIOCIPFSET, &obj) == -1) { 41145510Sdarrenr perror("ioctl(SIOCIPFSET)"); 42145510Sdarrenr return; 43145510Sdarrenr } 44145510Sdarrenr } else { 45145510Sdarrenr fprintf(stderr, "invalid value '%s'\n", s); 46145510Sdarrenr return; 47145510Sdarrenr } 48145510Sdarrenr } else { 49147547Sdarrenr tu.ipft_cookie = NULL; 50145510Sdarrenr strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 51145510Sdarrenr if ((*iocfn)(fd, SIOCIPFGET, &obj) == -1) { 52145510Sdarrenr perror("ioctl(SIOCIPFGET)"); 53145510Sdarrenr return; 54145510Sdarrenr } 55147547Sdarrenr if (tu.ipft_cookie == NULL) { 56147547Sdarrenr fprintf(stderr, "Null cookie for %s\n", s); 57145510Sdarrenr return; 58147547Sdarrenr } 59145510Sdarrenr 60145510Sdarrenr tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 61145510Sdarrenr printtunable(&tu); 62145510Sdarrenr } 63145510Sdarrenr } 64145510Sdarrenr} 65