Treat redirects as port redirections if the specified dest_ip belongs to the router...
[project/firewall3.git] / options.h
index 734d185..88c98a0 100644 (file)
--- a/options.h
+++ b/options.h
@@ -92,14 +92,21 @@ enum fw3_limit_unit
        FW3_LIMIT_UNIT_MINUTE = 1,
        FW3_LIMIT_UNIT_HOUR   = 2,
        FW3_LIMIT_UNIT_DAY    = 3,
+
+       __FW3_LIMIT_UNIT_MAX
 };
 
+extern const char *fw3_limit_units[__FW3_LIMIT_UNIT_MAX];
+
+
 enum fw3_ipset_method
 {
        FW3_IPSET_METHOD_UNSPEC = 0,
        FW3_IPSET_METHOD_BITMAP = 1,
        FW3_IPSET_METHOD_HASH   = 2,
        FW3_IPSET_METHOD_LIST   = 3,
+
+       __FW3_IPSET_METHOD_MAX
 };
 
 enum fw3_ipset_type
@@ -110,8 +117,14 @@ enum fw3_ipset_type
        FW3_IPSET_TYPE_MAC    = 3,
        FW3_IPSET_TYPE_NET    = 4,
        FW3_IPSET_TYPE_SET    = 5,
+
+       __FW3_IPSET_TYPE_MAX
 };
 
+extern const char *fw3_ipset_method_names[__FW3_IPSET_METHOD_MAX];
+extern const char *fw3_ipset_type_names[__FW3_IPSET_TYPE_MAX];
+
+
 enum fw3_include_type
 {
        FW3_INC_TYPE_SCRIPT   = 0,
@@ -128,7 +141,16 @@ struct fw3_ipset_datatype
 {
        struct list_head list;
        enum fw3_ipset_type type;
-       bool dest;
+       const char *dir;
+};
+
+struct fw3_setmatch
+{
+       bool set;
+       bool invert;
+       char name[32];
+       const char *dir[3];
+       struct fw3_ipset *ptr;
 };
 
 struct fw3_device
@@ -139,7 +161,7 @@ struct fw3_device
        bool any;
        bool invert;
        char name[32];
-       struct fw3_device *network;
+       char network[32];
 };
 
 struct fw3_address
@@ -149,6 +171,7 @@ struct fw3_address
        bool set;
        bool range;
        bool invert;
+       bool resolved;
        enum fw3_family family;
        int mask;
        union {
@@ -306,9 +329,7 @@ struct fw3_rule
 
        struct fw3_device src;
        struct fw3_device dest;
-
-       struct fw3_ipset *_ipset;
-       struct fw3_device ipset;
+       struct fw3_setmatch ipset;
 
        struct list_head proto;
 
@@ -346,9 +367,7 @@ struct fw3_redirect
 
        struct fw3_device src;
        struct fw3_device dest;
-
-       struct fw3_ipset *_ipset;
-       struct fw3_device ipset;
+       struct fw3_setmatch ipset;
 
        struct list_head proto;
 
@@ -362,6 +381,7 @@ struct fw3_redirect
        struct fw3_address ip_redir;
        struct fw3_port port_redir;
 
+       struct fw3_limit limit;
        struct fw3_time time;
        struct fw3_mark mark;
 
@@ -369,6 +389,7 @@ struct fw3_redirect
 
        const char *extra;
 
+       bool local;
        bool reflection;
        enum fw3_reflection_source reflection_src;
 };
@@ -443,6 +464,13 @@ struct fw3_state
        bool statefile;
 };
 
+struct fw3_chain_spec {
+       int family;
+       int table;
+       int flag;
+       const char *format;
+};
+
 
 struct fw3_option
 {
@@ -484,24 +512,12 @@ bool fw3_parse_time(void *ptr, const char *val, bool is_list);
 bool fw3_parse_weekdays(void *ptr, const char *val, bool is_list);
 bool fw3_parse_monthdays(void *ptr, const char *val, bool is_list);
 bool fw3_parse_mark(void *ptr, const char *val, bool is_list);
+bool fw3_parse_setmatch(void *ptr, const char *val, bool is_list);
 
 void fw3_parse_options(void *s, const struct fw3_option *opts,
                        struct uci_section *section);
 
-void fw3_format_in_out(struct fw3_device *in, struct fw3_device *out);
-void fw3_format_src_dest(struct fw3_address *src, struct fw3_address *dest);
-void fw3_format_sport_dport(struct fw3_port *sp, struct fw3_port *dp);
-void fw3_format_mac(struct fw3_mac *mac);
-void fw3_format_protocol(struct fw3_protocol *proto, enum fw3_family family);
-void fw3_format_icmptype(struct fw3_icmptype *icmp, enum fw3_family family);
-void fw3_format_limit(struct fw3_limit *limit);
-void fw3_format_ipset(struct fw3_ipset *ipset, bool invert);
-void fw3_format_time(struct fw3_time *time);
-void fw3_format_mark(struct fw3_mark *mark);
-
-void __fw3_format_comment(const char *comment, ...);
-#define fw3_format_comment(...) __fw3_format_comment(__VA_ARGS__, NULL)
-
-void fw3_format_extra(const char *extra);
+const char * fw3_address_to_string(struct fw3_address *address,
+                                   bool allow_invert);
 
 #endif