Signed-off-by: Stefan Schantl <[email protected]>
---
 html/cgi-bin/lldp.cgi | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/html/cgi-bin/lldp.cgi b/html/cgi-bin/lldp.cgi
index 194f4ec82..a1b1d4bf9 100644
--- a/html/cgi-bin/lldp.cgi
+++ b/html/cgi-bin/lldp.cgi
@@ -39,6 +39,9 @@ my @errormessages = ();
 my %settings = ();
 &General::readhash("${General::swroot}/lldp/settings", \%settings);
 
+# Hash which will contain any discovered peers.
+my %peerhash = ();
+
 # Save on main page
 if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) {
        # Store whether enabled or not
@@ -136,6 +139,14 @@ END
                # Fetch the interface object
                my $interface = $json->{"lldp"}[0]->{"interface"};
 
+               # Loop through all detected peers and add their sent names as 
keys
+               # and their data as values to the peerhash.
+               foreach my $peer (@{ $interface}) {
+                       my $name = 
&Header::escape($peer->{"chassis"}[0]->{"name"}[0]->{"value"});
+
+                       $peerhash{$name} = $peer;
+               }
+
                print <<END;
                        <table class='tbl'>
                                <tr>
@@ -165,16 +176,17 @@ END
                                </tr>
 END
 
-                               foreach my $peer (@{ $interface }) {
-                                       my $intf = $peer->{"name"};
-                                       my $proto = $peer->{"via"};
+                               # Sort the detected peers alphabetically and 
loop over them.
+                               foreach my $peer (sort { $a cmp $b } keys 
%peerhash) {
+                                       my $intf = $peerhash{$peer}{"name"};
+                                       my $proto = $peerhash{$peer}{"via"};
                                        my $name = "";
                                        my $descr = "";
                                        my $port_name = "";
                                        my $vlan_id = "";
 
                                        # Fetch the chassis
-                                       foreach my $chassis (@{ 
$peer->{"chassis"} }) {
+                                       foreach my $chassis (@{ 
$peerhash{$peer}{"chassis"} }) {
                                                $name = &Header::escape(
                                                        
$chassis->{"name"}[0]->{"value"}
                                                );;
@@ -187,12 +199,12 @@ END
                                        }
 
                                        # Fetch the port
-                                       foreach my $port (@{ $peer->{"port"} }) 
{
+                                       foreach my $port (@{ 
$peerhash{$peer}{"port"} }) {
                                                $port_name = 
$port->{"descr"}[0]->{"value"};
                                        }
 
                                        # Fetch the VLAN
-                                       foreach my $vlan (@{ $peer->{"vlan"} }) 
{
+                                       foreach my $vlan (@{ 
$peerhash{$peer}{"vlan"} }) {
                                                $vlan_id = $vlan->{"vlan-id"};
                                        }
 
@@ -226,7 +238,7 @@ END
                                }
 
                                # Show a message if there are no neighbors
-                               unless (scalar @{ $interface }) {
+                               unless (keys %peerhash) {
                                        print <<END;
                                                <tr>
                                                        <td colspan="6" 
style="text-align: center;">
-- 
2.47.3


Reply via email to