\n";
print " $text{'edit_source'} | \n";
print "",&print_mode("source", $rule->{'s'}),"\n";
printf " | \n",
$rule->{'s'}->[1];
print " $text{'edit_dest'} | \n";
print "",&print_mode("dest", $rule->{'d'}),"\n";
printf " | \n",
$rule->{'d'}->[1];
print " $text{'edit_in'} | \n";
print "",&print_mode("in", $rule->{'i'}),"\n";
print &interface_choice("in", $rule->{'i'}->[1])," | \n";
print " $text{'edit_out'} | \n";
print "",&print_mode("out", $rule->{'o'}),"\n";
print &interface_choice("out", $rule->{'o'}->[1])," | \n";
$f = !$rule->{'f'} ? 0 : $rule->{'f'}->[0] eq "!" ? 2 : 1;
print " $text{'edit_frag'} | \n";
printf " %s\n",
$f == 0 ? "checked" : "", $text{'edit_ignore'};
printf " %s\n",
$f == 1 ? "checked" : "", $text{'edit_fragis'};
printf " %s | \n",
$f == 2 ? "checked" : "", $text{'edit_fragnot'};
print " $text{'edit_proto'} | \n";
print "",&print_mode("proto", $rule->{'p'}),"\n";
print &protocol_input("proto", $rule->{'p'}->[1])," | \n";
print "
| \n";
print " $text{'edit_sport'} | \n";
print "",&print_mode("sport", $rule->{'sports'} || $rule->{'sport'}),"\n";
print &port_input("sport", $rule->{'sports'}->[1] || $rule->{'sport'}->[1]),
" | \n";
print " $text{'edit_dport'} | \n";
print "",&print_mode("dport", $rule->{'dports'} || $rule->{'dport'}),"\n";
print &port_input("dport", $rule->{'dports'}->[1] || $rule->{'dport'}->[1]),
" | \n";
print " $text{'edit_ports'} | \n";
print "",&print_mode("ports", $rule->{'ports'}),"\n";
printf " | \n",
$rule->{'ports'}->[1];
print " $text{'edit_tcpflags'} | \n";
print "",&print_mode("tcpflags", $rule->{'tcp-flags'}),"\n";
print " | ",&text('edit_flags',
&tcpflag_input("tcpflags0", $rule->{'tcp-flags'}->[1]),
&tcpflag_input("tcpflags1", $rule->{'tcp-flags'}->[2])),
" | | \n";
print " $text{'edit_tcpoption'} | \n";
print "",&print_mode("tcpoption", $rule->{'tcp-option'}),"\n";
printf " | \n",
$rule->{'tcp-option'}->[1];
print "
| \n";
print " $text{'edit_icmptype'} | \n";
print "",&print_mode("icmptype", $rule->{'icmp-type'}),"\n";
print &icmptype_input("icmptype", $rule->{'icmp-type'}->[1])," | \n";
print " $text{'edit_mac'} | \n";
print "",&print_mode("macsource", $rule->{'mac-source'}),"\n";
printf " | \n",
$rule->{'mac-source'}->[1];
print "
| \n";
print " $text{'edit_limit'} | \n";
print "",&print_mode("limit", $rule->{'limit'},
$text{'edit_below'}, $text{'edit_above'}, 1),"\n";
($n, $u) = $rule->{'limit'}->[1] =~ /^(\d+)\/(\S+)$/ ? ($1, $2) : ();
print "\n";
print "/ | \n";
print " $text{'edit_limitburst'} | \n";
print "",&print_mode("limitburst", $rule->{'limit-burst'},
$text{'edit_below'}, $text{'edit_above'}, 1),"\n";
printf " | \n",
$rule->{'limit-burst'}->[1];
if ($rule->{'chain'} eq 'OUTPUT') {
print "
| \n";
print " $text{'edit_uidowner'} | \n";
print "",&print_mode("uidowner", $rule->{'uid-owner'}),"\n";
printf " %s | \n",
$rule->{'uid-owner'}->[1], &user_chooser_button("uidowner");
print " $text{'edit_gidowner'} | \n";
print "",&print_mode("gidowner", $rule->{'gid-owner'}),"\n";
printf " %s | \n",
$rule->{'gid-owner'}->[1], &group_chooser_button("gidowner");
print " $text{'edit_pidowner'} | \n";
print "",&print_mode("pidowner", $rule->{'pid-owner'}),"\n";
printf " | \n",
$rule->{'pid-owner'}->[1];
print " $text{'edit_sidowner'} | \n";
print "",&print_mode("sidowner", $rule->{'sid-owner'}),"\n";
printf " | \n",
$rule->{'sid-owner'}->[1];
}
print "
| \n";
# Connection states
print " $text{'edit_state'} | \n";
print "",
&print_mode("state", $rule->{'state'})," | \n";
print " |
| \n";
# Type of service
print " $text{'edit_tos'} | \n";
print "",&print_mode("tos", $rule->{'tos'}),"\n";
print &tos_input("tos", $rule->{'tos'}->[1])," | \n";
print "
| \n";
# Input physical device
print " $text{'edit_physdevin'} | \n";
print "",&print_mode("physdevin", $rule->{'physdev-in'}),"\n";
print &interface_choice("physdevin", $rule->{'physdev-in'}->[1]);
print " | \n";
# Output physical device
print " $text{'edit_physdevout'} | \n";
print "",&print_mode("physdevout", $rule->{'physdev-out'}),"\n";
print &interface_choice("physdevout", $rule->{'physdev-out'}->[1]);
print " | \n";
# Physdev match modes
print " $text{'edit_physdevisin'} | \n";
print "",&print_mode("physdevisin", $rule->{'physdev-is-in'},
$text{'yes'}, $text{'no'})," | \n";
print " $text{'edit_physdevisout'} | \n";
print "",&print_mode("physdevisout", $rule->{'physdev-is-out'},
$text{'yes'}, $text{'no'})," | \n";
print " $text{'edit_physdevisbridged'} | \n";
print "",&print_mode("physdevisbridged", $rule->{'physdev-is-bridged'},
$text{'yes'}, $text{'no'})," | \n";
print "
| \n";
# Show unknown modules
@mods = grep { !/^(tcp|udp|icmp|multiport|mac|limit|owner|state|tos|comment|physdev)$/ } map { $_->[1] } @{$rule->{'m'}};
print " $text{'edit_mods'} | \n";
printf " | \n",
join(" ", @mods);
# Show unknown parameters
$rule->{'args'} =~ s/^\s+//;
$rule->{'args'} =~ s/\s+$//;
print " $text{'edit_args'} | \n";
printf " | \n",
$rule->{'args'};
print " |