omf_rc 6.0.0.pre.8 → 6.0.0.pre.9

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 (43) hide show
  1. data/bin/install_omf_rc +79 -0
  2. data/bin/omf_rc +52 -36
  3. data/config/config.yml +8 -0
  4. data/init/debian +51 -0
  5. data/init/fedora +54 -0
  6. data/init/run_omf_rc.sh +62 -0
  7. data/init/ubuntu +12 -0
  8. data/lib/omf_rc/omf_error.rb +5 -5
  9. data/lib/omf_rc/resource_factory.rb +7 -11
  10. data/lib/omf_rc/resource_proxy/abstract_resource.rb +327 -228
  11. data/lib/omf_rc/resource_proxy/application.rb +61 -56
  12. data/lib/omf_rc/resource_proxy/net.rb +2 -2
  13. data/lib/omf_rc/resource_proxy/node.rb +11 -2
  14. data/lib/omf_rc/resource_proxy/virtual_machine.rb +1 -1
  15. data/lib/omf_rc/resource_proxy/wlan.rb +2 -0
  16. data/lib/omf_rc/resource_proxy_dsl.rb +22 -1
  17. data/lib/omf_rc/util/common_tools.rb +2 -4
  18. data/lib/omf_rc/util/hostapd.rb +4 -3
  19. data/lib/omf_rc/util/ip.rb +8 -5
  20. data/lib/omf_rc/util/iw.rb +18 -8
  21. data/lib/omf_rc/util/sysfs.rb +14 -0
  22. data/lib/omf_rc/util/vmbuilder.rb +1 -1
  23. data/lib/omf_rc/util/wpa.rb +4 -3
  24. data/lib/omf_rc/version.rb +1 -1
  25. data/lib/omf_rc.rb +3 -1
  26. data/omf_rc.gemspec +4 -2
  27. data/test/omf_rc/message_process_error_spec.rb +3 -3
  28. data/test/omf_rc/resource_factory_spec.rb +14 -7
  29. data/test/omf_rc/resource_proxy/abstract_resource_spec.rb +47 -21
  30. data/test/omf_rc/resource_proxy/application_spec.rb +156 -119
  31. data/test/omf_rc/resource_proxy/mock_spec.rb +6 -1
  32. data/test/omf_rc/resource_proxy/node_spec.rb +32 -12
  33. data/test/omf_rc/resource_proxy_dsl_spec.rb +31 -19
  34. data/test/omf_rc/util/common_tools_spec.rb +8 -11
  35. data/test/omf_rc/util/ip_spec.rb +7 -1
  36. data/test/omf_rc/util/iw_spec.rb +18 -13
  37. data/test/omf_rc/util/mock_spec.rb +6 -1
  38. data/test/omf_rc/util/mod_spec.rb +17 -10
  39. data/test/test_helper.rb +3 -0
  40. metadata +51 -48
  41. data/config/omf_rc.yml +0 -70
  42. data/lib/omf_rc/resource_proxy/openflow_slice.rb +0 -79
  43. data/lib/omf_rc/resource_proxy/openflow_slice_factory.rb +0 -71
@@ -1,79 +0,0 @@
1
- # This resource is created from the parent :openflow_slice_factory resource.
2
- # It is related with a slice of a flowvisor instance, and behaves as a proxy between experimenter and the actual flowvisor slice.
3
- #
4
- module OmfRc::ResourceProxy::OpenflowSlice
5
- include OmfRc::ResourceProxyDSL
6
-
7
- # The default parameters of a new slice. The openflow controller is assumed to be in the same working station with flowvisor instance
8
- SLICE_DEFAULTS = {
9
- passwd: "1234",
10
- url: "tcp:127.0.0.1:9933",
11
- email: "nothing@nowhere"
12
- }
13
-
14
-
15
- register_proxy :openflow_slice
16
-
17
- utility :openflow_tools
18
-
19
-
20
- # Slice's name is initiated with value "nil"
21
- hook :before_ready do |resource|
22
- resource.property.name = nil
23
- end
24
-
25
- # Before release, the related flowvisor instance should also remove the corresponding slice
26
- hook :before_release do |resource|
27
- resource.flowvisor_connection.call("api.deleteSlice", resource.property.name)
28
- end
29
-
30
-
31
- # The name is one-time configured
32
- configure :name do |resource, name|
33
- raise "The name cannot be changed" if resource.property.name
34
- resource.property.name = name.to_s
35
- begin
36
- resource.flowvisor_connection.call("api.createSlice", name.to_s, *SLICE_DEFAULTS.values)
37
- rescue Exception => e
38
- if e.message["Cannot create slice with existing name"]
39
- logger.warn message = "The requested slice already existed in Flowvisor"
40
- else
41
- raise e
42
- end
43
- end
44
- resource.property.name
45
- end
46
-
47
- # Configures the slice password
48
- configure :passwd do |resource, passwd|
49
- resource.flowvisor_connection.call("api.changePasswd", resource.property.name, passwd.to_s)
50
- passwd.to_s
51
- end
52
-
53
- # Configures the slice parameters
54
- [:contact_email, :drop_policy, :controller_hostname, :controller_port].each do |configure_sym|
55
- configure configure_sym do |resource, value|
56
- resource.flowvisor_connection.call("api.changeSlice", resource.property.name, configure_sym.to_s, value.to_s)
57
- value.to_s
58
- end
59
- end
60
-
61
- # Adds/removes a flow to this slice, specified by device, port, etc.
62
- configure :flows do |resource, parameters|
63
- resource.flowvisor_connection.call("api.changeFlowSpace", resource.transformed_parameters(parameters))
64
- resource.flows
65
- end
66
-
67
-
68
- # Returns a hash table with the name of this slice, its controller (ip and port) and other related information
69
- request :info do |resource|
70
- result = resource.flowvisor_connection.call("api.getSliceInfo", resource.property.name)
71
- result[:name] = resource.property.name
72
- result
73
- end
74
-
75
- # Returns a string with statistics about the use of this slice
76
- request :stats do |resource|
77
- resource.flowvisor_connection.call("api.getSliceStats", resource.property.name)
78
- end
79
- end
@@ -1,71 +0,0 @@
1
- # This resourse is related with a flowvisor instance and behaves as a proxy between experimenter and flowvisor.
2
- #
3
- module OmfRc::ResourceProxy::OpenflowSliceFactory
4
- include OmfRc::ResourceProxyDSL
5
-
6
- # The default arguments of the communication between this resource and the flowvisor instance
7
- FLOWVISOR_CONNECTION_DEFAULTS = {
8
- host: "localhost",
9
- path: "/xmlrc",
10
- port: "8080",
11
- proxy_host: nil,
12
- proxy_port: nil,
13
- user: "fvadmin",
14
- password: "openflow",
15
- use_ssl: "true",
16
- timeout: nil
17
- }
18
-
19
-
20
- register_proxy :openflow_slice_factory
21
-
22
- utility :openflow_tools
23
-
24
-
25
- # Checks if the created child is an :openflow_slice resource and passes the connection arguments that are essential for the connection with flowvisor instance
26
- hook :before_create do |resource, type, opts = nil|
27
- if type.to_sym != :openflow_slice
28
- raise "This resource doesn't create resources of type "+type
29
- end
30
- begin
31
- resource.flowvisor_connection
32
- rescue
33
- raise "This resource is not connected with a flowvisor instance, so it cannot create openflow slices"
34
- end
35
- opts.property ||= Hashie::Mash.new
36
- opts.property.flowvisor_connection_args = resource.property.flowvisor_connection_args
37
- end
38
-
39
-
40
- # A new resource uses the default connection arguments (ip adress, port, etc) to connect with a flowvisor instance
41
- hook :before_ready do |resource|
42
- resource.property.flowvisor_connection_args = FLOWVISOR_CONNECTION_DEFAULTS
43
- end
44
-
45
-
46
- # Configures the flowvisor connection arguments (ip adress, port, etc)
47
- configure :flowvisor_connection do |resource, flowvisor_connection_args|
48
- raise "Connection with a new flowvisor instance is not allowed if there exist created slices" if !resource.children.empty?
49
- resource.property.flowvisor_connection_args.update(flowvisor_connection_args)
50
- end
51
-
52
-
53
- # Returns the flowvisor connection arguments (ip adress, port, etc)
54
- request :flowvisor_connection do |resource|
55
- resource.property.flowvisor_connection_args
56
- end
57
-
58
- # Returns a list of the existed slices or the connected devices
59
- {:slices => "listSlices", :devices => "listDevices"}.each do |request_sym, handler_name|
60
- request request_sym do |resource|
61
- resource.flowvisor_connection.call("api.#{handler_name}")
62
- end
63
- end
64
-
65
- # Returns information or statistics for a device specified by the given id
66
- {:device_info => "getDeviceInfo", :device_stats => "getSwitchStats"}.each do |request_sym, handler_name|
67
- request request_sym do |resource, device|
68
- resource.flowvisor_connection.call("api.#{handler_name}", device.to_s)
69
- end
70
- end
71
- end