]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/ipfilter/lib/ipf_dotuning.c
This commit was generated by cvs2svn to compensate for changes in r145557,
[FreeBSD/FreeBSD.git] / contrib / ipfilter / lib / ipf_dotuning.c
1 /*      $FreeBSD$       */
2
3 #include "ipf.h"
4 #include "netinet/ipl.h"
5 #include <sys/ioctl.h>
6
7 void ipf_dotuning(fd, tuneargs, iocfn)
8 int fd;
9 char *tuneargs;
10 ioctlfunc_t iocfn;
11 {
12         ipfobj_t obj;
13         ipftune_t tu;
14         char *s, *t;
15
16         bzero((char *)&tu, sizeof(tu));
17         obj.ipfo_rev = IPFILTER_VERSION;
18         obj.ipfo_size = sizeof(tu);;
19         obj.ipfo_ptr = (void *)&tu;
20         obj.ipfo_type = IPFOBJ_TUNEABLE;
21
22         for (s = strtok(tuneargs, ","); s != NULL; s = strtok(NULL, ",")) {
23                 if (!strcmp(s, "list")) {
24                         while (1) {
25                                 if ((*iocfn)(fd, SIOCIPFGETNEXT, &obj) == -1) {
26                                         perror("ioctl(SIOCIPFGETNEXT)");
27                                         break;
28                                 }
29                                 if (tu.ipft_cookie == NULL)
30                                         break;
31
32                                 tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0';
33                                 printtunable(&tu);
34                         }
35                 } else if ((t = strchr(s, '=')) != NULL) {
36                         *t++ = '\0';
37                         strncpy(tu.ipft_name, s, sizeof(tu.ipft_name));
38                         if (sscanf(t, "%lu", &tu.ipft_vlong) == 1) {
39                                 if ((*iocfn)(fd, SIOCIPFSET, &obj) == -1) {
40                                         perror("ioctl(SIOCIPFSET)");
41                                         return;
42                                 }
43                         } else {
44                                 fprintf(stderr, "invalid value '%s'\n", s);
45                                 return;
46                         }
47                 } else {
48                         strncpy(tu.ipft_name, s, sizeof(tu.ipft_name));
49                         if ((*iocfn)(fd, SIOCIPFGET, &obj) == -1) {
50                                 perror("ioctl(SIOCIPFGET)");
51                                 return;
52                         }
53                         if (tu.ipft_cookie == NULL)
54                                 return;
55
56                         tu.ipft_name[sizeof(tu.ipft_name) - 1] = '\0';
57                         printtunable(&tu);
58                 }
59         }
60 }