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_DELETED = 21,
+
+ __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
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;
bool any;
bool invert;
char name[32];
+ struct fw3_device *network;
};
struct fw3_address
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;
bool disable_ipv6;
- uint32_t flags;
- uint32_t running_flags;
+ uint32_t flags[2];
};
struct fw3_zone
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;
struct list_head subnets;
+ struct list_head running_networks;
+ struct list_head running_devices;
+
const char *extra_src;
const char *extra_dest;
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
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;
};
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
const char *external;
- uint32_t flags;
+ uint32_t flags[2];
};
struct fw3_include
const char *path;
enum fw3_include_type type;
+
+ bool reload;
};
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;
};
{ 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);
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)