summaryrefslogtreecommitdiff
path: root/scripts/VyattaConfigLoad.pm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/VyattaConfigLoad.pm')
-rwxr-xr-xscripts/VyattaConfigLoad.pm58
1 files changed, 44 insertions, 14 deletions
diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm
index 2efa81e..bf86e57 100755
--- a/scripts/VyattaConfigLoad.pm
+++ b/scripts/VyattaConfigLoad.pm
@@ -23,30 +23,58 @@ package VyattaConfigLoad;
use strict;
use sort 'stable';
use lib "/opt/vyatta/share/perl5/";
-use XorpConfigParser;
+use XorpConfigParser;
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' => 90,
- 'protocols static' => 85,
- 'service ssh' => 84,
- 'service telnet' => 83,
- 'policy' => 82,
- 'vpn' => 80,
+ '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 %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 = ();
+sub match_regex {
+ my ($pattern, $str) = @_;
+ $pattern =~ s/^(.*)$/\^$1\$/;
+ return ($str =~ m/$pattern/) ? 1 : 0;
+}
+
+sub get_regex_rank {
+ my ($str) = @_;
+ foreach (keys %regex_rank) {
+ if (match_regex($_, $str)) {
+ return $regex_rank{$_};
+ }
+ }
+ return undef;
+}
+
sub get_config_rank {
# longest prefix match
my @path = @_;
@@ -55,6 +83,8 @@ sub get_config_rank {
if (defined($config_rank{$path_str})) {
return ($config_rank{$path_str});
}
+ my $wrank = get_regex_rank($path_str);
+ return $wrank if (defined($wrank));
pop @path;
}
return $default_rank;