Add common fw3_address_to_string() helper function
[project/firewall3.git] / options.h
index c84fd28..e242f67 100644 (file)
--- a/options.h
+++ b/options.h
@@ -68,16 +68,17 @@ enum fw3_flag
        FW3_FLAG_REJECT        = 7,
        FW3_FLAG_DROP          = 8,
        FW3_FLAG_NOTRACK       = 9,
-       FW3_FLAG_DNAT          = 10,
-       FW3_FLAG_SNAT          = 11,
-       FW3_FLAG_SRC_ACCEPT    = 12,
-       FW3_FLAG_SRC_REJECT    = 13,
-       FW3_FLAG_SRC_DROP      = 14,
-       FW3_FLAG_CUSTOM_CHAINS = 15,
-       FW3_FLAG_SYN_FLOOD     = 16,
-       FW3_FLAG_MTU_FIX       = 17,
-       FW3_FLAG_DROP_INVALID  = 18,
-       FW3_FLAG_HOTPLUG       = 19,
+       FW3_FLAG_MARK          = 10,
+       FW3_FLAG_DNAT          = 11,
+       FW3_FLAG_SNAT          = 12,
+       FW3_FLAG_SRC_ACCEPT    = 13,
+       FW3_FLAG_SRC_REJECT    = 14,
+       FW3_FLAG_SRC_DROP      = 15,
+       FW3_FLAG_CUSTOM_CHAINS = 16,
+       FW3_FLAG_SYN_FLOOD     = 17,
+       FW3_FLAG_MTU_FIX       = 18,
+       FW3_FLAG_DROP_INVALID  = 19,
+       FW3_FLAG_HOTPLUG       = 20,
 
        __FW3_FLAG_MAX
 };
@@ -117,6 +118,12 @@ enum fw3_include_type
        FW3_INC_TYPE_RESTORE  = 1,
 };
 
+enum fw3_reflection_source
+{
+       FW3_REFLECTION_INTERNAL = 0,
+       FW3_REFLECTION_EXTERNAL = 1,
+};
+
 struct fw3_ipset_datatype
 {
        struct list_head list;
@@ -217,6 +224,14 @@ struct fw3_time
        uint8_t weekdays;   /* bit 0 is invert + 1 .. 7 */
 };
 
+struct fw3_mark
+{
+       bool set;
+       bool invert;
+       uint32_t mark;
+       uint32_t mask;
+};
+
 struct fw3_defaults
 {
        enum fw3_flag policy_input;
@@ -245,7 +260,6 @@ struct fw3_defaults
 struct fw3_zone
 {
        struct list_head list;
-       struct list_head running_list;
 
        bool enabled;
        const char *name;
@@ -260,9 +274,6 @@ struct fw3_zone
        struct list_head devices;
        struct list_head subnets;
 
-       struct list_head running_networks;
-       struct list_head running_devices;
-
        const char *extra_src;
        const char *extra_dest;
 
@@ -312,8 +323,11 @@ struct fw3_rule
 
        struct fw3_limit limit;
        struct fw3_time time;
+       struct fw3_mark mark;
 
        enum fw3_flag target;
+       struct fw3_mark set_mark;
+       struct fw3_mark set_xmark;
 
        const char *extra;
 };
@@ -349,12 +363,14 @@ struct fw3_redirect
        struct fw3_port port_redir;
 
        struct fw3_time time;
+       struct fw3_mark mark;
 
        enum fw3_flag target;
 
        const char *extra;
 
        bool reflection;
+       enum fw3_reflection_source reflection_src;
 };
 
 struct fw3_forward
@@ -376,7 +392,6 @@ struct fw3_forward
 struct fw3_ipset
 {
        struct list_head list;
-       struct list_head running_list;
 
        bool enabled;
        const char *name;
@@ -402,7 +417,6 @@ struct fw3_ipset
 struct fw3_include
 {
        struct list_head list;
-       struct list_head running_list;
 
        bool enabled;
        const char *name;
@@ -410,6 +424,8 @@ struct fw3_include
 
        const char *path;
        enum fw3_include_type type;
+
+       bool reload;
 };
 
 struct fw3_state
@@ -423,9 +439,6 @@ struct fw3_state
        struct list_head ipsets;
        struct list_head includes;
 
-       struct list_head running_zones;
-       struct list_head running_ipsets;
-
        bool disable_ipsets;
        bool statefile;
 };
@@ -434,7 +447,7 @@ struct fw3_state
 struct fw3_option
 {
        const char *name;
-       bool (*parse)(void *, const char *);
+       bool (*parse)(void *, const char *, bool);
        uintptr_t offset;
        size_t elem_size;
 };
@@ -446,33 +459,38 @@ struct fw3_option
        { name, fw3_parse_##parse, offsetof(struct fw3_##structure, member), \
          sizeof(struct fw3_##structure) }
 
-
-bool fw3_parse_bool(void *ptr, const char *val);
-bool fw3_parse_int(void *ptr, const char *val);
-bool fw3_parse_string(void *ptr, const char *val);
-bool fw3_parse_target(void *ptr, const char *val);
-bool fw3_parse_limit(void *ptr, const char *val);
-bool fw3_parse_device(void *ptr, const char *val);
-bool fw3_parse_address(void *ptr, const char *val);
-bool fw3_parse_mac(void *ptr, const char *val);
-bool fw3_parse_port(void *ptr, const char *val);
-bool fw3_parse_family(void *ptr, const char *val);
-bool fw3_parse_icmptype(void *ptr, const char *val);
-bool fw3_parse_protocol(void *ptr, const char *val);
-
-bool fw3_parse_ipset_method(void *ptr, const char *val);
-bool fw3_parse_ipset_datatype(void *ptr, const char *val);
-
-bool fw3_parse_include_type(void *ptr, const char *val);
-
-bool fw3_parse_date(void *ptr, const char *val);
-bool fw3_parse_time(void *ptr, const char *val);
-bool fw3_parse_weekdays(void *ptr, const char *val);
-bool fw3_parse_monthdays(void *ptr, const char *val);
+bool fw3_parse_bool(void *ptr, const char *val, bool is_list);
+bool fw3_parse_int(void *ptr, const char *val, bool is_list);
+bool fw3_parse_string(void *ptr, const char *val, bool is_list);
+bool fw3_parse_target(void *ptr, const char *val, bool is_list);
+bool fw3_parse_limit(void *ptr, const char *val, bool is_list);
+bool fw3_parse_device(void *ptr, const char *val, bool is_list);
+bool fw3_parse_address(void *ptr, const char *val, bool is_list);
+bool fw3_parse_network(void *ptr, const char *val, bool is_list);
+bool fw3_parse_mac(void *ptr, const char *val, bool is_list);
+bool fw3_parse_port(void *ptr, const char *val, bool is_list);
+bool fw3_parse_family(void *ptr, const char *val, bool is_list);
+bool fw3_parse_icmptype(void *ptr, const char *val, bool is_list);
+bool fw3_parse_protocol(void *ptr, const char *val, bool is_list);
+
+bool fw3_parse_ipset_method(void *ptr, const char *val, bool is_list);
+bool fw3_parse_ipset_datatype(void *ptr, const char *val, bool is_list);
+
+bool fw3_parse_include_type(void *ptr, const char *val, bool is_list);
+bool fw3_parse_reflection_source(void *ptr, const char *val, bool is_list);
+
+bool fw3_parse_date(void *ptr, const char *val, bool is_list);
+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);
 
 void fw3_parse_options(void *s, const struct fw3_option *opts,
                        struct uci_section *section);
 
+const char * fw3_address_to_string(struct fw3_address *address,
+                                   bool allow_invert);
+
 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);
@@ -482,6 +500,7 @@ 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)