Class: LinuxAdmin::NetworkInterface
- Inherits:
-
Object
- Object
- LinuxAdmin::NetworkInterface
- Defined in:
- lib/linux_admin/network_interface.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#interface ⇒ String
readonly
The interface for networking operations.
-
#link_type ⇒ String
readonly
The interface for networking operations.
Class Method Summary collapse
-
.dist_class(clear_cache = false) ⇒ Class
Gets the subclass specific to the local Linux distro.
- .list ⇒ Object
-
.new(*args) ⇒ Object
Creates an instance of the correct NetworkInterface subclass for the local distro.
Instance Method Summary collapse
-
#address ⇒ String
Retrieve the IPv4 address assigned to the interface.
-
#address6(scope = :global) ⇒ String
Retrieve the IPv6 address assigned to the interface.
-
#gateway ⇒ String
Retrieve the IPv4 default gateway associated with the interface.
-
#gateway6 ⇒ String
Retrieve the IPv6 default gateway associated with the interface.
-
#initialize(interface) ⇒ NetworkInterface
constructor
A new instance of NetworkInterface.
- #loopback? ⇒ Boolean
-
#mac_address ⇒ String
Retrieve the MAC address associated with the interface.
-
#netmask ⇒ String
Retrieve the IPv4 sub-net mask assigned to the interface.
-
#netmask6(scope = :global) ⇒ String
Retrieve the IPv6 sub-net mask assigned to the interface.
-
#prefix ⇒ Numeric
Retrieve the IPv4 sub-net prefix length assigned to the interface.
-
#prefix6(scope = :global) ⇒ Numeric
Retrieve the IPv6 sub-net prefix length assigned to the interface.
-
#reload ⇒ Boolean
Gathers current network information for this interface.
-
#start ⇒ Boolean
Brings up the network interface.
-
#stop ⇒ Boolean
Brings down the network interface.
Constructor Details
#initialize(interface) ⇒ NetworkInterface
Returns a new instance of NetworkInterface.
48 49 50 51 |
# File 'lib/linux_admin/network_interface.rb', line 48 def initialize(interface) @interface = interface reload end |
Instance Attribute Details
#interface ⇒ String (readonly)
Returns the interface for networking operations.
45 46 47 |
# File 'lib/linux_admin/network_interface.rb', line 45 def interface @interface end |
#link_type ⇒ String (readonly)
Returns the interface for networking operations.
45 46 47 |
# File 'lib/linux_admin/network_interface.rb', line 45 def link_type @link_type end |
Class Method Details
.dist_class(clear_cache = false) ⇒ Class
Gets the subclass specific to the local Linux distro
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/linux_admin/network_interface.rb', line 13 def self.dist_class(clear_cache = false) @dist_class = nil if clear_cache @dist_class ||= begin if [Distros.rhel, Distros.fedora].include?(Distros.local) NetworkInterfaceRH else NetworkInterfaceGeneric end end end |
.list ⇒ Object
24 25 26 27 28 |
# File 'lib/linux_admin/network_interface.rb', line 24 def self.list ip_link.pluck("ifname").map { |iface| new(iface) } rescue AwesomeSpawn::CommandResultError => e raise NetworkInterfaceError.new(e., e.result) end |
.new(*args) ⇒ Object
Creates an instance of the correct NetworkInterface subclass for the local distro
40 41 42 |
# File 'lib/linux_admin/network_interface.rb', line 40 def self.new(*args) self == LinuxAdmin::NetworkInterface ? dist_class.new(*args) : super end |
Instance Method Details
#address ⇒ String
Retrieve the IPv4 address assigned to the interface
86 87 88 |
# File 'lib/linux_admin/network_interface.rb', line 86 def address @network_conf[:address] end |
#address6(scope = :global) ⇒ String
Retrieve the IPv6 address assigned to the interface
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/linux_admin/network_interface.rb', line 94 def address6(scope = :global) case scope when :global @network_conf[:address6_global] when :link @network_conf[:address6_link] else raise ArgumentError, "Unrecognized address scope #{scope}" end end |
#gateway ⇒ String
Retrieve the IPv4 default gateway associated with the interface
152 153 154 |
# File 'lib/linux_admin/network_interface.rb', line 152 def gateway @network_conf[:gateway4] end |
#gateway6 ⇒ String
Retrieve the IPv6 default gateway associated with the interface
159 160 161 |
# File 'lib/linux_admin/network_interface.rb', line 159 def gateway6 @network_conf[:gateway6] end |
#loopback? ⇒ Boolean
79 80 81 |
# File 'lib/linux_admin/network_interface.rb', line 79 def loopback? @link_type == "loopback" end |
#mac_address ⇒ String
Retrieve the MAC address associated with the interface
108 109 110 |
# File 'lib/linux_admin/network_interface.rb', line 108 def mac_address @network_conf[:mac] end |
#netmask ⇒ String
Retrieve the IPv4 sub-net mask assigned to the interface
115 116 117 |
# File 'lib/linux_admin/network_interface.rb', line 115 def netmask @network_conf[:mask] ||= IPAddr.new('255.255.255.255').mask(prefix).to_s if prefix end |
#netmask6(scope = :global) ⇒ String
Retrieve the IPv6 sub-net mask assigned to the interface
123 124 125 126 127 128 129 |
# File 'lib/linux_admin/network_interface.rb', line 123 def netmask6(scope = :global) if [:global, :link].include?(scope) @network_conf["mask6_#{scope}".to_sym] ||= IPAddr.new('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff').mask(prefix6(scope)).to_s if prefix6(scope) else raise ArgumentError, "Unrecognized address scope #{scope}" end end |
#prefix ⇒ Numeric
Retrieve the IPv4 sub-net prefix length assigned to the interface
134 135 136 |
# File 'lib/linux_admin/network_interface.rb', line 134 def prefix @network_conf[:prefix] end |
#prefix6(scope = :global) ⇒ Numeric
Retrieve the IPv6 sub-net prefix length assigned to the interface
141 142 143 144 145 146 147 |
# File 'lib/linux_admin/network_interface.rb', line 141 def prefix6(scope = :global) if [:global, :link].include?(scope) @network_conf["prefix6_#{scope}".to_sym] else raise ArgumentError, "Unrecognized address scope #{scope}" end end |
#reload ⇒ Boolean
Gathers current network information for this interface
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/linux_admin/network_interface.rb', line 56 def reload @network_conf = {} begin ip_output = ip_show rescue NetworkInterfaceError return false end @link_type = ip_output["link_type"] addr_info = ip_output["addr_info"] parse_ip4(addr_info) parse_ip6(addr_info, "global") parse_ip6(addr_info, "link") @network_conf[:mac] = ip_output["address"] [4, 6].each do |version| @network_conf["gateway#{version}".to_sym] = ip_route(version, "default")&.dig("gateway") end true end |