use Data::Dump qw/dump/;
use html;
+use server;
sub lines {
my ( $object ) = @_;
+ my $debug = server::debug();
+
$object ||= 'link';
my $i = 0;
my $headers;
foreach my $line ( split(/\n/, `ip $object`) ) {
- warn "# $line\n";
+ warn "# $line\n" if $debug;
my $add_header;
if ( $line =~ s{^(\d+):\s+(\w+):\s+}{} ) {
$i = $1;
- $objects[$i] = { $object => $2 };
+ $objects[$i] = { dev => $2 };
$add_header = $object;
} elsif ( $line =~ s{^\s+}{} ) {
# line continues
return html::table( @table );
}
+sub devices_up {
+ my @links = ip::lines( 'link' );
+ my @devs;
+ foreach ( 1 .. $#links ) {
+ push @devs, $links[$_]->{dev} if $links[$_]->{flags} =~ m{UP};
+ }
+ return @devs;
+}
+
+sub default_route_dev {
+ my @routes = ip::lines 'route';
+
+ return
+ map { $_->{dev} }
+ grep { $_->{route} eq 'default' }
+ splice @routes, 1 # FIXME ship header
+ ;
+}
+
+sub to_int {
+ unpack( 'N', pack( 'C*', split(/\./, shift) ) )
+}
+
+sub from_int {
+ join( '.', unpack('C4', pack('N',shift)) )
+}
+
+sub in_dhcp_range {
+ my $ip = shift;
+
+ my $server = server::as_hash_for $ip;
+
+ my $i = to_int($ip) & to_int($server->{netmask});
+ my $s = to_int($server->{ip}) & to_int($server->{netmask});
+
+ if ( $i == $s ) {
+ $i = to_int($ip) & ( to_int($server->{netmask}) ^ 0xffffffff );
+ return 1 if ( $i >= $server->{ip_from} && $i <= $server->{ip_to} );
+ }
+ return 0;
+}
+
1;