trema 0.4.7 → 0.4.8
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.
- checksums.yaml +4 -4
- data/.gitignore +33 -54
- data/.hound.yml +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -1
- data/.travis.yml +14 -18
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -26
- data/README.md +25 -241
- data/Rakefile +4 -1056
- data/bin/.gitignore +3 -0
- data/bin/trema +163 -237
- data/features/cleanup_on_failure.feature +118 -0
- data/features/logging.feature +73 -0
- data/features/open_flow13.feature +21 -0
- data/features/step_definitions/.gitignore +35 -0
- data/features/step_definitions/.rubocop.yml +5 -0
- data/features/step_definitions/.travis.yml +19 -0
- data/features/step_definitions/Gemfile +9 -0
- data/features/step_definitions/Guardfile +4 -0
- data/features/step_definitions/LICENSE +675 -0
- data/features/step_definitions/README.md +7 -0
- data/features/step_definitions/Rakefile +10 -0
- data/features/step_definitions/show_stats_steps.rb +56 -0
- data/features/step_definitions/virtual_link_steps.rb +8 -0
- data/features/support/env.rb +0 -73
- data/features/support/hooks.rb +6 -50
- data/features/trema_delete_link.feature +30 -0
- data/features/trema_killall.feature +56 -0
- data/features/trema_run.feature +47 -0
- data/features/trema_start.feature +73 -0
- data/features/trema_stop.feature +50 -0
- data/lib/trema.rb +4 -0
- data/lib/trema/command.rb +184 -0
- data/lib/trema/controller.rb +289 -0
- data/lib/trema/dirs.rb +14 -0
- data/lib/trema/drb.rb +32 -0
- data/lib/trema/logger.rb +63 -0
- data/lib/trema/monkey_patch/integer.rb +8 -0
- data/lib/trema/monkey_patch/integer/base_conversions.rb +12 -0
- data/lib/trema/monkey_patch/integer/durations.rb +12 -0
- data/lib/trema/switch.rb +83 -0
- data/lib/trema/version.rb +5 -0
- data/spec/spec_helper.rb +9 -178
- data/spec/trema/controller_spec.rb +4 -53
- data/tasks/.gitignore +34 -0
- data/tasks/LICENSE +675 -0
- data/tasks/README.md +6 -0
- data/tasks/cucumber.rake +14 -0
- data/tasks/flay.rake +15 -0
- data/tasks/flog.rake +25 -0
- data/tasks/gem.rake +15 -0
- data/tasks/reek.rake +11 -0
- data/tasks/relish.rake +8 -0
- data/tasks/rspec.rake +8 -0
- data/tasks/rubocop.rake +2 -16
- data/tasks/yard.rake +11 -0
- data/trema.gemspec +24 -23
- metadata +180 -720
- data/.yardopts +0 -4
- data/Doxyfile +0 -1679
- data/Guardfile +0 -14
- data/bin/quality +0 -31
- data/bin/trema-config +0 -59
- data/build.rb +0 -32
- data/cruise.rb +0 -409
- data/features/.nav +0 -50
- data/features/README.md +0 -7
- data/features/core/get_pid_by_trema_name.feature +0 -137
- data/features/core/packetin_filter.feature +0 -55
- data/features/core/switch_manager.feature +0 -41
- data/features/core/trema-config.feature +0 -55
- data/features/dsl/switch_port_specifier.feature +0 -15
- data/features/examples/dumper.feature +0 -35
- data/features/examples/hello_trema.feature +0 -23
- data/features/examples/learning_switch.feature +0 -37
- data/features/examples/list_switches.feature +0 -24
- data/features/examples/message.set_config.feature +0 -27
- data/features/examples/message.vendor-action.feature +0 -25
- data/features/examples/message.vendor-stats-request.feature +0 -20
- data/features/examples/multi_learning_switch.feature +0 -107
- data/features/examples/openflow_message.echo.feature +0 -59
- data/features/examples/openflow_message.features_request.feature +0 -35
- data/features/examples/openflow_message.hello.feature +0 -59
- data/features/examples/packet_in.feature +0 -33
- data/features/examples/packetin_filter_config.feature +0 -95
- data/features/examples/patch_panel.feature +0 -29
- data/features/examples/repeater_hub.feature +0 -52
- data/features/examples/switch_info.feature +0 -51
- data/features/examples/switch_monitor.feature +0 -35
- data/features/examples/transparent_firewall.feature +0 -73
- data/features/handlers/switch_ready.feature +0 -40
- data/features/step_definitions/misc_steps.rb +0 -85
- data/features/step_definitions/send_packets_steps.rb +0 -33
- data/features/step_definitions/stats_steps.rb +0 -39
- data/features/switch_event/C-add_forward_entry.feature +0 -114
- data/features/switch_event/C-delete_forward_entry.feature +0 -85
- data/features/switch_event/C-dump_forward_entries.feature +0 -72
- data/features/switch_event/C-set_forward_entries.feature +0 -77
- data/features/switch_event/README.md +0 -40
- data/features/switch_event/add_forward_entry.feature +0 -160
- data/features/switch_event/delete_forward_entry.feature +0 -160
- data/features/switch_event/dump_forward_entries.feature +0 -103
- data/features/switch_event/set_forward_entries.feature +0 -102
- data/features/trema_commands/README.md +0 -8
- data/features/trema_commands/dump_flows.feature +0 -41
- data/features/trema_commands/help.feature +0 -27
- data/features/trema_commands/help_option.feature +0 -20
- data/features/trema_commands/kill.feature +0 -56
- data/features/trema_commands/killall.feature +0 -32
- data/features/trema_commands/port_down.feature +0 -71
- data/features/trema_commands/port_up.feature +0 -75
- data/features/trema_commands/reset_stats.feature +0 -56
- data/features/trema_commands/run.feature +0 -56
- data/features/trema_commands/send_packets.feature +0 -46
- data/features/trema_commands/show_stats.feature +0 -66
- data/features/trema_commands/up.feature +0 -34
- data/features/trema_commands/version.feature +0 -10
- data/features/trema_commands/version_option.feature +0 -8
- data/rubocop-todo.yml +0 -159
- data/ruby/.gitignore +0 -4
- data/ruby/blocker.rb +0 -74
- data/ruby/extconf.rb +0 -80
- data/ruby/sub-process.rb +0 -289
- data/ruby/trema/action-common.c +0 -46
- data/ruby/trema/action-common.h +0 -38
- data/ruby/trema/action.rb +0 -33
- data/ruby/trema/aggregate-stats-reply.rb +0 -68
- data/ruby/trema/app.rb +0 -114
- data/ruby/trema/barrier-reply.c +0 -98
- data/ruby/trema/barrier-reply.h +0 -44
- data/ruby/trema/barrier-request.c +0 -135
- data/ruby/trema/barrier-request.h +0 -42
- data/ruby/trema/cli.rb +0 -267
- data/ruby/trema/command.rb +0 -41
- data/ruby/trema/command/dump_flows.rb +0 -43
- data/ruby/trema/command/kill.rb +0 -75
- data/ruby/trema/command/killall.rb +0 -38
- data/ruby/trema/command/netns.rb +0 -38
- data/ruby/trema/command/port_down.rb +0 -43
- data/ruby/trema/command/port_up.rb +0 -43
- data/ruby/trema/command/reset_stats.rb +0 -41
- data/ruby/trema/command/ruby.rb +0 -38
- data/ruby/trema/command/run.rb +0 -110
- data/ruby/trema/command/send_packets.rb +0 -46
- data/ruby/trema/command/shell.rb +0 -57
- data/ruby/trema/command/show_stats.rb +0 -65
- data/ruby/trema/command/up.rb +0 -44
- data/ruby/trema/command/version.rb +0 -35
- data/ruby/trema/compat.h +0 -36
- data/ruby/trema/controller.c +0 -691
- data/ruby/trema/controller.h +0 -42
- data/ruby/trema/controller.rb +0 -255
- data/ruby/trema/custom-switch.rb +0 -56
- data/ruby/trema/daemon.rb +0 -184
- data/ruby/trema/default-logger.c +0 -161
- data/ruby/trema/default-logger.h +0 -42
- data/ruby/trema/default-logger.rb +0 -29
- data/ruby/trema/default_openflow_channel_port.rb +0 -26
- data/ruby/trema/desc-stats-reply.rb +0 -75
- data/ruby/trema/dsl.rb +0 -32
- data/ruby/trema/dsl/configuration.rb +0 -145
- data/ruby/trema/dsl/context.rb +0 -69
- data/ruby/trema/dsl/custom-switch.rb +0 -44
- data/ruby/trema/dsl/link.rb +0 -39
- data/ruby/trema/dsl/netns.rb +0 -78
- data/ruby/trema/dsl/parser.rb +0 -70
- data/ruby/trema/dsl/rswitch.rb +0 -47
- data/ruby/trema/dsl/run.rb +0 -47
- data/ruby/trema/dsl/runner.rb +0 -178
- data/ruby/trema/dsl/stanza.rb +0 -51
- data/ruby/trema/dsl/switch.rb +0 -76
- data/ruby/trema/dsl/syntax-error.rb +0 -31
- data/ruby/trema/dsl/syntax.rb +0 -128
- data/ruby/trema/dsl/vhost.rb +0 -106
- data/ruby/trema/dsl/vswitch.rb +0 -45
- data/ruby/trema/echo-reply.c +0 -122
- data/ruby/trema/echo-reply.h +0 -40
- data/ruby/trema/echo-request.c +0 -117
- data/ruby/trema/echo-request.h +0 -40
- data/ruby/trema/echo.c +0 -99
- data/ruby/trema/echo.h +0 -39
- data/ruby/trema/enqueue.rb +0 -87
- data/ruby/trema/error.c +0 -262
- data/ruby/trema/error.h +0 -42
- data/ruby/trema/exact-match.rb +0 -34
- data/ruby/trema/executables.rb +0 -99
- data/ruby/trema/features-reply.c +0 -330
- data/ruby/trema/features-reply.h +0 -54
- data/ruby/trema/features-request.c +0 -134
- data/ruby/trema/features-request.h +0 -42
- data/ruby/trema/flow-mod.c +0 -150
- data/ruby/trema/flow-mod.h +0 -42
- data/ruby/trema/flow-removed.c +0 -280
- data/ruby/trema/flow-removed.h +0 -44
- data/ruby/trema/flow-stats-reply.rb +0 -107
- data/ruby/trema/flow.rb +0 -65
- data/ruby/trema/get-config-reply.c +0 -158
- data/ruby/trema/get-config-reply.h +0 -50
- data/ruby/trema/get-config-request.c +0 -136
- data/ruby/trema/get-config-request.h +0 -42
- data/ruby/trema/hardware-switch.rb +0 -86
- data/ruby/trema/hello.c +0 -133
- data/ruby/trema/hello.h +0 -42
- data/ruby/trema/host.rb +0 -263
- data/ruby/trema/link.rb +0 -177
- data/ruby/trema/list-switches-reply.c +0 -44
- data/ruby/trema/list-switches-reply.h +0 -38
- data/ruby/trema/mac.rb +0 -29
- data/ruby/trema/match.c +0 -621
- data/ruby/trema/match.h +0 -34
- data/ruby/trema/monkey-patch/integer.rb +0 -35
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +0 -34
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -49
- data/ruby/trema/monkey-patch/integer/validators.rb +0 -36
- data/ruby/trema/monkey-patch/module.rb +0 -33
- data/ruby/trema/monkey-patch/module/class-method.rb +0 -38
- data/ruby/trema/monkey-patch/module/deprecation.rb +0 -39
- data/ruby/trema/monkey-patch/string.rb +0 -31
- data/ruby/trema/monkey-patch/string/inflectors.rb +0 -52
- data/ruby/trema/netns.rb +0 -127
- data/ruby/trema/network-component.rb +0 -151
- data/ruby/trema/ofctl.rb +0 -70
- data/ruby/trema/open-vswitch.rb +0 -160
- data/ruby/trema/openflow-error.c +0 -193
- data/ruby/trema/openflow-error.h +0 -51
- data/ruby/trema/openflow-switch.rb +0 -35
- data/ruby/trema/ordered-hash.rb +0 -75
- data/ruby/trema/packet-in.c +0 -1365
- data/ruby/trema/packet-in.h +0 -44
- data/ruby/trema/packet-queue.rb +0 -181
- data/ruby/trema/packetin-filter.rb +0 -124
- data/ruby/trema/path.rb +0 -85
- data/ruby/trema/phost.rb +0 -76
- data/ruby/trema/port-mod.c +0 -232
- data/ruby/trema/port-mod.h +0 -34
- data/ruby/trema/port-stats-reply.rb +0 -109
- data/ruby/trema/port-status-add.rb +0 -60
- data/ruby/trema/port-status-delete.rb +0 -60
- data/ruby/trema/port-status-modify.rb +0 -60
- data/ruby/trema/port-status.c +0 -192
- data/ruby/trema/port-status.h +0 -41
- data/ruby/trema/port.c +0 -398
- data/ruby/trema/port.h +0 -45
- data/ruby/trema/process.rb +0 -103
- data/ruby/trema/queue-get-config-reply.c +0 -205
- data/ruby/trema/queue-get-config-reply.h +0 -45
- data/ruby/trema/queue-get-config-request.c +0 -141
- data/ruby/trema/queue-get-config-request.h +0 -42
- data/ruby/trema/queue-stats-reply.rb +0 -76
- data/ruby/trema/ruby-switch.rb +0 -62
- data/ruby/trema/send-out-port.rb +0 -113
- data/ruby/trema/set-config.c +0 -174
- data/ruby/trema/set-config.h +0 -42
- data/ruby/trema/set-eth-addr.rb +0 -54
- data/ruby/trema/set-eth-dst-addr.rb +0 -52
- data/ruby/trema/set-eth-src-addr.rb +0 -53
- data/ruby/trema/set-ip-addr.rb +0 -54
- data/ruby/trema/set-ip-dst-addr.rb +0 -53
- data/ruby/trema/set-ip-src-addr.rb +0 -52
- data/ruby/trema/set-ip-tos.rb +0 -64
- data/ruby/trema/set-transport-dst-port.rb +0 -53
- data/ruby/trema/set-transport-port.rb +0 -53
- data/ruby/trema/set-transport-src-port.rb +0 -54
- data/ruby/trema/set-vlan-priority.rb +0 -66
- data/ruby/trema/set-vlan-vid.rb +0 -65
- data/ruby/trema/shell.rb +0 -37
- data/ruby/trema/shell/down.rb +0 -37
- data/ruby/trema/shell/killall.rb +0 -38
- data/ruby/trema/shell/link.rb +0 -59
- data/ruby/trema/shell/reset_stats.rb +0 -49
- data/ruby/trema/shell/run.rb +0 -67
- data/ruby/trema/shell/send_packets.rb +0 -40
- data/ruby/trema/shell/show_stats.rb +0 -47
- data/ruby/trema/shell/up.rb +0 -41
- data/ruby/trema/shell/vhost.rb +0 -42
- data/ruby/trema/shell/vswitch.rb +0 -47
- data/ruby/trema/stats-helper.rb +0 -63
- data/ruby/trema/stats-reply.c +0 -540
- data/ruby/trema/stats-reply.h +0 -51
- data/ruby/trema/stats-request.c +0 -715
- data/ruby/trema/stats-request.h +0 -40
- data/ruby/trema/strip-vlan-header.rb +0 -41
- data/ruby/trema/switch-daemon.rb +0 -90
- data/ruby/trema/switch-disconnected.c +0 -38
- data/ruby/trema/switch-disconnected.h +0 -36
- data/ruby/trema/switch-event.c +0 -648
- data/ruby/trema/switch-event.h +0 -27
- data/ruby/trema/switch-manager.rb +0 -119
- data/ruby/trema/switch.c +0 -197
- data/ruby/trema/switch.h +0 -40
- data/ruby/trema/switch.rb +0 -56
- data/ruby/trema/table-stats-reply.rb +0 -85
- data/ruby/trema/timers.rb +0 -95
- data/ruby/trema/trema-ruby-utils.c +0 -66
- data/ruby/trema/trema-ruby-utils.h +0 -42
- data/ruby/trema/trema.c +0 -126
- data/ruby/trema/tremashark.rb +0 -46
- data/ruby/trema/util.rb +0 -116
- data/ruby/trema/vendor-action.rb +0 -82
- data/ruby/trema/vendor-stats-reply.rb +0 -64
- data/ruby/trema/vendor.c +0 -230
- data/ruby/trema/vendor.h +0 -48
- data/ruby/trema/version.rb +0 -28
- data/spec/support/action.rb +0 -49
- data/spec/support/mandatory-option.rb +0 -53
- data/spec/support/matchers/constant.rb +0 -25
- data/spec/support/openflow-message.rb +0 -173
- data/spec/support/port-status.rb +0 -35
- data/spec/trema/app_spec.rb +0 -88
- data/spec/trema/barrier-reply_spec.rb +0 -43
- data/spec/trema/barrier-request_spec.rb +0 -92
- data/spec/trema/cli_spec.rb +0 -156
- data/spec/trema/default-logger_spec.rb +0 -46
- data/spec/trema/dsl/configuration_spec.rb +0 -120
- data/spec/trema/dsl/link_spec.rb +0 -50
- data/spec/trema/dsl/run_spec.rb +0 -72
- data/spec/trema/dsl/runner_spec.rb +0 -247
- data/spec/trema/dsl/switch_spec.rb +0 -69
- data/spec/trema/dsl/syntax_spec.rb +0 -110
- data/spec/trema/dsl/vhost_spec.rb +0 -144
- data/spec/trema/dsl/vswitch_spec.rb +0 -80
- data/spec/trema/echo-reply_spec.rb +0 -84
- data/spec/trema/echo-request_spec.rb +0 -128
- data/spec/trema/enqueue_spec.rb +0 -76
- data/spec/trema/error_spec.rb +0 -81
- data/spec/trema/executables_spec.rb +0 -54
- data/spec/trema/features-reply_spec.rb +0 -91
- data/spec/trema/features-request_spec.rb +0 -93
- data/spec/trema/flow-mod_spec.rb +0 -99
- data/spec/trema/flow-removed_spec.rb +0 -144
- data/spec/trema/get-config-reply_spec.rb +0 -43
- data/spec/trema/get-config-request_spec.rb +0 -92
- data/spec/trema/hardware-switch_spec.rb +0 -54
- data/spec/trema/hello_spec.rb +0 -63
- data/spec/trema/host_spec.rb +0 -191
- data/spec/trema/link_spec.rb +0 -62
- data/spec/trema/list-switches-reply_spec.rb +0 -46
- data/spec/trema/match_spec.rb +0 -111
- data/spec/trema/open-vswitch_spec.rb +0 -121
- data/spec/trema/openflow-error_spec.rb +0 -141
- data/spec/trema/packet-in_spec.rb +0 -717
- data/spec/trema/packet-out_spec.rb +0 -125
- data/spec/trema/packetin-filter_spec.rb +0 -39
- data/spec/trema/port-mod_spec.rb +0 -98
- data/spec/trema/port-status-add_spec.rb +0 -32
- data/spec/trema/port-status-delete_spec.rb +0 -32
- data/spec/trema/port-status-modify_spec.rb +0 -71
- data/spec/trema/port-status_spec.rb +0 -38
- data/spec/trema/port_spec.rb +0 -59
- data/spec/trema/process_spec.rb +0 -69
- data/spec/trema/queue-get-config-reply_spec.rb +0 -65
- data/spec/trema/queue-get-config-request_spec.rb +0 -67
- data/spec/trema/send-out-port_spec.rb +0 -106
- data/spec/trema/set-config_spec.rb +0 -78
- data/spec/trema/set-eth-addr_spec.rb +0 -62
- data/spec/trema/set-ip-addr_spec.rb +0 -81
- data/spec/trema/set-ip-tos_spec.rb +0 -70
- data/spec/trema/set-transport-dst-port_spec.rb +0 -65
- data/spec/trema/set-transport-src-port_spec.rb +0 -65
- data/spec/trema/set-vlan-priority_spec.rb +0 -65
- data/spec/trema/set-vlan-vid_spec.rb +0 -65
- data/spec/trema/shell/vhost_spec.rb +0 -58
- data/spec/trema/shell/vswitch_spec.rb +0 -87
- data/spec/trema/stats-reply_spec.rb +0 -363
- data/spec/trema/stats-request_spec.rb +0 -166
- data/spec/trema/strip-vlan-header_spec.rb +0 -44
- data/spec/trema/switch-daemon_spec.rb +0 -81
- data/spec/trema/switch-disconnected_spec.rb +0 -56
- data/spec/trema/switch-manager_spec.rb +0 -41
- data/spec/trema/tremashark_spec.rb +0 -39
- data/spec/trema/util_spec.rb +0 -88
- data/spec/trema/vendor-action_spec.rb +0 -75
- data/spec/trema/vendor_spec.rb +0 -76
- data/spec/trema_spec.rb +0 -94
- data/src/examples/cbench_switch/README +0 -21
- data/src/examples/cbench_switch/cbench-switch.rb +0 -38
- data/src/examples/cbench_switch/cbench_switch.c +0 -66
- data/src/examples/dumper/dumper.c +0 -362
- data/src/examples/dumper/dumper.conf +0 -7
- data/src/examples/dumper/dumper.rb +0 -195
- data/src/examples/hello_trema/.gitignore +0 -2
- data/src/examples/hello_trema/README.md +0 -2
- data/src/examples/hello_trema/hello-trema.rb +0 -30
- data/src/examples/hello_trema/hello_trema.c +0 -48
- data/src/examples/hello_trema/sample.conf +0 -1
- data/src/examples/learning_switch/README +0 -15
- data/src/examples/learning_switch/fdb.rb +0 -110
- data/src/examples/learning_switch/learning-switch.rb +0 -90
- data/src/examples/learning_switch/learning_switch.c +0 -217
- data/src/examples/learning_switch/learning_switch.conf +0 -18
- data/src/examples/list_switches/README +0 -19
- data/src/examples/list_switches/list-switches.rb +0 -43
- data/src/examples/list_switches/list_switches.c +0 -79
- data/src/examples/list_switches/list_switches.conf +0 -15
- data/src/examples/match_compare/match-compare.conf +0 -30
- data/src/examples/match_compare/match-compare.rb +0 -97
- data/src/examples/multi_learning_switch/README +0 -14
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +0 -94
- data/src/examples/multi_learning_switch/multi_learning_switch.c +0 -294
- data/src/examples/multi_learning_switch/multi_learning_switch.conf +0 -17
- data/src/examples/openflow_message/README +0 -11
- data/src/examples/openflow_message/echo.c +0 -80
- data/src/examples/openflow_message/echo.rb +0 -56
- data/src/examples/openflow_message/example.rb +0 -60
- data/src/examples/openflow_message/features-request.rb +0 -96
- data/src/examples/openflow_message/features_request.c +0 -167
- data/src/examples/openflow_message/hello.c +0 -68
- data/src/examples/openflow_message/hello.rb +0 -43
- data/src/examples/openflow_message/set-config.rb +0 -57
- data/src/examples/openflow_message/set_config.c +0 -68
- data/src/examples/openflow_message/vendor-action.rb +0 -43
- data/src/examples/openflow_message/vendor-stats-request.rb +0 -66
- data/src/examples/openflow_message/vendor_action.c +0 -103
- data/src/examples/openflow_switch/echo_switch.c +0 -89
- data/src/examples/openflow_switch/hello_switch.c +0 -85
- data/src/examples/packet_in/README +0 -15
- data/src/examples/packet_in/packet-in.rb +0 -37
- data/src/examples/packet_in/packet_in.c +0 -53
- data/src/examples/packet_in/packet_in.conf +0 -15
- data/src/examples/packetin_filter_config/README +0 -12
- data/src/examples/packetin_filter_config/add_filter.c +0 -71
- data/src/examples/packetin_filter_config/delete_filter.c +0 -63
- data/src/examples/packetin_filter_config/delete_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/dump_filter.c +0 -63
- data/src/examples/packetin_filter_config/dump_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/packetin_filter_config.c +0 -132
- data/src/examples/packetin_filter_config/packetin_filter_config.conf +0 -7
- data/src/examples/packetin_filter_config/utils.c +0 -100
- data/src/examples/packetin_filter_config/utils.h +0 -40
- data/src/examples/patch_panel/network.conf +0 -14
- data/src/examples/patch_panel/patch-panel.conf +0 -1
- data/src/examples/patch_panel/patch-panel.rb +0 -59
- data/src/examples/repeater_hub/README +0 -8
- data/src/examples/repeater_hub/repeater-hub.rb +0 -41
- data/src/examples/repeater_hub/repeater-hub_spec.rb +0 -154
- data/src/examples/repeater_hub/repeater_hub.c +0 -81
- data/src/examples/repeater_hub/repeater_hub.conf +0 -28
- data/src/examples/simple_router/README +0 -18
- data/src/examples/simple_router/arp-table.rb +0 -81
- data/src/examples/simple_router/interface.rb +0 -90
- data/src/examples/simple_router/routing-table.rb +0 -60
- data/src/examples/simple_router/simple-router.rb +0 -191
- data/src/examples/simple_router/simple_router.conf +0 -24
- data/src/examples/simple_router/simple_router_netns.conf +0 -15
- data/src/examples/simple_router/simple_router_network.conf +0 -6
- data/src/examples/switch_event_config/.gitignore +0 -6
- data/src/examples/switch_event_config/add_forward_entry.c +0 -227
- data/src/examples/switch_event_config/delete_forward_entry.c +0 -226
- data/src/examples/switch_event_config/dump_forward_entries.c +0 -190
- data/src/examples/switch_event_config/network.conf +0 -2
- data/src/examples/switch_event_config/set_forward_entries.c +0 -210
- data/src/examples/switch_info/README +0 -13
- data/src/examples/switch_info/switch-info.rb +0 -44
- data/src/examples/switch_info/switch_info.c +0 -78
- data/src/examples/switch_info/switch_info.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.rb +0 -56
- data/src/examples/switch_monitor/switch_monitor.c +0 -152
- data/src/examples/traffic_monitor/counter.c +0 -72
- data/src/examples/traffic_monitor/counter.h +0 -46
- data/src/examples/traffic_monitor/counter.rb +0 -44
- data/src/examples/traffic_monitor/fdb.c +0 -74
- data/src/examples/traffic_monitor/fdb.h +0 -48
- data/src/examples/traffic_monitor/fdb.rb +0 -42
- data/src/examples/traffic_monitor/traffic-monitor.rb +0 -98
- data/src/examples/traffic_monitor/traffic_monitor.c +0 -161
- data/src/examples/traffic_monitor/traffic_monitor.conf +0 -16
- data/src/examples/transparent_firewall/README.md +0 -61
- data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +0 -713
- data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +0 -3440
- data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +0 -11342
- data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +0 -1937
- data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +0 -7329
- data/src/examples/transparent_firewall/block-rfc1918.rb +0 -86
- data/src/examples/transparent_firewall/pass-delegated.rb +0 -178
- data/src/examples/transparent_firewall/regen_aggregated.sh +0 -53
- data/src/examples/transparent_firewall/stats-to-cidrs.rb +0 -59
- data/src/lib/arp.h +0 -64
- data/src/lib/bool.h +0 -47
- data/src/lib/buffer.c +0 -304
- data/src/lib/buffer.h +0 -54
- data/src/lib/byteorder.c +0 -571
- data/src/lib/byteorder.h +0 -108
- data/src/lib/checks.h +0 -40
- data/src/lib/chibach.c +0 -392
- data/src/lib/chibach.h +0 -69
- data/src/lib/chibach_private.c +0 -168
- data/src/lib/chibach_private.h +0 -50
- data/src/lib/daemon.c +0 -429
- data/src/lib/daemon.h +0 -40
- data/src/lib/doubly_linked_list.c +0 -284
- data/src/lib/doubly_linked_list.h +0 -86
- data/src/lib/ether.c +0 -47
- data/src/lib/ether.h +0 -92
- data/src/lib/etherip.h +0 -44
- data/src/lib/event_forward_interface.c +0 -788
- data/src/lib/event_forward_interface.h +0 -138
- data/src/lib/event_handler.c +0 -419
- data/src/lib/event_handler.h +0 -57
- data/src/lib/external_callback.c +0 -126
- data/src/lib/external_callback.h +0 -46
- data/src/lib/hash_table.c +0 -415
- data/src/lib/hash_table.h +0 -136
- data/src/lib/icmp.h +0 -72
- data/src/lib/igmp.h +0 -48
- data/src/lib/ipv4.h +0 -64
- data/src/lib/ipv6.h +0 -46
- data/src/lib/linked_list.c +0 -244
- data/src/lib/linked_list.h +0 -84
- data/src/lib/log.c +0 -636
- data/src/lib/log.h +0 -77
- data/src/lib/management_interface.c +0 -359
- data/src/lib/management_interface.h +0 -40
- data/src/lib/management_service_interface.c +0 -102
- data/src/lib/management_service_interface.h +0 -134
- data/src/lib/match.h +0 -82
- data/src/lib/match_table.c +0 -606
- data/src/lib/match_table.h +0 -49
- data/src/lib/message_queue.c +0 -143
- data/src/lib/message_queue.h +0 -59
- data/src/lib/messenger.c +0 -1821
- data/src/lib/messenger.h +0 -145
- data/src/lib/openflow_application_interface.c +0 -1800
- data/src/lib/openflow_application_interface.h +0 -359
- data/src/lib/openflow_message.c +0 -4240
- data/src/lib/openflow_message.h +0 -291
- data/src/lib/openflow_service_interface.h +0 -58
- data/src/lib/openflow_switch_interface.c +0 -1378
- data/src/lib/openflow_switch_interface.h +0 -262
- data/src/lib/packet_info.c +0 -336
- data/src/lib/packet_info.h +0 -233
- data/src/lib/packet_parser.c +0 -522
- data/src/lib/packetin_filter_interface.c +0 -292
- data/src/lib/packetin_filter_interface.h +0 -125
- data/src/lib/persistent_storage.c +0 -478
- data/src/lib/persistent_storage.h +0 -44
- data/src/lib/secure_channel.c +0 -496
- data/src/lib/secure_channel.h +0 -43
- data/src/lib/stat.c +0 -248
- data/src/lib/stat.h +0 -51
- data/src/lib/tcp.h +0 -62
- data/src/lib/timer.c +0 -349
- data/src/lib/timer.h +0 -51
- data/src/lib/trema.c +0 -776
- data/src/lib/trema.h +0 -80
- data/src/lib/trema.hpp +0 -49
- data/src/lib/trema_private.c +0 -175
- data/src/lib/trema_private.h +0 -64
- data/src/lib/trema_wrapper.c +0 -59
- data/src/lib/trema_wrapper.h +0 -66
- data/src/lib/udp.h +0 -41
- data/src/lib/utility.c +0 -625
- data/src/lib/utility.h +0 -84
- data/src/lib/wrapper.c +0 -121
- data/src/lib/wrapper.h +0 -76
- data/src/management/application.c +0 -222
- data/src/management/echo.c +0 -183
- data/src/management/set_logging_level.c +0 -151
- data/src/management/show_stats.c +0 -148
- data/src/management/trema_manager +0 -184
- data/src/packetin_filter/README +0 -17
- data/src/packetin_filter/packetin_filter.c +0 -575
- data/src/switch_manager/README +0 -20
- data/src/switch_manager/cookie_table.c +0 -290
- data/src/switch_manager/cookie_table.h +0 -70
- data/src/switch_manager/dpid_table.c +0 -108
- data/src/switch_manager/dpid_table.h +0 -43
- data/src/switch_manager/event_forward_entry_manipulation.c +0 -120
- data/src/switch_manager/event_forward_entry_manipulation.h +0 -31
- data/src/switch_manager/ofpmsg_recv.c +0 -497
- data/src/switch_manager/ofpmsg_recv.h +0 -39
- data/src/switch_manager/ofpmsg_send.c +0 -274
- data/src/switch_manager/ofpmsg_send.h +0 -51
- data/src/switch_manager/secure_channel_listener.c +0 -296
- data/src/switch_manager/secure_channel_listener.h +0 -40
- data/src/switch_manager/secure_channel_receiver.c +0 -129
- data/src/switch_manager/secure_channel_receiver.h +0 -40
- data/src/switch_manager/secure_channel_sender.c +0 -131
- data/src/switch_manager/secure_channel_sender.h +0 -41
- data/src/switch_manager/service_interface.c +0 -180
- data/src/switch_manager/service_interface.h +0 -44
- data/src/switch_manager/switch.c +0 -988
- data/src/switch_manager/switch.h +0 -50
- data/src/switch_manager/switch_manager.c +0 -643
- data/src/switch_manager/switch_manager.h +0 -65
- data/src/switch_manager/switch_option.c +0 -30
- data/src/switch_manager/switch_option.h +0 -41
- data/src/switch_manager/switchinfo.h +0 -81
- data/src/switch_manager/xid_table.c +0 -182
- data/src/switch_manager/xid_table.h +0 -53
- data/src/tremashark/README +0 -79
- data/src/tremashark/packet_capture.c +0 -358
- data/src/tremashark/pcap_private.h +0 -45
- data/src/tremashark/pcap_queue.c +0 -195
- data/src/tremashark/pcap_queue.h +0 -56
- data/src/tremashark/plugin/.gitignore +0 -6
- data/src/tremashark/plugin/packet-trema/.gitignore +0 -5
- data/src/tremashark/plugin/packet-trema/Makefile +0 -77
- data/src/tremashark/plugin/packet-trema/Makefile.am +0 -110
- data/src/tremashark/plugin/packet-trema/Makefile.common +0 -29
- data/src/tremashark/plugin/packet-trema/moduleinfo.h +0 -39
- data/src/tremashark/plugin/packet-trema/packet-trema.c +0 -1671
- data/src/tremashark/plugin/packet-trema/plugin.c +0 -31
- data/src/tremashark/plugin/user_dlts +0 -2
- data/src/tremashark/queue.c +0 -167
- data/src/tremashark/queue.h +0 -58
- data/src/tremashark/stdin_relay.c +0 -257
- data/src/tremashark/syslog_relay.c +0 -247
- data/src/tremashark/tremashark.c +0 -554
- data/trema +0 -11
- data/trema-config +0 -11
- data/unittests/buffer_stubs.c +0 -72
- data/unittests/cmockery_trema.c +0 -121
- data/unittests/cmockery_trema.h +0 -95
- data/unittests/lib/buffer_test.c +0 -368
- data/unittests/lib/byteorder_test.c +0 -1798
- data/unittests/lib/daemon_test.c +0 -804
- data/unittests/lib/doubly_linked_list_test.c +0 -348
- data/unittests/lib/ether_test.c +0 -125
- data/unittests/lib/event_forward_interface_test.c +0 -1676
- data/unittests/lib/external_callback_test.c +0 -282
- data/unittests/lib/hash_table_test.c +0 -278
- data/unittests/lib/linked_list_test.c +0 -434
- data/unittests/lib/log_test.c +0 -672
- data/unittests/lib/management_interface_test.c +0 -238
- data/unittests/lib/management_service_interface_test.c +0 -317
- data/unittests/lib/match_table_test.c +0 -1507
- data/unittests/lib/message_queue_test.c +0 -381
- data/unittests/lib/messenger_test.c +0 -623
- data/unittests/lib/openflow_application_interface_test.c +0 -3713
- data/unittests/lib/openflow_message_test.c +0 -8047
- data/unittests/lib/packet_info_test.c +0 -558
- data/unittests/lib/packet_parser_test.c +0 -784
- data/unittests/lib/packetin_filter_interface_test.c +0 -721
- data/unittests/lib/persistent_storage_test.c +0 -800
- data/unittests/lib/stat_test.c +0 -433
- data/unittests/lib/test_packets/arp_rep.cap +0 -0
- data/unittests/lib/test_packets/arp_req.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
- data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
- data/unittests/lib/test_packets/ipx.cap +0 -0
- data/unittests/lib/test_packets/lldp.cap +0 -0
- data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
- data/unittests/lib/test_packets/rarp_req.cap +0 -0
- data/unittests/lib/test_packets/tcp.cap +0 -0
- data/unittests/lib/test_packets/tcp_syn.cap +0 -0
- data/unittests/lib/test_packets/udp.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
- data/unittests/lib/timer_test.c +0 -246
- data/unittests/lib/trema_private_test.c +0 -321
- data/unittests/lib/trema_test.c +0 -1030
- data/unittests/lib/utility_test.c +0 -711
- data/unittests/lib/wrapper_test.c +0 -228
- data/unittests/packetin_filter/packetin_filter_test.c +0 -476
- data/unittests/switch_manager/switch_manager_test.c +0 -1183
- data/unittests/wrapper_stubs.c +0 -37
- data/vendor/.gitignore +0 -6
- data/vendor/README.md +0 -29
- data/vendor/cmockery-20110428.tar.gz +0 -0
- data/vendor/oflops-0.03.trema1.tar.gz +0 -0
- data/vendor/oflops_no_snmp+1.0.0.diff +0 -340
- data/vendor/openflow-1.0.0.tar.gz +0 -0
- data/vendor/openflow.git.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2.trema1.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2_librt-check.diff +0 -21
- data/vendor/packet-openflow.diff +0 -13
- data/vendor/ruby-ifconfig-1.2/COPYING +0 -340
- data/vendor/ruby-ifconfig-1.2/Changelog +0 -16
- data/vendor/ruby-ifconfig-1.2/INSTALL +0 -239
- data/vendor/ruby-ifconfig-1.2/README +0 -38
- data/vendor/ruby-ifconfig-1.2/Rakefile +0 -14
- data/vendor/ruby-ifconfig-1.2/TODO +0 -8
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +0 -14
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +0 -24
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +0 -60
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +0 -20
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +0 -36
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +0 -71
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +0 -72
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +0 -69
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +0 -3
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +0 -84
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +0 -130
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +0 -43
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +0 -112
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +0 -55
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +0 -38
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +0 -77
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/setup.rb +0 -1306
- data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +0 -31
- data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +0 -44
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 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/cli'
|
|
20
|
-
require 'trema/dsl'
|
|
21
|
-
require 'trema/util'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Command
|
|
26
|
-
include Trema::Util
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def trema_send_packets(source_name, dest_name, options)
|
|
30
|
-
source = find_host_by_name(source_name)
|
|
31
|
-
fail "unknown host: #{ source_name }" if source.nil?
|
|
32
|
-
|
|
33
|
-
dest = find_host_by_name(dest_name)
|
|
34
|
-
fail "unknown host: #{ dest_name }" if dest.nil?
|
|
35
|
-
|
|
36
|
-
Trema::Cli.new(source).send_packets(dest, options)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
### Local variables:
|
|
43
|
-
### mode: Ruby
|
|
44
|
-
### coding: utf-8
|
|
45
|
-
### indent-tabs-mode: nil
|
|
46
|
-
### End:
|
data/ruby/trema/command/shell.rb
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# trema shell command.
|
|
3
|
-
#
|
|
4
|
-
# Copyright (C) 2008-2013 NEC Corporation
|
|
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
|
-
require 'irb'
|
|
22
|
-
require 'trema/util'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
include Trema::Util
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
module Trema
|
|
29
|
-
module Command
|
|
30
|
-
def shell
|
|
31
|
-
undef :kill
|
|
32
|
-
|
|
33
|
-
require 'tempfile'
|
|
34
|
-
require 'trema'
|
|
35
|
-
require 'trema/shell'
|
|
36
|
-
f = Tempfile.open('irbrc')
|
|
37
|
-
f.print <<EOF
|
|
38
|
-
include Trema::Shell
|
|
39
|
-
ENV[ "TREMA_HOME" ] = Trema.home
|
|
40
|
-
$config = Trema::DSL::Configuration.new
|
|
41
|
-
$context = Trema::DSL::Context.new( $config )
|
|
42
|
-
EOF
|
|
43
|
-
f.close
|
|
44
|
-
load f.path
|
|
45
|
-
IRB.start
|
|
46
|
-
ensure
|
|
47
|
-
cleanup $config
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
### Local variables:
|
|
54
|
-
### mode: Ruby
|
|
55
|
-
### coding: utf-8
|
|
56
|
-
### indent-tabs-mode: nil
|
|
57
|
-
### End:
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 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/cli'
|
|
20
|
-
require 'trema/util'
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
module Trema
|
|
24
|
-
module Command
|
|
25
|
-
include Trema::Util
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def trema_show_stats(hostname, tx, rx)
|
|
29
|
-
cli = get_cli(hostname)
|
|
30
|
-
|
|
31
|
-
unless tx || rx
|
|
32
|
-
show_tx_and_rx cli
|
|
33
|
-
end
|
|
34
|
-
cli.show_tx_stats if tx
|
|
35
|
-
cli.show_rx_stats if rx
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
############################################################################
|
|
40
|
-
private
|
|
41
|
-
############################################################################
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def show_tx_and_rx(cli)
|
|
45
|
-
puts 'Sent packets:'
|
|
46
|
-
cli.show_tx_stats
|
|
47
|
-
puts 'Received packets:'
|
|
48
|
-
cli.show_rx_stats
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def get_cli(name)
|
|
53
|
-
host = find_host_by_name(name)
|
|
54
|
-
exit_now! "unknown host: #{ name }" if host.nil?
|
|
55
|
-
Trema::Cli.new host
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
### Local variables:
|
|
62
|
-
### mode: Ruby
|
|
63
|
-
### coding: utf-8
|
|
64
|
-
### indent-tabs-mode: nil
|
|
65
|
-
### End:
|
data/ruby/trema/command/up.rb
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 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/util'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
module Trema
|
|
23
|
-
module Command
|
|
24
|
-
include Trema::Util
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def trema_up(name)
|
|
28
|
-
switch = find_switch_by_name(name)
|
|
29
|
-
if switch
|
|
30
|
-
switch.run
|
|
31
|
-
else
|
|
32
|
-
# TODO: support vlink
|
|
33
|
-
fail "Unknown name: #{ name }"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
### Local variables:
|
|
41
|
-
### mode: Ruby
|
|
42
|
-
### coding: utf-8
|
|
43
|
-
### indent-tabs-mode: nil
|
|
44
|
-
### End:
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 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/version'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
module Trema
|
|
23
|
-
module Command
|
|
24
|
-
def trema_version
|
|
25
|
-
puts "trema version #{ Trema::VERSION }"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
### Local variables:
|
|
32
|
-
### mode: Ruby
|
|
33
|
-
### coding: utf-8
|
|
34
|
-
### indent-tabs-mode: nil
|
|
35
|
-
### End:
|
data/ruby/trema/compat.h
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2008-2013 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
|
-
#ifndef COMPAT_H
|
|
20
|
-
#define COMPAT_H
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#ifndef RARRAY_LEN
|
|
24
|
-
#define RARRAY_LEN( ary ) RARRAY( ary )->len
|
|
25
|
-
#endif
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
#endif // COMPAT_H
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/*
|
|
32
|
-
* Local variables:
|
|
33
|
-
* c-basic-offset: 2
|
|
34
|
-
* indent-tabs-mode: nil
|
|
35
|
-
* End:
|
|
36
|
-
*/
|
data/ruby/trema/controller.c
DELETED
|
@@ -1,691 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2008-2013 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
|
-
#include "ruby.h"
|
|
20
|
-
#include "action-common.h"
|
|
21
|
-
#include "barrier-reply.h"
|
|
22
|
-
#include "buffer.h"
|
|
23
|
-
#include "controller.h"
|
|
24
|
-
#include "default-logger.h"
|
|
25
|
-
#include "features-reply.h"
|
|
26
|
-
#include "flow-removed.h"
|
|
27
|
-
#include "get-config-reply.h"
|
|
28
|
-
#include "list-switches-reply.h"
|
|
29
|
-
#include "openflow-error.h"
|
|
30
|
-
#include "openflow.h"
|
|
31
|
-
#include "packet-in.h"
|
|
32
|
-
#include "port-status.h"
|
|
33
|
-
#include "queue-get-config-reply.h"
|
|
34
|
-
#include "rubysig.h"
|
|
35
|
-
#include "stats-reply.h"
|
|
36
|
-
#include "switch-disconnected.h"
|
|
37
|
-
#include "trema.h"
|
|
38
|
-
#include "vendor.h"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
extern VALUE mTrema;
|
|
42
|
-
VALUE cController;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
static void
|
|
46
|
-
handle_timer_event( void *self ) {
|
|
47
|
-
if ( rb_respond_to( ( VALUE ) self, rb_intern( "handle_timer_event" ) ) ) {
|
|
48
|
-
rb_funcall( ( VALUE ) self, rb_intern( "handle_timer_event" ), 0 );
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/*
|
|
54
|
-
* @overload send_message(datapath_id, message)
|
|
55
|
-
* Sends an OpenFlow message to the datapath.
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* send_message datapath_id, FeaturesRequest.new
|
|
59
|
-
*
|
|
60
|
-
* @param [Integer] datapath_id
|
|
61
|
-
* the datapath to which a message is sent.
|
|
62
|
-
* @param [Hello, EchoRequest, EchoReply, FeaturesRequest, SetConfig, GetConfigRequest, QueueGetConfigRequest, StatsRequest, BarrierRequest, PortMod, Vendor] message
|
|
63
|
-
* the message to be sent.
|
|
64
|
-
*/
|
|
65
|
-
static VALUE
|
|
66
|
-
controller_send_message( VALUE self, VALUE datapath_id, VALUE message ) {
|
|
67
|
-
buffer *buf;
|
|
68
|
-
Data_Get_Struct( message, buffer, buf );
|
|
69
|
-
send_openflow_message( NUM2ULL( datapath_id ), buf );
|
|
70
|
-
return self;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
static VALUE
|
|
75
|
-
controller_send_list_switches_request( VALUE self ) {
|
|
76
|
-
send_list_switches_request( ( void * ) self );
|
|
77
|
-
return self;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
static void
|
|
82
|
-
append_action( openflow_actions *actions, VALUE action ) {
|
|
83
|
-
if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::Enqueue" ) ) == Qtrue ) {
|
|
84
|
-
uint32_t queue_id = ( uint32_t ) NUM2UINT( rb_funcall( action, rb_intern( "queue_id" ), 0 ) );
|
|
85
|
-
uint16_t port_number = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) );
|
|
86
|
-
append_action_enqueue( actions, port_number, queue_id );
|
|
87
|
-
}
|
|
88
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SendOutPort" ) ) == Qtrue ) {
|
|
89
|
-
uint16_t port_number = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) );
|
|
90
|
-
uint16_t max_len = ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "max_len" ), 0 ) );
|
|
91
|
-
append_action_output( actions, port_number, max_len );
|
|
92
|
-
}
|
|
93
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthDstAddr" ) ) == Qtrue ) {
|
|
94
|
-
uint8_t dl_dst[ OFP_ETH_ALEN ];
|
|
95
|
-
uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_dst );
|
|
96
|
-
append_action_set_dl_dst( actions, ptr );
|
|
97
|
-
}
|
|
98
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetEthSrcAddr" ) ) == Qtrue ) {
|
|
99
|
-
uint8_t dl_src[ OFP_ETH_ALEN ];
|
|
100
|
-
uint8_t *ptr = ( uint8_t * ) dl_addr_to_a( rb_funcall( action, rb_intern( "mac_address" ), 0 ), dl_src );
|
|
101
|
-
append_action_set_dl_src( actions, ptr );
|
|
102
|
-
}
|
|
103
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpDstAddr" ) ) == Qtrue ) {
|
|
104
|
-
append_action_set_nw_dst( actions, nw_addr_to_i( rb_funcall( action, rb_intern( "ip_address" ), 0 ) ) );
|
|
105
|
-
}
|
|
106
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpSrcAddr" ) ) == Qtrue ) {
|
|
107
|
-
append_action_set_nw_src( actions, nw_addr_to_i( rb_funcall( action, rb_intern( "ip_address" ), 0 ) ) );
|
|
108
|
-
}
|
|
109
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetIpTos" ) ) == Qtrue ) {
|
|
110
|
-
append_action_set_nw_tos( actions, ( uint8_t ) NUM2UINT( rb_funcall( action, rb_intern( "type_of_service" ), 0 ) ) );
|
|
111
|
-
}
|
|
112
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetTransportDstPort" ) ) == Qtrue ) {
|
|
113
|
-
append_action_set_tp_dst( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) ) );
|
|
114
|
-
}
|
|
115
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetTransportSrcPort" ) ) == Qtrue ) {
|
|
116
|
-
append_action_set_tp_src( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "port_number" ), 0 ) ) );
|
|
117
|
-
}
|
|
118
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetVlanPriority" ) ) == Qtrue ) {
|
|
119
|
-
append_action_set_vlan_pcp( actions, ( uint8_t ) NUM2UINT( rb_funcall( action, rb_intern( "vlan_priority" ), 0 ) ) );
|
|
120
|
-
}
|
|
121
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::SetVlanVid" ) ) == Qtrue ) {
|
|
122
|
-
append_action_set_vlan_vid( actions, ( uint16_t ) NUM2UINT( rb_funcall( action, rb_intern( "vlan_id" ), 0 ) ) );
|
|
123
|
-
}
|
|
124
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::StripVlanHeader" ) ) == Qtrue ) {
|
|
125
|
-
append_action_strip_vlan( actions );
|
|
126
|
-
}
|
|
127
|
-
else if ( rb_funcall( action, rb_intern( "is_a?" ), 1, rb_path2class( "Trema::VendorAction" ) ) == Qtrue ) {
|
|
128
|
-
VALUE vendor_id = rb_funcall( action, rb_intern( "vendor_id" ), 0 );
|
|
129
|
-
VALUE rbody = rb_funcall( action, rb_intern( "body" ), 0 );
|
|
130
|
-
if ( rbody != Qnil ) {
|
|
131
|
-
Check_Type( rbody, T_ARRAY );
|
|
132
|
-
uint16_t length = ( uint16_t ) RARRAY_LEN( rbody );
|
|
133
|
-
buffer *body = alloc_buffer_with_length( length );
|
|
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 ] );
|
|
137
|
-
}
|
|
138
|
-
append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), body );
|
|
139
|
-
free_buffer( body );
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
append_action_vendor( actions, ( uint32_t ) NUM2UINT( vendor_id ), NULL );
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
rb_raise( rb_eTypeError, "actions argument must be an Array of Action objects" );
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
static void
|
|
152
|
-
form_actions( VALUE raction, openflow_actions *actions ) {
|
|
153
|
-
if ( raction != Qnil ) {
|
|
154
|
-
switch ( TYPE( raction ) ) {
|
|
155
|
-
case T_ARRAY:
|
|
156
|
-
{
|
|
157
|
-
VALUE *each = RARRAY_PTR( raction );
|
|
158
|
-
int i;
|
|
159
|
-
for ( i = 0; i < RARRAY_LEN( raction ); i++ ) {
|
|
160
|
-
append_action( actions, each[ i ] );
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
break;
|
|
164
|
-
case T_OBJECT:
|
|
165
|
-
append_action( actions, raction );
|
|
166
|
-
break;
|
|
167
|
-
default:
|
|
168
|
-
rb_raise( rb_eTypeError, "actions argument must be an Array or an Action object" );
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
static VALUE
|
|
175
|
-
get_strict( int argc, VALUE *argv ) {
|
|
176
|
-
VALUE datapath_id = Qnil;
|
|
177
|
-
VALUE options = Qnil;
|
|
178
|
-
VALUE strict = Qnil;
|
|
179
|
-
|
|
180
|
-
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
181
|
-
if ( options != Qnil ) {
|
|
182
|
-
strict = rb_hash_aref( options, ID2SYM( rb_intern( "strict" ) ) );
|
|
183
|
-
}
|
|
184
|
-
return strict;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
static VALUE
|
|
189
|
-
controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self ) {
|
|
190
|
-
VALUE datapath_id = Qnil;
|
|
191
|
-
VALUE options = Qnil;
|
|
192
|
-
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
193
|
-
|
|
194
|
-
// Defaults
|
|
195
|
-
struct ofp_match default_match;
|
|
196
|
-
memset( &default_match, 0, sizeof( struct ofp_match ) );
|
|
197
|
-
default_match.wildcards = OFPFW_ALL;
|
|
198
|
-
uint32_t transaction_id;
|
|
199
|
-
struct ofp_match *match = &default_match;
|
|
200
|
-
uint64_t cookie;
|
|
201
|
-
uint16_t idle_timeout = 0;
|
|
202
|
-
uint16_t hard_timeout = 0;
|
|
203
|
-
uint16_t priority = UINT16_MAX;
|
|
204
|
-
uint32_t buffer_id = UINT32_MAX;
|
|
205
|
-
uint16_t out_port = OFPP_NONE;
|
|
206
|
-
uint16_t flags = OFPFF_SEND_FLOW_REM;
|
|
207
|
-
openflow_actions *actions = create_actions();
|
|
208
|
-
|
|
209
|
-
// Options
|
|
210
|
-
if ( options != Qnil ) {
|
|
211
|
-
VALUE opt_transaction_id = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) );
|
|
212
|
-
if ( opt_transaction_id != Qnil ) {
|
|
213
|
-
transaction_id = ( uint32_t ) NUM2ULONG( opt_transaction_id );
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
transaction_id = get_transaction_id();
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
VALUE opt_match = rb_hash_aref( options, ID2SYM( rb_intern( "match" ) ) );
|
|
220
|
-
if ( opt_match != Qnil ) {
|
|
221
|
-
Data_Get_Struct( opt_match, struct ofp_match, match );
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
VALUE opt_cookie = rb_hash_aref( options, ID2SYM( rb_intern( "cookie" ) ) );
|
|
225
|
-
if ( opt_cookie != Qnil ) {
|
|
226
|
-
cookie = NUM2ULL( opt_cookie );
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
cookie = get_cookie();
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
|
|
233
|
-
if ( opt_idle_timeout != Qnil ) {
|
|
234
|
-
idle_timeout = ( uint16_t ) NUM2UINT( opt_idle_timeout );
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
VALUE opt_hard_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "hard_timeout" ) ) );
|
|
238
|
-
if ( opt_hard_timeout != Qnil ) {
|
|
239
|
-
hard_timeout = ( uint16_t ) NUM2UINT( opt_hard_timeout );
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
VALUE opt_priority = rb_hash_aref( options, ID2SYM( rb_intern( "priority" ) ) );
|
|
243
|
-
if ( opt_priority != Qnil ) {
|
|
244
|
-
priority = ( uint16_t ) NUM2UINT( opt_priority );
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
|
|
248
|
-
if ( opt_buffer_id != Qnil ) {
|
|
249
|
-
buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
VALUE opt_out_port = rb_hash_aref( options, ID2SYM( rb_intern( "out_port" ) ) );
|
|
253
|
-
if ( opt_out_port != Qnil ) {
|
|
254
|
-
out_port = ( uint16_t ) NUM2UINT( opt_out_port );
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
VALUE opt_send_flow_rem = rb_hash_aref( options, ID2SYM( rb_intern( "send_flow_rem" ) ) );
|
|
258
|
-
if ( opt_send_flow_rem == Qfalse ) {
|
|
259
|
-
flags &= ( uint16_t ) ~OFPFF_SEND_FLOW_REM;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
VALUE opt_check_overlap = rb_hash_aref( options, ID2SYM( rb_intern( "check_overlap" ) ) );
|
|
263
|
-
if ( opt_check_overlap != Qnil ) {
|
|
264
|
-
flags |= OFPFF_CHECK_OVERLAP;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
VALUE opt_emerg = rb_hash_aref( options, ID2SYM( rb_intern( "emerg" ) ) );
|
|
268
|
-
if ( opt_emerg != Qnil ) {
|
|
269
|
-
flags |= OFPFF_EMERG;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
VALUE opt_actions = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
|
|
273
|
-
if ( opt_actions != Qnil ) {
|
|
274
|
-
form_actions( opt_actions, actions );
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
buffer *flow_mod = create_flow_mod(
|
|
279
|
-
transaction_id,
|
|
280
|
-
*match,
|
|
281
|
-
cookie,
|
|
282
|
-
command,
|
|
283
|
-
idle_timeout,
|
|
284
|
-
hard_timeout,
|
|
285
|
-
priority,
|
|
286
|
-
buffer_id,
|
|
287
|
-
out_port,
|
|
288
|
-
flags,
|
|
289
|
-
actions
|
|
290
|
-
);
|
|
291
|
-
send_openflow_message( NUM2ULL( datapath_id ), flow_mod );
|
|
292
|
-
|
|
293
|
-
free_buffer( flow_mod );
|
|
294
|
-
delete_actions( actions );
|
|
295
|
-
|
|
296
|
-
return self;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
/*
|
|
301
|
-
* @overload send_flow_mod_add(datapath_id, options={})
|
|
302
|
-
* Sends a flow_mod message to add a flow into the datapath.
|
|
303
|
-
*
|
|
304
|
-
* @example
|
|
305
|
-
* def packet_in datapath_id, message
|
|
306
|
-
* send_flow_mod_add datapath_id, :match => Match.from(message), :actions => SendOutPort.new(OFPP_FLOOD)
|
|
307
|
-
* end
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
* @param [Number] datapath_id
|
|
311
|
-
* the datapath to which a message is sent.
|
|
312
|
-
*
|
|
313
|
-
* @param [Hash] options
|
|
314
|
-
* the options to create a message with.
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
* @option options [Number, nil] :transaction_id (nil)
|
|
318
|
-
* Transaction ids, message sequence numbers matching requests to replies.
|
|
319
|
-
* nil means automatically generate transaction ID.
|
|
320
|
-
*
|
|
321
|
-
* @option options [Match, nil] :match (nil)
|
|
322
|
-
* A {Match} object describing the fields of the flow.
|
|
323
|
-
*
|
|
324
|
-
* @option options [Number] :idle_timeout (0)
|
|
325
|
-
* The idle time in seconds before discarding.
|
|
326
|
-
* Zero means flow never expires.
|
|
327
|
-
*
|
|
328
|
-
* @option options [Number] :cookie
|
|
329
|
-
* An opaque issued identifier.
|
|
330
|
-
*
|
|
331
|
-
* @option options [Number] :hard_timeout (0)
|
|
332
|
-
* The maximum time before discarding in seconds.
|
|
333
|
-
* Zero means flow never expires.
|
|
334
|
-
*
|
|
335
|
-
* @option options [Number] :priority (0xffff)
|
|
336
|
-
* The priority level of the flow entry.
|
|
337
|
-
*
|
|
338
|
-
* @option options [Number] :buffer_id (0xffffffff)
|
|
339
|
-
* The buffer ID assigned by the datapath of a buffered packet to
|
|
340
|
-
* apply the flow to. If 0xffffffff, no buffered packet is to be
|
|
341
|
-
* applied to flow actions.
|
|
342
|
-
*
|
|
343
|
-
* @option options [Number] :out_port (0xffff)
|
|
344
|
-
* If the option contains a value other than OFPP_NONE(0xffff),
|
|
345
|
-
* it introduces a constraint when deleting flow entries.
|
|
346
|
-
*
|
|
347
|
-
* @option options [Boolean] :send_flow_rem (true)
|
|
348
|
-
* If true, send a flow_removed message when the flow expires or
|
|
349
|
-
* is deleted.
|
|
350
|
-
*
|
|
351
|
-
* @option options [Boolean] :check_overlap (false)
|
|
352
|
-
* If true, check for overlapping entries first, i.e. if there are
|
|
353
|
-
* conflicting entries with the same priority, the flow is not
|
|
354
|
-
* added and the modification fails.
|
|
355
|
-
*
|
|
356
|
-
* @option options [Boolean] :emerg (false)
|
|
357
|
-
* If true, the switch must consider this flow entry as an
|
|
358
|
-
* emergency entry, and only use it for forwarding when
|
|
359
|
-
* disconnected from the controller.
|
|
360
|
-
*
|
|
361
|
-
* @option options [SendOutPort, Array<SendOutPort>, nil] :actions (nil)
|
|
362
|
-
* The sequence of actions specifying the actions to perform on
|
|
363
|
-
* the flow's packets.
|
|
364
|
-
*/
|
|
365
|
-
static VALUE
|
|
366
|
-
controller_send_flow_mod_add( int argc, VALUE *argv, VALUE self ) {
|
|
367
|
-
return controller_send_flow_mod( OFPFC_ADD, argc, argv, self );
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
/*
|
|
372
|
-
* @overload send_flow_mod_modify(datapath, options={})
|
|
373
|
-
* Sends a flow_mod message to either modify or modify strict a flow from datapath.
|
|
374
|
-
* Both flow_mod modify and flow_mod modify strict commands would modify
|
|
375
|
-
* matched flow actions. The strict option adds the flow priority to the
|
|
376
|
-
* matched criteria. Accepts the same options as #send_flow_mod_add with the
|
|
377
|
-
* following additional option.
|
|
378
|
-
*
|
|
379
|
-
* @option options [Symbol] :strict
|
|
380
|
-
* If set to true modify_strict command is invoked otherwise the modify
|
|
381
|
-
* command is invoked.
|
|
382
|
-
*/
|
|
383
|
-
static VALUE
|
|
384
|
-
controller_send_flow_mod_modify( int argc, VALUE *argv, VALUE self ) {
|
|
385
|
-
uint16_t command = OFPFC_MODIFY;
|
|
386
|
-
|
|
387
|
-
if ( get_strict( argc, argv ) == Qtrue ) {
|
|
388
|
-
command = OFPFC_MODIFY_STRICT;
|
|
389
|
-
}
|
|
390
|
-
return controller_send_flow_mod( command, argc, argv, self );
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
/*
|
|
395
|
-
* @overload send_flow_mod_delete(datapath_id, options={})
|
|
396
|
-
* Sends a flow_mod_delete message to delete all matching flows.
|
|
397
|
-
* Both flow_mod delete and flow_mod delete strict commands would delete matched flows.
|
|
398
|
-
* The strict option adds the flow priority to the matched criteria.
|
|
399
|
-
* Accepts the same options as #send_flow_mod_add with the following additional
|
|
400
|
-
* option.
|
|
401
|
-
*
|
|
402
|
-
* @option options [Symbol] :strict
|
|
403
|
-
* If set to true delete_strict command is invoked otherwise the delete
|
|
404
|
-
* command is invoked.
|
|
405
|
-
*/
|
|
406
|
-
static VALUE
|
|
407
|
-
controller_send_flow_mod_delete( int argc, VALUE *argv, VALUE self ) {
|
|
408
|
-
uint16_t command = OFPFC_DELETE;
|
|
409
|
-
|
|
410
|
-
if ( get_strict( argc, argv ) == Qtrue ) {
|
|
411
|
-
command = OFPFC_DELETE_STRICT;
|
|
412
|
-
}
|
|
413
|
-
return controller_send_flow_mod( command, argc, argv, self );
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
/*
|
|
418
|
-
* @overload send_packet_out(datapath_id, options={})
|
|
419
|
-
* Sends a packet_out message to have a packet processed by the datapath.
|
|
420
|
-
*
|
|
421
|
-
* @example
|
|
422
|
-
* send_packet_out(
|
|
423
|
-
* datapath_id,
|
|
424
|
-
* :packet_in => message,
|
|
425
|
-
* :actions => Trema::SendOutPort.new(port_no)
|
|
426
|
-
* )
|
|
427
|
-
*
|
|
428
|
-
*
|
|
429
|
-
* @param [Number] datapath_id
|
|
430
|
-
* the datapath to which a message is sent.
|
|
431
|
-
*
|
|
432
|
-
* @param [Hash] options
|
|
433
|
-
* the options to create a message with.
|
|
434
|
-
*
|
|
435
|
-
*
|
|
436
|
-
* @option options [PacketIn] :packet_in (nil)
|
|
437
|
-
* The {PacketIn} object received by packet_in handler. If this
|
|
438
|
-
* option is not nil, :buffer_id, :data, and :in_port option is
|
|
439
|
-
* set automatically according to the value of :packet_in.
|
|
440
|
-
*
|
|
441
|
-
* @option options [Number] :in_port (OFPP_NONE)
|
|
442
|
-
* The port to use in flow table lookup when :actions send the packet
|
|
443
|
-
* to the special OFPP_TABLE port.
|
|
444
|
-
*
|
|
445
|
-
* @option options [Number] :buffer_id (0xffffffff)
|
|
446
|
-
* The buffer ID assigned by the datapath. If 0xffffffff, the
|
|
447
|
-
* frame is not buffered, and the entire frame must be passed in
|
|
448
|
-
* :data.
|
|
449
|
-
*
|
|
450
|
-
* @option options [String, nil] :data (nil)
|
|
451
|
-
* The entire Ethernet frame. Should be of length 0 if buffer_id
|
|
452
|
-
* is 0xffffffff, and should be of length >0 otherwise.
|
|
453
|
-
*
|
|
454
|
-
* @option options [Action, Array<Action>, nil] :actions (nil)
|
|
455
|
-
* The sequence of actions specifying the actions to perform on
|
|
456
|
-
* the frame.
|
|
457
|
-
*
|
|
458
|
-
* @option options [Boolean] :zero_padding (false)
|
|
459
|
-
* If true, fill up to minimum ethernet frame size.
|
|
460
|
-
*/
|
|
461
|
-
static VALUE
|
|
462
|
-
controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
|
|
463
|
-
VALUE datapath_id = Qnil;
|
|
464
|
-
VALUE options = Qnil;
|
|
465
|
-
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
466
|
-
|
|
467
|
-
// Defaults.
|
|
468
|
-
uint32_t buffer_id = UINT32_MAX;
|
|
469
|
-
uint16_t in_port = OFPP_NONE;
|
|
470
|
-
openflow_actions *actions = create_actions();
|
|
471
|
-
const buffer *data = NULL;
|
|
472
|
-
buffer *allocated_data = NULL;
|
|
473
|
-
VALUE opt_zero_padding = Qnil;
|
|
474
|
-
|
|
475
|
-
if ( options != Qnil ) {
|
|
476
|
-
VALUE opt_message = rb_hash_aref( options, ID2SYM( rb_intern( "packet_in" ) ) );
|
|
477
|
-
if ( opt_message != Qnil ) {
|
|
478
|
-
packet_in *message;
|
|
479
|
-
Data_Get_Struct( opt_message, packet_in, message );
|
|
480
|
-
|
|
481
|
-
if ( NUM2ULL( datapath_id ) == message->datapath_id ) {
|
|
482
|
-
buffer_id = message->buffer_id;
|
|
483
|
-
in_port = message->in_port;
|
|
484
|
-
}
|
|
485
|
-
data = ( buffer_id == UINT32_MAX ? message->data : NULL );
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
|
|
489
|
-
if ( opt_buffer_id != Qnil ) {
|
|
490
|
-
buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
VALUE opt_in_port = rb_hash_aref( options, ID2SYM( rb_intern( "in_port" ) ) );
|
|
494
|
-
if ( opt_in_port != Qnil ) {
|
|
495
|
-
in_port = ( uint16_t ) NUM2UINT( opt_in_port );
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
VALUE opt_action = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
|
|
499
|
-
if ( opt_action != Qnil ) {
|
|
500
|
-
form_actions( opt_action, actions );
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
VALUE opt_data = rb_hash_aref( options, ID2SYM( rb_intern( "data" ) ) );
|
|
504
|
-
if ( opt_data != Qnil ) {
|
|
505
|
-
Check_Type( opt_data, T_STRING );
|
|
506
|
-
uint16_t length = ( uint16_t ) RSTRING_LEN( opt_data );
|
|
507
|
-
allocated_data = alloc_buffer_with_length( length );
|
|
508
|
-
memcpy( append_back_buffer( allocated_data, length ), RSTRING_PTR( opt_data ), length );
|
|
509
|
-
data = allocated_data;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
opt_zero_padding = rb_hash_aref( options, ID2SYM( rb_intern( "zero_padding" ) ) );
|
|
513
|
-
if ( opt_zero_padding != Qnil ) {
|
|
514
|
-
if ( TYPE( opt_zero_padding ) != T_TRUE && TYPE( opt_zero_padding ) != T_FALSE ) {
|
|
515
|
-
rb_raise( rb_eTypeError, ":zero_padding must be true or false" );
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
if ( data != NULL && data->length + ETH_FCS_LENGTH < ETH_MINIMUM_LENGTH &&
|
|
521
|
-
opt_zero_padding != Qnil && TYPE( opt_zero_padding ) == T_TRUE ) {
|
|
522
|
-
if ( allocated_data == NULL ) {
|
|
523
|
-
allocated_data = duplicate_buffer( data );
|
|
524
|
-
data = allocated_data;
|
|
525
|
-
}
|
|
526
|
-
fill_ether_padding( allocated_data );
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
buffer *packet_out = create_packet_out(
|
|
530
|
-
get_transaction_id(),
|
|
531
|
-
buffer_id,
|
|
532
|
-
in_port,
|
|
533
|
-
actions,
|
|
534
|
-
data
|
|
535
|
-
);
|
|
536
|
-
send_openflow_message( NUM2ULL( datapath_id ), packet_out );
|
|
537
|
-
|
|
538
|
-
if ( allocated_data != NULL ) {
|
|
539
|
-
free_buffer( allocated_data );
|
|
540
|
-
}
|
|
541
|
-
free_buffer( packet_out );
|
|
542
|
-
delete_actions( actions );
|
|
543
|
-
return self;
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
/*
|
|
548
|
-
* Starts this controller. Usually you do not need to invoke
|
|
549
|
-
* explicitly, because this is called implicitly by "trema run"
|
|
550
|
-
* command.
|
|
551
|
-
*/
|
|
552
|
-
static VALUE
|
|
553
|
-
controller_run( VALUE self ) {
|
|
554
|
-
setenv( "TREMA_HOME", RSTRING_PTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
|
|
555
|
-
|
|
556
|
-
VALUE name = rb_funcall( self, rb_intern( "name" ), 0 );
|
|
557
|
-
rb_gv_set( "$PROGRAM_NAME", name );
|
|
558
|
-
|
|
559
|
-
int argc = 3;
|
|
560
|
-
char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
|
|
561
|
-
argv[ 0 ] = RSTRING_PTR( name );
|
|
562
|
-
argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
|
|
563
|
-
argv[ 2 ] = RSTRING_PTR( name );
|
|
564
|
-
argv[ 3 ] = NULL;
|
|
565
|
-
init_trema( &argc, &argv );
|
|
566
|
-
xfree( argv );
|
|
567
|
-
|
|
568
|
-
set_switch_ready_handler( handle_switch_ready, ( void * ) self );
|
|
569
|
-
set_features_reply_handler( handle_features_reply, ( void * ) self );
|
|
570
|
-
set_packet_in_handler( handle_packet_in, ( void * ) self );
|
|
571
|
-
set_flow_removed_handler( handle_flow_removed, ( void * ) self );
|
|
572
|
-
set_switch_disconnected_handler( handle_switch_disconnected, ( void * ) self );
|
|
573
|
-
set_port_status_handler( handle_port_status, ( void * ) self );
|
|
574
|
-
set_stats_reply_handler( handle_stats_reply, ( void * ) self );
|
|
575
|
-
set_error_handler( handle_openflow_error, ( void * ) self );
|
|
576
|
-
set_get_config_reply_handler( handle_get_config_reply, ( void * ) self );
|
|
577
|
-
set_barrier_reply_handler( handle_barrier_reply, ( void * ) self );
|
|
578
|
-
set_vendor_handler( handle_vendor, ( void * ) self );
|
|
579
|
-
set_queue_get_config_reply_handler( handle_queue_get_config_reply, ( void * ) self );
|
|
580
|
-
set_list_switches_reply_handler( handle_list_switches_reply );
|
|
581
|
-
|
|
582
|
-
struct itimerspec interval;
|
|
583
|
-
interval.it_interval.tv_sec = 1;
|
|
584
|
-
interval.it_interval.tv_nsec = 0;
|
|
585
|
-
interval.it_value.tv_sec = 0;
|
|
586
|
-
interval.it_value.tv_nsec = 0;
|
|
587
|
-
add_timer_event_callback( &interval, handle_timer_event, ( void * ) self );
|
|
588
|
-
|
|
589
|
-
if ( rb_respond_to( self, rb_intern( "start" ) ) ) {
|
|
590
|
-
rb_funcall( self, rb_intern( "start" ), 0 );
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
rb_funcall( self, rb_intern( "start_trema" ), 0 );
|
|
594
|
-
|
|
595
|
-
return self;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
/*
|
|
600
|
-
* @overload shutdown!
|
|
601
|
-
* In the context of trema framework stops this controller and its applications.
|
|
602
|
-
*/
|
|
603
|
-
static VALUE
|
|
604
|
-
controller_shutdown( VALUE self ) {
|
|
605
|
-
stop_trema();
|
|
606
|
-
return self;
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
static void
|
|
611
|
-
thread_pass( void *user_data ) {
|
|
612
|
-
UNUSED( user_data );
|
|
613
|
-
CHECK_INTS;
|
|
614
|
-
rb_funcall( rb_cThread, rb_intern( "pass" ), 0 );
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
/*
|
|
619
|
-
* In the context of trema framework invokes the scheduler to start its applications.
|
|
620
|
-
*/
|
|
621
|
-
static VALUE
|
|
622
|
-
controller_start_trema( VALUE self ) {
|
|
623
|
-
struct itimerspec interval;
|
|
624
|
-
interval.it_interval.tv_sec = 0;
|
|
625
|
-
interval.it_interval.tv_nsec = 1000000;
|
|
626
|
-
interval.it_value.tv_sec = 0;
|
|
627
|
-
interval.it_value.tv_nsec = 0;
|
|
628
|
-
add_timer_event_callback( &interval, thread_pass, NULL );
|
|
629
|
-
|
|
630
|
-
start_trema();
|
|
631
|
-
|
|
632
|
-
return self;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
/*
|
|
637
|
-
* Document-class: Trema::Controller
|
|
638
|
-
*/
|
|
639
|
-
void
|
|
640
|
-
Init_controller() {
|
|
641
|
-
rb_require( "trema/enqueue" );
|
|
642
|
-
rb_require( "trema/send-out-port" );
|
|
643
|
-
rb_require( "trema/set-eth-dst-addr" );
|
|
644
|
-
rb_require( "trema/set-eth-src-addr" );
|
|
645
|
-
rb_require( "trema/set-ip-dst-addr" );
|
|
646
|
-
rb_require( "trema/set-ip-src-addr" );
|
|
647
|
-
rb_require( "trema/set-ip-tos" );
|
|
648
|
-
rb_require( "trema/set-transport-dst-port" );
|
|
649
|
-
rb_require( "trema/set-transport-src-port" );
|
|
650
|
-
rb_require( "trema/set-vlan-priority" );
|
|
651
|
-
rb_require( "trema/set-vlan-vid" );
|
|
652
|
-
rb_require( "trema/strip-vlan-header" );
|
|
653
|
-
rb_require( "trema/vendor-action" );
|
|
654
|
-
|
|
655
|
-
rb_require( "trema/app" );
|
|
656
|
-
|
|
657
|
-
VALUE cApp = rb_eval_string( "Trema::App" );
|
|
658
|
-
mTrema = rb_eval_string( "Trema" );
|
|
659
|
-
cController = rb_define_class_under( mTrema, "Controller", cApp );
|
|
660
|
-
|
|
661
|
-
rb_define_const( cController, "OFPP_MAX", INT2NUM( OFPP_MAX ) );
|
|
662
|
-
rb_define_const( cController, "OFPP_IN_PORT", INT2NUM( OFPP_IN_PORT ) );
|
|
663
|
-
rb_define_const( cController, "OFPP_TABLE", INT2NUM( OFPP_TABLE ) );
|
|
664
|
-
rb_define_const( cController, "OFPP_NORMAL", INT2NUM( OFPP_NORMAL ) );
|
|
665
|
-
rb_define_const( cController, "OFPP_FLOOD", INT2NUM( OFPP_FLOOD ) );
|
|
666
|
-
rb_define_const( cController, "OFPP_ALL", INT2NUM( OFPP_ALL ) );
|
|
667
|
-
rb_define_const( cController, "OFPP_CONTROLLER", INT2NUM( OFPP_CONTROLLER ) );
|
|
668
|
-
rb_define_const( cController, "OFPP_LOCAL", INT2NUM( OFPP_LOCAL ) );
|
|
669
|
-
rb_define_const( cController, "OFPP_NONE", INT2NUM( OFPP_NONE ) );
|
|
670
|
-
|
|
671
|
-
rb_define_method( cController, "send_message", controller_send_message, 2 );
|
|
672
|
-
rb_define_method( cController, "send_list_switches_request", controller_send_list_switches_request, 0 );
|
|
673
|
-
rb_define_method( cController, "send_flow_mod_add", controller_send_flow_mod_add, -1 );
|
|
674
|
-
rb_define_method( cController, "send_flow_mod_modify", controller_send_flow_mod_modify, -1 );
|
|
675
|
-
rb_define_method( cController, "send_flow_mod_delete", controller_send_flow_mod_delete, -1 );
|
|
676
|
-
rb_define_method( cController, "send_packet_out", controller_send_packet_out, -1 );
|
|
677
|
-
|
|
678
|
-
rb_define_method( cController, "run!", controller_run, 0 );
|
|
679
|
-
rb_define_method( cController, "shutdown!", controller_shutdown, 0 );
|
|
680
|
-
rb_define_private_method( cController, "start_trema", controller_start_trema, 0 );
|
|
681
|
-
|
|
682
|
-
rb_require( "trema/controller" );
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
/*
|
|
687
|
-
* Local variables:
|
|
688
|
-
* c-basic-offset: 2
|
|
689
|
-
* indent-tabs-mode: nil
|
|
690
|
-
* End:
|
|
691
|
-
*/
|