summaryrefslogtreecommitdiff
path: root/scripts/keepalived/vyatta-keepalived.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/keepalived/vyatta-keepalived.pl')
-rwxr-xr-xscripts/keepalived/vyatta-keepalived.pl141
1 files changed, 40 insertions, 101 deletions
diff --git a/scripts/keepalived/vyatta-keepalived.pl b/scripts/keepalived/vyatta-keepalived.pl
index f7d3a652..e87c9f64 100755
--- a/scripts/keepalived/vyatta-keepalived.pl
+++ b/scripts/keepalived/vyatta-keepalived.pl
@@ -235,62 +235,30 @@ sub vrrp_find_changes {
my $config = new Vyatta::Config;
my $vrrp_instances = 0;
- $config->setLevel("interfaces ethernet");
- my @eths = $config->listNodes();
- foreach my $eth (@eths) {
- my $path = "interfaces ethernet $eth";
+ foreach my $name ( getInterfaces() ) {
+ my $intf = new Vyatta::Interface($name);
+ next unless $intf;
+ my $path = $intf->path();
$config->setLevel($path);
if ($config->exists("vrrp")) {
my %vrrp_status_hash = $config->listNodeStatus("vrrp");
my ($vrrp, $vrrp_status) = each(%vrrp_status_hash);
if ($vrrp_status ne "static") {
- push @list, $eth;
- vrrp_log("$vrrp_status found $eth");
+ push @list, $name;
+ vrrp_log("$vrrp_status found $name");
}
}
- if ($config->exists("vif")) {
- my $path = "interfaces ethernet $eth vif";
- $config->setLevel($path);
- my @vifs = $config->listNodes();
- foreach my $vif (@vifs) {
- my $vif_intf = $eth . "." . $vif;
- my $vif_path = "$path $vif";
- $config->setLevel($vif_path);
- if ($config->exists("vrrp")) {
- my %vrrp_status_hash = $config->listNodeStatus("vrrp");
- my ($vrrp, $vrrp_status) = each(%vrrp_status_hash);
- if ($vrrp_status ne "static") {
- push @list, "$eth.$vif";
- vrrp_log("$vrrp_status found $eth.$vif");
- }
- }
- }
- }
- }
- #
- # Now look for deleted from the origin tree
- #
- $config->setLevel("interfaces ethernet");
- @eths = $config->listOrigNodes();
- foreach my $eth (@eths) {
- my $path = "interfaces ethernet $eth";
+ #
+ # Now look for deleted from the origin tree
+ #
$config->setLevel($path);
if ($config->isDeleted("vrrp")) {
- push @list, $eth;
- vrrp_log("Delete found $eth");
- }
- $config->setLevel("$path vif");
- my @vifs = $config->listOrigNodes();
- foreach my $vif (@vifs) {
- my $vif_intf = $eth . "." . $vif;
- my $vif_path = "$path vif $vif";
- $config->setLevel($vif_path);
- if ($config->isDeleted("vrrp")) {
- push @list, "$eth.$vif";
- vrrp_log("Delete found $eth.$vif");
- }
+ push @list, $name;
+ vrrp_log("Delete found $name");
}
+
+
}
my $num = scalar(@list);
@@ -339,15 +307,25 @@ sub vrrp_update_config {
my $output = "#\n# autogenerated by $0 on $date\n#\n\n";
my $config = new Vyatta::Config;
-
- $config->setLevel("interfaces ethernet");
- my @eths = $config->listNodes();
my $vrrp_instances = 0;
- foreach my $eth (@eths) {
- my $path = "interfaces ethernet $eth";
+
+ foreach my $name ( getInterfaces() ) {
+ my $intf = new Vyatta::Interface($name);
+ next unless $intf;
+ my $path = $intf->path();
$config->setLevel($path);
if ($config->exists("vrrp")) {
- my ($inst_output, @inst_errs) = keepalived_get_values($eth, $path);
+ #
+ # keepalived gets real grumpy with interfaces that
+ # don't exist, so skip vlans that haven't been
+ # instantiated yet (typically occurs at boot up).
+ #
+ if (!(-d "/sys/class/net/$name")) {
+ push @errs, "$name doesn't exist";
+ next;
+ }
+ my ($inst_output, @inst_errs) =
+ keepalived_get_values($name, $path);
if (scalar(@inst_errs)) {
push @errs, @inst_errs;
} else {
@@ -355,35 +333,6 @@ sub vrrp_update_config {
$vrrp_instances++;
}
}
- if ($config->exists("vif")) {
- my $path = "interfaces ethernet $eth vif";
- $config->setLevel($path);
- my @vifs = $config->listNodes();
- foreach my $vif (@vifs) {
- my $vif_path = "$path $vif";
- $config->setLevel($vif_path);
- if ($config->exists("vrrp")) {
- #
- # keepalived gets real grumpy with interfaces that don't
- # exist, so skip vlans that haven't been instantiated
- # yet (typically occurs at boot up).
- #
- my $vif_intf = $eth . "." . $vif;
- if (!(-d "/sys/class/net/$vif_intf")) {
- push @errs, "vlan doesn't exist $vif_intf";
- next;
- }
- my ($inst_output, @inst_errs) =
- keepalived_get_values($vif_intf, $vif_path);
- if (scalar(@inst_errs)) {
- push @errs, @inst_errs;
- } else {
- $output .= $inst_output;
- $vrrp_instances++;
- }
- }
- }
- }
}
if ($vrrp_instances > 0) {
@@ -408,35 +357,25 @@ sub list_vrrp_intf {
my $config = new Vyatta::Config;
my @intfs = ();
- $config->setLevel("interfaces ethernet");
- my @eths = $config->listOrigNodes();
- foreach my $eth (@eths) {
- my $path = "interfaces ethernet $eth";
+ foreach my $name ( getInterfaces() ) {
+ my $intf = new Vyatta::Interface($name);
+ next unless $intf;
+ my $path = $intf->path();
$config->setLevel($path);
- push @intfs, $eth if $config->existsOrig("vrrp");
- if ($config->existsOrig("vif")) {
- my $path = "interfaces ethernet $eth vif";
- $config->setLevel($path);
- my @vifs = $config->listOrigNodes();
- foreach my $vif (@vifs) {
- my $vif_intf = $eth . "." . $vif;
- my $vif_path = "$path $vif";
- $config->setLevel($vif_path);
- push @intfs, $vif_intf if $config->existsOrig("vrrp");
- }
- }
+ push @intfs, $name if $config->existsOrig("vrrp");
}
+
return @intfs;
}
sub list_vrrp_group {
my ($name) = @_;
-
my $config = new Vyatta::Config;
- my $path = "interfaces ethernet $name";
- if ($name =~ /(eth\d+)\.(\d+)/) {
- $path = "interfaces ethernet $1 vif $2";
- }
+ my $path;
+
+ my $intf = new Vyatta::Interface($name);
+ next unless $intf;
+ $path = $intf->path();
$path .= " vrrp vrrp-group";
$config->setLevel($path);
my @groups = $config->listOrigNodes();