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/command/up.rb
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
#
|
|
2
|
-
# trema up command.
|
|
3
|
-
#
|
|
4
|
-
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
-
#
|
|
6
2
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
3
|
#
|
|
8
4
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -20,8 +16,6 @@
|
|
|
20
16
|
#
|
|
21
17
|
|
|
22
18
|
|
|
23
|
-
require "optparse"
|
|
24
|
-
require "trema/dsl"
|
|
25
19
|
require "trema/util"
|
|
26
20
|
|
|
27
21
|
|
|
@@ -30,29 +24,14 @@ module Trema
|
|
|
30
24
|
include Trema::Util
|
|
31
25
|
|
|
32
26
|
|
|
33
|
-
def
|
|
34
|
-
|
|
35
|
-
options.banner = "Usage: trema up NAME [OPTIONS ...]"
|
|
36
|
-
|
|
37
|
-
options.on( "-h", "--help" ) do
|
|
38
|
-
puts options.to_s
|
|
39
|
-
exit 0
|
|
40
|
-
end
|
|
41
|
-
options.on( "-v", "--verbose" ) do
|
|
42
|
-
$verbose = true
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
options.parse! ARGV
|
|
46
|
-
|
|
47
|
-
context = Trema::DSL::Context.load_current
|
|
48
|
-
|
|
49
|
-
switch = context.switches[ ARGV[ 0 ] ]
|
|
27
|
+
def trema_up name
|
|
28
|
+
switch = find_switch_by_name( name )
|
|
50
29
|
if switch
|
|
51
30
|
switch.run
|
|
52
|
-
|
|
31
|
+
else
|
|
32
|
+
# TODO: support vlink
|
|
33
|
+
raise "Unknown name: #{ name }"
|
|
53
34
|
end
|
|
54
|
-
|
|
55
|
-
raise "Unknown name: #{ ARGV[ 0 ] }"
|
|
56
35
|
end
|
|
57
36
|
end
|
|
58
37
|
end
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
#
|
|
2
|
-
# trema version command.
|
|
3
|
-
#
|
|
4
|
-
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
-
#
|
|
6
2
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
3
|
#
|
|
8
4
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -25,7 +21,7 @@ require "trema/version"
|
|
|
25
21
|
|
|
26
22
|
module Trema
|
|
27
23
|
module Command
|
|
28
|
-
def
|
|
24
|
+
def trema_version
|
|
29
25
|
puts "trema version #{ Trema::VERSION }"
|
|
30
26
|
end
|
|
31
27
|
end
|
data/ruby/trema/controller.c
CHANGED
|
@@ -57,11 +57,9 @@ handle_timer_event( void *self ) {
|
|
|
57
57
|
* @example
|
|
58
58
|
* send_message datapath_id, FeaturesRequest.new
|
|
59
59
|
*
|
|
60
|
-
*
|
|
61
|
-
* @param [Number] datapath_id
|
|
60
|
+
* @param [Integer] datapath_id
|
|
62
61
|
* the datapath to which a message is sent.
|
|
63
|
-
*
|
|
64
|
-
* @param [FeaturesRequest] message
|
|
62
|
+
* @param [Hello, EchoRequest, EchoReply, FeaturesRequest, SetConfig, GetConfigRequest, QueueGetConfigRequest, StatsRequest, BarrierRequest, PortMod, Vendor] message
|
|
65
63
|
* the message to be sent.
|
|
66
64
|
*/
|
|
67
65
|
static VALUE
|
|
@@ -94,12 +92,12 @@ append_action( openflow_actions *actions, VALUE action ) {
|
|
|
94
92
|
}
|
|
95
93
|
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthDstAddr" ) ) == Qtrue ) {
|
|
96
94
|
uint8_t dl_dst[ OFP_ETH_ALEN ];
|
|
97
|
-
uint8_t *ptr = ( uint8_t* ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
|
|
95
|
+
uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
|
|
98
96
|
append_action_set_dl_dst( actions, ptr );
|
|
99
97
|
}
|
|
100
98
|
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthSrcAddr" ) ) == Qtrue ) {
|
|
101
99
|
uint8_t dl_src[ OFP_ETH_ALEN ];
|
|
102
|
-
uint8_t *ptr = ( uint8_t* ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
|
|
100
|
+
uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
|
|
103
101
|
append_action_set_dl_src( actions, ptr );
|
|
104
102
|
}
|
|
105
103
|
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpDstAddr" ) ) == Qtrue ) {
|
|
@@ -133,9 +131,9 @@ append_action( openflow_actions *actions, VALUE action ) {
|
|
|
133
131
|
Check_Type( rbody, T_ARRAY );
|
|
134
132
|
uint16_t length = ( uint16_t ) RARRAY_LEN( rbody );
|
|
135
133
|
buffer *body = alloc_buffer_with_length( length );
|
|
136
|
-
|
|
137
|
-
for ( i = 0; i < length; i++ ) {
|
|
138
|
-
( ( uint8_t * )
|
|
134
|
+
void *p = append_back_buffer( body, length );
|
|
135
|
+
for ( int i = 0; i < length; i++ ) {
|
|
136
|
+
( ( uint8_t * ) p )[ i ] = ( uint8_t ) FIX2INT( RARRAY_PTR( rbody )[ i ] );
|
|
139
137
|
}
|
|
140
138
|
append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), body );
|
|
141
139
|
free_buffer( body );
|
|
@@ -221,17 +219,17 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
|
|
|
221
219
|
|
|
222
220
|
VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
|
|
223
221
|
if ( opt_idle_timeout != Qnil ) {
|
|
224
|
-
idle_timeout = ( uint16_t )NUM2UINT( opt_idle_timeout );
|
|
222
|
+
idle_timeout = ( uint16_t ) NUM2UINT( opt_idle_timeout );
|
|
225
223
|
}
|
|
226
224
|
|
|
227
225
|
VALUE opt_hard_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "hard_timeout" ) ) );
|
|
228
226
|
if ( opt_hard_timeout != Qnil ) {
|
|
229
|
-
hard_timeout = ( uint16_t )NUM2UINT( opt_hard_timeout );
|
|
227
|
+
hard_timeout = ( uint16_t ) NUM2UINT( opt_hard_timeout );
|
|
230
228
|
}
|
|
231
229
|
|
|
232
230
|
VALUE opt_priority = rb_hash_aref( options, ID2SYM( rb_intern( "priority" ) ) );
|
|
233
231
|
if ( opt_priority != Qnil ) {
|
|
234
|
-
priority = ( uint16_t )NUM2UINT( opt_priority );
|
|
232
|
+
priority = ( uint16_t ) NUM2UINT( opt_priority );
|
|
235
233
|
}
|
|
236
234
|
|
|
237
235
|
VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
|
|
@@ -241,7 +239,7 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
|
|
|
241
239
|
|
|
242
240
|
VALUE opt_out_port = rb_hash_aref( options, ID2SYM( rb_intern( "out_port" ) ) );
|
|
243
241
|
if ( opt_out_port != Qnil ) {
|
|
244
|
-
out_port = ( uint16_t )NUM2UINT( opt_out_port );
|
|
242
|
+
out_port = ( uint16_t ) NUM2UINT( opt_out_port );
|
|
245
243
|
}
|
|
246
244
|
|
|
247
245
|
VALUE opt_send_flow_rem = rb_hash_aref( options, ID2SYM( rb_intern( "send_flow_rem" ) ) );
|
|
@@ -498,8 +496,8 @@ controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
|
|
|
498
496
|
|
|
499
497
|
opt_zero_padding = rb_hash_aref( options, ID2SYM( rb_intern( "zero_padding" ) ) );
|
|
500
498
|
if ( opt_zero_padding != Qnil ) {
|
|
501
|
-
if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE) {
|
|
502
|
-
rb_raise(rb_eTypeError, ":zero_padding must be true or false");
|
|
499
|
+
if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE ) {
|
|
500
|
+
rb_raise( rb_eTypeError, ":zero_padding must be true or false" );
|
|
503
501
|
}
|
|
504
502
|
}
|
|
505
503
|
}
|
|
@@ -544,7 +542,7 @@ controller_run( VALUE self ) {
|
|
|
544
542
|
rb_gv_set( "$PROGRAM_NAME", name );
|
|
545
543
|
|
|
546
544
|
int argc = 3;
|
|
547
|
-
char **argv = xmalloc( sizeof
|
|
545
|
+
char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
|
|
548
546
|
argv[ 0 ] = STR2CSTR( name );
|
|
549
547
|
argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
|
|
550
548
|
argv[ 2 ] = STR2CSTR( name );
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2012 Hiroyasu OHYAMA
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
6
|
+
# published by the Free Software Foundation.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
require "trema/hardware-switch"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module Trema
|
|
23
|
+
class CustomSwitch < HardwareSwitch
|
|
24
|
+
include Trema::Daemon
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
log_file { |vswitch| "customswitch.#{ vswitch.name }.log" }
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def initialize stanza
|
|
31
|
+
super stanza
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def command
|
|
36
|
+
"CHIBACH_TMP=#{ Trema.tmp } #{ path } -i #{ dpid_short } > #{ log_file } &"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
############################################################################
|
|
41
|
+
private
|
|
42
|
+
############################################################################
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def path
|
|
46
|
+
File.join( Trema.home, @stanza[ :path ] )
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### Local variables:
|
|
53
|
+
### mode: Ruby
|
|
54
|
+
### coding: utf-8-unix
|
|
55
|
+
### indent-tabs-mode: nil
|
|
56
|
+
### End:
|
|
@@ -23,10 +23,10 @@ require "trema/stats-helper"
|
|
|
23
23
|
|
|
24
24
|
module Trema
|
|
25
25
|
class DescStatsReply < StatsHelper
|
|
26
|
-
FIELDS = %w(mfr_desc hw_desc sw_desc serial_num dp_desc )
|
|
26
|
+
FIELDS = %w(mfr_desc hw_desc sw_desc serial_num dp_desc )
|
|
27
27
|
FIELDS.each { |field| attr_reader field.intern }
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
# Descriptive information about a vswitch.
|
|
31
31
|
# A user would not explicitly instantiate a {DescStatsReply} object but
|
|
32
32
|
# would be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_DESC)+
|
|
@@ -34,10 +34,10 @@ module Trema
|
|
|
34
34
|
#
|
|
35
35
|
# @overload initialize(options={})
|
|
36
36
|
#
|
|
37
|
-
# @example
|
|
37
|
+
# @example
|
|
38
38
|
# DescStatsReply.new(
|
|
39
39
|
# :mfr_desc => "Nicira Networks, Inc.",
|
|
40
|
-
# :hw_desc => "Open vSwitch",
|
|
40
|
+
# :hw_desc => "Open vSwitch",
|
|
41
41
|
# :sw_desc => "1.2.2"
|
|
42
42
|
# :serial_num => "None"
|
|
43
43
|
# )
|
|
@@ -63,7 +63,7 @@ module Trema
|
|
|
63
63
|
# @return [DescStatsReply]
|
|
64
64
|
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_DESC) OpenFlow message.
|
|
65
65
|
#
|
|
66
|
-
def initialize options
|
|
66
|
+
def initialize options
|
|
67
67
|
super FIELDS, options
|
|
68
68
|
end
|
|
69
69
|
end
|
|
@@ -87,6 +87,9 @@ module Trema
|
|
|
87
87
|
attr_reader :switches
|
|
88
88
|
|
|
89
89
|
|
|
90
|
+
attr_reader :netnss
|
|
91
|
+
|
|
92
|
+
|
|
90
93
|
#
|
|
91
94
|
# Creates a new Trema configuration
|
|
92
95
|
#
|
|
@@ -103,6 +106,7 @@ module Trema
|
|
|
103
106
|
@packetin_filter = Trema::PacketinFilter.clear
|
|
104
107
|
@switch_manager = Trema::SwitchManager.clear
|
|
105
108
|
@switches = Trema::OpenflowSwitch.clear
|
|
109
|
+
@netnss = Trema::Netns.clear
|
|
106
110
|
end
|
|
107
111
|
|
|
108
112
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#
|
|
2
|
-
#
|
|
2
|
+
# The syntax definition of custom_switch { ... } stanza in Trema DSL.
|
|
3
3
|
#
|
|
4
|
-
# Copyright (C)
|
|
4
|
+
# Copyright (C) 2012 Hiroyasu OHYAMA
|
|
5
5
|
#
|
|
6
6
|
# This program is free software; you can redistribute it and/or modify
|
|
7
7
|
# it under the terms of the GNU General Public License, version 2, as
|
|
@@ -18,8 +18,22 @@
|
|
|
18
18
|
#
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
require "trema/dsl/switch"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Trema
|
|
25
|
+
module DSL
|
|
26
|
+
class CustomSwitch < Switch
|
|
27
|
+
def initialize name = nil
|
|
28
|
+
super name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def path filepath
|
|
33
|
+
@path = filepath
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
23
37
|
end
|
|
24
38
|
|
|
25
39
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
|
3
|
+
#
|
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
6
|
+
# published by the Free Software Foundation.
|
|
7
|
+
#
|
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
# GNU General Public License for more details.
|
|
12
|
+
#
|
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
require "trema/dsl/stanza"
|
|
20
|
+
require "trema/dsl/syntax-error"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Trema
|
|
24
|
+
module DSL
|
|
25
|
+
#
|
|
26
|
+
# The syntax definition of netns { ... } stanza in Trema DSL.
|
|
27
|
+
#
|
|
28
|
+
class Netns < Stanza
|
|
29
|
+
#
|
|
30
|
+
# Set IP address
|
|
31
|
+
#
|
|
32
|
+
# @example
|
|
33
|
+
# stanza.ip "192.168.100.1"
|
|
34
|
+
#
|
|
35
|
+
# @return [undefined]
|
|
36
|
+
#
|
|
37
|
+
# @api public
|
|
38
|
+
#
|
|
39
|
+
def ip str
|
|
40
|
+
@ip = str
|
|
41
|
+
if @name.nil?
|
|
42
|
+
@name = @ip
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Set netmask
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# stanza.netmask "255.255.0.0"
|
|
52
|
+
#
|
|
53
|
+
# @return [undefined]
|
|
54
|
+
#
|
|
55
|
+
# @api public
|
|
56
|
+
#
|
|
57
|
+
def netmask str
|
|
58
|
+
@netmask = str
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def route options
|
|
63
|
+
if options[ :net ].nil? or options[ :gw ].nil?
|
|
64
|
+
raise ":net and :gw option is a mandatory"
|
|
65
|
+
end
|
|
66
|
+
@net = options[ :net ]
|
|
67
|
+
@gw = options[ :gw ]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
### Local variables:
|
|
75
|
+
### mode: Ruby
|
|
76
|
+
### coding: utf-8-unix
|
|
77
|
+
### indent-tabs-mode: nil
|
|
78
|
+
### End:
|
data/ruby/trema/dsl/parser.rb
CHANGED
|
@@ -53,6 +53,8 @@ module Trema
|
|
|
53
53
|
peers = each.peers
|
|
54
54
|
config.hosts[ peers[ 0 ] ].interface = each.name if config.hosts[ peers[ 0 ] ]
|
|
55
55
|
config.hosts[ peers[ 1 ] ].interface = each.name_peer if config.hosts[ peers[ 1 ] ]
|
|
56
|
+
config.netnss[ peers[ 0 ] ].interface = each.name if config.netnss[ peers[ 0 ] ]
|
|
57
|
+
config.netnss[ peers[ 1 ] ].interface = each.name_peer if config.netnss[ peers[ 1 ] ]
|
|
56
58
|
config.switches[ peers[ 0 ] ] << each.name if config.switches[ peers[ 0 ] ]
|
|
57
59
|
config.switches[ peers[ 1 ] ] << each.name_peer if config.switches[ peers[ 1 ] ]
|
|
58
60
|
end
|
data/ruby/trema/dsl/runner.rb
CHANGED
|
@@ -88,6 +88,7 @@ module Trema
|
|
|
88
88
|
maybe_create_links
|
|
89
89
|
maybe_run_hosts
|
|
90
90
|
maybe_run_switches
|
|
91
|
+
maybe_run_netnss
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
|
|
@@ -134,6 +135,13 @@ module Trema
|
|
|
134
135
|
end
|
|
135
136
|
|
|
136
137
|
|
|
138
|
+
def maybe_run_netnss
|
|
139
|
+
@context.netnss.each do | name, netns |
|
|
140
|
+
netns.run!
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
|
|
137
145
|
def maybe_run_apps
|
|
138
146
|
return if @context.apps.values.empty?
|
|
139
147
|
|
data/ruby/trema/dsl/syntax.rb
CHANGED
|
@@ -22,19 +22,23 @@
|
|
|
22
22
|
|
|
23
23
|
require "trema/app"
|
|
24
24
|
require "trema/dsl/link"
|
|
25
|
+
require "trema/dsl/netns"
|
|
25
26
|
require "trema/dsl/rswitch"
|
|
26
27
|
require "trema/dsl/run"
|
|
27
28
|
require "trema/dsl/switch"
|
|
28
29
|
require "trema/dsl/vhost"
|
|
29
30
|
require "trema/dsl/vswitch"
|
|
31
|
+
require "trema/dsl/custom-switch"
|
|
30
32
|
require "trema/hardware-switch"
|
|
31
33
|
require "trema/host"
|
|
32
34
|
require "trema/link"
|
|
33
35
|
require "trema/monkey-patch/module"
|
|
36
|
+
require "trema/netns"
|
|
34
37
|
require "trema/open-vswitch"
|
|
35
38
|
require "trema/packetin-filter"
|
|
36
39
|
require "trema/ruby-switch"
|
|
37
40
|
require "trema/switch-manager"
|
|
41
|
+
require "trema/custom-switch"
|
|
38
42
|
|
|
39
43
|
|
|
40
44
|
module Trema
|
|
@@ -77,6 +81,13 @@ module Trema
|
|
|
77
81
|
end
|
|
78
82
|
|
|
79
83
|
|
|
84
|
+
def custom_switch name = nil, &block
|
|
85
|
+
stanza = Trema::DSL::CustomSwitch.new( name )
|
|
86
|
+
stanza.instance_eval( &block )
|
|
87
|
+
Trema::CustomSwitch.new stanza
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
80
91
|
def vhost name = nil, &block
|
|
81
92
|
stanza = Trema::DSL::Vhost.new( name )
|
|
82
93
|
stanza.instance_eval( &block ) if block
|
|
@@ -84,6 +95,13 @@ module Trema
|
|
|
84
95
|
end
|
|
85
96
|
|
|
86
97
|
|
|
98
|
+
def netns name, &block
|
|
99
|
+
stanza = Trema::DSL::Netns.new( name )
|
|
100
|
+
stanza.instance_eval( &block ) if block
|
|
101
|
+
Trema::Netns.new( stanza )
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
87
105
|
def filter rule
|
|
88
106
|
Trema::PacketinFilter.new( rule )
|
|
89
107
|
end
|