ipset-2.2.8-20051203
[iptables.git] / ipset / libipt_set.h
1 #ifndef _LIBIPT_SET_H
2 #define _LIBIPT_SET_H
3
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <errno.h>
7
8 static int get_set_getsockopt(void *data, size_t * size)
9 {
10         int sockfd = -1;
11         sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
12         if (sockfd < 0)
13                 exit_error(OTHER_PROBLEM,
14                            "Can't open socket to ipset.\n");
15         /* Send! */
16         return getsockopt(sockfd, SOL_IP, SO_IP_SET, data, size);
17 }
18
19 static void
20 parse_bindings(const char *optarg, struct ipt_set_info *info)
21 {
22         char *saved = strdup(optarg);
23         char *ptr, *tmp = saved;
24         int i = 0;
25         
26         while (i < IP_SET_MAX_BINDINGS && tmp != NULL) {
27                 ptr = strsep(&tmp, ",");
28                 if (strncmp(ptr, "src", 3) == 0)
29                         info->flags[i++] |= IPSET_SRC;
30                 else if (strncmp(ptr, "dst", 3) == 0)
31                         info->flags[i++] |= IPSET_DST;
32                 else
33                         exit_error(PARAMETER_PROBLEM,
34                                    "You must spefify (the comma separated list of) 'src' or 'dst'.");
35         }
36
37         if (tmp)
38                 exit_error(PARAMETER_PROBLEM,
39                            "Can't follow bindings deeper than %i.", 
40                            IP_SET_MAX_BINDINGS);
41
42         free(saved);
43 }
44
45 #endif /*_LIBIPT_SET_H*/