trema 0.2.5 → 0.2.6
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.
- data/.gitignore +1 -1
- data/Doxyfile +1 -1
- data/Gemfile +18 -6
- data/README.md +112 -5
- data/Rakefile +3 -1
- data/Rantfile +88 -1
- data/bin/trema +248 -0
- data/bin/trema-config +59 -0
- data/cruise.rb +1 -1
- data/features/example.dumper.feature +45 -65
- data/features/example.hello_trema.feature +21 -0
- data/features/example.learning_switch.feature +26 -28
- data/features/example.list_switches.feature +19 -33
- data/features/example.message.echo_reply.feature +10 -10
- data/features/example.message.echo_request.feature +2 -2
- data/features/example.message.features_request.feature +6 -5
- data/features/example.message.hello.feature +47 -13
- data/features/example.message.set_config.feature +4 -4
- data/features/example.message.vendor-action.feature +23 -0
- data/features/example.multi_learning_switch.feature +14 -42
- data/features/example.packet_in.feature +31 -0
- data/features/example.packetin_filter_config.feature +11 -7
- data/features/example.patch_panel.feature +29 -0
- data/features/example.repeater_hub.feature +43 -40
- data/features/example.switch_info.feature +51 -0
- data/features/example.switch_monitor.feature +24 -42
- data/features/packetin_filter.feature +28 -22
- data/features/step_definitions/misc_steps.rb +19 -8
- data/features/step_definitions/send_packets_steps.rb +1 -10
- data/features/step_definitions/stats_steps.rb +4 -4
- data/features/support/env.rb +2 -1
- data/features/support/hooks.rb +35 -2
- data/features/switch_manager.feature +18 -12
- data/features/trema-config.feature +26 -39
- data/features/trema.dump_flows.feature +26 -12
- data/features/trema.help.feature +26 -0
- data/features/trema.kill.feature +39 -41
- data/features/trema.killall.feature +23 -23
- data/features/trema.reset_stats.feature +50 -10
- data/features/trema.run.feature +28 -39
- data/features/trema.send_packets.feature +29 -40
- data/features/trema.show_stats.feature +30 -33
- data/features/trema.up.feature +33 -0
- data/features/trema.version.feature +9 -0
- data/ruby/extconf.rb +7 -0
- data/ruby/trema/aggregate-stats-reply.rb +3 -3
- data/ruby/trema/app.rb +5 -1
- data/ruby/trema/barrier-request.c +55 -30
- data/ruby/trema/cli.rb +8 -8
- data/ruby/trema/command.rb +1 -3
- data/ruby/trema/command/dump_flows.rb +5 -24
- data/ruby/trema/command/kill.rb +31 -36
- data/ruby/trema/command/killall.rb +1 -19
- data/{features/step_definitions/kill_steps.rb → ruby/trema/command/netns.rb} +13 -5
- data/ruby/trema/command/reset_stats.rb +3 -23
- data/ruby/trema/command/ruby.rb +2 -19
- data/ruby/trema/command/run.rb +6 -27
- data/ruby/trema/command/send_packets.rb +6 -90
- data/ruby/trema/command/show_stats.rb +21 -40
- data/ruby/trema/command/up.rb +5 -26
- data/ruby/trema/command/version.rb +1 -5
- data/ruby/trema/controller.c +14 -16
- data/ruby/trema/custom-switch.rb +56 -0
- data/ruby/trema/desc-stats-reply.rb +5 -5
- data/ruby/trema/dsl/configuration.rb +4 -0
- data/{features/step_definitions/up_steps.rb → ruby/trema/dsl/custom-switch.rb} +18 -4
- data/ruby/trema/dsl/netns.rb +78 -0
- data/ruby/trema/dsl/parser.rb +2 -0
- data/ruby/trema/dsl/runner.rb +8 -0
- data/ruby/trema/dsl/syntax.rb +18 -0
- data/ruby/trema/echo-reply.h +2 -2
- data/ruby/trema/echo-request.c +3 -5
- data/ruby/trema/enqueue.rb +2 -2
- data/ruby/trema/error.c +3 -3
- data/ruby/trema/executables.rb +26 -2
- data/ruby/trema/features-request.c +3 -5
- data/ruby/trema/flow-removed.c +6 -6
- data/ruby/trema/flow-stats-reply.rb +6 -8
- data/ruby/trema/flow.rb +12 -1
- data/ruby/trema/get-config-request.c +55 -28
- data/ruby/trema/hello.c +3 -5
- data/ruby/trema/host.rb +8 -0
- data/ruby/trema/list-switches-reply.c +1 -1
- data/ruby/trema/mac.rb +1 -1
- data/ruby/trema/match.c +15 -14
- data/ruby/trema/monkey-patch/module/deprecation.rb +0 -2
- data/ruby/trema/netns.rb +127 -0
- data/ruby/trema/ordered-hash.rb +5 -4
- data/ruby/trema/packet-in.c +136 -113
- data/ruby/trema/packet-queue.rb +9 -9
- data/ruby/trema/packetin-filter.rb +1 -1
- data/ruby/trema/phost.rb +16 -7
- data/ruby/trema/port-mod.c +6 -5
- data/ruby/trema/port-stats-reply.rb +2 -2
- data/ruby/trema/process.rb +29 -0
- data/ruby/trema/queue-stats-reply.rb +2 -4
- data/ruby/trema/send-out-port.rb +5 -3
- data/ruby/trema/set-eth-addr.rb +4 -0
- data/ruby/trema/set-ip-addr.rb +4 -2
- data/ruby/trema/set-ip-dst-addr.rb +2 -1
- data/ruby/trema/set-ip-src-addr.rb +2 -1
- data/ruby/trema/set-ip-tos.rb +3 -2
- data/ruby/trema/set-transport-port.rb +3 -2
- data/ruby/trema/set-vlan-priority.rb +3 -2
- data/ruby/trema/set-vlan-vid.rb +5 -4
- data/ruby/trema/shell/reset_stats.rb +2 -1
- data/ruby/trema/shell/run.rb +1 -1
- data/ruby/trema/shell/send_packets.rb +1 -1
- data/ruby/trema/shell/show_stats.rb +1 -1
- data/ruby/trema/stats-helper.rb +3 -3
- data/ruby/trema/stats-reply.c +26 -17
- data/ruby/trema/stats-request.c +39 -41
- data/ruby/trema/switch-daemon.rb +36 -31
- data/ruby/trema/switch.c +1 -1
- data/ruby/trema/table-stats-reply.rb +1 -1
- data/ruby/trema/timers.rb +13 -13
- data/ruby/trema/trema.c +3 -3
- data/ruby/trema/tremashark.rb +9 -2
- data/ruby/trema/util.rb +39 -15
- data/ruby/trema/vendor-action.rb +8 -3
- data/ruby/trema/vendor-stats-reply.rb +4 -6
- data/ruby/trema/vendor.c +1 -1
- data/ruby/trema/version.rb +1 -1
- data/spec/trema/barrier-request_spec.rb +47 -37
- data/spec/trema/controller_spec.rb +1 -0
- data/spec/trema/dsl/runner_spec.rb +8 -3
- data/spec/trema/dsl/vhost_spec.rb +8 -8
- data/spec/trema/echo-request_spec.rb +1 -0
- data/spec/trema/features-request_spec.rb +1 -0
- data/spec/trema/flow-removed_spec.rb +9 -9
- data/spec/trema/get-config-request_spec.rb +51 -39
- data/spec/trema/match_spec.rb +1 -1
- data/spec/trema/openflow-error_spec.rb +11 -11
- data/spec/trema/packet-out_spec.rb +5 -5
- data/spec/trema/queue-get-config-reply_spec.rb +1 -1
- data/spec/trema/queue-get-config-request_spec.rb +1 -1
- data/spec/trema/set-eth-dst-addr_spec.rb +1 -1
- data/spec/trema/set-eth-src-addr_spec.rb +1 -1
- data/spec/trema/set-ip-dst-addr_spec.rb +1 -0
- data/spec/trema/set-ip-src-addr_spec.rb +1 -0
- data/spec/trema/set-ip-tos_spec.rb +1 -0
- data/spec/trema/set-transport-dst-port_spec.rb +1 -0
- data/spec/trema/set-transport-src-port_spec.rb +1 -0
- data/spec/trema/set-vlan-priority_spec.rb +1 -0
- data/spec/trema/set-vlan-vid_spec.rb +2 -1
- data/spec/trema/stats-reply_spec.rb +38 -36
- data/spec/trema/stats-request_spec.rb +6 -6
- data/spec/trema/strip-vlan-header_spec.rb +1 -0
- data/spec/trema/util_spec.rb +3 -2
- data/spec/trema/vendor-action_spec.rb +9 -8
- data/src/examples/dumper/dumper.c +8 -6
- data/src/examples/dumper/dumper.rb +1 -1
- data/{features/step_definitions/killall_steps.rb → src/examples/hello_trema/hello-trema.rb} +6 -5
- data/src/examples/hello_trema/hello_trema.c +4 -4
- data/src/examples/learning_switch/learning_switch.c +1 -1
- data/src/examples/list_switches/list_switches.c +2 -2
- data/src/examples/match_compare/match-compare.rb +2 -2
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +1 -1
- data/src/examples/multi_learning_switch/multi_learning_switch.c +3 -3
- data/src/examples/openflow_message/README +1 -1
- data/src/examples/openflow_message/echo-request.rb +1 -1
- data/src/examples/openflow_message/features_request.c +21 -21
- data/src/examples/openflow_message/hello.c +1 -3
- data/src/examples/openflow_message/hello.rb +9 -24
- data/src/examples/{hello_trema/hello_trema.rb → openflow_message/vendor-action.rb} +17 -7
- data/src/examples/openflow_message/vendor_action.c +105 -0
- data/src/examples/openflow_switch/hello_switch.c +81 -0
- data/src/examples/packet_in/packet-in.rb +9 -13
- data/src/examples/packetin_filter_config/packetin_filter_config.c +2 -2
- data/src/examples/patch_panel/network.conf +14 -0
- data/src/examples/patch_panel/patch-panel.conf +1 -0
- data/{features/step_definitions/show_stats_steps.rb → src/examples/patch_panel/patch-panel.rb} +29 -13
- data/src/examples/switch_info/{switch_info.rb → switch-info.rb} +2 -2
- data/src/examples/switch_info/switch_info.c +4 -4
- data/src/examples/switch_monitor/switch_monitor.c +3 -3
- data/src/examples/traffic_monitor/counter.c +9 -9
- data/src/examples/traffic_monitor/fdb.c +9 -9
- data/src/lib/arp.h +1 -1
- data/src/lib/buffer.c +4 -3
- data/src/lib/byteorder.c +31 -5
- data/src/lib/byteorder.h +2 -2
- data/src/lib/chibach.c +8 -6
- data/src/lib/daemon.c +29 -3
- data/src/lib/doubly_linked_list.c +6 -1
- data/src/lib/ether.c +1 -1
- data/src/lib/ether.h +1 -1
- data/src/lib/event_handler.c +3 -3
- data/src/lib/hash_table.c +1 -1
- data/src/lib/linked_list.c +50 -2
- data/src/lib/linked_list.h +2 -2
- data/src/lib/log.c +122 -22
- data/src/lib/log.h +13 -9
- data/src/lib/management_interface.c +361 -0
- data/src/lib/management_interface.h +42 -0
- data/src/lib/management_service_interface.c +104 -0
- data/src/lib/management_service_interface.h +136 -0
- data/src/lib/match_table.c +5 -5
- data/src/lib/message_queue.c +5 -3
- data/src/lib/message_queue.h +1 -1
- data/src/lib/messenger.c +73 -39
- data/src/lib/messenger.h +3 -2
- data/src/lib/openflow_application_interface.c +17 -17
- data/src/lib/openflow_message.c +175 -23
- data/src/lib/openflow_message.h +2 -1
- data/src/lib/openflow_switch_interface.c +12 -12
- data/src/lib/packet_parser.c +11 -32
- data/src/lib/packetin_filter_interface.c +5 -5
- data/src/lib/persistent_storage.c +7 -7
- data/src/lib/secure_channel.c +6 -6
- data/src/lib/secure_channel.h +1 -1
- data/src/lib/stat.c +54 -17
- data/src/lib/stat.h +9 -0
- data/src/lib/timer.c +11 -10
- data/src/lib/trema.c +38 -9
- data/src/lib/trema.h +1 -0
- data/src/lib/trema_private.h +6 -0
- data/src/lib/trema_wrapper.c +4 -4
- data/src/lib/trema_wrapper.h +10 -10
- data/src/lib/utility.c +6 -6
- data/src/management/application.c +224 -0
- data/src/management/echo.c +185 -0
- data/src/management/set_logging_level.c +153 -0
- data/src/management/show_stats.c +150 -0
- data/src/management/trema_manager +184 -0
- data/src/packetin_filter/packetin_filter.c +31 -29
- data/src/switch_manager/cookie_table.c +7 -7
- data/src/switch_manager/dpid_table.c +3 -3
- data/src/switch_manager/dpid_table.h +0 -1
- data/src/switch_manager/management_interface.h +0 -1
- data/src/switch_manager/ofpmsg_recv.c +3 -3
- data/src/switch_manager/ofpmsg_recv.h +0 -1
- data/src/switch_manager/ofpmsg_send.c +2 -2
- data/src/switch_manager/ofpmsg_send.h +0 -1
- data/src/switch_manager/secure_channel_listener.c +2 -2
- data/src/switch_manager/secure_channel_receiver.c +2 -2
- data/src/switch_manager/secure_channel_receiver.h +0 -1
- data/src/switch_manager/secure_channel_sender.c +8 -1
- data/src/switch_manager/service_interface.c +5 -4
- data/src/switch_manager/switch.c +79 -53
- data/src/switch_manager/switch_manager.c +24 -22
- data/src/switch_manager/xid_table.c +6 -6
- data/src/switch_manager/xid_table.h +0 -1
- data/src/tremashark/README +4 -3
- data/src/tremashark/packet_capture.c +11 -9
- data/src/tremashark/pcap_queue.c +2 -2
- data/src/tremashark/pcap_queue.h +2 -2
- data/src/tremashark/plugin/packet-trema/Makefile +1 -1
- data/src/tremashark/plugin/packet-trema/Makefile.common +1 -1
- data/src/tremashark/plugin/packet-trema/packet-trema.c +50 -37
- data/src/tremashark/queue.c +5 -4
- data/src/tremashark/queue.h +1 -1
- data/src/tremashark/stdin_relay.c +10 -8
- data/src/tremashark/syslog_relay.c +14 -12
- data/src/tremashark/tremashark.c +15 -18
- data/trema +2 -96
- data/trema-config +2 -52
- data/trema.gemspec +12 -1
- data/unittests/cmockery_trema.h +14 -13
- data/unittests/lib/buffer_test.c +1 -1
- data/unittests/lib/byteorder_test.c +108 -25
- data/unittests/lib/daemon_test.c +141 -5
- data/unittests/lib/doubly_linked_list_test.c +5 -1
- data/unittests/lib/ether_test.c +4 -4
- data/unittests/lib/hash_table_test.c +5 -3
- data/unittests/lib/linked_list_test.c +82 -4
- data/unittests/lib/log_test.c +96 -5
- data/unittests/lib/management_interface_test.c +240 -0
- data/unittests/lib/management_service_interface_test.c +319 -0
- data/unittests/lib/message_queue_test.c +6 -2
- data/unittests/lib/messenger_test.c +167 -2
- data/unittests/lib/openflow_application_interface_test.c +16 -22
- data/unittests/lib/openflow_message_test.c +721 -24
- data/unittests/lib/packet_info_test.c +2 -2
- data/unittests/lib/packet_parser_test.c +15 -16
- data/unittests/lib/packetin_filter_interface_test.c +6 -6
- data/unittests/lib/persistent_storage_test.c +11 -11
- data/unittests/lib/stat_test.c +151 -7
- data/unittests/lib/timer_test.c +1 -1
- data/unittests/lib/trema_private_test.c +2 -2
- data/unittests/lib/trema_test.c +40 -12
- data/unittests/lib/utility_test.c +3 -3
- data/unittests/lib/wrapper_test.c +3 -3
- data/unittests/packetin_filter/packetin_filter_test.c +12 -11
- data/unittests/switch_manager/switch_manager_test.c +29 -22
- metadata +99 -20
- data/features/step_definitions/log_steps.rb +0 -90
- data/features/step_definitions/run_steps.rb +0 -91
- data/features/trema.feature +0 -27
- data/features/tutorial.hello_trema.feature +0 -27
- data/features/tutorial.packet_in.feature +0 -47
- data/features/tutorial.switch_info.feature +0 -55
- data/ruby/trema/command/usage.rb +0 -63
data/ruby/trema/echo-reply.h
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
#ifndef ECHO_REPLY_H
|
|
20
|
-
#define
|
|
20
|
+
#define ECHO_REPLY_H
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
#include "ruby.h"
|
|
@@ -29,7 +29,7 @@ extern VALUE cEchoReply;
|
|
|
29
29
|
void Init_echo_reply( void );
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
#endif
|
|
32
|
+
#endif // ECHO_REPLY_H
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
/*
|
data/ruby/trema/echo-request.c
CHANGED
|
@@ -17,8 +17,6 @@
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
#include "echo.h"
|
|
20
|
-
#include "ruby.h"
|
|
21
|
-
#include "trema.h"
|
|
22
20
|
#include "trema-ruby-utils.h"
|
|
23
21
|
|
|
24
22
|
|
|
@@ -46,7 +44,7 @@ echo_request_alloc( VALUE klass ) {
|
|
|
46
44
|
* @example
|
|
47
45
|
* EchoRequest.new( 123 )
|
|
48
46
|
* @param [Integer] transaction_id
|
|
49
|
-
* An unsigned
|
|
47
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
50
48
|
*
|
|
51
49
|
* @overload initialize(options)
|
|
52
50
|
* @example
|
|
@@ -56,9 +54,9 @@ echo_request_alloc( VALUE klass ) {
|
|
|
56
54
|
* )
|
|
57
55
|
* @param [Hash] options
|
|
58
56
|
* the options to create a message with.
|
|
59
|
-
* @option options [Number] :xid
|
|
57
|
+
* @option options [Number] :xid an alias to transaction_id.
|
|
60
58
|
* @option options [Number] :transaction_id
|
|
61
|
-
* An unsigned
|
|
59
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
62
60
|
* If not specified, an auto-generated value is set.
|
|
63
61
|
* @option options [String] :user_data
|
|
64
62
|
* the user data field specified as a String may be a message timestamp to check latency,
|
data/ruby/trema/enqueue.rb
CHANGED
|
@@ -60,13 +60,13 @@ module Trema
|
|
|
60
60
|
if @port_number.nil?
|
|
61
61
|
raise ArgumentError, "Port number is a mandatory option"
|
|
62
62
|
end
|
|
63
|
-
|
|
63
|
+
unless @port_number.unsigned_16bit?
|
|
64
64
|
raise ArgumentError, "Port number must be an unsigned 16-bit integer"
|
|
65
65
|
end
|
|
66
66
|
if @queue_id.nil?
|
|
67
67
|
raise ArgumentError, "Queue ID is a mandatory option"
|
|
68
68
|
end
|
|
69
|
-
|
|
69
|
+
unless @queue_id.unsigned_32bit?
|
|
70
70
|
raise ArgumentError, "Queue ID must be an unsigned 32-bit integer"
|
|
71
71
|
end
|
|
72
72
|
else
|
data/ruby/trema/error.c
CHANGED
|
@@ -234,9 +234,9 @@ Init_error() {
|
|
|
234
234
|
rb_define_const( mTrema, "OFPPMFC_BAD_HW_ADDR", INT2NUM( OFPPMFC_BAD_HW_ADDR ) );
|
|
235
235
|
|
|
236
236
|
rb_define_const( mTrema, "OFPET_QUEUE_OP_FAILED", INT2NUM( OFPET_QUEUE_OP_FAILED ) );
|
|
237
|
-
rb_define_const( mTrema, "OFPQOFC_BAD_PORT", INT2NUM(OFPQOFC_BAD_PORT));
|
|
238
|
-
rb_define_const( mTrema, "OFPQOFC_BAD_QUEUE", INT2NUM(OFPQOFC_BAD_QUEUE));
|
|
239
|
-
rb_define_const( mTrema, "OFPQOFC_EPERM", INT2NUM(OFPQOFC_EPERM));
|
|
237
|
+
rb_define_const( mTrema, "OFPQOFC_BAD_PORT", INT2NUM( OFPQOFC_BAD_PORT ) );
|
|
238
|
+
rb_define_const( mTrema, "OFPQOFC_BAD_QUEUE", INT2NUM( OFPQOFC_BAD_QUEUE ) );
|
|
239
|
+
rb_define_const( mTrema, "OFPQOFC_EPERM", INT2NUM( OFPQOFC_EPERM ) );
|
|
240
240
|
|
|
241
241
|
cError = rb_define_class_under( mTrema, "Error", rb_cObject );
|
|
242
242
|
|
data/ruby/trema/executables.rb
CHANGED
|
@@ -24,13 +24,21 @@ require "trema/path"
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
#
|
|
27
|
-
# Holds
|
|
27
|
+
# Holds a list of executables found in Trema.objects directory.
|
|
28
28
|
#
|
|
29
29
|
class Trema::Executables
|
|
30
30
|
class << self
|
|
31
|
+
#
|
|
32
|
+
# Cycles through a list of file names testing if there are executable or
|
|
33
|
+
# not.
|
|
34
|
+
#
|
|
35
|
+
# @return [FalseClass, Array]
|
|
36
|
+
# false if a file name is not an executable program or a list of all
|
|
37
|
+
# file names that are.
|
|
38
|
+
#
|
|
31
39
|
def compiled?
|
|
32
40
|
@list.each do | each |
|
|
33
|
-
return false
|
|
41
|
+
return false unless FileTest.executable?( __send__ each )
|
|
34
42
|
end
|
|
35
43
|
end
|
|
36
44
|
|
|
@@ -40,12 +48,28 @@ class Trema::Executables
|
|
|
40
48
|
############################################################################
|
|
41
49
|
|
|
42
50
|
|
|
51
|
+
#
|
|
52
|
+
# Adds the name to a list.
|
|
53
|
+
#
|
|
43
54
|
def add name
|
|
44
55
|
@list ||= []
|
|
45
56
|
@list << name
|
|
46
57
|
end
|
|
47
58
|
|
|
48
59
|
|
|
60
|
+
#
|
|
61
|
+
# Defines a class method that returns the full path name of an executable
|
|
62
|
+
# program constructed from its relative path. It also adds the
|
|
63
|
+
# class method name to an array.
|
|
64
|
+
#
|
|
65
|
+
# @example
|
|
66
|
+
# path "openvswitch/bin/ovs-ofctl"
|
|
67
|
+
#
|
|
68
|
+
# @param [String] path
|
|
69
|
+
# the relative path to an executable program.
|
|
70
|
+
#
|
|
71
|
+
# @return [Array] a list of a class method to access each executable program.
|
|
72
|
+
#
|
|
49
73
|
def path path
|
|
50
74
|
name = File.basename( path ).underscore
|
|
51
75
|
define_class_method( name ) do
|
|
@@ -16,9 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
#include "ruby.h"
|
|
20
19
|
#include "trema-ruby-utils.h"
|
|
21
|
-
#include "trema.h"
|
|
22
20
|
|
|
23
21
|
|
|
24
22
|
extern VALUE mTrema;
|
|
@@ -43,7 +41,7 @@ features_request_alloc( VALUE klass ) {
|
|
|
43
41
|
* @example
|
|
44
42
|
* FeaturesRequest.new( 123 )
|
|
45
43
|
* @param [Integer] transaction_id
|
|
46
|
-
* An unsigned
|
|
44
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
47
45
|
*
|
|
48
46
|
* @overload initialize(options)
|
|
49
47
|
* @example
|
|
@@ -51,9 +49,9 @@ features_request_alloc( VALUE klass ) {
|
|
|
51
49
|
* FeaturesRequest.new( :transaction_id => 123 )
|
|
52
50
|
* @param [Hash] options
|
|
53
51
|
* the options to create a message with.
|
|
54
|
-
* @option options [Number] :xid
|
|
52
|
+
* @option options [Number] :xid an alias to transaction_id.
|
|
55
53
|
* @option options [Number] :transaction_id
|
|
56
|
-
* An unsigned
|
|
54
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
57
55
|
* If not specified, an auto-generated value is set.
|
|
58
56
|
*
|
|
59
57
|
* @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
|
data/ruby/trema/flow-removed.c
CHANGED
|
@@ -34,8 +34,8 @@ VALUE cFlowRemoved;
|
|
|
34
34
|
* Returns an object that encapsulates the +OPPT_FLOW_REMOVED+ OpenFlow message.
|
|
35
35
|
*
|
|
36
36
|
* @overload initialize(options={})
|
|
37
|
-
* @example
|
|
38
|
-
* FlowRemoved.new(
|
|
37
|
+
* @example
|
|
38
|
+
* FlowRemoved.new(
|
|
39
39
|
* :datapath_id => 0xabc,
|
|
40
40
|
* :transaction_id => 0,
|
|
41
41
|
* :match => Match,
|
|
@@ -59,15 +59,15 @@ VALUE cFlowRemoved;
|
|
|
59
59
|
* unsolicited message transaction_id is zero.
|
|
60
60
|
*
|
|
61
61
|
* @option options [Symbol] :match
|
|
62
|
-
* a {Match} object describing the flow fields copied from the corresponding
|
|
62
|
+
* a {Match} object describing the flow fields copied from the corresponding
|
|
63
63
|
* flow setup message.
|
|
64
64
|
*
|
|
65
65
|
* @option options [Symbol] :cookie
|
|
66
|
-
* an opaque handle copied from the corresponding
|
|
66
|
+
* an opaque handle copied from the corresponding
|
|
67
67
|
* flow setup message.
|
|
68
68
|
*
|
|
69
69
|
* @option options [Symbol] :priority
|
|
70
|
-
* the priority level of the flow copied from the corresponding
|
|
70
|
+
* the priority level of the flow copied from the corresponding
|
|
71
71
|
* flow setup message.
|
|
72
72
|
*
|
|
73
73
|
* @option options [Symbol] :reason
|
|
@@ -80,7 +80,7 @@ VALUE cFlowRemoved;
|
|
|
80
80
|
* the number of nanoseconds the flow was active.
|
|
81
81
|
*
|
|
82
82
|
* @option options [Symbol] :idle_timeout
|
|
83
|
-
* time elapsed in seconds before the flow is removed, copied from the
|
|
83
|
+
* time elapsed in seconds before the flow is removed, copied from the
|
|
84
84
|
* corresponding flow setup message.
|
|
85
85
|
*
|
|
86
86
|
* @option options [Symbol] :packet_count
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
#
|
|
4
2
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
#
|
|
6
4
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -27,7 +25,7 @@ module Trema
|
|
|
27
25
|
%w(priority idle_timeout hard_timeout cookie packet_count byte_count actions)
|
|
28
26
|
FIELDS.each { |field| attr_reader field.intern }
|
|
29
27
|
|
|
30
|
-
|
|
28
|
+
|
|
31
29
|
# Flow counters for one or more matched flows.
|
|
32
30
|
# A user would not explicitly instantiate a {FlowStatsReply} object but
|
|
33
31
|
# would be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_FLOW)+
|
|
@@ -35,10 +33,10 @@ module Trema
|
|
|
35
33
|
#
|
|
36
34
|
# @overload initialize(options={})
|
|
37
35
|
#
|
|
38
|
-
# @example
|
|
36
|
+
# @example
|
|
39
37
|
# FlowStatsReply.new(
|
|
40
38
|
# :length => 96,
|
|
41
|
-
# :table_id => 0,
|
|
39
|
+
# :table_id => 0,
|
|
42
40
|
# :match => Match.new
|
|
43
41
|
# :duration_sec => 10,
|
|
44
42
|
# :duration_nsec => 106000000,
|
|
@@ -77,7 +75,7 @@ module Trema
|
|
|
77
75
|
# no deletion.
|
|
78
76
|
#
|
|
79
77
|
# @option options [Number] :hard_timeout
|
|
80
|
-
# a fixed time interval before the flow is deleted. Zero means no
|
|
78
|
+
# a fixed time interval before the flow is deleted. Zero means no
|
|
81
79
|
# deletion.
|
|
82
80
|
#
|
|
83
81
|
# @option options [Number] :cookie
|
|
@@ -93,9 +91,9 @@ module Trema
|
|
|
93
91
|
# an array of action objects for the flow.
|
|
94
92
|
#
|
|
95
93
|
# @return [FlowStatsReply]
|
|
96
|
-
# an object that encapsulates the OFPST_STATS_REPLY(
|
|
94
|
+
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_FLOW) OpenFlow message.
|
|
97
95
|
#
|
|
98
|
-
def initialize options
|
|
96
|
+
def initialize options
|
|
99
97
|
super FIELDS, options
|
|
100
98
|
end
|
|
101
99
|
end
|
data/ruby/trema/flow.rb
CHANGED
|
@@ -20,9 +20,19 @@
|
|
|
20
20
|
|
|
21
21
|
module Trema
|
|
22
22
|
class Flow
|
|
23
|
-
attr_reader :dl_type
|
|
24
23
|
|
|
25
24
|
|
|
25
|
+
#
|
|
26
|
+
# Parses a text line of OpenFlow switch's dump-flows command into a Flow
|
|
27
|
+
# object's dynamic created attributes. A line consists of multiple
|
|
28
|
+
# comma separated key=value fields. A key field may have multiple values
|
|
29
|
+
# specified as key=value#1,value#2,..value#n.
|
|
30
|
+
#
|
|
31
|
+
# @param [String] line the text line to parse.
|
|
32
|
+
#
|
|
33
|
+
# @return [self] the object that holds the parsed key=value fields
|
|
34
|
+
# as attributes.
|
|
35
|
+
#
|
|
26
36
|
def self.parse line
|
|
27
37
|
flow = self.new
|
|
28
38
|
# to simplify parsing
|
|
@@ -41,6 +51,7 @@ module Trema
|
|
|
41
51
|
end
|
|
42
52
|
|
|
43
53
|
|
|
54
|
+
# @return [Boolean] whether a flow is a user registered flow or not.
|
|
44
55
|
def users_flow?
|
|
45
56
|
not ( ( @actions == "drop" and @priority == 0 ) or
|
|
46
57
|
@actions == "CONTROLLER:65535" )
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
2
|
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
3
|
*
|
|
6
4
|
* This program is free software; you can redistribute it and/or modify
|
|
@@ -18,8 +16,7 @@
|
|
|
18
16
|
*/
|
|
19
17
|
|
|
20
18
|
|
|
21
|
-
#include "trema.h"
|
|
22
|
-
#include "ruby.h"
|
|
19
|
+
#include "trema-ruby-utils.h"
|
|
23
20
|
|
|
24
21
|
|
|
25
22
|
extern VALUE mTrema;
|
|
@@ -34,44 +31,77 @@ get_config_request_alloc( VALUE klass ) {
|
|
|
34
31
|
|
|
35
32
|
|
|
36
33
|
/*
|
|
37
|
-
* Creates a {GetConfigRequest} instance to query configuration parameters
|
|
34
|
+
* Creates a {GetConfigRequest} instance to query configuration parameters
|
|
38
35
|
* from the switch.
|
|
39
36
|
*
|
|
40
|
-
* @overload initialize(
|
|
37
|
+
* @overload initialize()
|
|
41
38
|
* @example
|
|
42
39
|
* GetConfigRequest.new
|
|
43
|
-
* GetConfigRequest.new( :transaction_id => 123 )
|
|
44
40
|
*
|
|
41
|
+
* @overload initialize(transaction_id)
|
|
42
|
+
* @example
|
|
43
|
+
* GetConfigRequest.new( 123 )
|
|
44
|
+
* @param [Integer] transaction_id
|
|
45
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
46
|
+
*
|
|
47
|
+
* @overload initialize(options)
|
|
48
|
+
* @example
|
|
49
|
+
* GetConfigRequest.new( :xid => 123 )
|
|
50
|
+
* GetConfigRequest.new( :transaction_id => 123 )
|
|
45
51
|
* @param [Hash] options
|
|
46
52
|
* the options to create a message with.
|
|
47
|
-
*
|
|
53
|
+
* @option options [Number] :xid an alias to transaction_id.
|
|
48
54
|
* @option options [Number] :transaction_id
|
|
49
|
-
* An unsigned 32-bit integer
|
|
50
|
-
*
|
|
51
|
-
* @raise [ArgumentError] if transaction id is not an unsigned 32-bit integer.
|
|
52
|
-
* @raise [TypeError] if options is not a hash.
|
|
55
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
56
|
+
* If not specified, an auto-generated value is set.
|
|
53
57
|
*
|
|
54
|
-
*
|
|
58
|
+
* @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
|
|
59
|
+
* @raise [TypeError] if argument is not a Integer or a Hash.
|
|
60
|
+
* @return [GetConfigRequest]
|
|
55
61
|
* an object that encapsulates the +OFPT_GET_CONFIG+ OpenFlow message.
|
|
56
62
|
*/
|
|
57
63
|
static VALUE
|
|
58
64
|
get_config_request_init( int argc, VALUE *argv, VALUE self ) {
|
|
59
65
|
buffer *get_config_request;
|
|
60
66
|
Data_Get_Struct( self, buffer, get_config_request );
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if ( rb_scan_args( argc, argv, "01", &options ) ==
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
VALUE options = Qnil;
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if ( rb_scan_args( argc, argv, "01", &options ) == 0 ) {
|
|
71
|
+
set_xid( get_config_request, get_transaction_id() );
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if ( options == Qnil ) {
|
|
75
|
+
set_xid( get_config_request, get_transaction_id() );
|
|
76
|
+
}
|
|
77
|
+
else if ( rb_obj_is_kind_of( options, rb_cInteger ) == Qtrue ) {
|
|
78
|
+
validate_xid( options );
|
|
79
|
+
set_xid( get_config_request, ( uint32_t ) NUM2UINT( options ) );
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
Check_Type( options, T_HASH );
|
|
83
|
+
VALUE tmp = Qnil;
|
|
84
|
+
VALUE xid = Qnil;
|
|
85
|
+
|
|
86
|
+
tmp = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) );
|
|
87
|
+
if ( tmp != Qnil ) {
|
|
88
|
+
xid = tmp;
|
|
89
|
+
}
|
|
90
|
+
tmp = rb_hash_aref( options, ID2SYM( rb_intern( "xid" ) ) );
|
|
91
|
+
if ( tmp != Qnil ) {
|
|
92
|
+
xid = tmp;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if ( xid != Qnil ) {
|
|
96
|
+
validate_xid( xid );
|
|
97
|
+
set_xid( get_config_request, ( uint32_t ) NUM2UINT( xid ) );
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
set_xid( get_config_request, get_transaction_id() );
|
|
70
101
|
}
|
|
71
|
-
xid = ( uint32_t ) NUM2UINT( xid_ruby );
|
|
72
102
|
}
|
|
73
103
|
}
|
|
74
|
-
|
|
104
|
+
|
|
75
105
|
return self;
|
|
76
106
|
}
|
|
77
107
|
|
|
@@ -83,10 +113,7 @@ get_config_request_init( int argc, VALUE *argv, VALUE self ) {
|
|
|
83
113
|
*/
|
|
84
114
|
static VALUE
|
|
85
115
|
get_config_request_transaction_id( VALUE self ) {
|
|
86
|
-
|
|
87
|
-
Data_Get_Struct( self, buffer, get_config_request );
|
|
88
|
-
uint32_t xid = ntohl( ( ( struct ofp_header * ) ( get_config_request->data ) )->xid );
|
|
89
|
-
return UINT2NUM( xid );
|
|
116
|
+
return get_xid( self );
|
|
90
117
|
}
|
|
91
118
|
|
|
92
119
|
|
data/ruby/trema/hello.c
CHANGED
|
@@ -16,8 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
#include "ruby.h"
|
|
20
|
-
#include "trema.h"
|
|
21
19
|
#include "trema-ruby-utils.h"
|
|
22
20
|
|
|
23
21
|
|
|
@@ -43,7 +41,7 @@ hello_alloc( VALUE klass ) {
|
|
|
43
41
|
* @example
|
|
44
42
|
* Hello.new( 123 )
|
|
45
43
|
* @param [Integer] transaction_id
|
|
46
|
-
* An unsigned
|
|
44
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
47
45
|
*
|
|
48
46
|
* @overload initialize(options)
|
|
49
47
|
* @example
|
|
@@ -51,9 +49,9 @@ hello_alloc( VALUE klass ) {
|
|
|
51
49
|
* Hello.new( :transaction_id => 123 )
|
|
52
50
|
* @param [Hash] options
|
|
53
51
|
* the options to create a message with.
|
|
54
|
-
* @option options [Number] :xid
|
|
52
|
+
* @option options [Number] :xid an alias to transaction_id.
|
|
55
53
|
* @option options [Number] :transaction_id
|
|
56
|
-
* An unsigned
|
|
54
|
+
* An unsigned 32-bit integer number associated with this message.
|
|
57
55
|
* If not specified, an auto-generated value is set.
|
|
58
56
|
*
|
|
59
57
|
* @raise [ArgumentError] if transaction ID is not an unsigned 32-bit integer.
|
data/ruby/trema/host.rb
CHANGED
|
@@ -206,6 +206,14 @@ module Trema
|
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
#
|
|
210
|
+
# Check stats type and delegate processing.
|
|
211
|
+
#
|
|
212
|
+
# @raise [RuntimeError] if stats type is invalid.
|
|
213
|
+
#
|
|
214
|
+
# @return [Stat]
|
|
215
|
+
# the object that represents the results of a particular stats type.
|
|
216
|
+
#
|
|
209
217
|
def stats type
|
|
210
218
|
case type
|
|
211
219
|
when :tx
|