lib/pio/lldp/frame.rb in pio-0.1.1 vs lib/pio/lldp/frame.rb in pio-0.2.1
- old
+ new
@@ -1,31 +1,80 @@
require "rubygems"
require "bindata"
require "pio/lldp/chassis-id-tlv"
-require "pio/lldp/mac-address"
require "pio/lldp/optional-tlv"
require "pio/lldp/port-id-tlv"
require "pio/lldp/ttl-tlv"
+require "pio/type/ethernet-header"
module Pio
class Lldp
# LLDP frame
class Frame < BinData::Record
+ extend Type::EthernetHeader
+
endian :big
- mac_address :destination_mac
- mac_address :source_mac
- uint16 :ethertype, :value => 0x88cc
+ ethernet_header :ether_type => 0x88cc
chassis_id_tlv :chassis_id
port_id_tlv :port_id
ttl_tlv :ttl, :initial_value => 120
array :optional_tlv, :type => :optional_tlv, :read_until => lambda { element.end_of_lldpdu? }
def dpid
chassis_id
+ end
+
+
+ def port_description
+ get_tlv_field 4, "port_description"
+ end
+
+
+ def system_name
+ get_tlv_field 5, "system_name"
+ end
+
+
+ def system_description
+ get_tlv_field 6, "system_description"
+ end
+
+
+ def system_capabilities
+ get_tlv 7
+ end
+
+
+ def management_address
+ get_tlv_field 8, "management_address"
+ end
+
+
+ def organizationally_specific
+ get_tlv 127
+ end
+
+
+ ##########################################################################
+ private
+ ##########################################################################
+
+
+ def get_tlv tlv_type
+ tlv = optional_tlv.find do | each |
+ each[ "tlv_type" ] == tlv_type
+ end
+ tlv[ "tlv_value" ] if tlv
+ end
+
+
+ def get_tlv_field tlv_type, name
+ tlv = get_tlv( tlv_type )
+ tlv[ name ] if tlv
end
end
end
end