source: ocsinventory-agent/trunk/fuentes/lib/Ocsinventory/Agent/Backend/OS/AIX/Networks.pm @ 468

Last change on this file since 468 was 468, checked in by mabarracus, 4 years ago

Copyt trusty code

File size: 2.8 KB
Line 
1package Ocsinventory::Agent::Backend::OS::AIX::Networks;
2
3use strict;
4
5sub check {
6  can_load("Net::IP qw(:PROC)");
7}
8
9sub run {
10  my $params = shift;
11  my $common = $params->{common};
12
13  my %info; 
14
15  my $ifname;
16  foreach (`lscfg -v -l en*`) {
17    $ifname = "en".$1 if /^\s+ent(\d+)\s+\S+\s+(.+)/;
18    if ($ifname) {
19      $info{$ifname}{type} = $2;
20      $info{$ifname}{status} = "Down"; # default is down
21      if (/Network Address\.+(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})/) {
22        $info{$ifname}{macaddr} = "$1:$2:$3:$4:$5:$6"
23      }
24    }
25  } 
26
27  # uncomment if you prefere verbose information about the link
28  # e.g: 0xe8120000:0xe80c0000:741:3:512:1024:8192:Auto_Negotiation:2048:no:0x000000000000:10000:10:1000:yes:yes:no:no:yes:2048
29
30  # etherchannel interfaces
31  #my @lsdev=`lsdev -Cc adapter -s pseudo -t ibm_ech`;
32#  foreach (`lsdev -Cc adapter`) {
33#    next unless /^ent(\d*)\s*(\w*)\s*.*/;
34#    my $ifname = "en".$1;
35#    my $tmpifname = "ent".$1;
36#    #@lsattr=`lsattr -EOl $1 -a 'adapter_names mode netaddr'`;
37#    foreach (`lsattr -EOl $tmpifname`) {
38#      if (/(.+):(.+):(.*)/) {
39#       $info{$ifname}{type}="EtherChannel with : ".$1." (mode :".$2.", ping :".$3.")";
40#      }
41#    }
42#    $info{$ifname}{status} = 'Down'; # The same
43#  }
44
45  foreach (split / /,`ifconfig -l`) {
46    # AIX: network interface naming is enX
47    if(/^(en\d+)/) {
48      my $ifname = $1;
49      foreach (`lsattr -E -l $ifname`) {
50        $info{$ifname}{ip} = $1 if /^netaddr \s*([\d*\.?]*).*/i;
51        $info{$ifname}{netmask} = $1 if /^netmask\s*([\d*\.?]*).*/i;
52        $info{$ifname}{status} = $1 if /^state\s*(\w*).*/i; 
53      } 
54    }
55  }
56
57  #Looking for the gateways
58  # AIX: the route command doesn't exist. We use netstat -rn instead
59  foreach (`netstat -rn`) {
60    if (/\S+\s+(\S+)\s+\S+\s+\S+\s+\S+\s+(\S+)/) {
61      my $ifname = $2;
62      my $gateway = $1; 
63
64      if (exists ($info{$ifname})) { 
65        $info{$ifname}{gateway} = $gateway;
66      }
67    }
68  }
69
70  foreach my $ifname (sort keys %info) { 
71    my $description = $ifname;
72    my $type = $info{$ifname}{type};
73    my $macaddr = $info{$ifname}{macaddr};
74    my $status = $info{$ifname}{status};
75    my $ipaddress = $info{$ifname}{ip};
76    my $ipmask = $info{$ifname}{netmask};
77    my $gateway = $info{$ifname}{gateway};
78    my $ipdhcp = "No";
79    my $ipsubnet;
80
81    $status = "Down" unless $ipaddress;
82
83    # Retrieving ip of the subnet for each interface
84    if($ipmask and $ipaddress) {
85      # To retrieve the subnet for this iface
86      my $binip = &ip_iptobin ($ipaddress ,4);
87      my $binmask = &ip_iptobin ($ipmask ,4);
88      my $subnet = $binip & $binmask;
89      $ipsubnet = ip_bintoip($subnet,4);
90    }
91    $common->addNetwork({
92        DESCRIPTION => $description,
93        IPADDRESS => $ipaddress,
94        IPDHCP => $ipdhcp,
95        IPGATEWAY => $gateway,
96        IPMASK => $ipmask,
97        IPSUBNET => $ipsubnet,
98        MACADDR => $macaddr,
99        STATUS => $status,
100        TYPE => $type,
101      });               
102  }
103}
104
1051;
Note: See TracBrowser for help on using the repository browser.