ipf_dotuning.c revision 170268
1283514Sarybchik/* $FreeBSD: head/contrib/ipfilter/lib/ipf_dotuning.c 170268 2007-06-04 02:54:36Z darrenr $ */ 2300607Sarybchik 3283514Sarybchik/* 4283514Sarybchik * Copyright (C) 2003-2005 by Darren Reed. 5283514Sarybchik * 6283514Sarybchik * See the IPFILTER.LICENCE file for details on licencing. 7283514Sarybchik * 8283514Sarybchik * $Id: ipf_dotuning.c,v 1.2.4.3 2006/06/16 17:21:02 darrenr Exp $ 9283514Sarybchik */ 10283514Sarybchik 11283514Sarybchik#include "ipf.h" 12283514Sarybchik#include "netinet/ipl.h" 13283514Sarybchik#include <sys/ioctl.h> 14283514Sarybchik 15283514Sarybchikvoid ipf_dotuning(fd, tuneargs, iocfn) 16283514Sarybchikint fd; 17283514Sarybchikchar *tuneargs; 18283514Sarybchikioctlfunc_t iocfn; 19283514Sarybchik{ 20283514Sarybchik ipfobj_t obj; 21283514Sarybchik ipftune_t tu; 22283514Sarybchik char *s, *t; 23283514Sarybchik 24283514Sarybchik bzero((char *)&tu, sizeof(tu)); 25283514Sarybchik obj.ipfo_rev = IPFILTER_VERSION; 26283514Sarybchik obj.ipfo_size = sizeof(tu);; 27283514Sarybchik obj.ipfo_ptr = (void *)&tu; 28283514Sarybchik obj.ipfo_type = IPFOBJ_TUNEABLE; 29283514Sarybchik 30283514Sarybchik for (s = strtok(tuneargs, ","); s != NULL; s = strtok(NULL, ",")) { 31283514Sarybchik if (!strcmp(s, "list")) { 32283514Sarybchik while (1) { 33283514Sarybchik if ((*iocfn)(fd, SIOCIPFGETNEXT, &obj) == -1) { 34283514Sarybchik perror("ioctl(SIOCIPFGETNEXT)"); 35283514Sarybchik break; 36283514Sarybchik } 37283514Sarybchik if (tu.ipft_cookie == NULL) 38283514Sarybchik break; 39283514Sarybchik 40283514Sarybchik tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 41283514Sarybchik printtunable(&tu); 42283514Sarybchik } 43283514Sarybchik } else if ((t = strchr(s, '=')) != NULL) { 44283514Sarybchik tu.ipft_cookie = NULL; 45283514Sarybchik *t++ = '\0'; 46291436Sarybchik strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 47283514Sarybchik if (sscanf(t, "%lu", &tu.ipft_vlong) == 1) { 48283514Sarybchik if ((*iocfn)(fd, SIOCIPFSET, &obj) == -1) { 49283514Sarybchik perror("ioctl(SIOCIPFSET)"); 50283514Sarybchik return; 51283514Sarybchik } 52283514Sarybchik } else { 53283514Sarybchik fprintf(stderr, "invalid value '%s'\n", s); 54283514Sarybchik return; 55291436Sarybchik } 56283514Sarybchik } else { 57283514Sarybchik tu.ipft_cookie = NULL; 58283514Sarybchik strncpy(tu.ipft_name, s, sizeof(tu.ipft_name)); 59283514Sarybchik if ((*iocfn)(fd, SIOCIPFGET, &obj) == -1) { 60283514Sarybchik perror("ioctl(SIOCIPFGET)"); 61283514Sarybchik return; 62291436Sarybchik } 63283514Sarybchik if (tu.ipft_cookie == NULL) { 64283514Sarybchik fprintf(stderr, "Null cookie for %s\n", s); 65283514Sarybchik return; 66291395Sarybchik } 67283514Sarybchik 68283514Sarybchik tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0'; 69283514Sarybchik printtunable(&tu); 70283514Sarybchik } 71283514Sarybchik } 72283514Sarybchik} 73283514Sarybchik