rubybvc 0.3.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/controller/controller.rb +189 -3
  3. data/lib/controller/netconf_node.rb +27 -3
  4. data/lib/controller/node.rb +7 -0
  5. data/lib/controller/openflow_node.rb +3 -1
  6. data/lib/netconfdev/vrouter/firewall.rb +6 -1
  7. data/lib/netconfdev/vrouter/rule.rb +16 -3
  8. data/lib/netconfdev/vrouter/rules.rb +18 -2
  9. data/lib/netconfdev/vrouter/vrouter5600.rb +123 -16
  10. data/lib/openflowdev/action_output.rb +37 -3
  11. data/lib/openflowdev/actions/action.rb +1 -0
  12. data/lib/openflowdev/actions/copy_ttl_inwards_action.rb +4 -0
  13. data/lib/openflowdev/actions/copy_ttl_outwards_action.rb +4 -0
  14. data/lib/openflowdev/actions/dec_mpls_ttl_action.rb +4 -0
  15. data/lib/openflowdev/actions/dec_nw_ttl_action.rb +4 -0
  16. data/lib/openflowdev/actions/drop_action.rb +1 -0
  17. data/lib/openflowdev/actions/flood_action.rb +4 -0
  18. data/lib/openflowdev/actions/flood_all_action.rb +4 -0
  19. data/lib/openflowdev/actions/group_action.rb +7 -1
  20. data/lib/openflowdev/actions/hw_path_action.rb +3 -0
  21. data/lib/openflowdev/actions/loopback_action.rb +5 -1
  22. data/lib/openflowdev/actions/output_action.rb +10 -1
  23. data/lib/openflowdev/actions/pop_mpls_header_action.rb +6 -1
  24. data/lib/openflowdev/actions/pop_pbb_header_action.rb +5 -1
  25. data/lib/openflowdev/actions/pop_vlan_header_action.rb +5 -1
  26. data/lib/openflowdev/actions/push_mpls_header_action.rb +6 -1
  27. data/lib/openflowdev/actions/push_pbb_header_action.rb +6 -1
  28. data/lib/openflowdev/actions/push_vlan_header_action.rb +11 -1
  29. data/lib/openflowdev/actions/set_dl_dst_action.rb +6 -1
  30. data/lib/openflowdev/actions/set_dl_src_action.rb +6 -1
  31. data/lib/openflowdev/actions/set_field_action.rb +7 -1
  32. data/lib/openflowdev/actions/set_mpls_ttl_action.rb +6 -1
  33. data/lib/openflowdev/actions/set_nw_dst_action.rb +6 -1
  34. data/lib/openflowdev/actions/set_nw_src_action.rb +6 -1
  35. data/lib/openflowdev/actions/set_nw_ttl_action.rb +6 -1
  36. data/lib/openflowdev/actions/set_queue_action.rb +7 -1
  37. data/lib/openflowdev/actions/set_tp_dst_action.rb +6 -1
  38. data/lib/openflowdev/actions/set_tp_src_action.rb +6 -1
  39. data/lib/openflowdev/actions/set_vlan_cfi_action.rb +6 -1
  40. data/lib/openflowdev/actions/set_vlan_id_action.rb +6 -1
  41. data/lib/openflowdev/actions/set_vlan_pcp_action.rb +6 -1
  42. data/lib/openflowdev/actions/strip_vlan_action.rb +2 -1
  43. data/lib/openflowdev/actions/sw_path_action.rb +5 -1
  44. data/lib/openflowdev/flow_entry.rb +86 -6
  45. data/lib/openflowdev/instruction.rb +12 -1
  46. data/lib/openflowdev/match.rb +119 -9
  47. data/lib/openflowdev/of_switch.rb +94 -3
  48. data/lib/utils/hash_with_compact.rb +1 -1
  49. data/lib/utils/netconf_response.rb +9 -1
  50. data/lib/utils/netconf_response_status.rb +1 -0
  51. data/lib/utils/rest_agent.rb +1 -1
  52. data/lib/utils/utilities.rb +2 -2
  53. metadata +2 -2
@@ -29,19 +29,33 @@
29
29
  # THE POSSIBILITY OF SUCH DAMAGE.
30
30
 
31
31
  require 'controller/openflow_node'
32
+
33
+ # Class that represents an instance of 'OpenFlow Switch' (OpenFlow capable device).
32
34
  class OFSwitch < OpenflowNode
33
35
  require 'json'
34
36
  require 'controller/controller'
35
37
  require 'openflowdev/flow_entry'
36
38
  require 'openflowdev/action_output'
37
39
 
40
+ # String: name of the controller node.
38
41
  attr_reader :name
39
42
 
43
+ # _Parameters_
44
+ # * +controller+:: Controller : Controller object through which the OpenFlow switch is to be controlled.
45
+ # * +name+:: String : Node name of the OpenFlow node.
46
+ # * +dpid+:: String : The OpenFlow datapath identifier for the OpenFlow device I. e.g. admin
47
+
40
48
  def initialize(controller: nil, name: nil, dpid: nil)
41
49
  super(controller: controller, name: name)
42
50
  @dpid = dpid
43
51
  end
44
-
52
+
53
+
54
+ ##
55
+ # Return info about the OpenFlow switch.
56
+ #
57
+ # _Return_ _Value_
58
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and info about the OpenFlow switch.
45
59
  def get_switch_info
46
60
  get_uri = @controller.get_node_operational_uri(self)
47
61
  response = @controller.rest_agent.get_request(get_uri)
@@ -71,6 +85,11 @@ class OFSwitch < OpenflowNode
71
85
  end
72
86
  end
73
87
 
88
+ ##
89
+ # Return a list of OpenFlow features supported by the OpenFlow switch.
90
+ #
91
+ # _Return_ _Value_
92
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and supported features.
74
93
  def get_features_info
75
94
  get_uri = @controller.get_node_operational_uri(self)
76
95
  response = @controller.rest_agent.get_request(get_uri)
@@ -92,6 +111,11 @@ class OFSwitch < OpenflowNode
92
111
  end
93
112
  end
94
113
 
114
+ ##
115
+ # Return a list of ports for the OpenFlow switch.
116
+ #
117
+ # _Return_ _Value_
118
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of ports.
95
119
  def get_ports_list
96
120
  get_uri = @controller.get_node_operational_uri(self)
97
121
  response = @controller.rest_agent.get_request(get_uri)
@@ -109,6 +133,11 @@ class OFSwitch < OpenflowNode
109
133
  end
110
134
  end
111
135
 
136
+ ##
137
+ # Return a brief set of information about each port on the OpenFlow switch.
138
+ #
139
+ # _Return_ _Value_
140
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of ports with brief info for each.
112
141
  def get_ports_brief_info
113
142
  get_uri = @controller.get_node_operational_uri(self)
114
143
  response = @controller.rest_agent.get_request(get_uri)
@@ -131,6 +160,13 @@ class OFSwitch < OpenflowNode
131
160
  end
132
161
  end
133
162
 
163
+ ##
164
+ # Return detailed information about a specific port.
165
+ #
166
+ # _Parameters_
167
+ # * +port+:: Integer : number for the port from the #get_ports_brief_info
168
+ # _Return_ _Value_
169
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and detailed information about the requested port.
134
170
  def get_port_detail_info(port)
135
171
  get_uri = "#{@controller.get_node_operational_uri(self)}/node-connector/"\
136
172
  "#{self.name}:#{port}"
@@ -145,6 +181,13 @@ class OFSwitch < OpenflowNode
145
181
  end
146
182
  end
147
183
 
184
+ ##
185
+ # Add a new flow or modify an existing one.
186
+ #
187
+ # _Parameters_
188
+ # * +flow+:: FlowEntry : the flow definition
189
+ # _Return_ _Value_
190
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and error details (if Status indicates an error).
148
191
  def add_modify_flow(flow)
149
192
  put_uri = "#{@controller.get_node_config_uri(self)}/table/#{flow.table_id}/"\
150
193
  "flow/#{flow.id}"
@@ -157,6 +200,14 @@ class OFSwitch < OpenflowNode
157
200
  end
158
201
  end
159
202
 
203
+ ##
204
+ # Return details of a specific flow.
205
+ #
206
+ # _Parameters_
207
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to retrieve the flow
208
+ # * +flow_id+:: String : the identifier for the flow to retrieve.
209
+ # _Return_ _Value_
210
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and details about the requested flow.
160
211
  def get_configured_flow(table_id: nil, flow_id: nil)
161
212
  raise ArgumentError, "Table ID (table_id) required" unless table_id
162
213
  raise ArgumentError, "Flow ID (flow_id) required" unless flow_id
@@ -168,6 +219,14 @@ class OFSwitch < OpenflowNode
168
219
  end
169
220
  end
170
221
 
222
+ ##
223
+ # Remove a flow.
224
+ #
225
+ # _Parameters_
226
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to remove the flow
227
+ # * +flow_id+:: String : the identifier for the flow to remove.
228
+ # _Return_ _Value_
229
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and details on error (if Status indicates an error).
171
230
  def delete_flow(table_id: nil, flow_id: nil)
172
231
  raise ArgumentError, "Table ID (table_id) required" unless table_id
173
232
  raise ArgumentError, "Flow ID (flow_id) required" unless flow_id
@@ -181,16 +240,38 @@ class OFSwitch < OpenflowNode
181
240
  end
182
241
  end
183
242
 
243
+ ##
244
+ # Return a list of flows in the controller's operational data store for the OpenFlow switch. These are the flows that are in the switch.
245
+ #
246
+ # _Parameters_
247
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to retrieve the flows
248
+ # _Return_ _Value_
249
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of flows.
184
250
  def get_operational_flows(table_id: nil)
185
251
  raise ArgumentError, "Table ID (table_id) required" unless table_id
186
252
  get_flows(table_id: table_id)
187
253
  end
188
254
 
255
+ ##
256
+ # Return a list of flows in the controller's configuration data store for the OpenFlow switch. These are the flows that the controller is supposed to program into the OpenFlow switch.
257
+ #
258
+ # _Parameters_
259
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to retrieve the flows
260
+ # _Return_ _Value_
261
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of flows.
189
262
  def get_configured_flows(table_id: nil)
190
263
  raise ArgumentError, "Table ID (table_id) required" unless table_id
191
264
  get_flows(table_id: table_id, is_operational: false)
192
265
  end
193
266
 
267
+ ##
268
+ # Return a list of flows in the controller's operational data store for the OpenFlow switch. These are the flows that are in the switch.
269
+ # These flows will be returned in Open Vswitch (OVS) format.
270
+ #
271
+ # _Parameters_
272
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to retrieve the flows
273
+ # _Return_ _Value_
274
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of flows in Open VSwitch format.
194
275
  def get_operational_flows_ovs_syntax(table_id: nil, sort: false)
195
276
  raise ArgumentError, "Table ID (table_id) required" unless table_id
196
277
  response = get_operational_flows(table_id: table_id)
@@ -206,6 +287,16 @@ class OFSwitch < OpenflowNode
206
287
  end
207
288
  end
208
289
 
290
+
291
+ ##
292
+ # Return a list of flows in the controller's configured data store for the OpenFlow switch.
293
+ # These are the flows that the controller is to program into the OpenFlow switch.
294
+ # These flows will be returned in Open Vswitch (OVS) format.
295
+ #
296
+ # _Parameters_
297
+ # * +table_id+:: String : the identifier for the OpenFlow table from which to retrieve the flows
298
+ # _Return_ _Value_
299
+ # * NetconfResponse : Status ( NetconfResponseStatus ) and list of flows in Open VSwitch format.
209
300
  def get_configured_flows_ovs_syntax(table_id: nil, sort: false)
210
301
  raise ArgumentError, "Table ID (table_id) required" unless table_id
211
302
  response = get_configured_flows(table_id: table_id)
@@ -223,7 +314,7 @@ class OFSwitch < OpenflowNode
223
314
 
224
315
  private
225
316
 
226
- def get_flows(table_id: nil, is_operational: true)
317
+ def get_flows(table_id: nil, is_operational: true) #:nodoc:
227
318
  if is_operational
228
319
  get_uri = "#{@controller.get_node_operational_uri(self)}/"\
229
320
  "flow-node-inventory:table/#{table_id}"
@@ -246,7 +337,7 @@ class OFSwitch < OpenflowNode
246
337
  end
247
338
  end
248
339
 
249
- def odl_to_ovs_flow_syntax(odl_flow)
340
+ def odl_to_ovs_flow_syntax(odl_flow) #:nodoc:
250
341
  ovs_flow = {}
251
342
  if odl_flow.has_key?('cookie')
252
343
  ovs_flow['cookie'] = "0x#{odl_flow['cookie'].to_s(16)}"
@@ -30,7 +30,7 @@
30
30
 
31
31
  # borrowing from rails implementation
32
32
  # https://github.com/rails/rails/blob/c0357d789b4323da64f1f9f82fa720ec9bac17cf/activesupport/lib/active_support/core_ext/hash/compact.rb#L8
33
- class Hash
33
+ class Hash #:nodoc: all
34
34
  def compact
35
35
  self.select { |_, value| value.is_a?(Hash) ? !value.compact_and_check_if_empty : !value.nil? }
36
36
  end
@@ -28,17 +28,25 @@
28
28
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29
29
  # THE POSSIBILITY OF SUCH DAMAGE.
30
30
 
31
+ #Class defining response to most requests made in rubybvc.
31
32
  class NetconfResponse
32
33
  require 'utils/netconf_response_status'
33
34
 
35
+ # integer: success or failure status of request
34
36
  attr_accessor :status
37
+ # <variable>: the response from the request or more information about failure
35
38
  attr_accessor :body
36
39
 
37
- def initialize(netconf_response_status = nil, json_body = nil)
40
+ def initialize(netconf_response_status = nil, json_body = nil) #:nodoc:
38
41
  @status = netconf_response_status
39
42
  @body = json_body
40
43
  end
41
44
 
45
+ ##
46
+ # Return a string for the status.
47
+ #
48
+ # _Return_ _Value_
49
+ # * string : A string describing the status of the response (success or reason for failure).
42
50
  def message
43
51
  case(@status)
44
52
  when NetconfResponseStatus::OK
@@ -28,6 +28,7 @@
28
28
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29
29
  # THE POSSIBILITY OF SUCH DAMAGE.
30
30
 
31
+ #Class defining the numeric status that may be returned from making a request to rubybvc
31
32
  class NetconfResponseStatus
32
33
  OK = 200
33
34
  NODE_CONNECTED = 210
@@ -28,7 +28,7 @@
28
28
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29
29
  # THE POSSIBILITY OF SUCH DAMAGE.
30
30
 
31
- class RestAgent
31
+ class RestAgent #:nodoc: all
32
32
  require 'uri'
33
33
  require 'net/http'
34
34
  require 'logger'
@@ -28,7 +28,7 @@
28
28
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29
29
  # THE POSSIBILITY OF SUCH DAMAGE.
30
30
 
31
- def check_response_for_success(response)
31
+ def check_response_for_success(response) #:nodoc:
32
32
  netconf_response = nil
33
33
  if response && ((response.body && response.code.to_i < 204) || (response.code.to_i == 204 && !response.body))
34
34
  parsed_body = response.body ? JSON.parse(response.body) : nil
@@ -39,7 +39,7 @@ def check_response_for_success(response)
39
39
  netconf_response
40
40
  end
41
41
 
42
- def handle_error_response(response)
42
+ def handle_error_response(response) #:nodoc:
43
43
  if response && response.body.nil? && response.code.to_i < 204
44
44
  netconf_response = NetconfResponse.new(NetconfResponseStatus::CTRL_INTERNAL_ERROR)
45
45
  elsif response && response.code.to_i > 204
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubybvc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sarah Dempsey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-10 00:00:00.000000000 Z
11
+ date: 2015-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri