summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rwxr-xr-xlib/Vyatta/Interface.pm19
-rwxr-xr-xlib/Vyatta/Misc.pm11
-rw-r--r--lib/Vyatta/ioctl.pm59
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;