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

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

Copyt trusty code

File size: 3.8 KB
Line 
1package Ocsinventory::Agent::Backend::OS::Solaris::Networks;
2
3
4#ce5: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
5#        inet 55.37.101.171 netmask fffffc00 broadcast 55.37.103.255
6#        ether 0:3:ba:24:9b:bf
7
8#aggr40001:2: flags=201000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,CoS> mtu 1500 index 3
9#        inet 55.37.101.172 netmask ffffff00 broadcast 223.0.146.255
10
11
12use strict;
13
14sub check {
15  can_run("ifconfig") && can_run("netstat") && can_load ("Net::IP qw(:PROC)") 
16}
17
18# Initialise the distro entry
19sub run {
20  my $params = shift;
21  my $common = $params->{common};
22
23  my $description;
24  my $ipaddress;
25  my $ipgateway;
26  my $ipmask;
27  my $ipsubnet;
28  my $macaddr;
29  my $status;
30  my $type;
31  my $zone;
32
33  my @zoneadmcmd;
34  my @zacsplitted;
35   
36  # get the first field of the first line of "zoneadm list -p"
37  @zoneadmcmd = `zoneadm list -p`;
38  @zacsplitted = split(/:/, $zoneadmcmd[0]);
39  $zone = $zacsplitted[0];
40   
41  foreach (`netstat -rn`){
42    $ipgateway=$1 if /^default\s+(\S+)/i;
43  }
44  #print "Nom :".$zone."*************************\n";
45
46### STEP 1: get aliases and zones' interfaces
47
48        foreach (`ifconfig -a`){
49                # resets if new interface
50                $ipaddress = $description = $macaddr = $status = $type = undef if /^(\S+):/;
51
52                # interface name and other data
53                $description = $1.":".$2 if /^(\S+):(\S+):/;
54                $ipaddress = $1 if /inet\s+(\S+)/i;
55                $ipmask = $1 if /\S*netmask\s+(\S+)/i; 
56
57                if (/ether\s+(\S+)/i) {
58        # See
59        # https://sourceforge.net/tracker/?func=detail&atid=487492&aid=1819948&group_id=58373
60                  $macaddr = sprintf "%02x:%02x:%02x:%02x:%02x:%02x" ,
61                  map hex, split /\:/, $1;
62                }
63                $status = 1 if /<UP,/;     
64
65                # debug info
66                #print "INFO1 : ".$description."_". $ipaddress."_".$ipmask."_".$macaddr."\n";
67
68                if(($description &&  $ipaddress) ){   
69        #HEX TO DEC TO BIN TO IP       
70                  $ipmask = hex($ipmask);
71                  $ipmask = sprintf("%d", $ipmask);
72                  $ipmask = unpack("B*", pack("N", $ipmask));
73                  $ipmask = ip_bintoip($ipmask,4);     
74        #print $ipmask."\n";
75
76                  my $binip = &ip_iptobin ($ipaddress ,4);
77                  my $binmask = &ip_iptobin ($ipmask ,4);
78                  my $binsubnet = $binip & $binmask;
79                  $ipsubnet = ip_bintoip($binsubnet,4);     
80
81                  $common->addNetwork({
82                  DESCRIPTION => $description,
83                  IPADDRESS => $ipaddress,       
84                  IPGATEWAY => $ipgateway,
85                  IPMASK => $ipmask,
86                  IPSUBNET => $ipsubnet,
87                  MACADDR => $macaddr,
88                  STATUS => $status?"Up":"Down",
89                  TYPE => $type,
90                  });
91                }
92          }     
93
94### STEP 2: get physical interfaces when not a zone
95
96  if (!$zone){ 
97                  foreach (`ifconfig -a`){                     
98                        # resets if new interface
99                        $ipaddress = $description = $macaddr = $status = $type = undef if /^(\S+):/;
100
101                        # interface name and other data
102                        $description = $1 if /^(\S+): /;
103                        $ipaddress = $1 if /inet\s+(\S+)/i;
104                        $ipmask = $1 if /\S*netmask\s+(\S+)/i; 
105
106                        if (/ether\s+(\S+)/i) {
107                # See
108                # https://sourceforge.net/tracker/?func=detail&atid=487492&aid=1819948&group_id=58373
109                          $macaddr = sprintf "%02x:%02x:%02x:%02x:%02x:%02x" ,
110                          map hex, split /\:/, $1;
111                        }
112                        $status = 1 if /<UP,/;     
113
114                        # debug info
115                        #print "INFO2 : ".$description."_". $ipaddress."_".$ipmask."_".$macaddr."\n";                     
116
117                        if(($description && $macaddr)){
118                #HEX TO DEC TO BIN TO IP       
119                          $ipmask = hex($ipmask);
120                          $ipmask = sprintf("%d", $ipmask);
121                          $ipmask = unpack("B*", pack("N", $ipmask));
122                          $ipmask = ip_bintoip($ipmask,4);     
123                #print $ipmask."\n";
124
125                          my $binip = &ip_iptobin ($ipaddress ,4);
126                          my $binmask = &ip_iptobin ($ipmask ,4);
127                          my $binsubnet = $binip & $binmask;
128                          $ipsubnet = ip_bintoip($binsubnet,4);     
129
130                          $common->addNetwork({
131                          DESCRIPTION => $description,
132                          IPADDRESS => $ipaddress,       
133                          IPGATEWAY => $ipgateway,
134                          IPMASK => $ipmask,
135                          IPSUBNET => $ipsubnet,
136                          MACADDR => $macaddr,
137                          STATUS => $status?"Up":"Down",
138                          TYPE => $type,
139                          });
140                        }
141                  }
142        }
143
144}
145
1461;
Note: See TracBrowser for help on using the repository browser.