#! /usr/bin/perl use strict ; use warnings ; package Probe::Ip ; use base 'Probe' ; sub ITEMS { [ { name => 'ip_links' , kind => 'int' , args => [ qw() ] } ] ; } ; # 1: lo: mtu 65536 qdisc noqueue state UNKNOWN # link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 # 2: eth0: mtu 1500 qdisc ... # link/ether 00:25:90:50:1a:4f brd ff:ff:ff:ff:ff:ff # 3: eth1: mtu 1500 qdisc ... # link/ether 00:25:90:50:1a:4e brd ff:ff:ff:ff:ff:ff sub main { my $self = shift ; my $itms = shift ; # items to probe : [ item, ... ] my $clnt = shift ; # main::CLIENT my $prog = Util::find_bin ( 'ip' ) ; my @prog = ( $prog, qw(link show) ) ; my ( $err, $xit, $sig, @lines ) = Probe::Util::run_prog ( @prog ) ; if ( $err ) { $_ -> perr ( $err ) for @$itms ; } else { chomp @lines ; my $val = 0 ; for my $line ( @lines ) { if ( $line =~ /^\d+:\s+(\w+):\s+\<([^>]+)\>/ ) { my $link = $1 ; my $flags = $2 ; next if $link =~ /^docker/ ; OBB::TT ( " link %s flags %s", $link, $flags ) ; my %flags ; $flags { $_ } ++ for split /,/, $flags ; $val ++ if $flags { UP } and not $flags { LOWER_UP } ; } } for my $item ( @$itms ) { $item -> set_val ( $val ) ; } } } 1 ;