aaalex-ruby-ifconfig 1.2.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.
- data/COPYING +340 -0
- data/Changelog +20 -0
- data/INSTALL +239 -0
- data/README +37 -0
- data/Rakefile +14 -0
- data/TODO +8 -0
- data/ifconfig_examples/darwin.txt +17 -0
- data/ifconfig_examples/dragonflybsd.txt +10 -0
- data/ifconfig_examples/dragonflybsd_netstat.txt +14 -0
- data/ifconfig_examples/freebsd.txt +17 -0
- data/ifconfig_examples/freebsd_netstat.txt +24 -0
- data/ifconfig_examples/linux.txt +60 -0
- data/ifconfig_examples/linux_ethernet.txt +20 -0
- data/ifconfig_examples/netbsd.txt +10 -0
- data/ifconfig_examples/openbsd.txt +36 -0
- data/ifconfig_examples/sunos.txt +10 -0
- data/lib/ifconfig.rb +71 -0
- data/lib/ifconfig/bsd/ifconfig.rb +72 -0
- data/lib/ifconfig/bsd/interface_types.rb +69 -0
- data/lib/ifconfig/bsd/network_types.rb +3 -0
- data/lib/ifconfig/common/ifconfig.rb +84 -0
- data/lib/ifconfig/common/interface_types.rb +130 -0
- data/lib/ifconfig/common/network_types.rb +49 -0
- data/lib/ifconfig/linux/ifconfig.rb +41 -0
- data/lib/ifconfig/linux/interface_types.rb +112 -0
- data/lib/ifconfig/linux/network_types.rb +55 -0
- data/lib/ifconfig/sunos/ifconfig.rb +38 -0
- data/lib/ifconfig/sunos/interface_types.rb +77 -0
- data/lib/ifconfig/sunos/network_types.rb +4 -0
- data/test/test_bsd.rb +35 -0
- data/test/test_darwin.rb +33 -0
- data/test/test_dragonflybsd.rb +35 -0
- data/test/test_helper.rb +4 -0
- data/test/test_linux.rb +31 -0
- data/test/test_netbsd.rb +33 -0
- data/test/test_openbsd.rb +33 -0
- data/test/test_sunos.rb +35 -0
- data/test/unit/tc_darwin.rb +40 -0
- data/test/unit/tc_dragonflybsd.rb +39 -0
- data/test/unit/tc_freebsd.rb +40 -0
- data/test/unit/tc_linux.rb +49 -0
- data/test/unit/tc_netbsd.rb +39 -0
- data/test/unit/tc_openbsd.rb +39 -0
- data/test/unit/tc_sunos.rb +44 -0
- metadata +101 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
# $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
2
|
+
#
|
3
|
+
require 'ifconfig/common/interface_types'
|
4
|
+
|
5
|
+
class NetworkAdapter
|
6
|
+
# becuase on *BSD we get activity from netstat
|
7
|
+
# we need to have a way to set this:
|
8
|
+
attr_writer :mtu
|
9
|
+
|
10
|
+
# iterate line by line and dispatch to helper functions
|
11
|
+
# for lines that match a pattern
|
12
|
+
#
|
13
|
+
def parse_ifconfig
|
14
|
+
@ifconfig.split("\n").each { |line|
|
15
|
+
case line
|
16
|
+
when /^\s+#{@protos}/
|
17
|
+
add_network(line)
|
18
|
+
when /flags\=/i
|
19
|
+
parse_flags(line)
|
20
|
+
end
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
# parses the "UP LOOPBACK RUNNING MTU:3924 Metric:1" line
|
25
|
+
#
|
26
|
+
def parse_flags(line)
|
27
|
+
flags = line.match(/\<(\S+)\>/i)[1]
|
28
|
+
@flags = flags.strip.split(',')
|
29
|
+
@status = true if @flags.include?('UP')
|
30
|
+
end
|
31
|
+
|
32
|
+
# Parses networks on an interface based on the first token in the line.
|
33
|
+
# eg: inet or inet6
|
34
|
+
#
|
35
|
+
def add_network(line)
|
36
|
+
case line
|
37
|
+
when /^\s+inet\s/
|
38
|
+
addr,mask = line.match(/\s+([\d\d?\d?\.]{4,})\s+netmask\s+(\S+)/i)[1..2]
|
39
|
+
bcast = line.match(/\s+broadcast\s([\d\d?\d?\.]{4,})/i)
|
40
|
+
bcast = bcast[1] unless bcast.nil?
|
41
|
+
@networks['inet'] = Ipv4Network.new(addr, mask, bcast)
|
42
|
+
when /^\s+inet6\s/
|
43
|
+
# there can be multiple inet6 entries
|
44
|
+
begin
|
45
|
+
addr,scope = line.match(/inet6\s+(\S+)%/i)[1]
|
46
|
+
rescue NoMethodError
|
47
|
+
addr,scope = line.match(/inet6\s+(\S+)/i)[1]
|
48
|
+
end
|
49
|
+
@networks["inet6:#{addr}"] = Ipv6Network.new(addr)
|
50
|
+
else
|
51
|
+
puts "unknown network type: #{line}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
class EthernetAdapter
|
58
|
+
def set_mac
|
59
|
+
begin
|
60
|
+
match=@ifconfig.match(/\s+ether\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
|
61
|
+
return match[1] unless match.nil?
|
62
|
+
# Openbsd
|
63
|
+
match = @ifconfig.match(/\s+address\:\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
|
64
|
+
return match[1] unless match.nil?
|
65
|
+
rescue NoMethodError
|
66
|
+
puts "Couldn't Parse MAC Address for: "+@name
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
2
|
+
#
|
3
|
+
class Ifconfig
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
#
|
7
|
+
# Give hash like access to the interfaces
|
8
|
+
#
|
9
|
+
def [](iface)
|
10
|
+
return @ifaces[iface]
|
11
|
+
end
|
12
|
+
|
13
|
+
def each( &block )
|
14
|
+
return @ifaces.each_value( &block )
|
15
|
+
end
|
16
|
+
|
17
|
+
# return list of interface names
|
18
|
+
#
|
19
|
+
def interfaces
|
20
|
+
return @ifaces.keys
|
21
|
+
end
|
22
|
+
|
23
|
+
# returns array of interface text blocks
|
24
|
+
#
|
25
|
+
def split_interfaces(text)
|
26
|
+
ifaces = []
|
27
|
+
text.split("\n").each { |line|
|
28
|
+
ifaces[ifaces.length] = "" if line =~ /^\S/
|
29
|
+
ifaces[ifaces.length-1] += line.rstrip+"\n"
|
30
|
+
}
|
31
|
+
return ifaces
|
32
|
+
end
|
33
|
+
|
34
|
+
# Given an interface block
|
35
|
+
# returns the name of an interface (eth0, eth0:1 ppp0, etc.)
|
36
|
+
#
|
37
|
+
def get_iface_name(text)
|
38
|
+
name = Regexp.compile(/^(\S+)/).match(text)[1]
|
39
|
+
# strip trailing :, for bsd, sun
|
40
|
+
name.sub!(/:$/,'')
|
41
|
+
return name
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
s=""
|
46
|
+
self.interfaces.sort.each { |k|
|
47
|
+
s += @ifaces[k].to_s
|
48
|
+
s += "\n-------------------------\n"
|
49
|
+
}
|
50
|
+
return s
|
51
|
+
end
|
52
|
+
|
53
|
+
# return list of all addresses on all interfaces reported by ifconfig
|
54
|
+
#
|
55
|
+
def addresses(type=nil)
|
56
|
+
addr = []
|
57
|
+
@ifaces.each_value { |iface|
|
58
|
+
addr += iface.addresses
|
59
|
+
}
|
60
|
+
return addr
|
61
|
+
end
|
62
|
+
|
63
|
+
# returns array of arrays
|
64
|
+
# [ [address , type ] ]
|
65
|
+
#
|
66
|
+
def addrs_with_type
|
67
|
+
addr = []
|
68
|
+
@ifaces.each_value { |iface|
|
69
|
+
addr += iface.addrs_with_type
|
70
|
+
}
|
71
|
+
return addr
|
72
|
+
end
|
73
|
+
|
74
|
+
def valid_addr?(addr,type='inet')
|
75
|
+
case type
|
76
|
+
when /(inet|v4)/
|
77
|
+
return addr.ipv4?
|
78
|
+
when /(inet6|v6)/
|
79
|
+
return addr.ipv6?
|
80
|
+
else
|
81
|
+
raise "Unknown address type `#{type}' for address `#{addr}'"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
2
|
+
#
|
3
|
+
class NetworkAdapter
|
4
|
+
def initialize(name, ifacetxt)
|
5
|
+
@name = name
|
6
|
+
@ifconfig = ifacetxt
|
7
|
+
@status = false
|
8
|
+
@protos = ['inet','inet6','IPX/Ethernet II',
|
9
|
+
'IPX/Ethernet SNAP',
|
10
|
+
'IPX/Ethernet 802.2',
|
11
|
+
'IPX/Ethernet 802.3',
|
12
|
+
'EtherTalk Phase 2'].join("|")
|
13
|
+
@networks = {}
|
14
|
+
@flags = []
|
15
|
+
@mtu = nil
|
16
|
+
@metric = nil
|
17
|
+
@rx = @tx = {}
|
18
|
+
parse_ifconfig
|
19
|
+
end
|
20
|
+
attr_reader :status, :name, :flags, :mtu
|
21
|
+
attr_accessor :tx, :rx
|
22
|
+
|
23
|
+
# take array and turn each two entries into
|
24
|
+
# hash key and value, also converts each value to an integer
|
25
|
+
#
|
26
|
+
# [1,2,3,4] => { 1 => 2, 3 => 4}
|
27
|
+
#
|
28
|
+
# Internal utility function used to populate rx and tx hashes
|
29
|
+
def array_to_hash_elem(array)
|
30
|
+
h = {}
|
31
|
+
if array.length.modulo(2) != 0
|
32
|
+
puts "Array mus have even number of elements to turn into a hash"
|
33
|
+
return nil
|
34
|
+
end
|
35
|
+
while array.length > 0
|
36
|
+
h[array.shift] = array.shift.to_i
|
37
|
+
end
|
38
|
+
return h
|
39
|
+
end
|
40
|
+
|
41
|
+
# Return all addresses bound to this interface or
|
42
|
+
# optionally only the specified type of network address
|
43
|
+
#
|
44
|
+
def addresses(type=nil)
|
45
|
+
a = []
|
46
|
+
@networks.each_value { |network|
|
47
|
+
a << (network.addr) if network.nettype == type or type.nil?
|
48
|
+
}
|
49
|
+
return a
|
50
|
+
end
|
51
|
+
|
52
|
+
def ifacetype
|
53
|
+
return self.class
|
54
|
+
end
|
55
|
+
|
56
|
+
def up?
|
57
|
+
return status
|
58
|
+
end
|
59
|
+
|
60
|
+
# returns array of arrays
|
61
|
+
# [ [address , type ] ]
|
62
|
+
#
|
63
|
+
def addrs_with_type
|
64
|
+
addrs = []
|
65
|
+
@networks.each_value { |network|
|
66
|
+
addrs.push([network.addr,network.nettype])
|
67
|
+
}
|
68
|
+
return addrs
|
69
|
+
end
|
70
|
+
|
71
|
+
def addr_types
|
72
|
+
types = []
|
73
|
+
@networks.each_value { |network|
|
74
|
+
types.push(network.nettype) unless types.include?(network.nettype)
|
75
|
+
}
|
76
|
+
return types
|
77
|
+
end
|
78
|
+
|
79
|
+
def has_addr?(addr)
|
80
|
+
return self.addresses.include?(addr)
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_s
|
84
|
+
s = @name+":"+self.ifacetype.to_s+"\n"
|
85
|
+
@networks.keys.sort.each { |network|
|
86
|
+
s += @networks[network].to_s+"\n"
|
87
|
+
}
|
88
|
+
if self.rx['bytes'] && self.tx['bytes']
|
89
|
+
s += " RX bytes: #{self.rx['bytes']}, TX bytes: #{self.tx['bytes']}\n"
|
90
|
+
elsif self.rx['packets'] && self.tx['packets']
|
91
|
+
s += " RX packets: #{self.rx['packets']}, TX packets: #{self.tx['packets']}\n"
|
92
|
+
end
|
93
|
+
|
94
|
+
s += " MTU: #{@mtu}\n"
|
95
|
+
s += " Metric: #{@metric}\n"
|
96
|
+
s += " Flags: #{@flags.join(',')}\n"
|
97
|
+
s += " Status: UP" if self.status
|
98
|
+
return s
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# each platform defines it's own set_mac
|
103
|
+
# function to get the mac address
|
104
|
+
#
|
105
|
+
class EthernetAdapter < NetworkAdapter
|
106
|
+
def initialize(name,ifconfigtxt)
|
107
|
+
super(name,ifconfigtxt)
|
108
|
+
@mac = set_mac
|
109
|
+
end
|
110
|
+
|
111
|
+
attr_reader :mac, :interrupt, :rxbytes, :txbytes, :rxpackets,
|
112
|
+
:txpackets
|
113
|
+
|
114
|
+
def to_s
|
115
|
+
super + "\n MAC: #{@mac}"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
class PPP < NetworkAdapter
|
121
|
+
end
|
122
|
+
|
123
|
+
class LoopbackInterface < NetworkAdapter
|
124
|
+
end
|
125
|
+
|
126
|
+
class IPv6_in_IPv4 < NetworkAdapter
|
127
|
+
end
|
128
|
+
|
129
|
+
class SerialLineIP < NetworkAdapter
|
130
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# $Id: network_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
2
|
+
#
|
3
|
+
|
4
|
+
# base type to hold information about the kinds of networks
|
5
|
+
# on to each adapter. ipv4,6 ppp etc
|
6
|
+
class BasicNetworkType
|
7
|
+
def initialize
|
8
|
+
@nettype = nil
|
9
|
+
end
|
10
|
+
attr_reader :nettype
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# Ipv4 Network type
|
15
|
+
# Optional Broadcast and Point to Point Arguments
|
16
|
+
#
|
17
|
+
class Ipv4Network < BasicNetworkType
|
18
|
+
def initialize(addr,mask,bcast=nil,ptp=nil)
|
19
|
+
super()
|
20
|
+
@nettype = 'inet'
|
21
|
+
@addr = IPAddr.new(addr)
|
22
|
+
@bcast = bcast
|
23
|
+
@mask = mask
|
24
|
+
@ptp = ptp
|
25
|
+
end
|
26
|
+
attr_reader :addr, :bcast, :mask, :ptp
|
27
|
+
|
28
|
+
def to_s
|
29
|
+
a = [" #{@nettype} Address: #{@addr}","Mask: #{@mask}"]
|
30
|
+
a.push "Broadcast: #{@bcast}" unless @bcast.nil?
|
31
|
+
a.push "P-t-P: #{@ptp}" unless @ptp.nil?
|
32
|
+
return a.join(', ')
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
class Ipv6Network < BasicNetworkType
|
38
|
+
def initialize(addr,scope=nil)
|
39
|
+
super()
|
40
|
+
@nettype = 'inet6'
|
41
|
+
@addr = IPAddr.new(addr)
|
42
|
+
@scope = scope
|
43
|
+
end
|
44
|
+
attr_reader :addr, :scope
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
" #{@nettype} Address: #{@addr}"
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:57 hobe Exp $
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'ifconfig/common/ifconfig'
|
5
|
+
require 'ifconfig/linux/network_types'
|
6
|
+
require 'ifconfig/linux/interface_types'
|
7
|
+
|
8
|
+
class Ifconfig
|
9
|
+
#
|
10
|
+
# Can manually specify the platform (should be output of the 'uname' command)
|
11
|
+
# and the ifconfig input
|
12
|
+
#
|
13
|
+
def initialize(input=nil,verbose=nil)
|
14
|
+
if input.nil?
|
15
|
+
cmd = IO.popen('which ifconfig'){ |f| f.readlines[0] }
|
16
|
+
exit unless !cmd.nil?
|
17
|
+
@ifconfig = IO.popen("/sbin/ifconfig -a"){ |f| f.readlines.join }
|
18
|
+
else
|
19
|
+
@ifconfig = input
|
20
|
+
end
|
21
|
+
@verbose = verbose
|
22
|
+
@ifaces = {}
|
23
|
+
split_interfaces(@ifconfig).each do |iface|
|
24
|
+
iface_name = get_iface_name(iface)
|
25
|
+
case iface
|
26
|
+
when /encap\:ethernet/im
|
27
|
+
@ifaces[iface_name] = EthernetAdapter.new(iface_name,iface)
|
28
|
+
when /encap\:Local Loopback/im
|
29
|
+
@ifaces[iface_name] = LoopbackInterface.new(iface_name,iface)
|
30
|
+
when /encap\:IPv6-in-IPv4/im
|
31
|
+
@ifaces[iface_name] = IPv6_in_IPv4.new(iface_name,iface)
|
32
|
+
when /encap\:Point-to-Point Protocol/im
|
33
|
+
@ifaces[iface_name] = PPP.new(iface_name,iface)
|
34
|
+
when /encap\:Serial Line IP/im
|
35
|
+
@ifaces[iface_name] = SerialLineIP.new(iface_name,iface)
|
36
|
+
else
|
37
|
+
puts "Unknown Adapter Type on Linux: #{iface}" if @verbose
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:57 hobe Exp $
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'ifconfig/common/interface_types'
|
5
|
+
|
6
|
+
class NetworkAdapter
|
7
|
+
# Parse activity on interface
|
8
|
+
#
|
9
|
+
def parse_activity(line)
|
10
|
+
atr = %w(packets,errors,dropped,overruns)
|
11
|
+
case line.strip!
|
12
|
+
|
13
|
+
when /^RX packets/
|
14
|
+
@rx = array_to_hash_elem(
|
15
|
+
line.match(/^RX\s+(\w+)\:(\d+)\s+(\w+)\:(\d+)\s+(\w+)\:(\d+)\s+(\w+)\:(\d)/i)[1..8])
|
16
|
+
match = line.match(/\s+frame\:(\d+)/i)
|
17
|
+
@rx['frame'] = match[1] unless match.nil?
|
18
|
+
|
19
|
+
when /^TX packets/
|
20
|
+
@tx = array_to_hash_elem(
|
21
|
+
line.match(/^TX\s+(\w+)\:(\d+)\s+(\w+)\:(\d+)\s+(\w+)\:(\d+)\s+(\w+)\:(\d+)/i)[1..8])
|
22
|
+
match = line.match(/\s+carrier\:(\d+)/i)
|
23
|
+
@tx['carrier'] = match[1] unless match.nil?
|
24
|
+
|
25
|
+
when /^RX bytes/
|
26
|
+
match = line.match(/RX\s+(\w+)\:(\d+).*TX\s+(\w+)\:(\d+)/i)[1..4]
|
27
|
+
@rx.merge!(array_to_hash_elem(match[0..1]))
|
28
|
+
@tx.merge!(array_to_hash_elem(match[2..3]))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# iterate line by line and dispatch to helper functions
|
33
|
+
# for lines that match a pattern
|
34
|
+
#
|
35
|
+
def parse_ifconfig
|
36
|
+
@ifconfig.split("\n").each { |line|
|
37
|
+
case line
|
38
|
+
when /^\s+#{@protos}/
|
39
|
+
add_network(line)
|
40
|
+
when /MTU\:\d+\s+Metric\:/
|
41
|
+
parse_flags(line)
|
42
|
+
when /^\s+RX|TX/
|
43
|
+
parse_activity(line)
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
# parses the "UP LOOPBACK RUNNING MTU:3924 Metric:1" line
|
49
|
+
#
|
50
|
+
def parse_flags(line)
|
51
|
+
flags = line.strip.split
|
52
|
+
@metric = flags.pop.split(':')[1].to_i
|
53
|
+
@mtu = flags.pop.split(':')[1].to_i
|
54
|
+
@flags = flags
|
55
|
+
@status = true if @flags.include?('UP')
|
56
|
+
end
|
57
|
+
|
58
|
+
# Parses networks on an interface based on the first token in the line.
|
59
|
+
# eg: inet or inet6
|
60
|
+
#
|
61
|
+
def add_network(line)
|
62
|
+
case line
|
63
|
+
when /^\s+inet\s/
|
64
|
+
addr = line.match(/\s+addr\:([\d\d?\d?\.]{4,})/i)[1]
|
65
|
+
mask = line.match(/\s+mask\:([\d\d?\d?\.]{4,})/i)[1]
|
66
|
+
bcast = line.match(/\s+bcast\:([\d\d?\d?\.]{4,})/i)
|
67
|
+
bcast = bcast[1] unless bcast.nil?
|
68
|
+
ptp = line.match(/\s+P-t-P\:([\d\d?\d?\.]{4,})/i)
|
69
|
+
ptp = ptp[1] unless ptp.nil?
|
70
|
+
@networks['inet'] = Ipv4Network.new(addr, mask, bcast, ptp)
|
71
|
+
|
72
|
+
when /^\s+inet6\s/
|
73
|
+
# there can be multiple inet6 entries
|
74
|
+
addr,scope = line.match(/\s+addr\:\s+(\S+)\s+scope\:\s*(\w+)/i)[1..2]
|
75
|
+
@networks["inet6:#{addr}"] = Ipv6Network.new(addr,scope)
|
76
|
+
|
77
|
+
when /^\s+#{Regexp.escape('IPX/Ethernet II')}\s/
|
78
|
+
addr = line.match(/\s+addr\:\s*(\S+)/)[1]
|
79
|
+
@networks["IPX/Ethernet II"] = IPX_EthernetII.new(addr)
|
80
|
+
|
81
|
+
when /^\s+#{Regexp.escape('IPX/Ethernet 802.2')}\s/
|
82
|
+
addr = line.match(/\s+addr\:\s*(\S+)/)[1]
|
83
|
+
@networks["IPX/Ethernet 802.2"] = IPX_Ethernet802_2.new(addr)
|
84
|
+
|
85
|
+
when /^\s+#{Regexp.escape('IPX/Ethernet 802.3')}\s/
|
86
|
+
addr = line.match(/\s+addr\:\s*(\S+)/)[1]
|
87
|
+
@networks["IPX/Ethernet 802.3"] = IPX_Ethernet802_3.new(addr)
|
88
|
+
|
89
|
+
when /^\s+#{Regexp.escape('EtherTalk Phase 2')}\s/
|
90
|
+
addr = line.match(/\s+addr\:\s*(\S+)/)[1]
|
91
|
+
@networks["EtherTalk Phase 2"] = EtherTalkPhase2.new(addr)
|
92
|
+
|
93
|
+
when /^\s+#{Regexp.escape('IPX/Ethernet SNAP')}\s/
|
94
|
+
addr = line.match(/\s+addr\:\s*(\S+)/)[1]
|
95
|
+
@networks["IPX/Ethernet SNAP"] = IPX_EthernetSNAP.new(addr)
|
96
|
+
|
97
|
+
else
|
98
|
+
puts "unknown network type: #{line}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
class EthernetAdapter
|
105
|
+
def set_mac
|
106
|
+
begin
|
107
|
+
return @ifconfig.match(/\s+hwaddr\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)[1]
|
108
|
+
rescue NoMethodError
|
109
|
+
puts "Couldn't Parse MAC Address for: #{@name}: #{$!}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|