Class: Macker::Address
- Inherits:
-
Object
- Object
- Macker::Address
- Includes:
- Comparable
- Defined in:
- lib/macker/address.rb
Overview
MAC address class
Instance Attribute Summary collapse
-
#address ⇒ String
readonly
Get the value of name, address or iso code.
-
#iso_code ⇒ String
readonly
Get the value of name, address or iso code.
-
#name ⇒ String
readonly
Get the value of name, address or iso code.
Instance Method Summary collapse
-
#<=>(other) ⇒ Boolean
Compare two MAC addresses.
-
#broadcast? ⇒ Boolean
Check if MAC address is a broadcast address.
-
#full_address ⇒ String
Get the full vendor address.
-
#global_uniq? ⇒ Boolean
Check if MAC address is a global uniq address.
-
#initialize(mac, opts = {}) ⇒ Address
constructor
Initialize Address object.
-
#local_admin? ⇒ Boolean
Check if MAC address is a local address.
-
#multicast? ⇒ Boolean
Check if MAC address is a multicast address.
-
#next ⇒ Adress
(also: #succ)
Get next MAC address from actual address.
-
#oui? ⇒ Boolean
Check if MAC address is an OUI valid address.
-
#prefix ⇒ Adress
Get the prefix base16 MAC address.
-
#to_i ⇒ Integer
Format MAC address to integer.
-
#to_s(sep = ':') ⇒ String
Format MAC address to string.
-
#unicast? ⇒ Boolean
Check if MAC address is an unicast address.
-
#valid? ⇒ Boolean
Check if MAC address is a valid address.
Constructor Details
#initialize(mac, opts = {}) ⇒ Address
Initialize Address object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/macker/address.rb', line 19 def initialize(mac, opts = {}) case mac when Address @val = mac.to_i @name = mac.name @address = mac.address @iso_code = mac.iso_code when Integer @val = mac when String @val = cleanup(mac).to_i(16) else raise(InvalidAddress, "Incompatible type for address initialization: #{mac.class}") end raise(InvalidAddress, "Invalid MAC address: #{self}") unless valid? @name ||= opts.fetch(:name, nil) @address ||= opts.fetch(:address, nil) @iso_code ||= opts.fetch(:iso_code, nil) end |
Instance Attribute Details
#address ⇒ String (readonly)
Get the value of name, address or iso code
13 14 15 |
# File 'lib/macker/address.rb', line 13 def address @address end |
#iso_code ⇒ String (readonly)
Get the value of name, address or iso code
13 14 15 |
# File 'lib/macker/address.rb', line 13 def iso_code @iso_code end |
#name ⇒ String (readonly)
Get the value of name, address or iso code
13 14 15 |
# File 'lib/macker/address.rb', line 13 def name @name end |
Instance Method Details
#<=>(other) ⇒ Boolean
Compare two MAC addresses
62 63 64 |
# File 'lib/macker/address.rb', line 62 def <=>(other) @val <=> other.to_i end |
#broadcast? ⇒ Boolean
Check if MAC address is a broadcast address
80 81 82 |
# File 'lib/macker/address.rb', line 80 def broadcast? @val == 2**48 - 1 end |
#full_address ⇒ String
Get the full vendor address
125 126 127 |
# File 'lib/macker/address.rb', line 125 def full_address address.join(', ') end |
#global_uniq? ⇒ Boolean
Check if MAC address is a global uniq address
99 100 101 |
# File 'lib/macker/address.rb', line 99 def global_uniq? !local_admin? end |
#local_admin? ⇒ Boolean
Check if MAC address is a local address
105 106 107 108 |
# File 'lib/macker/address.rb', line 105 def local_admin? mask = 2 << (5 * 8) (mask & @val) != 0 end |
#multicast? ⇒ Boolean
Check if MAC address is a multicast address
92 93 94 95 |
# File 'lib/macker/address.rb', line 92 def multicast? mask = 1 << (5 * 8) (mask & @val) != 0 end |
#next ⇒ Adress Also known as: succ
Get next MAC address from actual address
112 113 114 |
# File 'lib/macker/address.rb', line 112 def next Address.new((@val + 1) % 2**48) end |
#oui? ⇒ Boolean
Check if MAC address is an OUI valid address
68 69 70 |
# File 'lib/macker/address.rb', line 68 def oui? !@name.nil? end |
#prefix ⇒ Adress
Get the prefix base16 MAC address
119 120 121 |
# File 'lib/macker/address.rb', line 119 def prefix to_s('')[0..5] end |
#to_i ⇒ Integer
Format MAC address to integer
41 42 43 |
# File 'lib/macker/address.rb', line 41 def to_i @val end |
#to_s(sep = ':') ⇒ String
Format MAC address to string
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/macker/address.rb', line 48 def to_s(sep = ':') @val.to_s(16) .rjust(12, '0') .insert(10, sep) .insert(8, sep) .insert(6, sep) .insert(4, sep) .insert(2, sep) .upcase end |
#unicast? ⇒ Boolean
Check if MAC address is an unicast address
86 87 88 |
# File 'lib/macker/address.rb', line 86 def unicast? !multicast? end |
#valid? ⇒ Boolean
Check if MAC address is a valid address
74 75 76 |
# File 'lib/macker/address.rb', line 74 def valid? @val.between?(0, 2**48 - 1) end |