File tree Expand file tree Collapse file tree 3 files changed +60
-1
lines changed Expand file tree Collapse file tree 3 files changed +60
-1
lines changed Original file line number Diff line number Diff line change @@ -201,6 +201,8 @@ def decode(payload, &block)
201
201
202
202
event [ @target ] [ 'flowset_id' ] = record . flowset_id
203
203
204
+ mpls_stack_ended = false
205
+
204
206
r . each_pair do |k , v |
205
207
case k . to_s
206
208
when /_switched$/
@@ -209,6 +211,15 @@ def decode(payload, &block)
209
211
# v9 did away with the nanosecs field
210
212
micros = 1000000 - ( millis % 1000 )
211
213
event [ @target ] [ k . to_s ] = Time . at ( seconds , micros ) . utc . strftime ( "%Y-%m-%dT%H:%M:%S.%3NZ" )
214
+ when /^mpls_label_\d +$/
215
+ event [ @target ] [ "mpls_label_stack" ] ||= [ ]
216
+ unless mpls_stack_ended
217
+ event [ @target ] [ "mpls_label_stack" ] << {
218
+ "label" => v . label ,
219
+ "traffic_class" => v . traffic_class
220
+ }
221
+ mpls_stack_ended = ! v . end_of_stack . zero?
222
+ end
212
223
else
213
224
event [ @target ] [ k . to_s ] = v
214
225
end
Original file line number Diff line number Diff line change 137
137
- :uint8
138
138
- :mpls_top_label_type
139
139
47 :
140
- - :uint32
140
+ - :ip4_addr
141
141
- :mpls_top_label_ip_addr
142
142
48 :
143
143
- 4
201
201
- :skip
202
202
69 :
203
203
- :skip
204
+ 70 :
205
+ - :mpls_stack_entry
206
+ - :mpls_label_1
207
+ 71 :
208
+ - :mpls_stack_entry
209
+ - :mpls_label_2
210
+ 72 :
211
+ - :mpls_stack_entry
212
+ - :mpls_label_3
213
+ 73 :
214
+ - :mpls_stack_entry
215
+ - :mpls_label_4
216
+ 74 :
217
+ - :mpls_stack_entry
218
+ - :mpls_label_5
219
+ 75 :
220
+ - :mpls_stack_entry
221
+ - :mpls_label_6
222
+ 76 :
223
+ - :mpls_stack_entry
224
+ - :mpls_label_7
225
+ 77 :
226
+ - :mpls_stack_entry
227
+ - :mpls_label_8
228
+ 78 :
229
+ - :mpls_stack_entry
230
+ - :mpls_label_9
231
+ 79 :
232
+ - :mpls_stack_entry
233
+ - :mpls_label_10
204
234
80 :
205
235
- :mac_addr
206
236
- :in_dst_mac
Original file line number Diff line number Diff line change @@ -51,6 +51,24 @@ def get
51
51
end
52
52
end
53
53
54
+ # The three-bit field was originally labeled 'Experimental',
55
+ # but has since been re-named to Traffic Class (see RFC 5642)
56
+ class MplsStackEntry < BinData ::Record
57
+ endian :big
58
+
59
+ bit20 :label
60
+ bit3 :traffic_class
61
+ bit1 :end_of_stack
62
+
63
+ def to_i
64
+ self . label
65
+ end
66
+
67
+ def to_s
68
+ self . label . to_s
69
+ end
70
+ end
71
+
54
72
class Header < BinData ::Record
55
73
endian :big
56
74
uint16 :version
You can’t perform that action at this time.
0 commit comments