openflow-controller 0.1.4 → 0.1.5

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ofctl +42 -71
  3. data/lib/controller.rb +4 -4
  4. metadata +19 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b55169812a488fa57a7c87739769f155f821614
4
- data.tar.gz: 42f7ef4847a2f6858e5f486643accdc78bef68e9
3
+ metadata.gz: 5c4acadf7961136eb17add772ffdeefc969d4476
4
+ data.tar.gz: 9bd7eb4f73e9f23631f561eeb0947619bff9adcb
5
5
  SHA512:
6
- metadata.gz: ae798f44ea134543fcfbf0239bc1c6a3b995830e70babe2b3718d77c2467a9a3c1cbe6de15aa12e66ab52fc90b049ce3ecc43df0844031558528927b6a5384b4
7
- data.tar.gz: 37be1296345a3d69b6441bd3c704027ff282669cef09649212c944fbfd04646725a41fa5bd1a04b36c8d7f0f06e00728062d9189de050484a5eae0a4780e8128
6
+ metadata.gz: f68d7de83750edb01e19754f52a0f86125958b85d4c81f82acc0bafae6c260d9288416fad3c9406a5fe42e62739b93e01a7143162ad22ee247304731c418fb79
7
+ data.tar.gz: 3decb0031fe40e9d8e5b1a0010d1f09767639b28b9516ab30479eec65127f07bc77e91a70f922d21d9f37f3c7d4d21736ae49c7020dd936185ede3a7c0c40d9e
data/bin/ofctl CHANGED
@@ -1,91 +1,62 @@
1
1
  #!/usr/bin/env ruby
2
- require 'gli'
2
+ require 'cri'
3
3
  require 'readline'
4
4
  require_relative '../lib/controller'
5
5
 
6
6
  PROMPT = '> '
7
7
 
8
- def run_console(controller, ip, port, *args)
9
- Thread.new { controller.run ip, port, args }
8
+ command = Cri::Command.define do
9
+ name 'ofctl'
10
+ usage 'ofctl [options] [args]'
11
+ summary 'OpenFlow Controller command-line tool'
12
+ description 'OpenFlow Controller command-line tool'
10
13
 
11
- loop do
12
- begin
13
- puts " => #{eval(Readline.readline(PROMPT, true)).inspect}"
14
- rescue StandardError => e
15
- puts "#{e.class}: #{e.message}"
16
- end
14
+ flag :h, :help, 'show help for this command' do |value, cmd|
15
+ puts cmd.help
16
+ exit 0
17
17
  end
18
- end
18
+ flag :d, :debug, 'run controller in debug mode'
19
19
 
20
- module CommandLine
21
- extend GLI::App
20
+ option :i, :ip, 'IP address of the controller', argument: :optional
21
+ option :p, :port, 'port number of the controller', argument: :optional
22
+ option :c, :controller, 'custom controller file', argument: :optional
22
23
 
23
- program_desc 'OpenFlow Controller command-line tool'
24
+ run do |opts, args, _cmd|
25
+ load opts[:controller] unless opts[:controller].nil?
24
26
 
25
- desc 'Runs an OpenFlow Controller'
26
- arg_name 'controller', optional: false
27
- command :run do |c|
28
- c.flag :ip,
29
- desc: 'IP Address',
30
- must_match: /\d+\.\d+\.\d+\.\d+/,
31
- required: false,
32
- default_value: OFController::DEFAULT_IP_ADDRESS
33
- c.flag :port,
34
- desc: 'Port Number',
35
- type: Integer,
36
- required: false,
37
- default_value: OFController::DEFAULT_TCP_PORT
38
- c.switch :debug,
39
- desc: 'Run in Debug Mode',
40
- default_value: false
27
+ debug = opts[:debug] || false
41
28
 
42
- c.action do |_global_options, options, args|
43
- load args.first
44
- controller = if options[:debug]
45
- OFController.create(Logger::DEBUG)
46
- else
47
- OFController.create
48
- end
49
- controller.run options[:ip], options[:port], args[1..-1]
50
- end
51
- end
29
+ ctl = OFController.create(debug)
52
30
 
53
- desc 'Runs a Simple OpenFlow Controller with REPL'
54
- command :console do |c|
55
- c.flag :ip,
56
- desc: 'IP Address',
57
- must_match: /\d+\.\d+\.\d+\.\d+/,
58
- required: false,
59
- default_value: OFController::DEFAULT_IP_ADDRESS
60
- c.flag :port,
61
- desc: 'Port Number',
62
- type: Integer,
63
- required: false,
64
- default_value: OFController::DEFAULT_TCP_PORT
65
- c.switch :debug,
66
- desc: 'Run in Debug Mode',
67
- default_value: false
31
+ init_form = ctl.logger.formatter
32
+ ctl.logger.formatter = proc do |severity, datetime, progname, msg|
33
+ buf = PROMPT + Readline::line_buffer
34
+ "\r" + ' ' * buf.length + "\r" +
35
+ init_form.call(severity, datetime, progname, msg).blue +
36
+ buf
37
+ end
68
38
 
69
- c.action do |_global_options, options, args|
70
- controller = if options[:debug]
71
- OFController.new(Logger::DEBUG)
72
- else
73
- OFController.new
74
- end
39
+ ip = opts[:ip] || OFController::DEFAULT_IP_ADDRESS
40
+ port = opts[:port] || OFController::DEFAULT_TCP_PORT
75
41
 
76
- prompt = '> '
77
- controller.logger.formatter = proc do |severity, datetime, _progname, msg|
78
- buf = PROMPT + Readline::line_buffer
79
- "\r" + ' ' * buf.length + "\r" +
80
- "#{datetime} (#{severity}) -- #{msg}\n" +
81
- buf
42
+ Thread.abort_on_exception = true
43
+ Thread.new do
44
+ begin
45
+ ctl.run ip, port, args
46
+ rescue StandardError => e
47
+ puts "#{e.class}: #{e.message}".red
48
+ exit 1
82
49
  end
50
+ end
83
51
 
84
- run_console controller, options[:ip], options[:port], args
52
+ loop do
53
+ begin
54
+ puts " => #{eval(Readline.readline(PROMPT, true)).inspect}".green
55
+ rescue StandardError => e
56
+ puts "#{e.class}: #{e.message}".red
57
+ end
85
58
  end
86
59
  end
87
-
88
- default_command :help
89
-
90
- exit run(ARGV)
91
60
  end
61
+
62
+ command.run(ARGV)
@@ -15,7 +15,7 @@ class OFController
15
15
  end
16
16
 
17
17
  def self.create(*args)
18
- @controller_class.new(*args)
18
+ (@controller_class || self).new(*args)
19
19
  end
20
20
 
21
21
  def self.timer_event(handler, options)
@@ -29,18 +29,18 @@ class OFController
29
29
 
30
30
  attr_reader :logger
31
31
 
32
- def initialize(level = Logger::INFO)
32
+ def initialize(debug = false)
33
33
  @switches = {}
34
34
  @messages = {}
35
35
  @logger = Logger.new($stdout).tap do |logger|
36
36
  logger.formatter = proc do |severity, datetime, _progname, msg|
37
37
  "#{datetime} (#{severity}) -- #{msg}\n"
38
38
  end
39
- logger.level = level
39
+ logger.level = debug ? Logger::DEBUG : Logger::INFO
40
40
  end
41
41
  end
42
42
 
43
- def run(ip, port, *args)
43
+ def run(ip = DEFAULT_IP_ADDRESS, port = DEFAULT_TCP_PORT, *args)
44
44
  maybe_send_handler :start, *args
45
45
  socket = TCPServer.open(ip, port)
46
46
  socket.setsockopt(:SOCKET, :REUSEADDR, true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openflow-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
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: 2015-09-01 00:00:00.000000000 Z
11
+ date: 2015-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: openflow-protocol
@@ -25,19 +25,33 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: gli
28
+ name: colored
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.13'
33
+ version: '1.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.13'
40
+ version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement