openflow-controller 0.1.5 → 0.1.7
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/bin/ofctl +11 -1
- data/lib/controller.rb +9 -1
- data/lib/openflow-controller/version.rb +5 -0
- data/lib/switch.rb +1 -1
- data/spec/controller_spec.rb +50 -0
- data/spec/spec_helper.rb +1 -0
- metadata +13 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d91aedf880f4a2f25f272525c275370cc4e65658
|
4
|
+
data.tar.gz: 01467caf6b802b0ce3226ca182b1a031494fbbf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed99be3a83bb58201cf83320db81c2192708770dc452559de0408c9621413fec4e6b16726ab0ac2b14a8e95b3d3e499a52403441cee9e456ab231df3c5c93f1d
|
7
|
+
data.tar.gz: f27fc51af539191953bf3fb4eb3d110431da65ace4925d10ca57264a0c3dbb96584a566eaa5a979c5c1f1a6972354855c2a117b97f4790956dae10298b779330
|
data/bin/ofctl
CHANGED
@@ -4,6 +4,7 @@ require 'readline'
|
|
4
4
|
require_relative '../lib/controller'
|
5
5
|
|
6
6
|
PROMPT = '> '
|
7
|
+
BYE_MSG = 'Bye!'
|
7
8
|
|
8
9
|
command = Cri::Command.define do
|
9
10
|
name 'ofctl'
|
@@ -51,9 +52,18 @@ command = Cri::Command.define do
|
|
51
52
|
|
52
53
|
loop do
|
53
54
|
begin
|
54
|
-
|
55
|
+
input = Readline.readline(PROMPT, true)
|
56
|
+
if input == 'exit'
|
57
|
+
puts BYE_MSG
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
output = ctl.eval(input).inspect
|
61
|
+
puts " => #{output}".green
|
55
62
|
rescue StandardError => e
|
56
63
|
puts "#{e.class}: #{e.message}".red
|
64
|
+
rescue SignalException => e
|
65
|
+
puts "\n#{BYE_MSG}"
|
66
|
+
exit
|
57
67
|
end
|
58
68
|
end
|
59
69
|
end
|
data/lib/controller.rb
CHANGED
@@ -40,6 +40,10 @@ class OFController
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def eval(input)
|
44
|
+
binding.eval(input)
|
45
|
+
end
|
46
|
+
|
43
47
|
def run(ip = DEFAULT_IP_ADDRESS, port = DEFAULT_TCP_PORT, *args)
|
44
48
|
maybe_send_handler :start, *args
|
45
49
|
socket = TCPServer.open(ip, port)
|
@@ -50,7 +54,11 @@ class OFController
|
|
50
54
|
end
|
51
55
|
|
52
56
|
def datapath_ids
|
53
|
-
@switches.keys
|
57
|
+
@switches.keys.map(&:to_i)
|
58
|
+
end
|
59
|
+
|
60
|
+
def switches
|
61
|
+
@switches.values
|
54
62
|
end
|
55
63
|
|
56
64
|
def send_message(datapath_id, msg = nil)
|
data/lib/switch.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OFController do
|
4
|
+
before(:all) do
|
5
|
+
class MyCtl < OFController
|
6
|
+
attr_reader :start_args
|
7
|
+
|
8
|
+
def start(*args)
|
9
|
+
@start_args = args
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
@ctl = OFController.create
|
14
|
+
Thread.new { @ctl.run('127.0.0.1', 4242, 'Hello World!', 42) }
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should create a subclass when inherited' do
|
18
|
+
expect(@ctl.class).to be(MyCtl)
|
19
|
+
expect(@ctl.logger.level).to eq(Logger::INFO)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should handle start' do
|
23
|
+
expect(@ctl.start_args).to eq(['Hello World!', 42])
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should start a switch when it receives a connection' do
|
27
|
+
socket = TCPSocket.new '127.0.0.1', 4242
|
28
|
+
|
29
|
+
# Exchange Hello messages
|
30
|
+
socket.write OFHello.new.to_binary_s
|
31
|
+
msg = OFParser.read socket
|
32
|
+
expect(msg.class).to be(OFHello)
|
33
|
+
|
34
|
+
# Exchange Echo messages
|
35
|
+
msg = OFParser.read socket
|
36
|
+
expect(msg.class).to be(OFEchoRequest)
|
37
|
+
# socket.write msg.to_reply.to_binary_s
|
38
|
+
socket.write OFEchoReply.new.to_binary_s
|
39
|
+
|
40
|
+
# Exchange Features messages
|
41
|
+
msg = OFParser.read socket
|
42
|
+
expect(msg.class).to be(OFFeaturesRequest)
|
43
|
+
socket.write OFFeaturesReply.new(datapath_id: 1).to_binary_s
|
44
|
+
|
45
|
+
sleep(0.001)
|
46
|
+
expect(@ctl.switches.length).to eq(1)
|
47
|
+
expect(@ctl.switches.first.datapath_id).to eq(1)
|
48
|
+
expect(@ctl.datapath_ids).to eq([1])
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative '../lib/openflow-controller'
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openflow-controller
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jérémy Pagé
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: openflow-protocol
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.1.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.1.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: colored
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,7 +77,10 @@ files:
|
|
77
77
|
- bin/ofctl
|
78
78
|
- lib/controller.rb
|
79
79
|
- lib/openflow-controller.rb
|
80
|
+
- lib/openflow-controller/version.rb
|
80
81
|
- lib/switch.rb
|
82
|
+
- spec/controller_spec.rb
|
83
|
+
- spec/spec_helper.rb
|
81
84
|
homepage: https://github.com/jejepage/openflow-controller
|
82
85
|
licenses:
|
83
86
|
- MIT
|
@@ -98,8 +101,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
101
|
version: '0'
|
99
102
|
requirements: []
|
100
103
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.
|
104
|
+
rubygems_version: 2.5.1
|
102
105
|
signing_key:
|
103
106
|
specification_version: 4
|
104
107
|
summary: OpenFlow Controller
|
105
|
-
test_files:
|
108
|
+
test_files:
|
109
|
+
- spec/controller_spec.rb
|
110
|
+
- spec/spec_helper.rb
|