From 721439469c1146fd283ea219898f4d9b11c0db46 Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 1 May 2008 14:28:44 -0700 Subject: support "wildcard" ranking at boot time. only VRRP uses this for now. --- scripts/VyattaConfigLoad.pm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'scripts/VyattaConfigLoad.pm') diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index 2efa81e..b69723a 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -44,9 +44,33 @@ my %config_rank = ( 'vpn' => 80, ); +my %wildcard_rank = ( + 'interfaces ethernet * vrrp' => 50, + 'interfaces ethernet * vif * vrrp' => 50, +); + 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 { + my ($pattern, $str) = @_; + $pattern =~ s/\*/\\S*/g; + $pattern =~ s/^(.*)$/\^$1\$/; + return ($str =~ m/$pattern/) ? 1 : 0; +} + +sub get_wildcard_rank { + my ($str) = @_; + foreach (keys %wildcard_rank) { + if (match_wildcard($_, $str)) { + return $wildcard_rank{$_}; + } + } + return undef; +} + sub get_config_rank { # longest prefix match my @path = @_; @@ -55,6 +79,8 @@ sub get_config_rank { if (defined($config_rank{$path_str})) { return ($config_rank{$path_str}); } + my $wrank = get_wildcard_rank($path_str); + return $wrank if (defined($wrank)); pop @path; } return $default_rank; -- cgit v1.2.3 From 07d3641ca62cfede93708d366bb3e5410feba519 Mon Sep 17 00:00:00 2001 From: Stig Thormodsrud Date: Thu, 8 May 2008 17:48:05 -0700 Subject: Add more granularity to config rank (commit rip, ospf, bgp separately). --- scripts/VyattaConfigLoad.pm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'scripts/VyattaConfigLoad.pm') diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index b69723a..a5c5b08 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -23,7 +23,7 @@ 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. @@ -36,16 +36,22 @@ my %config_rank = ( 'interfaces bridge' => 99, 'interfaces ethernet' => 98, 'interfaces tunnel' => 91, - 'system' => 90, + '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, - 'vpn' => 80, + 'protocols bgp' => 79, + 'protocols ospf' => 78, + 'protocols rip' => 77, + 'vpn' => 60, ); my %wildcard_rank = ( - 'interfaces ethernet * vrrp' => 50, + 'interfaces ethernet * vrrp' => 50, 'interfaces ethernet * vif * vrrp' => 50, ); -- cgit v1.2.3 From 132e5c7b81bc308bfd66b23a7d619329ded829df Mon Sep 17 00:00:00 2001 From: An-Cheng Huang Date: Thu, 8 May 2008 21:11:13 -0700 Subject: fix for bug 3239: now support regex-based ordering for startup config loading. --- scripts/VyattaConfigLoad.pm | 60 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 31 deletions(-) (limited to 'scripts/VyattaConfigLoad.pm') 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; } -- cgit v1.2.3 From e1c9d6128c973f9f32a41cec4332734e32430178 Mon Sep 17 00:00:00 2001 From: Stig Thormodsrud Date: Mon, 19 May 2008 15:59:27 -0700 Subject: Force "protocols ospf parameters" to be committed before other ospf config. This should fix bug 3272 at boot time, but we still need to fix quagga so that it doesn't crash if router-id is changed during convergence. --- scripts/VyattaConfigLoad.pm | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'scripts/VyattaConfigLoad.pm') diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index bf86e57..d202938 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -29,25 +29,27 @@ use VyattaConfig; # configuration ordering. higher rank configured before lower rank. my $default_rank = 0; my %config_rank = ( - '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, + '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 parameters' => 785, + 'protocols ospf' => 780, + 'protocols rip' => 770, + 'vpn' => 600, + ); my %regex_rank = ( -- cgit v1.2.3 From 8f1c7d3f0eb43ca080acb83e880af7403117c9cd Mon Sep 17 00:00:00 2001 From: Michael Larson Date: Tue, 17 Jun 2008 10:55:11 -0700 Subject: fix for bug 3347--skip def file.o --- scripts/VyattaConfigLoad.pm | 3 +++ 1 file changed, 3 insertions(+) (limited to 'scripts/VyattaConfigLoad.pm') diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index d202938..90011f6 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -295,6 +295,9 @@ sub findDeletedNodes { $active_cfg->setLevel(join ' ', @active_path); my @active_nodes = $active_cfg->listOrigNodes(); foreach (@active_nodes) { + if ($_ eq 'def') { + next; + } if ($_ eq 'node.val') { findDeletedValues($new_ref, \@active_path); next; -- cgit v1.2.3 From 4219faf6dc245449b29184953d440fb83d6d3684 Mon Sep 17 00:00:00 2001 From: Stig Thormodsrud Date: Thu, 19 Jun 2008 17:18:52 -0700 Subject: Add a config ranking to prioritize bgp route-id ahead of neighbors. --- scripts/VyattaConfigLoad.pm | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts/VyattaConfigLoad.pm') diff --git a/scripts/VyattaConfigLoad.pm b/scripts/VyattaConfigLoad.pm index 90011f6..f1339c3 100755 --- a/scripts/VyattaConfigLoad.pm +++ b/scripts/VyattaConfigLoad.pm @@ -55,6 +55,7 @@ my %config_rank = ( my %regex_rank = ( 'interfaces ethernet \S* vrrp' => 500, 'interfaces ethernet \S* vif \S* vrrp' => 500, + 'protocols bgp \d+ parameters' => 810, 'protocols bgp \d+ neighbor \S*[^\d.]\S*' => 800, ); -- cgit v1.2.3