Class: Pcap::LACPPacket
- Defined in:
- lib/pcap/packet.rb,
ext/pcap/slow_protocol_packet.c
Overview
LACP frames
Constant Summary collapse
- LACP_ACTIVITY =
0x01- LACP_TIMEOUT =
0x02- LACP_AGGR =
0x04- LACP_SYNC =
0x08- LACP_COLLECTING =
0x10- LACP_DISTR =
0x20- LACP_DEFAULTED =
0x40- LACP_EXPIRED =
0x80
Instance Method Summary collapse
-
#actor_flags ⇒ Object
return Actor LACP flags in human readable form.
-
#actor_info ⇒ Object
return LACP Actor TLV.
-
#parse_flags(flags) ⇒ Object
parse LACP flags based on 802.3ad-2000.
-
#partner_flags ⇒ Object
return Actor LACP flags in human readable form.
-
#partner_info ⇒ Object
return LACP Partner TLV.
-
#version ⇒ Object
return LACP Version.
Methods inherited from SPPacket
Methods inherited from Packet
#=~, #_dump, #_dump_to, _load, _load_from, #arp?, #caplen, #datalink, #dst_mac_address, #ethertype, #inspect, #ip?, #ipv6?, #lacp?, #length, #raw_data, #size, #src_mac_address, #tcp?, #time, #time_i, #time_i=, #to_s, #udata, #udata=, #udp?, #unpack_hex_string
Instance Method Details
#actor_flags ⇒ Object
return Actor LACP flags in human readable form
121 122 123 |
# File 'lib/pcap/packet.rb', line 121 def actor_flags parse_flags(actor_info['Actor State']) end |
#actor_info ⇒ Object
return LACP Actor TLV
131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/pcap/packet.rb', line 131 def actor_info # throw error if 1st TLV is not Actor raise 'error in actor TLV' if raw_data[16].unpack('C')[0] != 1 { 'Actor System Priority' => raw_data[18,19].unpack('n')[0], 'Actor System Id' => unpack_hex_string(raw_data[20, 26]), 'Actor Key' => raw_data[26,27].unpack('n')[0], 'Actor Port Priority' => raw_data[28,29].unpack('n')[0], 'Actor Port' => raw_data[30,31].unpack('n')[0], 'Actor State' => raw_data[32].unpack('C')[0].to_i } end |
#parse_flags(flags) ⇒ Object
parse LACP flags based on 802.3ad-2000
161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/pcap/packet.rb', line 161 def parse_flags(flags) { 'Activity' => (LACP_ACTIVITY & flags).zero? ? 'Passive' : 'Active', 'Timeout' => (LACP_TIMEOUT & flags).zero? ? 'Long' : 'Short', 'Aggregation' => (LACP_AGGR & flags).zero? ? 'Individual' : 'Aggregatable', 'Synchronization' => (LACP_SYNC & flags).zero? ? 'OutSync' : 'InSync', 'Collecting' => (LACP_COLLECTING & flags).zero? ? 'NotCollecting' : 'Collecting', 'Distributing' => (LACP_DISTR & flags).zero? ? 'NotDistributing' : 'Distributing', 'Defaulted' => (LACP_DEFAULTED & flags).zero? ? 'RecvPartner' : 'DefaultPartner', 'Expired' => (LACP_EXPIRED & flags).zero? ? 'NotExpired' : 'Expired' } end |
#partner_flags ⇒ Object
return Actor LACP flags in human readable form
126 127 128 |
# File 'lib/pcap/packet.rb', line 126 def partner_flags parse_flags(partner_info['Partner State']) end |
#partner_info ⇒ Object
return LACP Partner TLV
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/pcap/packet.rb', line 144 def partner_info # throw error if 2nd TLV is not Partner actor_tlv_len = raw_data[17].unpack('C')[0] base = 16 + actor_tlv_len raise 'error in partner TLV' if raw_data[base].unpack('C')[0] != 2 base += 2 { 'Partner System Priority' => raw_data[base, base + 1].unpack('n')[0], 'Partner System Id' => unpack_hex_string(raw_data[base + 2, base + 7]), 'Partner Key' => raw_data[base + 8,base + 9].unpack('n')[0], 'Partner Port Priority' => raw_data[base + 10,base + 11].unpack('n')[0], 'Partner Port' => raw_data[base + 12,base + 13].unpack('n')[0], 'Partner State' => raw_data[base + 14].unpack('C')[0].to_i } end |
#version ⇒ Object
return LACP Version
116 117 118 |
# File 'lib/pcap/packet.rb', line 116 def version raw_data[15].unpack('C')[0] end |