Some more reduction in the number of calls (if not the processing time)

git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@5692 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
teastep 2007-03-26 01:22:00 +00:00
parent e6e04fe478
commit 0f33920874

View File

@ -100,20 +100,21 @@ sub setup_providers() {
$match =~ s/ /\|/g; $match =~ s/ /\|/g;
emit "ip route show table $duplicate | while read net route; do"; emit join ( "\n",
emit ' case $net in'; "ip route show table $duplicate | while read net route; do",
emit ' default|nexthop)'; ' case $net in',
emit ' ;;'; ' default|nexthop)',
emit ' *)'; ' ;;',
emit " run_ip route add table $number \$net \$route"; ' *)',
emit ' case $(find_device $route) in'; " run_ip route add table $number \$net \$route",
emit " $match)"; ' case $(find_device $route) in',
emit " run_ip route add table $number \$net \$route"; " $match)",
emit ' ;;'; " run_ip route add table $number \$net \$route",
emit ' esac'; ' ;;',
emit ' ;;'; ' esac',
emit ' esac'; ' ;;',
emit "done\n"; ' esac',
"done\n" );
} }
sub balance_default_route( $$$ ) { sub balance_default_route( $$$ ) {
@ -185,14 +186,14 @@ sub setup_providers() {
$gateway = '-' unless $gateway; $gateway = '-' unless $gateway;
if ( $gateway eq 'detect' ) { if ( $gateway eq 'detect' ) {
emit "gateway=\$(detect_gateway $interface)\n"; emit join( "\n",
"gateway=\$(detect_gateway $interface)\n",
emit 'if [ -n "$gateway" ]; then'; 'if [ -n "$gateway" ]; then',
emit " run_ip route replace \$gateway src \$(find_first_interface_address $interface) dev $interface table $number"; " run_ip route replace \$gateway src \$(find_first_interface_address $interface) dev $interface table $number",
emit " run_ip route add default via \$gateway dev $interface table $number"; " run_ip route add default via \$gateway dev $interface table $number",
emit 'else'; 'else',
emit " fatal_error \"Unable to detect the gateway through interface $interface\""; " fatal_error \"Unable to detect the gateway through interface $interface\"",
emit "fi\n"; "fi\n" );
} elsif ( $gateway && $gateway ne '-' ) { } elsif ( $gateway && $gateway ne '-' ) {
emit "run_ip route replace $gateway src \$(find_first_interface_address $interface) dev $interface table $number"; emit "run_ip route replace $gateway src \$(find_first_interface_address $interface) dev $interface table $number";
emit "run_ip route add default via $gateway dev $interface table $number"; emit "run_ip route add default via $gateway dev $interface table $number";
@ -261,12 +262,13 @@ sub setup_providers() {
emit "\nrulenum=0\n"; emit "\nrulenum=0\n";
emit "find_interface_addresses $interface | while read address; do"; emit join( "\n" ,
emit ' qt ip rule del from $address'; "find_interface_addresses $interface | while read address; do",
emit " run_ip rule add from \$address pref \$(( $rulebase + \$rulenum )) table $number"; ' qt ip rule del from $address',
emit " echo \"qt ip rule del from \$address\" >> \${VARDIR}/undo_routing"; " run_ip rule add from \$address pref \$(( $rulebase + \$rulenum )) table $number",
emit ' rulenum=$(($rulenum + 1))'; " echo \"qt ip rule del from \$address\" >> \${VARDIR}/undo_routing",
emit 'done'; ' rulenum=$(($rulenum + 1))',
'done' );
} else { } else {
emit "\nfind_interface_addresses $interface | while read address; do"; emit "\nfind_interface_addresses $interface | while read address; do";
emit ' qt ip rule del from $address'; emit ' qt ip rule del from $address';
@ -343,14 +345,23 @@ sub setup_providers() {
emit "\nif [ -z \"\$NOROUTES\" ]; then"; emit "\nif [ -z \"\$NOROUTES\" ]; then";
push_indent; push_indent;
emit "#\n# Undo any changes made since the last time that we [re]started -- this will not restore the default route\n#"; emit join( "\n",
emit 'undo_routing'; '#',
emit "#\n# Save current routing table database so that it can be restored later\n#"; '# Undo any changes made since the last time that we [re]started -- this will not restore the default route',
emit 'cp /etc/iproute2/rt_tables ${VARDIR}/'; '#',
emit "#\n# Capture the default route(s) if we don't have it (them) already.\n#"; 'undo_routing',
emit '[ -f ${VARDIR}/default_route ] || ip route ls | grep -E \'^\s*(default |nexthop )\' > ${VARDIR}/default_route'; '#',
emit "#\n# Initialize the file that holds 'undo' commands\n#"; '# Save current routing table database so that it can be restored later',
emit '> ${VARDIR}/undo_routing'; '#',
'cp /etc/iproute2/rt_tables ${VARDIR}/',
'#',
'# Capture the default route(s) if we don\'t have it (them) already.',
'#',
'[ -f ${VARDIR}/default_route ] || ip route ls | grep -E \'^\s*(default |nexthop )\' > ${VARDIR}/default_route',
'#',
'# Initialize the file that holds \'undo\' commands',
'#',
'> ${VARDIR}/undo_routing' );
save_progress_message 'Adding Providers...'; save_progress_message 'Adding Providers...';
@ -376,27 +387,33 @@ sub setup_providers() {
if ( $providers ) { if ( $providers ) {
if ( $balance ) { if ( $balance ) {
emit 'if [ -n "$DEFAULT_ROUTE" ]; then'; emit join ( "\n",
emit ' run_ip route replace default scope global $DEFAULT_ROUTE'; 'if [ -n "$DEFAULT_ROUTE" ]; then',
emit " progress_message \"Default route '\$(echo \$DEFAULT_ROUTE | sed 's/\$\\s*//')' Added\""; ' run_ip route replace default scope global $DEFAULT_ROUTE',
emit 'else'; " progress_message \"Default route '\$(echo \$DEFAULT_ROUTE | sed 's/\$\\s*//')' Added\"",
emit ' error_message "WARNING: No Default route added (all \'balance\' providers are down)"'; 'else',
emit ' restore_default_route'; ' error_message "WARNING: No Default route added (all \'balance\' providers are down)"',
emit 'fi'; ' restore_default_route',
emit ''; 'fi',
'' );
} else { } else {
emit "#\n# We don't have any 'balance' providers so we restore any default route that we've saved\n#"; emit "#\n# We don't have any 'balance' providers so we restore any default route that we've saved\n#";
emit 'restore_default_route'; emit 'restore_default_route';
} }
emit 'cat > /etc/iproute2/rt_tables <<EOF'; emit 'cat > /etc/iproute2/rt_tables <<EOF';
emit_unindented "#\n# reserved values\n#"; emit_unindented join( "\n",
emit_unindented "255\tlocal"; '#',
emit_unindented "254\tmain"; '# reserved values',
emit_unindented "253\tdefault"; '#',
emit_unindented "0\tunspec"; "255\tlocal",
emit_unindented "#\n# local\n#"; "254\tmain",
emit_unindented "EOF\n"; "253\tdefault",
"0\tunspec",
'#',
'# local',
'#',
"EOF\n" );
emit 'echocommand=$(find_echo)'; emit 'echocommand=$(find_echo)';
emit ''; emit '';