openflow-controller 0.1.4 → 0.1.5

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