Class: NetAddr::EUI48
- Inherits:
-
Object
- Object
- NetAddr::EUI48
- Defined in:
- lib/eui48.rb
Overview
EUI48 (Extended Unique Identifier 48-bit, or EUI-48) represents a 48-bit hardware address. It is typically associated with mac-addresses.
Instance Attribute Summary collapse
-
#addr ⇒ Object
readonly
addr is the Integer representation of this EUI.
Class Method Summary collapse
-
.parse(addr) ⇒ Object
Parse an EUI-48 string into an EUI48 type.
Instance Method Summary collapse
-
#bytes ⇒ Object
bytes returns a list containing each byte of the EUI48 as String.
-
#initialize(i) ⇒ EUI48
constructor
Create an EUI48 from an Integer.
-
#to_eui64 ⇒ Object
to_eui64 converts this EUI48 into an EUI64 by inserting 0xfffe between the first and last 24-bits of the address.
- #to_s ⇒ Object
Constructor Details
#initialize(i) ⇒ EUI48
Create an EUI48 from an Integer. Must be between 0 and 2**48-1. Throws ValidationError on error.
12 13 14 15 16 17 18 19 |
# File 'lib/eui48.rb', line 12 def initialize(i) if (!i.kind_of?(Integer)) raise ValidationError, "Expected an Integer for 'i' but got a #{i.class}." elsif ( (i < 0) || (i > 2**48-1) ) raise ValidationError, "#{i} is out of bounds for EUI48." end @addr = i end |
Instance Attribute Details
#addr ⇒ Object (readonly)
addr is the Integer representation of this EUI
8 9 10 |
# File 'lib/eui48.rb', line 8 def addr @addr end |
Class Method Details
.parse(addr) ⇒ Object
Parse an EUI-48 string into an EUI48 type. This will successfully parse most of the typically used formats such as:
-
aa-bb-cc-dd-ee-ff
-
aa:bb:cc:dd:ee:ff
-
aabb.ccdd.eeff
-
aabbccddeeff
Although, in truth, its not picky about the exact format as long as it contains exactly 12 hex characters with the optional delimiting characters ‘-’, ‘:’, or ‘.’.
31 32 33 34 35 36 37 38 39 |
# File 'lib/eui48.rb', line 31 def EUI48.parse(addr) addr = addr.strip.gsub(/[\-\:\.]/,"") if (addr.length != 12) raise ValidationError, "Must contain exactly 12 hex characters with optional delimiters." elsif (addr =~ /[^0-9a-fA-F\:]/) raise ValidationError, "#{addr} contains invalid characters." end return EUI48.new(addr.to_i(16)) end |
Instance Method Details
#bytes ⇒ Object
bytes returns a list containing each byte of the EUI48 as String.
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/eui48.rb', line 42 def bytes() return [ (@addr >> 40 & 0xff).to_s(16).rjust(2, "0"), (@addr >> 32 & 0xff).to_s(16).rjust(2, "0"), (@addr >> 24 & 0xff).to_s(16).rjust(2, "0"), (@addr >> 16 & 0xff).to_s(16).rjust(2, "0"), (@addr >> 8 & 0xff).to_s(16).rjust(2, "0"), (@addr & 0xff).to_s(16).rjust(2, "0"), ] end |
#to_eui64 ⇒ Object
to_eui64 converts this EUI48 into an EUI64 by inserting 0xfffe between the first and last 24-bits of the address.
55 56 57 |
# File 'lib/eui48.rb', line 55 def to_eui64() return EUI64.new((@addr & 0xffffff000000) << 16 | (@addr & 0x000000ffffff) | 0x000000fffe000000) end |
#to_s ⇒ Object
59 60 61 |
# File 'lib/eui48.rb', line 59 def to_s() return self.bytes.join("-") end |