diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rwxr-xr-x | lib/Vyatta/Interface.pm | 19 | ||||
-rwxr-xr-x | lib/Vyatta/Misc.pm | 11 | ||||
-rw-r--r-- | lib/Vyatta/ioctl.pm | 59 |
4 files changed, 65 insertions, 25 deletions
diff --git a/Makefile.am b/Makefile.am index a26054a..a6d5792 100644 --- a/Makefile.am +++ b/Makefile.am @@ -107,6 +107,7 @@ sbin_SCRIPTS += scripts/vyatta-log-commit.pl share_perl5_DATA = lib/Vyatta/Config.pm share_perl5_DATA += lib/Vyatta/File.pm share_perl5_DATA += lib/Vyatta/Misc.pm +share_perl5_DATA += lib/Vyatta/ioctl.pm share_perl5_DATA += lib/Vyatta/Interface.pm share_perl5_DATA += lib/Vyatta/TypeChecker.pm share_perl5_DATA += lib/Vyatta/ConfigOutput.pm diff --git a/lib/Vyatta/Interface.pm b/lib/Vyatta/Interface.pm index 3fce824..e23f565 100755 --- a/lib/Vyatta/Interface.pm +++ b/lib/Vyatta/Interface.pm @@ -23,9 +23,9 @@ use strict; use warnings; use Vyatta::Config; use Vyatta::Misc; +use Vyatta::ioctl; use base 'Exporter'; use Socket; -require 'sys/ioctl.ph'; our @EXPORT = qw(IFF_UP IFF_BROADCAST IFF_DEBUG IFF_LOOPBACK IFF_POINTOPOINT IFF_RUNNING IFF_NOARP @@ -411,21 +411,8 @@ sub address { # Do SIOCGIFFLAGS ioctl in perl sub flags { - my $self = shift; - - my $SIOCGIFFLAGS = &SIOCGIFFLAGS; - die "SIOCGIFFLAGS not found" - unless defined($SIOCGIFFLAGS); - - socket (my $sock, AF_INET, SOCK_DGRAM, 0) - or die "open UDP socket failed: $!"; - - my $ifreq = pack('a16', $self->{name}); - ioctl($sock, $SIOCGIFFLAGS, $ifreq) - or return; #undef - - my (undef, $flags) = unpack('a16s', $ifreq); - return $flags; + my $self = shift; + return Vyatta::ioctl::get_interface_flags($self->{name}); } sub exists { diff --git a/lib/Vyatta/Misc.pm b/lib/Vyatta/Misc.pm index 61ce029..850cb2b 100755 --- a/lib/Vyatta/Misc.pm +++ b/lib/Vyatta/Misc.pm @@ -21,9 +21,9 @@ package Vyatta::Misc; use strict; +use Vyatta::ioctl; require Exporter; -require 'sys/ioctl.ph'; our @ISA = qw(Exporter); our @EXPORT = qw(getInterfaces getIP getNetAddIP get_sysfs_value @@ -527,14 +527,7 @@ sub interface_description { # returns (rows, columns) for terminal size sub get_terminal_size { - my $winsize = ''; - open(my $TTY, '>', '/dev/tty'); - # undefined if output not going to terminal - return unless (ioctl($TTY, &TIOCGWINSZ, $winsize)); - close($TTY); - - my ($rows, $cols, undef, undef) = unpack('S4', $winsize); - return ($rows, $cols); + return Vyatta::ioctl::get_terminal_size(); } # return only terminal width diff --git a/lib/Vyatta/ioctl.pm b/lib/Vyatta/ioctl.pm new file mode 100644 index 0000000..af72d37 --- /dev/null +++ b/lib/Vyatta/ioctl.pm @@ -0,0 +1,59 @@ +# Author: John Southworth <john.southworth@vyatta.com> +# Date: 2012 +# Description: vyatta ioctl functions + +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc. +# All Rights Reserved. +# **** End License **** + +package Vyatta::ioctl; + +use strict; +use Socket; +use Socket6; +require 'sys/ioctl.ph'; + +# returns (rows, columns) for terminal size; +sub get_terminal_size { + my $winsize = ''; + open(my $TTY, '>', '/dev/tty'); + # undefined if output not going to terminal + return unless (ioctl($TTY, &TIOCGWINSZ, $winsize)); + close($TTY); + + my ($rows, $cols, undef, undef) = unpack('S4', $winsize); + return ($rows, $cols); +} + +#Do SIOCGIFFLAGS ioctl in perl +sub get_interface_flags { + my $self = shift; + + my $SIOCGIFFLAGS = &SIOCGIFFLAGS; + die "SIOCGIFFLAGS not found" + unless defined($SIOCGIFFLAGS); + + socket (my $sock, AF_INET, SOCK_DGRAM, 0) + or die "open UDP socket failed: $!"; + + my $ifreq = pack('a16', $self->{name}); + ioctl($sock, $SIOCGIFFLAGS, $ifreq) + or return; #undef + + my (undef, $flags) = unpack('a16s', $ifreq); + return $flags; + +} + +1; |