diff options
-rw-r--r-- | debian/changelog | 22 | ||||
-rwxr-xr-x | etc/init.d/vyatta-router | 8 | ||||
-rwxr-xr-x | lib/Vyatta/ConfigLoad.pm | 3 | ||||
-rwxr-xr-x | lib/Vyatta/Interface.pm | 56 | ||||
-rwxr-xr-x | lib/Vyatta/Misc.pm | 10 |
5 files changed, 75 insertions, 24 deletions
diff --git a/debian/changelog b/debian/changelog index 1760bd1..dc62f66 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,25 @@ +vyatta-cfg (0.16.23) unstable; urgency=low + + [ An-Cheng Huang ] + * use template to determine leaf nodes + + [ Stephen Hemminger ] + * Fix typo in adsl interface discovery + + -- Stephen Hemminger <shemminger@debian.localdomain> Wed, 17 Mar 2010 14:11:57 -0700 + +vyatta-cfg (0.16.22) unstable; urgency=low + + * add hook for boot-time config loading environment + + -- An-Cheng Huang <ancheng@vyatta.com> Mon, 15 Mar 2010 14:03:07 -0700 + +vyatta-cfg (0.16.21) unstable; urgency=low + + * Fix PPP serial QoS support + + -- Stephen Hemminger <stephen.hemminger@vyatta.com> Mon, 15 Mar 2010 10:54:28 -0700 + vyatta-cfg (0.16.20) unstable; urgency=low * Print node name before the warning message. diff --git a/etc/init.d/vyatta-router b/etc/init.d/vyatta-router index 3f64b9c..c41c48a 100755 --- a/etc/init.d/vyatta-router +++ b/etc/init.d/vyatta-router @@ -117,7 +117,13 @@ load_bootfile () { if [ -x $vyatta_sbindir/vyatta-config-loader.pl ]; then log_progress_msg configure - sg ${GROUP} -c "$vyatta_sbindir/vyatta-config-loader.pl $BOOTFILE" + ( + if [ -f /etc/default/vyatta-load-boot ]; then + # build-specific environment for boot-time config loading + source /etc/default/vyatta-load-boot + fi + sg ${GROUP} -c "$vyatta_sbindir/vyatta-config-loader.pl $BOOTFILE" + ) fi } diff --git a/lib/Vyatta/ConfigLoad.pm b/lib/Vyatta/ConfigLoad.pm index 44c1089..627b361 100755 --- a/lib/Vyatta/ConfigLoad.pm +++ b/lib/Vyatta/ConfigLoad.pm @@ -315,7 +315,8 @@ sub findSetNodes { $active_cfg->setLevel(join ' ', @active_path); my @active_nodes = $active_cfg->listOrigNodes(); my %active_hash = map { $_ => 1 } @active_nodes; - if (defined($active_hash{'node.val'})) { + my $nref = $active_cfg->parseTmplAll(join ' ', @active_path); + if (defined($nref->{type}) and !defined($nref->{tag})) { # we are at a leaf node. findSetValues($new_ref, \@active_path); return; diff --git a/lib/Vyatta/Interface.pm b/lib/Vyatta/Interface.pm index 19dff4a..b7473dc 100755 --- a/lib/Vyatta/Interface.pm +++ b/lib/Vyatta/Interface.pm @@ -84,25 +84,44 @@ sub interface_types { return @types; } -# Read pppoe config to fine associated ethernet for ppp device -sub find_pppoe { +# Read ppp config to fine associated interface for ppp device +sub _ppp_intf { my $dev = shift; - my $eth; + my $intf; - open (my $pppoe, '<', "/etc/ppp/peers/$dev") + open (my $ppp, '<', "/etc/ppp/peers/$dev") or return; # no such device - while (<$pppoe>) { + while (<$ppp>) { chomp; # looking for line like: # pty "/usr/sbin/pppoe -m 1412 -I eth1" - next unless /^pty .*(eth\d+)"/; - $eth = $1; + next unless /^pty\s.*-I\s*(\w+)"/; + $intf = $1; last; } - close($pppoe); + close $ppp; - return $eth; + return $intf; +} + +# Go path hunting to find ppp device +sub _ppp_path { + my ($intf, $type, $id) = @_; + my $config = new Vyatta::Config; + + if ($type eq 'pppoe') { + my $path = "interfaces ethernet $intf pppoe $id"; + return $path if $config->exists($path); + } + + my $adsl = "interfaces adsl $intf pvc"; + foreach my $pvc ($config->listNodes($adsl)) { + my $path = "$adsl $pvc $type $id"; + return $path if $config->exists($path); + } + + return; } # new interface description object @@ -115,17 +134,20 @@ sub new { # need argument to constructor return unless $name; - # Special case for pppoe devices - if ($name =~ /^pppoe(\d+)/) { - my $n = $1; - my $eth = find_pppoe($name); + # Special case for ppp devices + if ($name =~ /^(pppo[ae])(\d+)/) { + my $type = $1; + my $id = $2; + my $intf = _ppp_intf($name); + return unless $intf; - return unless $eth; + my $path = _ppp_path($intf, $type, $id); + return unless $path; my $self = { name => $name, - type => 'pppoe', - path => "interfaces ethernet $eth pppoe $n", + type => $type, + path => $path, dev => $name, }; bless $self, $class; @@ -234,7 +256,7 @@ sub using_dhcp { sub bridge_grp { my $self = shift; my $config = new Vyatta::Config; - + $config->setLevel( $self->{path} ); return $config->returnValue("bridge-group bridge"); } diff --git a/lib/Vyatta/Misc.pm b/lib/Vyatta/Misc.pm index d666ea9..94c0c05 100755 --- a/lib/Vyatta/Misc.pm +++ b/lib/Vyatta/Misc.pm @@ -62,7 +62,7 @@ sub is_dhcp_enabled { return 1 if ( $addr && $addr eq "dhcp" ); } - # return undef + return; } # check if any non-dhcp addresses configured @@ -77,7 +77,7 @@ sub is_address_enabled { return 1 if ( $addr && $addr ne 'dhcp' ); } - # return undefined (ie false) + return; } # return dhclient related files for interface @@ -186,7 +186,7 @@ sub getNetAddrIP { return $ip; } - # default return of undefined (ie false) + return; } sub is_ip_v4_or_v6 { @@ -207,7 +207,7 @@ sub is_ip_v4_or_v6 { return 6; } - # default return of undefined (ie false) + return; } sub isIpAddress { @@ -269,7 +269,7 @@ sub isIPinInterfaces { return 1 if ( is_ip_in_list( $ip_addr, getIP($name) ) ); } - # false (undef) + return; # false (undef) } sub isClusteringEnabled { |