interfacez 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8cd4cdba45bdc3c9ee5f65a733afdab9736e0a99b9f5f6cc56e2bff6e3f22392
4
- data.tar.gz: ab510eaabb3e5cada57f4f10a827eb131386acd1335dafff22024bf575a565f9
3
+ metadata.gz: 59fc474fefa0478ba81ba00f1ce41de6c9cc423c3f8e8296bbd5055a86825a76
4
+ data.tar.gz: 1da020117eabb38b8f44c5b3f3a0fc5d4c3f16d522d93b2529bcef04cc36865e
5
5
  SHA512:
6
- metadata.gz: dfb4a1c0c8ead706d0ada9427d695fd18c647a0b181699de62b3964a15a0407dfe1b41cddd7d96147e9986bf6e86a63ed7295c13ccccbb405057dc2983f8e0d9
7
- data.tar.gz: 321405b666b65a6c4b377fb8783b73be700ab260307dd9ff217871e1beab4cf029216472b2d46c44ea1944a0e061241bd735787072b181894ee27eafd22692b7
6
+ metadata.gz: 72c67db1a181fb6259292933559c083b8989053d8ffd9d47f775371890e402d82d9dbdb97a349cdbb5ac741025e486a561ae07c3a11f1a058ec0fd2ecd8a82b9
7
+ data.tar.gz: ca0754fa026185c20f7d09b243fe218e60bc82a5de3ec0cfa7207cada163b506863c911d86c82229a3c83ae7990a5e140f1f8ee181d9d14640d07743fe0d6115
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- interfacez (1.0.0)
4
+ interfacez (1.0.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,3 +1,3 @@
1
1
  module Interfacez
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/interfacez.rb CHANGED
@@ -19,6 +19,25 @@ module Interfacez
19
19
  Interfacez.ipv6_loopbacks { |iface| return iface }
20
20
  end
21
21
 
22
+ # Check for any (ipv4 or ipv6) loopback interface.
23
+ def self.loopback?
24
+ Interfacez.ipv4_loopbacks { |iface| return true }
25
+ Interfacez.ipv6_loopbacks { |iface| return true }
26
+ return false
27
+ end
28
+
29
+ # Get all (ipv4 or ipv6) loopback interfaces.
30
+ def self.loopbacks
31
+ if block_given?
32
+ Interfacez.ipv4_loopbacks { |iface| yield iface }
33
+ Interfacez.ipv6_loopbacks { |iface| yield iface }
34
+ else
35
+ loopbacks = []
36
+ Interfacez.loopbacks { |l| loopbacks << l unless loopbacks.any?(l) }
37
+ return loopbacks
38
+ end
39
+ end
40
+
22
41
  # First available ipv4 loopback interface.
23
42
  def self.ipv4_loopback
24
43
  Interfacez.ipv4_loopbacks { |iface| return iface }
@@ -26,13 +45,16 @@ module Interfacez
26
45
 
27
46
  # All ipv4 loopback interfaces.
28
47
  def self.ipv4_loopbacks
29
- results = []
30
- raw_interface_addresses.each do |iface|
31
- next unless iface.addr.ipv4_loopback?
32
- yield iface.name if block_given?
33
- results << iface.name
48
+ if block_given?
49
+ raw_interface_addresses.each do |iface|
50
+ next unless iface.addr.ipv4_loopback?
51
+ yield iface.name if block_given?
52
+ end
53
+ else
54
+ results = []
55
+ Interfacez.ipv4_loopbacks { |l| results << l }
56
+ return results
34
57
  end
35
- return results
36
58
  end
37
59
 
38
60
  # First available ipv6 loopback interface.
@@ -42,13 +64,16 @@ module Interfacez
42
64
 
43
65
  # All ipv6 loopback interfaces.
44
66
  def self.ipv6_loopbacks
45
- results = []
46
- raw_interface_addresses.each do |iface|
47
- next unless iface.addr.ipv6_loopback?
48
- yield iface.name if block_given?
49
- results << iface.name
67
+ if block_given?
68
+ raw_interface_addresses.each do |iface|
69
+ next unless iface.addr.ipv6_loopback?
70
+ yield iface.name if block_given?
71
+ end
72
+ else
73
+ results = []
74
+ Interfacez.ipv4_loopbacks { |l| results << l }
75
+ return results
50
76
  end
51
- return results
52
77
  end
53
78
 
54
79
  # All network interface names available on system.
@@ -64,7 +89,8 @@ module Interfacez
64
89
 
65
90
  # Network interfaces with their ipv4 addresses, if they have
66
91
  # any asscoited with it.
67
- def self.ipv4_addresses
92
+ def self.ipv4_addresses(interface = nil)
93
+ return ipv4_addresses_of(interface) unless interface.nil?
68
94
  results = Hash.new()
69
95
  raw_interface_addresses.each do |iface|
70
96
  if iface.addr.ipv4?
@@ -80,9 +106,22 @@ module Interfacez
80
106
  return results
81
107
  end
82
108
 
109
+ # Return all ipv4 addresses of a given interface.
110
+ def self.ipv4_address_of(interface)
111
+ addresses = Interfacez.ipv4_addresses[interface]
112
+ return nil if addresses.nil?
113
+ return addresses[0]
114
+ end
115
+
116
+ # Return the first ipv4 address of a given interface.
117
+ def self.ipv4_addresses_of(interface)
118
+ return Interfacez.ipv4_addresses[interface] || []
119
+ end
120
+
83
121
  # Network interfaces with their ipv6 addresses, if they have
84
122
  # any asscoited with it.
85
- def self.ipv6_addresses
123
+ def self.ipv6_addresses(interface = nil)
124
+ return ipv6_addresses_of(interface) unless interface.nil?
86
125
  results = Hash.new()
87
126
  raw_interface_addresses.each do |iface|
88
127
  if iface.addr.ipv6?
@@ -98,6 +137,26 @@ module Interfacez
98
137
  return results
99
138
  end
100
139
 
140
+ # Return all available ipv6 addreses of a given interface.
141
+ def self.ipv6_addresses_of(interface)
142
+ return Interfacez.ipv4_addresses[interface] || []
143
+ end
144
+
145
+ # Return the first ipv6 address of a given interface.
146
+ def self.ipv6_address_of(interface)
147
+ addresses = Interfacez.ipv6_addresses_of(interface)
148
+ return nil if addresses.nil?
149
+ return addresses[0]
150
+ end
151
+
152
+ # Get index of network interface.
153
+ def self.index_of(interface)
154
+ raw_interface_addresses.each do |iface|
155
+ return iface.ifindex if iface.name == iface
156
+ end
157
+ return nil
158
+ end
159
+
101
160
  # :nodoc:
102
161
  def self.raw_interface_addresses
103
162
  Socket.getifaddrs
@@ -105,4 +164,5 @@ module Interfacez
105
164
  warn "Unable to get raw interface address list from Socket class"
106
165
  return []
107
166
  end
167
+
108
168
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interfacez
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kent 'picat' Gruber
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2018-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler