20 |
|
|
21 |
=cut |
=cut |
22 |
|
|
23 |
|
# vim swap hash: '<,'> s/^I\(.*\) => \(.*\),/^I\2 => '\1',/gc |
24 |
|
my $LinkPolicy = { |
25 |
|
0x01 => 'AVAILABLE_ON_AC_S0', |
26 |
|
0x0E => 'AVAILABLE_ON_AC_SX', |
27 |
|
0x10 => 'AVAILABLE_ON_DC_S0', |
28 |
|
0xE0 => 'AVAILABLE_ON_DC_SX', |
29 |
|
}; |
30 |
|
|
31 |
|
|
32 |
|
sub decode_mask { |
33 |
|
my ($nr,$mask) = @_; |
34 |
|
my @decode; |
35 |
|
foreach my $m ( keys %$mask ) { |
36 |
|
push @decode, $mask->{$m} if $nr & $m; |
37 |
|
} |
38 |
|
return sprintf("%x", $nr) unless @decode; |
39 |
|
return [ sort @decode ]; |
40 |
|
} |
41 |
|
|
42 |
use lib 'lib'; |
use lib 'lib'; |
43 |
use base qw/Intel::AMT::SOAP/; |
use base qw/Intel::AMT::SOAP/; |
44 |
|
|
|
our $soap = Intel::AMT::SOAP::_soap( 'NetworkAdministration' ); |
|
|
|
|
45 |
sub ipv4 { |
sub ipv4 { |
46 |
my $addr = shift; |
my $addr = shift; |
47 |
return $addr unless $addr; |
return $addr unless $addr; |
55 |
} |
} |
56 |
|
|
57 |
sub network_settings { |
sub network_settings { |
58 |
|
my $soap = Intel::AMT::SOAP::_soap( 'NetworkAdministration' ); |
59 |
|
|
60 |
my $info = { |
my $info = { |
61 |
hostname => $soap->GetHostName()->paramsout, |
hostname => $soap->GetHostName()->paramsout, |
62 |
domainname => $soap->GetDomainName()->paramsout, |
domainname => $soap->GetDomainName()->paramsout, |
63 |
interfaces => [ $soap->EnumerateInterfaces->paramsout ], |
interfaces => [ $soap->EnumerateInterfaces->paramsout ], |
64 |
vlan => [ $soap->GetVlanParameters->paramsout ], |
# vlan => [ $soap->GetVlanParameters->paramsout ], # hangs on 3.2.1 |
65 |
ping => $soap->GetPingResponse->paramsout, |
ping => $soap->GetPingResponse->paramsout, |
66 |
}; |
}; |
67 |
|
|
69 |
|
|
70 |
foreach my $if ( @{ $info->{interfaces} } ) { |
foreach my $if ( @{ $info->{interfaces} } ) { |
71 |
my $detail = $soap->GetInterfaceSettings( SOAP::Data->name('InterfaceHandle'=>$if) )->paramsout; |
my $detail = $soap->GetInterfaceSettings( SOAP::Data->name('InterfaceHandle'=>$if) )->paramsout; |
72 |
|
warn "## $if ",dump( $detail ); |
73 |
foreach my $param ( keys %{ $detail->{IPv4Parameters} } ) { |
foreach my $param ( keys %{ $detail->{IPv4Parameters} } ) { |
74 |
if ( my $ip = $detail->{IPv4Parameters}->{$param} ) { |
if ( my $ip = $detail->{IPv4Parameters}->{$param} ) { |
75 |
$detail->{IPv4Parameters}->{$param} = ipv4( $ip ); |
$detail->{IPv4Parameters}->{$param} = ipv4( $ip ); |
76 |
} |
} |
77 |
} |
} |
78 |
|
|
79 |
|
|
80 |
|
if ( my $lp = $detail->{LinkPolicy} ) { |
81 |
|
$detail->{LinkPolicy} = decode_mask( $lp, $LinkPolicy ); |
82 |
|
} |
83 |
|
|
84 |
$info->{interface_settings}->{$if} = $detail; |
$info->{interface_settings}->{$if} = $detail; |
85 |
} |
} |
86 |
|
|