Use :retab to conver tab to 2 spaces
[rahunas] / src / rh-ipset.h
1 /**
2  * RahuNAS ipset implementation header
3  * Author: Neutron Soutmun <neo.neutron@gmail.com>
4  * Date:   2008-08-20
5  */
6
7 #ifndef __RH_IPSET_H
8 #define __RH_IPSET_H
9
10 #include "rahunasd.h"
11 #include <linux/if_ether.h>
12 #include <linux/netfilter_ipv4/ip_set.h>
13 #include <linux/netfilter_ipv4/ip_set_rahunas.h>
14
15 #define GETSOCK_TRIES 5
16 #define LIST_TRIES 5
17
18 extern struct set **set_list;
19 extern ip_set_id_t max_sets;
20
21 /* The view of an ipset in userspace */
22 struct set {
23   char name[IP_SET_MAXNAMELEN];   /* Name of the set */
24   ip_set_id_t id;       /* Unique set id */
25   ip_set_id_t index;      /* Array index */
26   unsigned ref;       /* References in kernel */
27   struct settype *settype;    /* Pointer to set type functions */
28 };
29
30 enum rh_adt_result {
31   RH_IS_IN_SET,
32   RH_IS_NOT_IN_SET,
33 };
34
35 /* Commands */
36 enum set_commands {
37   CMD_NONE,
38   CMD_CREATE,   /* -N */
39   CMD_DESTROY,    /* -X */
40   CMD_FLUSH,    /* -F */
41   CMD_RENAME,   /* -E */
42   CMD_SWAP,   /* -W */
43   CMD_LIST,   /* -L */
44   CMD_SAVE,   /* -S */
45   CMD_RESTORE,    /* -R */
46   CMD_ADD,    /* -A */
47   CMD_DEL,    /* -D */
48   CMD_TEST,   /* -T */
49   CMD_BIND,   /* -B */
50   CMD_UNBIND,   /* -U */
51   CMD_HELP,   /* -H */
52   CMD_VERSION,    /* -V */
53   NUMBER_OF_CMD = CMD_VERSION,
54   /* Internal commands */
55   CMD_MAX_SETS,
56   CMD_LIST_SIZE,
57   CMD_SAVE_SIZE,
58   CMD_ADT_GET,
59 };
60
61 enum exittype {
62   OTHER_PROBLEM = 1,
63   PARAMETER_PROBLEM,
64   VERSION_PROBLEM
65 };
66
67 int kernel_getsocket(void);
68 int wrapped_getsockopt(void *data, socklen_t *size);
69 int wrapped_setsockopt(void *data, socklen_t size);
70 void kernel_getfrom(void *data, socklen_t * size);
71 int kernel_sendto_handleerrno(unsigned op, void *data, socklen_t size);
72 void kernel_sendto(void *data, size_t size);
73 int kernel_getfrom_handleerrno(void *data, size_t * size);
74 struct set *set_adt_get(const char *name);
75 int set_adtip(struct set *rahunas_set, const char *adtip, const char *adtmac, 
76               unsigned op);
77
78 int set_adtip_nb(struct set *rahunas_set, ip_set_ip_t *adtip, 
79                      unsigned char adtmac[ETH_ALEN], unsigned op);
80
81 void set_flush(const char *name);
82
83 size_t load_set_list(const char name[IP_SET_MAXNAMELEN],
84           ip_set_id_t *idx,
85           unsigned op, unsigned cmd);
86
87 int get_header_from_set (struct rahunas_map *map);
88
89 int walk_through_set (int (*callback)(void *));
90
91 void parse_ip(const char *str, ip_set_ip_t *ip);
92 void parse_mac(const char *mac, unsigned char *ethernet);
93 char *ip_tostring(ip_set_ip_t ip);
94 char *mac_tostring(unsigned char macaddress[ETH_ALEN]);
95
96 #define BITSPERBYTE (8*sizeof(char))
97 #define ID2BYTE(id) ((id)/BITSPERBYTE)
98 #define ID2MASK(id) (1 << ((id)%BITSPERBYTE))
99 #define test_bit(id, heap)  ((((char *)(heap))[ID2BYTE(id)] & ID2MASK(id)) != 0)
100
101 #endif //__RH_IPSET_H