openflow-protocol 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openflow-protocol.rb +2 -1
  3. data/lib/openflow-protocol/actions/action.rb +30 -0
  4. data/lib/openflow-protocol/actions/action_enqueue.rb +16 -0
  5. data/lib/openflow-protocol/actions/action_output.rb +14 -0
  6. data/lib/openflow-protocol/actions/action_set_destination_port.rb +7 -0
  7. data/lib/openflow-protocol/actions/action_set_ip_destination.rb +7 -0
  8. data/lib/openflow-protocol/actions/action_set_ip_source.rb +13 -0
  9. data/lib/openflow-protocol/actions/action_set_ip_tos.rb +15 -0
  10. data/lib/openflow-protocol/actions/action_set_mac_destination.rb +7 -0
  11. data/lib/openflow-protocol/actions/action_set_mac_source.rb +15 -0
  12. data/lib/openflow-protocol/actions/action_set_source_port.rb +15 -0
  13. data/lib/openflow-protocol/actions/action_set_vlan_id.rb +15 -0
  14. data/lib/openflow-protocol/actions/action_set_vlan_pcp.rb +15 -0
  15. data/lib/openflow-protocol/actions/action_strip_vlan.rb +14 -0
  16. data/lib/openflow-protocol/actions/action_vendor.rb +13 -0
  17. data/lib/openflow-protocol/actions/actions.rb +9 -0
  18. data/lib/openflow-protocol/helpers/array_of_subclasses.rb +42 -0
  19. data/lib/openflow-protocol/helpers/superclass_base.rb +26 -0
  20. data/lib/openflow-protocol/messages/barrier_reply.rb +7 -0
  21. data/lib/openflow-protocol/messages/barrier_request.rb +7 -0
  22. data/lib/openflow-protocol/messages/echo_reply.rb +13 -0
  23. data/lib/openflow-protocol/messages/echo_request.rb +13 -0
  24. data/lib/openflow-protocol/messages/error.rb +69 -0
  25. data/lib/openflow-protocol/messages/features_reply.rb +44 -0
  26. data/lib/openflow-protocol/messages/features_request.rb +7 -0
  27. data/lib/openflow-protocol/messages/flow_mod.rb +24 -0
  28. data/lib/openflow-protocol/messages/flow_removed.rb +27 -0
  29. data/lib/openflow-protocol/messages/get_config_reply.rb +16 -0
  30. data/lib/openflow-protocol/messages/get_config_request.rb +7 -0
  31. data/lib/openflow-protocol/messages/hello.rb +7 -0
  32. data/lib/openflow-protocol/messages/message.rb +49 -0
  33. data/lib/openflow-protocol/messages/packet_in.rb +27 -0
  34. data/lib/openflow-protocol/messages/packet_out.rb +17 -0
  35. data/lib/openflow-protocol/messages/parser.rb +26 -0
  36. data/lib/openflow-protocol/messages/port_mod.rb +19 -0
  37. data/lib/openflow-protocol/messages/port_status.rb +18 -0
  38. data/lib/openflow-protocol/messages/queue_get_config_reply.rb +18 -0
  39. data/lib/openflow-protocol/messages/queue_get_config_request.rb +15 -0
  40. data/lib/openflow-protocol/messages/set_config.rb +7 -0
  41. data/lib/openflow-protocol/messages/statistics.rb +28 -0
  42. data/lib/openflow-protocol/messages/statistics/aggregate_statistics_reply.rb +14 -0
  43. data/lib/openflow-protocol/messages/statistics/aggregate_statistics_request.rb +7 -0
  44. data/lib/openflow-protocol/messages/statistics/description_statistics.rb +32 -0
  45. data/lib/openflow-protocol/messages/statistics/flow_statistics_reply.rb +25 -0
  46. data/lib/openflow-protocol/messages/statistics/flow_statistics_request.rb +14 -0
  47. data/lib/openflow-protocol/messages/statistics/port_statistics_reply.rb +24 -0
  48. data/lib/openflow-protocol/messages/statistics/port_statistics_request.rb +12 -0
  49. data/lib/openflow-protocol/messages/statistics/queue_statistics_reply.rb +16 -0
  50. data/lib/openflow-protocol/messages/statistics/queue_statistics_request.rb +13 -0
  51. data/lib/openflow-protocol/messages/statistics/table_statistics.rb +20 -0
  52. data/lib/openflow-protocol/messages/statistics/vendor_statistics.rb +11 -0
  53. data/lib/openflow-protocol/messages/statistics_reply.rb +26 -0
  54. data/lib/openflow-protocol/messages/statistics_request.rb +18 -0
  55. data/lib/openflow-protocol/messages/vendor.rb +14 -0
  56. data/lib/openflow-protocol/structs/match.rb +106 -0
  57. data/lib/openflow-protocol/structs/packet_queue.rb +14 -0
  58. data/lib/openflow-protocol/structs/physical_port.rb +50 -0
  59. data/lib/openflow-protocol/structs/port_number.rb +49 -0
  60. data/lib/openflow-protocol/structs/queue_properties/queue_properties.rb +9 -0
  61. data/lib/openflow-protocol/structs/queue_properties/queue_property.rb +20 -0
  62. data/lib/openflow-protocol/structs/queue_properties/queue_property_min_rate.rb +30 -0
  63. data/lib/openflow-protocol/structs/queue_properties/queue_property_none.rb +7 -0
  64. data/lib/openflow-protocol/version.rb +1 -1
  65. data/spec/actions/action_enqueue_spec.rb +4 -6
  66. data/spec/actions/action_output_spec.rb +4 -6
  67. data/spec/actions/action_set_destination_port_spec.rb +4 -6
  68. data/spec/actions/action_set_ip_destination_spec.rb +4 -6
  69. data/spec/actions/action_set_ip_source_spec.rb +4 -6
  70. data/spec/actions/action_set_ip_tos_spec.rb +4 -6
  71. data/spec/actions/action_set_mac_destination_spec.rb +4 -6
  72. data/spec/actions/action_set_mac_source_spec.rb +4 -6
  73. data/spec/actions/action_set_source_port_spec.rb +4 -6
  74. data/spec/actions/action_set_vlan_id_spec.rb +4 -6
  75. data/spec/actions/action_set_vlan_pcp_spec.rb +4 -6
  76. data/spec/actions/action_strip_vlan_spec.rb +3 -5
  77. data/spec/actions/action_vendor_spec.rb +4 -6
  78. data/spec/actions/actions_spec.rb +6 -8
  79. data/spec/messages/barrier_reply_spec.rb +9 -11
  80. data/spec/messages/barrier_request_spec.rb +9 -11
  81. data/spec/messages/echo_reply_spec.rb +13 -15
  82. data/spec/messages/echo_request_spec.rb +16 -18
  83. data/spec/messages/error_spec.rb +23 -20
  84. data/spec/messages/features_reply_spec.rb +11 -13
  85. data/spec/messages/features_request_spec.rb +9 -11
  86. data/spec/messages/flow_mod_spec.rb +12 -14
  87. data/spec/messages/flow_removed_spec.rb +9 -11
  88. data/spec/messages/get_config_reply_spec.rb +9 -11
  89. data/spec/messages/get_config_request_spec.rb +9 -11
  90. data/spec/messages/hello_spec.rb +9 -11
  91. data/spec/messages/packet_in_spec.rb +9 -11
  92. data/spec/messages/packet_out_spec.rb +10 -12
  93. data/spec/messages/parser_spec.rb +7 -9
  94. data/spec/messages/port_mod_spec.rb +9 -11
  95. data/spec/messages/port_status_spec.rb +10 -12
  96. data/spec/messages/queue_get_config_reply_spec.rb +9 -11
  97. data/spec/messages/queue_get_config_request_spec.rb +9 -11
  98. data/spec/messages/set_config_spec.rb +9 -11
  99. data/spec/messages/statistics/aggregate_statistics_reply_spec.rb +4 -6
  100. data/spec/messages/statistics/aggregate_statistics_request_spec.rb +4 -6
  101. data/spec/messages/statistics/description_statistics_spec.rb +11 -9
  102. data/spec/messages/statistics/flow_statistics_reply_spec.rb +4 -6
  103. data/spec/messages/statistics/flow_statistics_request_spec.rb +4 -6
  104. data/spec/messages/statistics/port_statistics_reply_spec.rb +4 -6
  105. data/spec/messages/statistics/port_statistics_request_spec.rb +4 -6
  106. data/spec/messages/statistics/queue_statistics_reply_spec.rb +4 -6
  107. data/spec/messages/statistics/queue_statistics_request_spec.rb +4 -6
  108. data/spec/messages/statistics/table_statistics_spec.rb +4 -6
  109. data/spec/messages/statistics/vendor_statistics_spec.rb +4 -6
  110. data/spec/messages/statistics_reply_spec.rb +62 -64
  111. data/spec/messages/statistics_request_spec.rb +45 -47
  112. data/spec/messages/vendor_spec.rb +13 -15
  113. data/spec/spec_helper.rb +1 -1
  114. data/spec/structs/match_spec.rb +7 -9
  115. data/spec/structs/packet_queue_spec.rb +5 -7
  116. data/spec/structs/physical_port_spec.rb +16 -18
  117. data/spec/structs/port_number_spec.rb +11 -13
  118. data/spec/structs/queue_properties/queue_properties_spec.rb +5 -7
  119. data/spec/structs/queue_properties/queue_property_min_rate_spec.rb +5 -7
  120. data/spec/structs/queue_properties/queue_property_none_spec.rb +3 -5
  121. metadata +78 -64
  122. data/lib/actions/action.rb +0 -26
  123. data/lib/actions/action_enqueue.rb +0 -12
  124. data/lib/actions/action_output.rb +0 -10
  125. data/lib/actions/action_set_destination_port.rb +0 -3
  126. data/lib/actions/action_set_ip_destination.rb +0 -3
  127. data/lib/actions/action_set_ip_source.rb +0 -9
  128. data/lib/actions/action_set_ip_tos.rb +0 -11
  129. data/lib/actions/action_set_mac_destination.rb +0 -3
  130. data/lib/actions/action_set_mac_source.rb +0 -11
  131. data/lib/actions/action_set_source_port.rb +0 -11
  132. data/lib/actions/action_set_vlan_id.rb +0 -11
  133. data/lib/actions/action_set_vlan_pcp.rb +0 -11
  134. data/lib/actions/action_strip_vlan.rb +0 -10
  135. data/lib/actions/action_vendor.rb +0 -9
  136. data/lib/actions/actions.rb +0 -5
  137. data/lib/helpers/array_of_subclasses.rb +0 -38
  138. data/lib/helpers/superclass_base.rb +0 -24
  139. data/lib/messages/barrier_reply.rb +0 -3
  140. data/lib/messages/barrier_request.rb +0 -3
  141. data/lib/messages/echo_reply.rb +0 -9
  142. data/lib/messages/echo_request.rb +0 -9
  143. data/lib/messages/error.rb +0 -61
  144. data/lib/messages/features_reply.rb +0 -40
  145. data/lib/messages/features_request.rb +0 -3
  146. data/lib/messages/flow_mod.rb +0 -20
  147. data/lib/messages/flow_removed.rb +0 -23
  148. data/lib/messages/get_config_reply.rb +0 -12
  149. data/lib/messages/get_config_request.rb +0 -3
  150. data/lib/messages/hello.rb +0 -3
  151. data/lib/messages/message.rb +0 -45
  152. data/lib/messages/packet_in.rb +0 -23
  153. data/lib/messages/packet_out.rb +0 -13
  154. data/lib/messages/parser.rb +0 -22
  155. data/lib/messages/port_mod.rb +0 -15
  156. data/lib/messages/port_status.rb +0 -14
  157. data/lib/messages/queue_get_config_reply.rb +0 -14
  158. data/lib/messages/queue_get_config_request.rb +0 -11
  159. data/lib/messages/set_config.rb +0 -3
  160. data/lib/messages/statistics.rb +0 -24
  161. data/lib/messages/statistics/aggregate_statistics_reply.rb +0 -10
  162. data/lib/messages/statistics/aggregate_statistics_request.rb +0 -3
  163. data/lib/messages/statistics/description_statistics.rb +0 -28
  164. data/lib/messages/statistics/flow_statistics_reply.rb +0 -21
  165. data/lib/messages/statistics/flow_statistics_request.rb +0 -10
  166. data/lib/messages/statistics/port_statistics_reply.rb +0 -20
  167. data/lib/messages/statistics/port_statistics_request.rb +0 -8
  168. data/lib/messages/statistics/queue_statistics_reply.rb +0 -12
  169. data/lib/messages/statistics/queue_statistics_request.rb +0 -9
  170. data/lib/messages/statistics/table_statistics.rb +0 -16
  171. data/lib/messages/statistics/vendor_statistics.rb +0 -7
  172. data/lib/messages/statistics_reply.rb +0 -22
  173. data/lib/messages/statistics_request.rb +0 -14
  174. data/lib/messages/vendor.rb +0 -10
  175. data/lib/structs/match.rb +0 -102
  176. data/lib/structs/packet_queue.rb +0 -10
  177. data/lib/structs/physical_port.rb +0 -46
  178. data/lib/structs/port_number.rb +0 -45
  179. data/lib/structs/queue_properties/queue_properties.rb +0 -5
  180. data/lib/structs/queue_properties/queue_property.rb +0 -16
  181. data/lib/structs/queue_properties/queue_property_min_rate.rb +0 -26
  182. data/lib/structs/queue_properties/queue_property_none.rb +0 -3
@@ -1,3 +0,0 @@
1
- require_relative 'action_set_mac_source'
2
-
3
- class OFActionSetMacDestination < OFActionSetMacSource; end
@@ -1,11 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionSetMacSource < OFAction
4
- mac_address :mac_address
5
- uint48 :padding
6
- hide :padding
7
-
8
- def body_length
9
- 12
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionSetSourcePort < OFAction
4
- uint16 :port, initial_value: 0
5
- uint16 :padding
6
- hide :padding
7
-
8
- def body_length
9
- 4
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionSetVlanId < OFAction
4
- uint16 :vlan_id, initial_value: 0
5
- uint16 :padding
6
- hide :padding
7
-
8
- def body_length
9
- 4
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionSetVlanPcp < OFAction
4
- uint8 :vlan_pcp, initial_value: 0
5
- uint24 :padding
6
- hide :padding
7
-
8
- def body_length
9
- 4
10
- end
11
- end
@@ -1,10 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionStripVlan < OFAction
4
- uint32 :padding
5
- hide :padding
6
-
7
- def body_length
8
- 4
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- require_relative 'action'
2
-
3
- class OFActionVendor < OFAction
4
- uint32 :vendor, initial_value: 0
5
-
6
- def body_length
7
- 4
8
- end
9
- end
@@ -1,5 +0,0 @@
1
- Dir[File.expand_path 'action_*.rb', __dir__].each do |file|
2
- require file
3
- end
4
-
5
- class OFActions < ArrayOfSubclasses; end
@@ -1,38 +0,0 @@
1
- require 'bindata'
2
-
3
- class ArrayOfSubclasses < BinData::Primitive
4
- default_parameter length: 0
5
- endian :big
6
- string :binary, read_length: :length
7
-
8
- def get
9
- items = []
10
- tmp = binary
11
- until tmp.empty?
12
- type_index = BinData::Uint16be.read(tmp)
13
- type_str = types.fetch(type_index)
14
- class_name = name + type_str.to_s.split('_').map(&:capitalize).join
15
- klass = Object.const_get class_name
16
- item = klass.read(tmp)
17
- items << item
18
- tmp = tmp[item.len..-1]
19
- end
20
- items
21
- end
22
-
23
- def set(value)
24
- self.binary = value.map(&:to_binary_s).join
25
- end
26
-
27
- private
28
-
29
- def name
30
- plural = self.class.to_s
31
- return plural[0..-4] + 'y' if plural[-3..-1] == 'ies'
32
- plural[0..-2]
33
- end
34
-
35
- def types
36
- Object.const_get(name + '::TYPES')
37
- end
38
- end
@@ -1,24 +0,0 @@
1
- require 'bindata'
2
- require 'bindata-contrib'
3
-
4
- class SuperclassBase < BinData::Record
5
- attr_reader :type_str
6
-
7
- endian :big
8
-
9
- def initialize_instance
10
- super
11
- if self.class.name[2..7] == 'Action'
12
- name = self.class.name[8..-1]
13
- elsif self.class.name[2..14] == 'QueueProperty'
14
- name = self.class.name[15..-1]
15
- else
16
- name = self.class.name[2..-1]
17
- end
18
- @type_str = name.gsub(/([A-Z])/, '_\1')[1..-1].downcase
19
- end
20
-
21
- def body_length
22
- 0
23
- end
24
- end
@@ -1,3 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFBarrierReply < OFMessage; end
@@ -1,3 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFBarrierRequest < OFMessage; end
@@ -1,9 +0,0 @@
1
- require_relative 'echo_request'
2
-
3
- class OFEchoReply < OFEchoRequest; end
4
-
5
- class OFEchoRequest
6
- def to_reply
7
- OFEchoReply.new(xid: xid, data: data.dup)
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFEchoRequest < OFMessage
4
- rest :data
5
-
6
- def body_length
7
- data.length
8
- end
9
- end
@@ -1,61 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFError < OFMessage
4
- TYPES = [
5
- :hello_failed,
6
- :bad_request,
7
- :bad_action,
8
- :flow_mod_failed,
9
- :port_mod_failed,
10
- :queue_op_failed
11
- ]
12
- HELLO_FAILED_CODES = [:incompatible, :eperm]
13
- BAD_REQUEST_CODES = [
14
- :bad_version,
15
- :bad_type,
16
- :bad_stat,
17
- :bad_vendor,
18
- :bad_sub_type,
19
- :eperm,
20
- :bad_length,
21
- :buffer_empty,
22
- :buffer_unknown
23
- ]
24
- BAD_ACTION_CODES = [
25
- :bad_type,
26
- :bad_length,
27
- :bad_vendor,
28
- :bad_vendor_type,
29
- :bad_out_port,
30
- :bad_argument,
31
- :eperm,
32
- :too_many,
33
- :bad_queue
34
- ]
35
- FLOW_MOD_FAILED_CODES = [
36
- :all_tables_full,
37
- :overlap,
38
- :eperm,
39
- :bad_emerg_timeout,
40
- :bad_command,
41
- :unsupported
42
- ]
43
- PORT_MOD_FAILED_CODES = [:bad_port, :bad_hardware_address]
44
- QUEUE_OP_FAILED_CODES = [:bad_port, :bad_queue, :eperm]
45
-
46
- enum16 :error_type, list: TYPES
47
- choice :error_code, selection: -> { error_type.to_s } do
48
- enum16 'hello_failed', list: HELLO_FAILED_CODES
49
- enum16 'bad_request', list: BAD_REQUEST_CODES
50
- enum16 'bad_action', list: BAD_ACTION_CODES
51
- enum16 'flow_mod_failed', list: FLOW_MOD_FAILED_CODES
52
- enum16 'port_mod_failed', list: PORT_MOD_FAILED_CODES
53
- enum16 'queue_op_failed', list: QUEUE_OP_FAILED_CODES
54
- uint16 :default
55
- end
56
- rest :data
57
-
58
- def body_length
59
- 4 + data.length
60
- end
61
- end
@@ -1,40 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFFeaturesReply < OFMessage
4
- uint64 :datapath_id, initial_value: 0
5
- uint32 :n_buffers, initial_value: 0
6
- uint8 :n_tables, initial_value: 0
7
- uint24 :padding
8
- hide :padding
9
- flags32 :capabilities, list: [
10
- :flow_stats,
11
- :table_stats,
12
- :port_stats,
13
- :stp,
14
- :reserved,
15
- :ip_reasm,
16
- :queue_stats,
17
- :arp_match_ip
18
- ]
19
- flags32 :actions, list: [
20
- :output,
21
- :set_vlan_vid,
22
- :set_vlan_pcp,
23
- :strip_vlan,
24
- :set_dl_src,
25
- :set_dl_dst,
26
- :set_nw_src,
27
- :set_nw_dst,
28
- :set_nw_tos,
29
- :set_tp_src,
30
- :set_tp_dst,
31
- :enqueue
32
- ]
33
- array :ports,
34
- type: :of_physical_port,
35
- initial_length: -> { (len - ports.rel_offset) / 48 }
36
-
37
- def body_length
38
- 24 + ports.to_binary_s.length
39
- end
40
- end
@@ -1,3 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFFeaturesRequest < OFMessage; end
@@ -1,20 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFFlowMod < OFMessage
4
- of_match :match
5
- uint64 :cookie, initial_value: 0
6
- enum16 :command, list: [:add, :modify, :modify_strict, :delete, :delete_strict]
7
- uint16 :idle_timeout, initial_value: 0
8
- uint16 :hard_timeout, initial_value: 0
9
- uint16 :priority, initial_value: 0
10
- enum32 :buffer_id, list: {none: 0xffffffff}, initial_value: -> { :none }
11
- of_port_number :out_port, initial_value: (lambda do
12
- /^delete/ =~ command.to_s ? :none : 0
13
- end)
14
- flags16 :flags, list: [:send_flow_removed, :check_overlapping, :emergency]
15
- of_actions :actions, length: -> { len - actions.rel_offset }
16
-
17
- def body_length
18
- 64 + actions.to_binary_s.length
19
- end
20
- end
@@ -1,23 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFFlowRemoved < OFMessage
4
- REASONS = [:idle_timeout, :hard_timeout, :delete]
5
-
6
- of_match :match
7
- uint64 :cookie, initial_value: 0
8
- uint16 :priority, initial_value: 0
9
- enum8 :reason, list: REASONS
10
- uint8 :padding
11
- hide :padding
12
- uint32 :duration_seconds, initial_value: 0
13
- uint32 :duration_nanoseconds, initial_value: 0
14
- uint16 :idle_timeout, initial_value: 0
15
- uint16 :padding2
16
- hide :padding2
17
- uint64 :packet_count, initial_value: 0
18
- uint64 :byte_count, initial_value: 0
19
-
20
- def body_length
21
- 80
22
- end
23
- end
@@ -1,12 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFGetConfigReply < OFMessage
4
- FLAGS = [:fragments_normal, :fragments_drop, :fragments_reassemble]
5
-
6
- enum16 :flags, list: FLAGS
7
- uint16 :miss_send_length, initial_value: 0
8
-
9
- def body_length
10
- 4
11
- end
12
- end
@@ -1,3 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFGetConfigRequest < OFMessage; end
@@ -1,3 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFHello < OFMessage; end
@@ -1,45 +0,0 @@
1
- (Dir[File.expand_path '../helpers/**/*.rb', __dir__] +
2
- Dir[File.expand_path '../structs/**/*.rb', __dir__] +
3
- Dir[File.expand_path '../actions/**/*.rb', __dir__] +
4
- Dir[File.expand_path 'statistics/**/*.rb', __dir__]).each do |file|
5
- require file
6
- end
7
-
8
- # TODO: use OFPT_, OFPP_, OFPQ_, ... in place of Symbols?
9
- # check: https://github.com/noxrepo/pox/blob/carp/pox/openflow/libopenflow_01.py
10
- # -> see decorators
11
- # ruby decorators: https://github.com/fredwu/ruby_decorators
12
-
13
- class OFMessage < SuperclassBase
14
- OFP_VERSION = 0x1
15
- HEADER_LENGTH = 8
16
- TYPES = [
17
- :hello,
18
- :error,
19
- :echo_request,
20
- :echo_reply,
21
- :vendor,
22
- :features_request,
23
- :features_reply,
24
- :get_config_request,
25
- :get_config_reply,
26
- :set_config,
27
- :packet_in,
28
- :flow_removed,
29
- :port_status,
30
- :packet_out,
31
- :flow_mod,
32
- :port_mod,
33
- :statistics_request,
34
- :statistics_reply,
35
- :barrier_request,
36
- :barrier_reply,
37
- :queue_get_config_request, # TODO
38
- :queue_get_config_reply # TODO
39
- ]
40
-
41
- uint8 :version, asserted_value: OFP_VERSION
42
- enum8 :type, list: TYPES, asserted_value: -> { type_str.to_sym }
43
- uint16 :len, value: -> { HEADER_LENGTH + body_length }
44
- uint32 :xid, initial_value: 0
45
- end
@@ -1,23 +0,0 @@
1
- require 'packet-protocols'
2
- require_relative 'message'
3
-
4
- class OFPacketIn < OFMessage
5
- REASONS = [:no_match, :action]
6
-
7
- enum32 :buffer_id, list: {none: 0xffffffff}, initial_value: -> { :none }
8
- uint16 :total_length, value: -> { data.length }
9
- of_port_number :in_port
10
- enum8 :reason, list: REASONS
11
- uint8 :padding
12
- hide :padding
13
- string :data, read_length: :total_length
14
-
15
- def body_length
16
- 10 + data.length
17
- end
18
-
19
- def parsed_data
20
- @parsed_data ||= Ethernet.read(data)
21
- @parsed_data
22
- end
23
- end
@@ -1,13 +0,0 @@
1
- require_relative 'message'
2
-
3
- class OFPacketOut < OFMessage
4
- enum32 :buffer_id, list: {none: 0xffffffff}, initial_value: -> { :none }
5
- of_port_number :in_port
6
- uint16 :actions_length, value: -> { actions.to_binary_s.length }
7
- of_actions :actions, length: -> { actions_length }
8
- string :data, read_length: -> { len - data.rel_offset }
9
-
10
- def body_length
11
- 8 + actions_length + data.length
12
- end
13
- end