rubybvc 0.3.1 → 1.0.0
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.
- checksums.yaml +4 -4
- data/lib/controller/controller.rb +189 -3
- data/lib/controller/netconf_node.rb +27 -3
- data/lib/controller/node.rb +7 -0
- data/lib/controller/openflow_node.rb +3 -1
- data/lib/netconfdev/vrouter/firewall.rb +6 -1
- data/lib/netconfdev/vrouter/rule.rb +16 -3
- data/lib/netconfdev/vrouter/rules.rb +18 -2
- data/lib/netconfdev/vrouter/vrouter5600.rb +123 -16
- data/lib/openflowdev/action_output.rb +37 -3
- data/lib/openflowdev/actions/action.rb +1 -0
- data/lib/openflowdev/actions/copy_ttl_inwards_action.rb +4 -0
- data/lib/openflowdev/actions/copy_ttl_outwards_action.rb +4 -0
- data/lib/openflowdev/actions/dec_mpls_ttl_action.rb +4 -0
- data/lib/openflowdev/actions/dec_nw_ttl_action.rb +4 -0
- data/lib/openflowdev/actions/drop_action.rb +1 -0
- data/lib/openflowdev/actions/flood_action.rb +4 -0
- data/lib/openflowdev/actions/flood_all_action.rb +4 -0
- data/lib/openflowdev/actions/group_action.rb +7 -1
- data/lib/openflowdev/actions/hw_path_action.rb +3 -0
- data/lib/openflowdev/actions/loopback_action.rb +5 -1
- data/lib/openflowdev/actions/output_action.rb +10 -1
- data/lib/openflowdev/actions/pop_mpls_header_action.rb +6 -1
- data/lib/openflowdev/actions/pop_pbb_header_action.rb +5 -1
- data/lib/openflowdev/actions/pop_vlan_header_action.rb +5 -1
- data/lib/openflowdev/actions/push_mpls_header_action.rb +6 -1
- data/lib/openflowdev/actions/push_pbb_header_action.rb +6 -1
- data/lib/openflowdev/actions/push_vlan_header_action.rb +11 -1
- data/lib/openflowdev/actions/set_dl_dst_action.rb +6 -1
- data/lib/openflowdev/actions/set_dl_src_action.rb +6 -1
- data/lib/openflowdev/actions/set_field_action.rb +7 -1
- data/lib/openflowdev/actions/set_mpls_ttl_action.rb +6 -1
- data/lib/openflowdev/actions/set_nw_dst_action.rb +6 -1
- data/lib/openflowdev/actions/set_nw_src_action.rb +6 -1
- data/lib/openflowdev/actions/set_nw_ttl_action.rb +6 -1
- data/lib/openflowdev/actions/set_queue_action.rb +7 -1
- data/lib/openflowdev/actions/set_tp_dst_action.rb +6 -1
- data/lib/openflowdev/actions/set_tp_src_action.rb +6 -1
- data/lib/openflowdev/actions/set_vlan_cfi_action.rb +6 -1
- data/lib/openflowdev/actions/set_vlan_id_action.rb +6 -1
- data/lib/openflowdev/actions/set_vlan_pcp_action.rb +6 -1
- data/lib/openflowdev/actions/strip_vlan_action.rb +2 -1
- data/lib/openflowdev/actions/sw_path_action.rb +5 -1
- data/lib/openflowdev/flow_entry.rb +86 -6
- data/lib/openflowdev/instruction.rb +12 -1
- data/lib/openflowdev/match.rb +119 -9
- data/lib/openflowdev/of_switch.rb +94 -3
- data/lib/utils/hash_with_compact.rb +1 -1
- data/lib/utils/netconf_response.rb +9 -1
- data/lib/utils/netconf_response_status.rb +1 -0
- data/lib/utils/rest_agent.rb +1 -1
- data/lib/utils/utilities.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81aa569a1b37a5364c278606cf508f2f0b70d5d3
|
4
|
+
data.tar.gz: 035cf3a2d02eca3440dd6394390445260bfeba0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8319896aeb7ba1390bebb00216204078e25c27c3fff705eec45e2d25527f689be0d8e47b62333971039fc81c54f5264e4269d8d18533b5eb0775b1256bb068b
|
7
|
+
data.tar.gz: 2d3f0d517f0d42125b325696a1eee89abbf064b3ae9197386be572aae9bb6b40c72d37892ff55fbedbe25ea52c36720d7182341d58ae62629e0382a35e4ec5ae
|
@@ -28,6 +28,9 @@
|
|
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
|
+
##
|
32
|
+
# Class that represents a Controller device.
|
33
|
+
#
|
31
34
|
class Controller
|
32
35
|
require 'json'
|
33
36
|
require 'utils/rest_agent'
|
@@ -36,15 +39,28 @@ class Controller
|
|
36
39
|
require 'controller/netconf_node'
|
37
40
|
require 'nokogiri'
|
38
41
|
|
42
|
+
# String : IP address of the BVC. e.g. 192.168.56.101
|
39
43
|
attr_reader :ip
|
44
|
+
# String : Port number of the BVC RESTCONF API. e.g. 8181
|
40
45
|
attr_reader :port
|
46
|
+
# String : Admin userid for logon to BVC RESTCONF API. e.g. admin
|
41
47
|
attr_reader :username
|
48
|
+
# String : Admin password for logon to BVC RESTCONF API. e.g. admin
|
42
49
|
attr_reader :password
|
50
|
+
# Integer : Number of seconds to wait for a response from BVC to RESTCONF request. e.g. 5
|
43
51
|
attr_reader :timeout
|
52
|
+
# RestAgent : The REST agent connected to controller.
|
44
53
|
attr_reader :rest_agent
|
45
54
|
|
55
|
+
# _Parameters_
|
56
|
+
# * +ip_addr+:: String : IP address of the BVC. e.g. 192.168.56.101
|
57
|
+
# * +port_number+:: String : Port number of the BVC RESTCONF API. e.g. 8181
|
58
|
+
# * +admin_name+:: String : Admin userid for logon to BVC RESTCONF API. e.g. admin
|
59
|
+
# * +admin_password+:: String : Admin password for logon to BVC RESTCONF API. e.g. admin
|
60
|
+
# * +timeout_in_s+:: Integer : Number of seconds to wait for a response from BVC to RESTCONF request. e.g. 5
|
61
|
+
#
|
46
62
|
def initialize(ip_addr: nil, port_number: 8181, admin_name: nil,
|
47
|
-
admin_password: nil, timeout_in_s: 5)
|
63
|
+
admin_password: nil, timeout_in_s: 5)
|
48
64
|
raise ArgumentError, "IP Address (ip_addr) required" unless ip_addr
|
49
65
|
raise ArgumentError, "Admin Username (admin_name) required" unless admin_name
|
50
66
|
raise ArgumentError, "Admin Password (admin_password) required" unless admin_password
|
@@ -58,6 +74,14 @@ class Controller
|
|
58
74
|
password: @password, open_timeout: @timeout)
|
59
75
|
end
|
60
76
|
|
77
|
+
##
|
78
|
+
# Return a list of YANG schemas for the node.
|
79
|
+
#
|
80
|
+
# _Parameters_
|
81
|
+
# * +node_name+:: String : name of the node from the #get_all_nodes_in_config
|
82
|
+
# _Return_ _Value_
|
83
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of YANG schemas for the node.
|
84
|
+
|
61
85
|
def get_schemas(node_name)
|
62
86
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes/node/"\
|
63
87
|
"#{node_name}/yang-ext:mount/ietf-netconf-monitoring:netconf-state/schemas"
|
@@ -71,6 +95,16 @@ class Controller
|
|
71
95
|
end
|
72
96
|
end
|
73
97
|
|
98
|
+
##
|
99
|
+
# Return a YANG schema for the indicated schema on the indicated node.
|
100
|
+
#
|
101
|
+
# _Parameters_
|
102
|
+
# * +node_name+:: String : name of the node from the #get_all_nodes_in_config
|
103
|
+
# * +id+:: String : Identifier for schema
|
104
|
+
# * +version+:: String : Version/date for schema
|
105
|
+
# _Return_ _Value_
|
106
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and YANG schema.
|
107
|
+
|
74
108
|
def get_schema(node_name, id: nil, version: nil)
|
75
109
|
raise ArgumentError, "Identifier (id) required" unless id
|
76
110
|
raise ArgumentError, "Version (version) required" unless version
|
@@ -90,6 +124,12 @@ class Controller
|
|
90
124
|
end
|
91
125
|
end
|
92
126
|
|
127
|
+
##
|
128
|
+
# Return a list of service providers available.
|
129
|
+
#
|
130
|
+
# _Return_ _Value_
|
131
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing a list of service providers.
|
132
|
+
|
93
133
|
def get_service_providers_info
|
94
134
|
get_uri = "/restconf/config/opendaylight-inventory:nodes/node/"\
|
95
135
|
"controller-config/yang-ext:mount/config:services"
|
@@ -103,6 +143,14 @@ class Controller
|
|
103
143
|
end
|
104
144
|
end
|
105
145
|
|
146
|
+
##
|
147
|
+
# Return info about a single service provider.
|
148
|
+
#
|
149
|
+
# _Parameters_
|
150
|
+
# * +provider_name+:: name of the service provider from get_service_providers_info
|
151
|
+
# _Return_ _Value_
|
152
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing info about the service provider.
|
153
|
+
|
106
154
|
def get_service_provider_info(provider_name)
|
107
155
|
get_uri = "/restconf/config/opendaylight-inventory:nodes/node/"\
|
108
156
|
"controller-config/yang-ext:mount/config:services/service/#{provider_name}"
|
@@ -116,6 +164,14 @@ class Controller
|
|
116
164
|
end
|
117
165
|
end
|
118
166
|
|
167
|
+
##
|
168
|
+
# Return a list of operations supported by the indicated node.
|
169
|
+
#
|
170
|
+
# _Parameters_
|
171
|
+
# * +node_name+:: String : name of the node from the #get_all_nodes_in_config
|
172
|
+
# _Return_ _Value_
|
173
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and operations supported by indicated node.
|
174
|
+
|
119
175
|
def get_netconf_operations(node_name)
|
120
176
|
get_uri = "/restconf/operations/opendaylight-inventory:nodes/node/"\
|
121
177
|
"#{node_name}/yang-ext:mount"
|
@@ -129,6 +185,12 @@ class Controller
|
|
129
185
|
end
|
130
186
|
end
|
131
187
|
|
188
|
+
##
|
189
|
+
# Return a list of modules and their operational state.
|
190
|
+
#
|
191
|
+
# _Return_ _Value_
|
192
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON listing modules and their operational state
|
193
|
+
|
132
194
|
def get_all_modules_operational_state
|
133
195
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes/node/"\
|
134
196
|
"controller-config/yang-ext:mount/config:modules"
|
@@ -143,6 +205,15 @@ class Controller
|
|
143
205
|
end
|
144
206
|
end
|
145
207
|
|
208
|
+
##
|
209
|
+
# Return operational state for specified module.
|
210
|
+
#
|
211
|
+
# _Parameters_
|
212
|
+
# * +type+:: String : module type
|
213
|
+
# * +name+:: String : module name
|
214
|
+
# _Return_ _Value_
|
215
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing operational state
|
216
|
+
|
146
217
|
def get_module_operational_state(type: nil, name: nil)
|
147
218
|
raise ArgumentError, "Type (type) required" unless type
|
148
219
|
raise ArgumentError, "Name (name) required" unless name
|
@@ -159,6 +230,14 @@ class Controller
|
|
159
230
|
end
|
160
231
|
end
|
161
232
|
|
233
|
+
##
|
234
|
+
# Return sessions for indicated node.
|
235
|
+
#
|
236
|
+
# _Parameters_
|
237
|
+
# * +node_name+:: String : name of the node from the #get_all_nodes_in_config
|
238
|
+
# _Return_ _Value_
|
239
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing list of sessions.
|
240
|
+
|
162
241
|
def get_sessions_info(node_name)
|
163
242
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes/node/"\
|
164
243
|
"#{node_name}/yang-ext:mount/ietf-netconf-monitoring:netconf-state/"\
|
@@ -173,6 +252,12 @@ class Controller
|
|
173
252
|
end
|
174
253
|
end
|
175
254
|
|
255
|
+
##
|
256
|
+
# Return streams available for subscription.
|
257
|
+
#
|
258
|
+
# _Return_ _Value_
|
259
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing list of streams.
|
260
|
+
|
176
261
|
def get_streams_info
|
177
262
|
get_uri = "restconf/streams"
|
178
263
|
response = @rest_agent.get_request(get_uri)
|
@@ -185,6 +270,12 @@ class Controller
|
|
185
270
|
end
|
186
271
|
end
|
187
272
|
|
273
|
+
##
|
274
|
+
# Return a list of nodes in the controller's config data store
|
275
|
+
#
|
276
|
+
# _Return_ _Value_
|
277
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of nodes in the config data store of the controller
|
278
|
+
|
188
279
|
def get_all_nodes_in_config
|
189
280
|
get_uri = "/restconf/config/opendaylight-inventory:nodes"
|
190
281
|
response = @rest_agent.get_request(get_uri)
|
@@ -201,7 +292,13 @@ class Controller
|
|
201
292
|
end
|
202
293
|
end
|
203
294
|
|
204
|
-
|
295
|
+
##
|
296
|
+
# Return a list of NETCONF nodes in the controller's configuration data store
|
297
|
+
#
|
298
|
+
# _Return_ _Value_
|
299
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of nodes in the config data store of the controller
|
300
|
+
|
301
|
+
def get_netconf_nodes_in_config
|
205
302
|
get_uri = "/restconf/config/opendaylight-inventory:nodes"
|
206
303
|
response = @rest_agent.get_request(get_uri)
|
207
304
|
check_response_for_success(response) do |body|
|
@@ -217,6 +314,12 @@ class Controller
|
|
217
314
|
end
|
218
315
|
end
|
219
316
|
|
317
|
+
##
|
318
|
+
# Return a list of NETCONF nodes in the operational data store of controller and the status of their connection to the controller.
|
319
|
+
#
|
320
|
+
# _Return_ _Value_
|
321
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of nodes the status of their connection to the controller.
|
322
|
+
|
220
323
|
def get_netconf_nodes_conn_status
|
221
324
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes"
|
222
325
|
response = @rest_agent.get_request(get_uri)
|
@@ -237,6 +340,12 @@ class Controller
|
|
237
340
|
end
|
238
341
|
end
|
239
342
|
|
343
|
+
##
|
344
|
+
# Return a list of nodes in the controllers operational data store.
|
345
|
+
#
|
346
|
+
# _Return_ _Value_
|
347
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of nodes in controller's operational data store.
|
348
|
+
|
240
349
|
def get_nodes_operational_list
|
241
350
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes"
|
242
351
|
response = @rest_agent.get_request(get_uri)
|
@@ -253,6 +362,12 @@ class Controller
|
|
253
362
|
end
|
254
363
|
end
|
255
364
|
|
365
|
+
##
|
366
|
+
# Return a list of nodes that support OpenFlow in the Controller's operational data store.
|
367
|
+
#
|
368
|
+
# _Return_ _Value_
|
369
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of OpenFlow-capable nodes in the Controller's operational database.
|
370
|
+
|
256
371
|
def get_openflow_nodes_operational_list
|
257
372
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes"
|
258
373
|
response = @rest_agent.get_request(get_uri)
|
@@ -269,6 +384,14 @@ class Controller
|
|
269
384
|
end
|
270
385
|
end
|
271
386
|
|
387
|
+
##
|
388
|
+
# Return information about a node in the operational data store.
|
389
|
+
#
|
390
|
+
# _Parameters_
|
391
|
+
# * +node_name+:: String : name of the node in operational data store from the #get_nodes_operational_list
|
392
|
+
# _Return_ _Value_
|
393
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON data about the requested node.
|
394
|
+
|
272
395
|
def get_node_info(node_name)
|
273
396
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes/node/"\
|
274
397
|
"#{node_name}"
|
@@ -282,6 +405,14 @@ class Controller
|
|
282
405
|
end
|
283
406
|
end
|
284
407
|
|
408
|
+
##
|
409
|
+
# Return the configuration status of the node.
|
410
|
+
#
|
411
|
+
# _Parameters_
|
412
|
+
# * +node_name+:: String : name of the node from the #get_all_nodes_in_config
|
413
|
+
# _Return_ _Value_
|
414
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and configuration status of requested node.
|
415
|
+
|
285
416
|
def check_node_config_status(node_name)
|
286
417
|
get_uri = "/restconf/config/opendaylight-inventory:nodes/node/#{node_name}"
|
287
418
|
response = @rest_agent.get_request(get_uri)
|
@@ -291,6 +422,14 @@ class Controller
|
|
291
422
|
end
|
292
423
|
end
|
293
424
|
|
425
|
+
##
|
426
|
+
# Return the connection status of the node to the controller.
|
427
|
+
#
|
428
|
+
# _Parameters_
|
429
|
+
# * +node_name+:: String : name of the node from the #get_nodes_operational_list
|
430
|
+
# _Return_ _Value_
|
431
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and Status of the node's connection to the controller. Note: currently OpenFlow nodes are always shown disconnected..
|
432
|
+
|
294
433
|
def check_node_conn_status(node_name)
|
295
434
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes/node/"\
|
296
435
|
"#{node_name}"
|
@@ -316,6 +455,12 @@ class Controller
|
|
316
455
|
end
|
317
456
|
end
|
318
457
|
|
458
|
+
##
|
459
|
+
# Return a list of nodes and the status of their connection to the controller.
|
460
|
+
#
|
461
|
+
# _Return_ _Value_
|
462
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and list of nodes and their connection to the controller.
|
463
|
+
|
319
464
|
def get_all_nodes_conn_status
|
320
465
|
get_uri = "/restconf/operational/opendaylight-inventory:nodes"
|
321
466
|
response = @rest_agent.get_request(get_uri)
|
@@ -342,6 +487,14 @@ class Controller
|
|
342
487
|
end
|
343
488
|
end
|
344
489
|
|
490
|
+
##
|
491
|
+
# Connect a netconf device to the controller (for example connect vrouter to controller via NetConf)
|
492
|
+
#
|
493
|
+
# _Parameters_
|
494
|
+
# * +node+:: NetconfNode : A netconf node.
|
495
|
+
# _Return_ _Value_
|
496
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and JSON providing response from adding the node.
|
497
|
+
|
345
498
|
def add_netconf_node(node)
|
346
499
|
post_uri = "/restconf/config/opendaylight-inventory:nodes/node/"\
|
347
500
|
"controller-config/yang-ext:mount/config:modules"
|
@@ -354,6 +507,14 @@ class Controller
|
|
354
507
|
end
|
355
508
|
end
|
356
509
|
|
510
|
+
##
|
511
|
+
# Disconnect a netconf device from the controller.
|
512
|
+
#
|
513
|
+
# _Parameters_
|
514
|
+
# * +node+:: NetconfNode : node to disconnect from the controller.
|
515
|
+
# _Return_ _Value_
|
516
|
+
# * NetconfResponse : Status ( NetconfResponseStatus ) and response if error.
|
517
|
+
|
357
518
|
def delete_netconf_node(node)
|
358
519
|
delete_uri = "/restconf/config/opendaylight-inventory:nodes/node/"\
|
359
520
|
"controller-config/yang-ext:mount/config:modules/module/"\
|
@@ -368,6 +529,14 @@ class Controller
|
|
368
529
|
end
|
369
530
|
end
|
370
531
|
|
532
|
+
##
|
533
|
+
# Return the url to the operational node.
|
534
|
+
#
|
535
|
+
# _Parameters_
|
536
|
+
# * +node+:: NetconfNode : node for which to return the url.
|
537
|
+
# _Return_ _Value_
|
538
|
+
# * String: Url
|
539
|
+
|
371
540
|
def get_node_operational_uri(node)
|
372
541
|
raise ArgumentError, "Node (node) must be a 'Node' object or a 'Node' "\
|
373
542
|
"subclass object" unless node.is_a?(Node) ||
|
@@ -375,6 +544,14 @@ class Controller
|
|
375
544
|
"/restconf/operational/opendaylight-inventory:nodes/node/#{node.name}"
|
376
545
|
end
|
377
546
|
|
547
|
+
##
|
548
|
+
# Return the url to the configured node.
|
549
|
+
#
|
550
|
+
# _Parameters_
|
551
|
+
# * +node+:: NetconfNode : node for which to return the url.
|
552
|
+
# _Return_ _Value_
|
553
|
+
# * String: Url
|
554
|
+
|
378
555
|
def get_node_config_uri(node)
|
379
556
|
raise ArgumentError, "Node (node) must be a 'Node' object or a 'Node' "\
|
380
557
|
"subclass object" unless node.is_a?(Node) ||
|
@@ -382,13 +559,22 @@ class Controller
|
|
382
559
|
"/restconf/config/opendaylight-inventory:nodes/node/#{node.name}"
|
383
560
|
end
|
384
561
|
|
562
|
+
##
|
563
|
+
# Return the netconf mountpoint url to the configured node.
|
564
|
+
#
|
565
|
+
# _Parameters_
|
566
|
+
# * +node+:: NetconfNode : node for which to return the url.
|
567
|
+
# _Return_ _Value_
|
568
|
+
# * String: Url
|
569
|
+
|
385
570
|
def get_ext_mount_config_uri(node)
|
386
571
|
raise ArgumentError, "Node (node) must be a 'Node' object or a 'Node' "\
|
387
572
|
"subclass object" unless node.is_a?(Node)
|
388
573
|
"/restconf/config/opendaylight-inventory:nodes/node/#{node.name}/yang-ext:mount"
|
389
574
|
end
|
390
575
|
|
391
|
-
|
576
|
+
|
577
|
+
def to_hash #:nodoc:
|
392
578
|
{:ip_addr => @ip, :port_num => @port, :admin_name => @username,
|
393
579
|
:admin_password => @password}
|
394
580
|
end
|
@@ -29,9 +29,33 @@
|
|
29
29
|
# THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
|
31
31
|
require 'controller/node'
|
32
|
+
|
33
|
+
##
|
34
|
+
# Class that represents a NetconfNode
|
35
|
+
#
|
32
36
|
class NetconfNode < Node
|
33
|
-
|
34
|
-
|
37
|
+
|
38
|
+
|
39
|
+
# String : IP address for NETCONF protocol of NETCONF device. e.g. 172.22.11.44
|
40
|
+
attr_reader :ip
|
41
|
+
# String : Port number of the NETCONF protocol. e.g. 830
|
42
|
+
attr_reader :port
|
43
|
+
# String : Admin userid for logon to NETCONF device. e.g. vyatta
|
44
|
+
attr_reader :username
|
45
|
+
# String : Admin password for logon NETCONF device. e.g. vyatta
|
46
|
+
attr_reader :password
|
47
|
+
# Boolean : True if only TCP is used to communicate with NETCONF device.
|
48
|
+
attr_reader :tcp_only
|
49
|
+
|
50
|
+
# _Parameters_
|
51
|
+
# * +controller+:: Controller : The controller object through which NETCONF device is to be accessed.
|
52
|
+
# * +name+:: String : The name of the NETCONF node. e.g. vrouter
|
53
|
+
# * +ip_addr+:: String : IP address for NETCONF protocol of NETCONF device. e.g. 172.22.11.44
|
54
|
+
# * +port_number+:: String : Port number of the NETCONF protocol. e.g. 830
|
55
|
+
# * +admin_name+:: String : Admin userid for logon to NETCONF device. e.g. vyatta
|
56
|
+
# * +admin_password+:: String : Admin password for logon NETCONF device. e.g. vyatta
|
57
|
+
# * +tcp_only+:: Boolean : True if only TCP is used to communicate with NETCONF device.
|
58
|
+
#
|
35
59
|
def initialize(controller: nil, name: nil, ip_addr: nil,
|
36
60
|
port_number: nil, admin_name: nil, admin_password: nil,
|
37
61
|
tcp_only: false)
|
@@ -48,7 +72,7 @@ class NetconfNode < Node
|
|
48
72
|
@tcp_only = tcp_only
|
49
73
|
end
|
50
74
|
|
51
|
-
def to_hash
|
75
|
+
def to_hash #:nodoc:
|
52
76
|
{:controller => @controller.to_hash, :name => @name, :ip_addr => @ip,
|
53
77
|
:port_num => @port, :admin_name => @username, :admin_password => @password}
|
54
78
|
end
|
data/lib/controller/node.rb
CHANGED
@@ -28,9 +28,16 @@
|
|
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
|
+
##
|
32
|
+
# Class that represents a Controller device.
|
33
|
+
#
|
31
34
|
class Node
|
35
|
+
# String : The name of the node. e.g. vrouter
|
32
36
|
attr_reader :name
|
33
37
|
|
38
|
+
# _Parameters_
|
39
|
+
# * +controller+:: Controller : The controller object through which node is to be accessed.
|
40
|
+
# * +name+:: String : The name of the node. e.g. vrouter
|
34
41
|
def initialize(controller: nil, name: nil)
|
35
42
|
raise ArgumentError, "Controller (controller) required" unless controller
|
36
43
|
raise ArgumentError, "Name (name) required" unless name
|
@@ -27,7 +27,9 @@
|
|
27
27
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
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 that represents an OpenFlow node.
|
32
|
+
#
|
31
33
|
class OpenflowNode < Node
|
32
34
|
|
33
35
|
end
|
@@ -28,16 +28,21 @@
|
|
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
|
+
# A class that defines a Firewall.
|
31
32
|
class Firewall
|
33
|
+
|
34
|
+
# Rules : rules defining behavior of firewall.
|
32
35
|
attr_reader :rules
|
33
36
|
|
37
|
+
# _Parameters_
|
38
|
+
# * +rules+:: Rules : rules defining behavior of firewall.
|
34
39
|
def initialize(rules: nil)
|
35
40
|
raise ArgumentError, "Rules (rules) required" unless rules
|
36
41
|
raise ArgumentError, "Rules (rules) must be instance of 'Rules'" unless rules.is_a?(Rules)
|
37
42
|
@rules = rules
|
38
43
|
end
|
39
44
|
|
40
|
-
def to_hash
|
45
|
+
def to_hash #:nodoc:
|
41
46
|
{'vyatta-security:security' => {'vyatta-security-firewall:firewall' =>
|
42
47
|
{:name => [@rules.to_hash]}}}
|
43
48
|
end
|
@@ -28,9 +28,22 @@
|
|
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
|
+
# The class that defines a Firewall Rule.
|
31
32
|
class Rule
|
32
|
-
|
33
|
-
|
33
|
+
|
34
|
+
# Integer: The rule number. e.g. 40
|
35
|
+
attr_reader :number
|
36
|
+
# String: The action for the rule. e.g. "drop" or "accept"
|
37
|
+
attr_reader :action
|
38
|
+
# String: The source IP address on which the rule will match. e.g. "172.22.17.107"
|
39
|
+
attr_reader :src_address
|
40
|
+
|
41
|
+
# _Parameters_
|
42
|
+
# * +rule_number+:: Integer: The rule number. e.g. 40
|
43
|
+
# * +action+:: String: The action for the rule. e.g. "drop" or "accept"
|
44
|
+
# * +source_address+:: String: The source IP address on which the rule will match. e.g. "172.22.17.107"
|
45
|
+
# * +icmp_typename+:: String : [optional] ICMP type. e.g. "ping"
|
46
|
+
|
34
47
|
def initialize(rule_number: nil, action: nil, source_address: nil,
|
35
48
|
icmp_typename: nil)
|
36
49
|
raise ArgumentError, "Rule number (rule_number) required" unless rule_number
|
@@ -44,7 +57,7 @@ class Rule
|
|
44
57
|
@protocol = "icmp" if icmp_typename
|
45
58
|
end
|
46
59
|
|
47
|
-
def to_hash
|
60
|
+
def to_hash #:nodoc:
|
48
61
|
hash = {:action => @action, :source => {:address => @src_address},
|
49
62
|
:tagnode => @number, :protocol => @protocol, :icmp =>
|
50
63
|
{'type-name' => @icmp_typename}}
|
@@ -28,9 +28,19 @@
|
|
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
|
+
##
|
32
|
+
# The class that defines firewall Rules.
|
31
33
|
class Rules
|
32
|
-
|
34
|
+
|
35
|
+
# String: Name of the firewall rule.
|
36
|
+
attr_reader :name
|
37
|
+
|
38
|
+
# List of Rule : List of Rule defining the firewall behavior.
|
39
|
+
attr_reader :rules
|
33
40
|
|
41
|
+
# _Parameters_
|
42
|
+
# * +name+:: String: Name of the firewall rule.
|
43
|
+
#
|
34
44
|
def initialize(name: nil)
|
35
45
|
raise ArgumentError, "Name (name) required" unless name
|
36
46
|
|
@@ -38,12 +48,18 @@ class Rules
|
|
38
48
|
@rules = []
|
39
49
|
end
|
40
50
|
|
51
|
+
##
|
52
|
+
# Add a rule to this firewall.
|
53
|
+
#
|
54
|
+
# _Parameters_
|
55
|
+
# * +rule+:: Rule : A Firewall Rule to add to this Firewall.
|
56
|
+
|
41
57
|
def add_rule(rule)
|
42
58
|
raise ArgumentError, "Rule must be instance of 'Rule'" unless rule.is_a?(Rule)
|
43
59
|
@rules << rule
|
44
60
|
end
|
45
61
|
|
46
|
-
def to_hash
|
62
|
+
def to_hash #:nodoc:
|
47
63
|
rules_hash = []
|
48
64
|
@rules.each do |rule|
|
49
65
|
rules_hash << rule.to_hash
|