mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-19 17:28:35 +02:00
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:
parent
e6e04fe478
commit
0f33920874
@ -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 '';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user