X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=options.h;h=e242f67d9a8ec87ba08fe9f481e0cf4a14a033ab;hp=10546585845f7620aa29cf2348c7850a4cc15f57;hb=b6bfb7a067c5699fd5aec28d407d773d3a022567;hpb=9d72f0ecb589960bfe21751fbef470116c041a3d diff --git a/options.h b/options.h index 1054658..e242f67 100644 --- a/options.h +++ b/options.h @@ -61,29 +61,29 @@ enum fw3_family FW3_FAMILY_V6 = 5, }; -enum fw3_target +enum fw3_flag { - FW3_TARGET_UNSPEC = 0, - FW3_TARGET_ACCEPT = 6, - FW3_TARGET_REJECT = 7, - FW3_TARGET_DROP = 8, - FW3_TARGET_NOTRACK = 9, - FW3_TARGET_DNAT = 10, - FW3_TARGET_SNAT = 11, - FW3_TARGET_CUSTOM_CNS_V4 = 12, - FW3_TARGET_CUSTOM_CNS_V6 = 13, + FW3_FLAG_UNSPEC = 0, + FW3_FLAG_ACCEPT = 6, + FW3_FLAG_REJECT = 7, + FW3_FLAG_DROP = 8, + FW3_FLAG_NOTRACK = 9, + 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 }; -enum fw3_default -{ - FW3_DEFAULT_UNSPEC = 0, - FW3_DEFAULT_CUSTOM_CHAINS = 14, - FW3_DEFAULT_SYN_FLOOD = 15, - FW3_DEFAULT_MTU_FIX = 16, - FW3_DEFAULT_DROP_INVALID = 17, -}; - -extern const char *fw3_flag_names[FW3_DEFAULT_DROP_INVALID + 1]; +extern const char *fw3_flag_names[__FW3_FLAG_MAX]; enum fw3_limit_unit @@ -118,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; @@ -133,6 +139,7 @@ struct fw3_device bool any; bool invert; char name[32]; + struct fw3_device *network; }; struct fw3_address @@ -217,11 +224,19 @@ 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_target policy_input; - enum fw3_target policy_output; - enum fw3_target policy_forward; + enum fw3_flag policy_input; + enum fw3_flag policy_output; + enum fw3_flag policy_forward; bool drop_invalid; @@ -239,22 +254,21 @@ struct fw3_defaults bool disable_ipv6; - uint32_t flags; + uint32_t flags[2]; }; struct fw3_zone { struct list_head list; - struct list_head running_list; bool enabled; const char *name; enum fw3_family family; - enum fw3_target policy_input; - enum fw3_target policy_output; - enum fw3_target policy_forward; + enum fw3_flag policy_input; + enum fw3_flag policy_output; + enum fw3_flag policy_forward; struct list_head networks; struct list_head devices; @@ -275,11 +289,7 @@ struct fw3_zone bool custom_chains; - uint32_t src_flags; - uint32_t dst_flags; - - uint32_t running_src_flags; - uint32_t running_dst_flags; + uint32_t flags[2]; }; struct fw3_rule @@ -313,8 +323,11 @@ struct fw3_rule struct fw3_limit limit; struct fw3_time time; + struct fw3_mark mark; - enum fw3_target target; + enum fw3_flag target; + struct fw3_mark set_mark; + struct fw3_mark set_xmark; const char *extra; }; @@ -350,12 +363,14 @@ struct fw3_redirect struct fw3_port port_redir; struct fw3_time time; + struct fw3_mark mark; - enum fw3_target target; + enum fw3_flag target; const char *extra; bool reflection; + enum fw3_reflection_source reflection_src; }; struct fw3_forward @@ -377,7 +392,6 @@ struct fw3_forward struct fw3_ipset { struct list_head list; - struct list_head running_list; bool enabled; const char *name; @@ -397,13 +411,12 @@ struct fw3_ipset const char *external; - uint32_t flags; + uint32_t flags[2]; }; struct fw3_include { struct list_head list; - struct list_head running_list; bool enabled; const char *name; @@ -411,6 +424,8 @@ struct fw3_include const char *path; enum fw3_include_type type; + + bool reload; }; struct fw3_state @@ -424,10 +439,6 @@ struct fw3_state struct list_head ipsets; struct list_head includes; - struct fw3_defaults running_defaults; - struct list_head running_zones; - struct list_head running_ipsets; - bool disable_ipsets; bool statefile; }; @@ -436,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; }; @@ -448,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); @@ -484,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)