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
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
#include <assert.h>
|
|
23
24
|
#include <inttypes.h>
|
|
24
25
|
#include <time.h>
|
|
25
|
-
#include <assert.h>
|
|
26
26
|
#include "trema.h"
|
|
27
27
|
|
|
28
28
|
|
|
@@ -253,10 +253,10 @@ handle_packet_in( uint64_t datapath_id, packet_in message ) {
|
|
|
253
253
|
warn( "Unknown switch (datapath ID = %#" PRIx64 ")", datapath_id );
|
|
254
254
|
return;
|
|
255
255
|
}
|
|
256
|
-
|
|
256
|
+
|
|
257
257
|
packet_info packet_info = get_packet_info( message.data );
|
|
258
258
|
learn( sw->forwarding_db, message.in_port, packet_info.eth_macsa );
|
|
259
|
-
forwarding_entry *destination = lookup_hash_entry( sw->forwarding_db,
|
|
259
|
+
forwarding_entry *destination = lookup_hash_entry( sw->forwarding_db,
|
|
260
260
|
packet_info.eth_macda );
|
|
261
261
|
|
|
262
262
|
if ( destination == NULL ) {
|
|
@@ -39,8 +39,8 @@ handle_features_reply(
|
|
|
39
39
|
UNUSED( user_data );
|
|
40
40
|
|
|
41
41
|
info( "datapath_id: %#" PRIx64, datapath_id );
|
|
42
|
-
info( "transaction_id: %#
|
|
43
|
-
info( "n_buffers: %
|
|
42
|
+
info( "transaction_id: %#" PRIx32 "", transaction_id );
|
|
43
|
+
info( "n_buffers: %" PRIu32 "", n_buffers );
|
|
44
44
|
info( "n_tables: %u", n_tables );
|
|
45
45
|
info( "capabilities:" );
|
|
46
46
|
if ( capabilities & OFPC_FLOW_STATS ) {
|
|
@@ -68,43 +68,43 @@ handle_features_reply(
|
|
|
68
68
|
info( " OFPC_ARP_MATCH_IP" );
|
|
69
69
|
}
|
|
70
70
|
info( "actions:" );
|
|
71
|
-
if( actions & ( 1 << OFPAT_OUTPUT ) ) {
|
|
71
|
+
if ( actions & ( 1 << OFPAT_OUTPUT ) ) {
|
|
72
72
|
info( " OFPAT_OUTPUT" );
|
|
73
73
|
}
|
|
74
|
-
if( actions & ( 1 << OFPAT_SET_VLAN_VID ) ) {
|
|
74
|
+
if ( actions & ( 1 << OFPAT_SET_VLAN_VID ) ) {
|
|
75
75
|
info( " OFPAT_SET_VLAN_VID" );
|
|
76
76
|
}
|
|
77
|
-
if( actions & ( 1 << OFPAT_SET_VLAN_PCP ) ) {
|
|
77
|
+
if ( actions & ( 1 << OFPAT_SET_VLAN_PCP ) ) {
|
|
78
78
|
info( " OFPAT_SET_VLAN_PCP" );
|
|
79
79
|
}
|
|
80
|
-
if( actions & ( 1 << OFPAT_STRIP_VLAN ) ) {
|
|
80
|
+
if ( actions & ( 1 << OFPAT_STRIP_VLAN ) ) {
|
|
81
81
|
info( " OFPAT_STRIP_VLAN" );
|
|
82
82
|
}
|
|
83
|
-
if( actions & ( 1 << OFPAT_SET_DL_SRC ) ) {
|
|
83
|
+
if ( actions & ( 1 << OFPAT_SET_DL_SRC ) ) {
|
|
84
84
|
info( " OFPAT_SET_DL_SRC" );
|
|
85
85
|
}
|
|
86
|
-
if( actions & ( 1 << OFPAT_SET_DL_DST ) ) {
|
|
86
|
+
if ( actions & ( 1 << OFPAT_SET_DL_DST ) ) {
|
|
87
87
|
info( " OFPAT_SET_DL_DST" );
|
|
88
88
|
}
|
|
89
|
-
if( actions & ( 1 << OFPAT_SET_NW_SRC ) ) {
|
|
89
|
+
if ( actions & ( 1 << OFPAT_SET_NW_SRC ) ) {
|
|
90
90
|
info( " OFPAT_SET_NW_SRC" );
|
|
91
91
|
}
|
|
92
|
-
if( actions & ( 1 << OFPAT_SET_NW_DST ) ) {
|
|
92
|
+
if ( actions & ( 1 << OFPAT_SET_NW_DST ) ) {
|
|
93
93
|
info( " OFPAT_SET_NW_DST" );
|
|
94
94
|
}
|
|
95
|
-
if( actions & ( 1 << OFPAT_SET_NW_TOS ) ) {
|
|
95
|
+
if ( actions & ( 1 << OFPAT_SET_NW_TOS ) ) {
|
|
96
96
|
info( " OFPAT_SET_NW_TOS" );
|
|
97
97
|
}
|
|
98
|
-
if( actions & ( 1 << OFPAT_SET_TP_SRC ) ) {
|
|
98
|
+
if ( actions & ( 1 << OFPAT_SET_TP_SRC ) ) {
|
|
99
99
|
info( " OFPAT_SET_TP_SRC" );
|
|
100
100
|
}
|
|
101
|
-
if( actions & ( 1 << OFPAT_SET_TP_DST ) ) {
|
|
101
|
+
if ( actions & ( 1 << OFPAT_SET_TP_DST ) ) {
|
|
102
102
|
info( " OFPAT_SET_TP_DST" );
|
|
103
103
|
}
|
|
104
|
-
if( actions & ( 1 << OFPAT_ENQUEUE ) ) {
|
|
104
|
+
if ( actions & ( 1 << OFPAT_ENQUEUE ) ) {
|
|
105
105
|
info( " OFPAT_ENQUEUE" );
|
|
106
106
|
}
|
|
107
|
-
if( actions & OFPAT_VENDOR ) {
|
|
107
|
+
if ( actions & OFPAT_VENDOR ) {
|
|
108
108
|
info( " OFPAT_VENDOR" );
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -123,12 +123,12 @@ handle_features_reply(
|
|
|
123
123
|
phy_port->hw_addr[ 5 ]
|
|
124
124
|
);
|
|
125
125
|
info( " name = %s", phy_port->name );
|
|
126
|
-
info( " config = %#
|
|
127
|
-
info( " state = %#
|
|
128
|
-
info( " curr = %#
|
|
129
|
-
info( " advertised = %#
|
|
130
|
-
info( " supported = %#
|
|
131
|
-
info( " peer = %#
|
|
126
|
+
info( " config = %#" PRIx32 "", phy_port->config );
|
|
127
|
+
info( " state = %#" PRIx32 "", phy_port->state );
|
|
128
|
+
info( " curr = %#" PRIx32 "", phy_port->curr );
|
|
129
|
+
info( " advertised = %#" PRIx32 "", phy_port->advertised );
|
|
130
|
+
info( " supported = %#" PRIx32 "", phy_port->supported );
|
|
131
|
+
info( " peer = %#" PRIx32 "", phy_port->peer );
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# A test example program to send a OFPT_HELLO message.
|
|
3
3
|
#
|
|
4
|
-
# Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
5
|
-
#
|
|
6
4
|
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
5
|
#
|
|
8
6
|
# This program is free software; you can redistribute it and/or modify
|
|
@@ -20,37 +18,24 @@
|
|
|
20
18
|
#
|
|
21
19
|
|
|
22
20
|
|
|
23
|
-
require "example"
|
|
24
|
-
|
|
25
|
-
|
|
26
21
|
class HelloController < Controller
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def run args
|
|
32
|
-
usage unless Example.options_parse args
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def usage
|
|
37
|
-
puts Example.cmd_usage
|
|
38
|
-
puts "Send count number of hello messages to datapath_id."
|
|
39
|
-
exit false
|
|
22
|
+
def start
|
|
23
|
+
if ARGV.size < 2
|
|
24
|
+
STDERR.puts "Usage: #{ File.basename ARGV[ 0 ] } COUNT"
|
|
25
|
+
shutdown!
|
|
40
26
|
end
|
|
27
|
+
@count = ARGV[ 1 ].to_i
|
|
41
28
|
end
|
|
42
29
|
|
|
43
30
|
|
|
44
|
-
def switch_ready
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
def switch_ready datapath_id
|
|
32
|
+
@count.times do
|
|
33
|
+
send_message datapath_id, Hello.new
|
|
34
|
+
end
|
|
47
35
|
end
|
|
48
36
|
end
|
|
49
37
|
|
|
50
38
|
|
|
51
|
-
HelloController.run ARGV
|
|
52
|
-
|
|
53
|
-
|
|
54
39
|
### Local variables:
|
|
55
40
|
### mode: Ruby
|
|
56
41
|
### coding: utf-8-unix
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#
|
|
2
|
-
#
|
|
2
|
+
# "Vendor Action" sample application
|
|
3
3
|
#
|
|
4
|
-
# Author:
|
|
4
|
+
# Author: SUGYO Kazushi
|
|
5
5
|
#
|
|
6
|
-
# Copyright (C)
|
|
6
|
+
# Copyright (C) 2012 NEC Corporation
|
|
7
7
|
#
|
|
8
8
|
# This program is free software; you can redistribute it and/or modify
|
|
9
9
|
# it under the terms of the GNU General Public License, version 2, as
|
|
@@ -20,16 +20,26 @@
|
|
|
20
20
|
#
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class
|
|
23
|
+
class VendorActionSampleController < Controller
|
|
24
|
+
NX_VENDOR_ID = 0x00002320
|
|
25
|
+
NXAST_NOTE = 8
|
|
26
|
+
|
|
24
27
|
def switch_ready datapath_id
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
body = [ NXAST_NOTE, 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 ].pack( "nC6" )
|
|
29
|
+
actions = VendorAction.new( NX_VENDOR_ID, body.unpack( "C*" ) )
|
|
30
|
+
send_flow_mod_modify(
|
|
31
|
+
datapath_id,
|
|
32
|
+
:hard_timeout => 60,
|
|
33
|
+
:match => Match.new,
|
|
34
|
+
:actions => actions,
|
|
35
|
+
:strict => true
|
|
36
|
+
)
|
|
27
37
|
end
|
|
28
38
|
end
|
|
29
39
|
|
|
30
40
|
|
|
31
41
|
### Local variables:
|
|
32
42
|
### mode: Ruby
|
|
33
|
-
### coding: utf-8
|
|
43
|
+
### coding: utf-8-unix
|
|
34
44
|
### indent-tabs-mode: nil
|
|
35
45
|
### End:
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* "Vendor Action" sample application
|
|
3
|
+
*
|
|
4
|
+
* Author: SUGYO Kazushi
|
|
5
|
+
*
|
|
6
|
+
* Copyright (C) 2008-2012 NEC Corporation
|
|
7
|
+
*
|
|
8
|
+
* This program is free software; you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
* published by the Free Software Foundation.
|
|
11
|
+
*
|
|
12
|
+
* This program is distributed in the hope that it will be useful,
|
|
13
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
* GNU General Public License for more details.
|
|
16
|
+
*
|
|
17
|
+
* You should have received a copy of the GNU General Public License along
|
|
18
|
+
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#include <inttypes.h>
|
|
24
|
+
#include <stdio.h>
|
|
25
|
+
#include "trema.h"
|
|
26
|
+
|
|
27
|
+
#define NX_VENDOR_ID 0x00002320
|
|
28
|
+
#define NXAST_NOTE 8
|
|
29
|
+
|
|
30
|
+
struct nx_action_note {
|
|
31
|
+
uint16_t type;
|
|
32
|
+
uint16_t len;
|
|
33
|
+
uint32_t vendor;
|
|
34
|
+
uint16_t subtype;
|
|
35
|
+
uint8_t note[6];
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
void
|
|
39
|
+
usage() {
|
|
40
|
+
printf( "Usage: %s COUNT\n", get_executable_name() );
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
static void
|
|
45
|
+
send_flow_mod( uint64_t datapath_id, void *user_data ) {
|
|
46
|
+
UNUSED( user_data );
|
|
47
|
+
uint8_t note[] = { 0x54, 0x72, 0x65, 0x6d, 0x61, 0x00 };
|
|
48
|
+
|
|
49
|
+
buffer *body = alloc_buffer();
|
|
50
|
+
struct nx_action_note *action = append_back_buffer( body, sizeof( struct nx_action_note ) );
|
|
51
|
+
action->subtype = htons( NXAST_NOTE );
|
|
52
|
+
memcpy( action->note, note, sizeof( action->note ) );
|
|
53
|
+
remove_front_buffer( body, sizeof( struct ofp_action_vendor_header ) );
|
|
54
|
+
|
|
55
|
+
openflow_actions *actions = create_actions();
|
|
56
|
+
append_action_vendor( actions, NX_VENDOR_ID, body );
|
|
57
|
+
|
|
58
|
+
struct ofp_match match;
|
|
59
|
+
memset( &match, 0, sizeof( match ) );
|
|
60
|
+
buffer *flow_mod = create_flow_mod(
|
|
61
|
+
get_transaction_id(),
|
|
62
|
+
match,
|
|
63
|
+
get_cookie(),
|
|
64
|
+
OFPFC_MODIFY_STRICT,
|
|
65
|
+
0,
|
|
66
|
+
60,
|
|
67
|
+
UINT16_MAX,
|
|
68
|
+
UINT32_MAX,
|
|
69
|
+
OFPP_NONE,
|
|
70
|
+
OFPFF_SEND_FLOW_REM,
|
|
71
|
+
actions
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
bool ret = send_openflow_message( datapath_id, flow_mod );
|
|
75
|
+
if ( !ret ) {
|
|
76
|
+
error( "Failed to send an flow_mod message to the switch with datapath ID = %#" PRIx64 ".", datapath_id );
|
|
77
|
+
stop_trema();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
free_buffer( flow_mod );
|
|
81
|
+
|
|
82
|
+
delete_actions( actions );
|
|
83
|
+
|
|
84
|
+
free_buffer( body );
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
int
|
|
89
|
+
main( int argc, char *argv[] ) {
|
|
90
|
+
init_trema( &argc, &argv );
|
|
91
|
+
|
|
92
|
+
set_switch_ready_handler( send_flow_mod, NULL );
|
|
93
|
+
|
|
94
|
+
start_trema();
|
|
95
|
+
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* Local variables:
|
|
102
|
+
* c-basic-offset: 2
|
|
103
|
+
* indent-tabs-mode: nil
|
|
104
|
+
* End:
|
|
105
|
+
*/
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A simple switch that has minimum function to test hello message.
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2012 Hiroyasu OHYAMA
|
|
5
|
+
*
|
|
6
|
+
* This program is free software; you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
+
* published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU General Public License along
|
|
16
|
+
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
+
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
#include "chibach.h"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
static void handle_features_request( uint32_t, void * );
|
|
25
|
+
static void handle_hello( uint32_t, uint8_t, void * );
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
static void
|
|
29
|
+
handle_features_request( uint32_t tid, void *user_data ) {
|
|
30
|
+
UNUSED( user_data );
|
|
31
|
+
|
|
32
|
+
uint32_t supported = ( ( 1 << OFPAT_OUTPUT ) |
|
|
33
|
+
( 1 << OFPAT_SET_VLAN_VID ) |
|
|
34
|
+
( 1 << OFPAT_SET_VLAN_PCP ) |
|
|
35
|
+
( 1 << OFPAT_STRIP_VLAN ) |
|
|
36
|
+
( 1 << OFPAT_SET_DL_SRC ) |
|
|
37
|
+
( 1 << OFPAT_SET_DL_DST ) |
|
|
38
|
+
( 1 << OFPAT_SET_NW_SRC ) |
|
|
39
|
+
( 1 << OFPAT_SET_NW_DST ) |
|
|
40
|
+
( 1 << OFPAT_SET_NW_TOS ) |
|
|
41
|
+
( 1 << OFPAT_SET_TP_SRC ) |
|
|
42
|
+
( 1 << OFPAT_SET_TP_DST ) );
|
|
43
|
+
|
|
44
|
+
buffer *msg = create_features_reply( tid, get_datapath_id(), 0, 1, 0, supported, NULL );
|
|
45
|
+
|
|
46
|
+
switch_send_openflow_message( msg );
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
static void
|
|
51
|
+
handle_hello( uint32_t tid, uint8_t version, void *user_data ) {
|
|
52
|
+
UNUSED( version );
|
|
53
|
+
UNUSED( user_data );
|
|
54
|
+
|
|
55
|
+
info( "received: OFPT_HELLO" );
|
|
56
|
+
|
|
57
|
+
switch_send_openflow_message( create_hello( tid ) );
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
int
|
|
62
|
+
main( int argc, char **argv ) {
|
|
63
|
+
init_chibach( &argc, &argv );
|
|
64
|
+
|
|
65
|
+
set_hello_handler( handle_hello, NULL );
|
|
66
|
+
set_features_request_handler( handle_features_request, NULL );
|
|
67
|
+
|
|
68
|
+
start_chibach();
|
|
69
|
+
|
|
70
|
+
stop_chibach();
|
|
71
|
+
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* Local variables:
|
|
78
|
+
* c-basic-offset: 2
|
|
79
|
+
* indent-tabs-mode: nil
|
|
80
|
+
* End:
|
|
81
|
+
*/
|