X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=redirects.c;h=2acfabc34cedad23a90a93450b896ac6aca83351;hp=627438b3232b553088966a74fa6e9199645a6784;hb=54c0625e83a5ddf77e1753885c96f488ba38f78a;hpb=275a37dbf280bd471ebb2c673267c49a81071bbb diff --git a/redirects.c b/redirects.c index 627438b..2acfabc 100644 --- a/redirects.c +++ b/redirects.c @@ -19,32 +19,44 @@ #include "redirects.h" -static struct fw3_option redirect_opts[] = { - FW3_OPT("name", string, redirect, name), - FW3_OPT("family", family, redirect, family), +const struct fw3_option fw3_redirect_opts[] = { + FW3_OPT("enabled", bool, redirect, enabled), - FW3_OPT("src", device, redirect, src), - FW3_OPT("dest", device, redirect, dest), + FW3_OPT("name", string, redirect, name), + FW3_OPT("family", family, redirect, family), - FW3_OPT("ipset", device, redirect, ipset), + FW3_OPT("src", device, redirect, src), + FW3_OPT("dest", device, redirect, dest), - FW3_LIST("proto", protocol, redirect, proto), + FW3_OPT("ipset", device, redirect, ipset), - FW3_OPT("src_ip", address, redirect, ip_src), - FW3_LIST("src_mac", mac, redirect, mac_src), - FW3_OPT("src_port", port, redirect, port_src), + FW3_LIST("proto", protocol, redirect, proto), - FW3_OPT("src_dip", address, redirect, ip_dest), - FW3_OPT("src_dport", port, redirect, port_dest), + FW3_OPT("src_ip", address, redirect, ip_src), + FW3_LIST("src_mac", mac, redirect, mac_src), + FW3_OPT("src_port", port, redirect, port_src), - FW3_OPT("dest_ip", address, redirect, ip_redir), - FW3_OPT("dest_port", port, redirect, port_redir), + FW3_OPT("src_dip", address, redirect, ip_dest), + FW3_OPT("src_dport", port, redirect, port_dest), - FW3_OPT("extra", string, redirect, extra), + FW3_OPT("dest_ip", address, redirect, ip_redir), + FW3_OPT("dest_port", port, redirect, port_redir), - FW3_OPT("reflection", bool, redirect, reflection), + FW3_OPT("extra", string, redirect, extra), - FW3_OPT("target", target, redirect, target), + FW3_OPT("utc_time", bool, redirect, time.utc), + FW3_OPT("start_date", date, redirect, time.datestart), + FW3_OPT("stop_date", date, redirect, time.datestop), + FW3_OPT("start_time", time, redirect, time.timestart), + FW3_OPT("stop_time", time, redirect, time.timestop), + FW3_OPT("weekdays", weekdays, redirect, time.weekdays), + FW3_OPT("monthdays", monthdays, redirect, time.monthdays), + + FW3_OPT("reflection", bool, redirect, reflection), + + FW3_OPT("target", target, redirect, target), + + { } }; @@ -121,9 +133,16 @@ fw3_load_redirects(struct fw3_state *state, struct uci_package *p) INIT_LIST_HEAD(&redir->proto); INIT_LIST_HEAD(&redir->mac_src); + redir->enabled = true; redir->reflection = true; - fw3_parse_options(redir, redirect_opts, ARRAY_SIZE(redirect_opts), s); + fw3_parse_options(redir, fw3_redirect_opts, s); + + if (!redir->enabled) + { + fw3_free_redirect(redir); + continue; + } if (redir->src.invert) { @@ -362,6 +381,7 @@ print_redirect(enum fw3_table table, enum fw3_family family, } fw3_format_mac(mac); + fw3_format_time(&redir->time); fw3_format_extra(redir->extra); fw3_format_comment(redir->name); print_target_nat(redir); @@ -374,6 +394,7 @@ print_redirect(enum fw3_table table, enum fw3_family family, fw3_format_src_dest(&redir->ip_src, &redir->ip_redir); fw3_format_sport_dport(&redir->port_src, &redir->port_redir); fw3_format_mac(mac); + fw3_format_time(&redir->time); fw3_format_extra(redir->extra); fw3_format_comment(redir->name); print_target_filter(redir); @@ -420,6 +441,7 @@ print_redirect(enum fw3_table table, enum fw3_family family, fw3_format_protocol(proto, family); fw3_format_src_dest(int_addr, ext_addr); fw3_format_sport_dport(NULL, &redir->port_dest); + fw3_format_time(&redir->time); fw3_format_comment(redir->name, " (reflection)"); print_snat_dnat(FW3_TARGET_DNAT, &redir->ip_redir, &redir->port_redir); @@ -428,6 +450,7 @@ print_redirect(enum fw3_table table, enum fw3_family family, fw3_format_protocol(proto, family); fw3_format_src_dest(int_addr, &redir->ip_redir); fw3_format_sport_dport(NULL, &redir->port_redir); + fw3_format_time(&redir->time); fw3_format_comment(redir->name, " (reflection)"); print_snat_dnat(FW3_TARGET_SNAT, ext_addr, NULL); } @@ -437,6 +460,7 @@ print_redirect(enum fw3_table table, enum fw3_family family, fw3_format_protocol(proto, family); fw3_format_src_dest(int_addr, &redir->ip_redir); fw3_format_sport_dport(NULL, &redir->port_redir); + fw3_format_time(&redir->time); fw3_format_comment(redir->name, " (reflection)"); fw3_pr(" -j zone_%s_dest_ACCEPT\n", redir->dest.name); } @@ -465,11 +489,3 @@ fw3_print_redirects(enum fw3_table table, enum fw3_family family, list_for_each_entry(redir, &state->redirects, list) print_redirect(table, family, redir, num++); } - -void -fw3_free_redirect(struct fw3_redirect *redir) -{ - fw3_free_list(&redir->proto); - fw3_free_list(&redir->mac_src); - free(redir); -}