diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2008-05-08 21:11:13 -0700 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2008-05-08 21:11:13 -0700 |
commit | 132e5c7b81bc308bfd66b23a7d619329ded829df (patch) | |
tree | 9fbbde447f04358229e42624b33dde3168812f16 /scripts/VyattaConfigLoad.pm | |
parent | 07d3641ca62cfede93708d366bb3e5410feba519 (diff) | |
download | vyatta-cfg-132e5c7b81bc308bfd66b23a7d619329ded829df.tar.gz vyatta-cfg-132e5c7b81bc308bfd66b23a7d619329ded829df.zip |
fix for bug 3239: now support regex-based ordering for startup config
loading.
Diffstat (limited to 'scripts/VyattaConfigLoad.pm')
-rwxr-xr-x | scripts/VyattaConfigLoad.pm | 60 |
1 files changed, 29 insertions, 31 deletions
diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index a5c5b08..bf86e57 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -29,49 +29,47 @@ use VyattaConfig; # configuration ordering. higher rank configured before lower rank. my $default_rank = 0; my %config_rank = ( - 'qos-policy' => 110, - 'firewall' => 102, - 'service nat' => 101, - 'interfaces' => 100, - 'interfaces bridge' => 99, - 'interfaces ethernet' => 98, - 'interfaces tunnel' => 91, - 'system gateway-address'=> 89, - 'system name-server' => 88, - 'system login user' => 87, - 'system' => 86, - 'protocols static' => 85, - 'service ssh' => 84, - 'service telnet' => 83, - 'policy' => 82, - 'protocols bgp' => 79, - 'protocols ospf' => 78, - 'protocols rip' => 77, - 'vpn' => 60, + 'qos-policy' => 1100, + 'firewall' => 1020, + 'service nat' => 1010, + 'interfaces' => 1000, + 'interfaces bridge' => 990, + 'interfaces ethernet' => 980, + 'interfaces tunnel' => 910, + 'system gateway-address'=> 890, + 'system name-server' => 880, + 'system login user' => 870, + 'system' => 860, + 'protocols static' => 850, + 'service ssh' => 840, + 'service telnet' => 830, + 'policy' => 820, + 'protocols bgp' => 790, + 'protocols ospf' => 780, + 'protocols rip' => 770, + 'vpn' => 600, ); -my %wildcard_rank = ( - 'interfaces ethernet * vrrp' => 50, - 'interfaces ethernet * vif * vrrp' => 50, +my %regex_rank = ( + 'interfaces ethernet \S* vrrp' => 500, + 'interfaces ethernet \S* vif \S* vrrp' => 500, + 'protocols bgp \d+ neighbor \S*[^\d.]\S*' => 800, ); my @all_nodes = (); my @all_naked_nodes = (); -# the wildcard matching could use some serious optimization. but probably -# not when we only have a couple of entries. -sub match_wildcard { +sub match_regex { my ($pattern, $str) = @_; - $pattern =~ s/\*/\\S*/g; $pattern =~ s/^(.*)$/\^$1\$/; return ($str =~ m/$pattern/) ? 1 : 0; } -sub get_wildcard_rank { +sub get_regex_rank { my ($str) = @_; - foreach (keys %wildcard_rank) { - if (match_wildcard($_, $str)) { - return $wildcard_rank{$_}; + foreach (keys %regex_rank) { + if (match_regex($_, $str)) { + return $regex_rank{$_}; } } return undef; @@ -85,7 +83,7 @@ sub get_config_rank { if (defined($config_rank{$path_str})) { return ($config_rank{$path_str}); } - my $wrank = get_wildcard_rank($path_str); + my $wrank = get_regex_rank($path_str); return $wrank if (defined($wrank)); pop @path; } |