rubybvc 0.3.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|