class NetAddr::EUI48
EUI48
(Extended Unique Identifier 48-bit, or EUI-48) represents a 48-bit hardware address. It is typically associated with mac-addresses.
Attributes
addr[R]
addr is the Integer representation of this EUI
Public Class Methods
new(i)
click to toggle source
Create an EUI48
from an Integer. Must be between 0 and 2**48-1. Throws ValidationError
on error.
# 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
parse(addr)
click to toggle source
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 ‘.’.
# 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
Public Instance Methods
bytes()
click to toggle source
bytes returns a list containing each byte of the EUI48
as String.
# 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()
click to toggle source
to_s()
click to toggle source
# File lib/eui48.rb, line 59 def to_s() return self.bytes.join("-") end