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
data/ruby/trema/shell/run.rb
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# run command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def run(controller)
|
|
27
|
-
assert_trema_is_built
|
|
28
|
-
|
|
29
|
-
if controller
|
|
30
|
-
if /\.rb\Z/ =~ controller.split.first
|
|
31
|
-
require 'trema'
|
|
32
|
-
include Trema
|
|
33
|
-
ARGV.replace controller.split
|
|
34
|
-
$LOAD_PATH << File.dirname(controller)
|
|
35
|
-
load controller
|
|
36
|
-
else
|
|
37
|
-
# Assume that the controller is written in C
|
|
38
|
-
stanza = Trema::DSL::Run.new
|
|
39
|
-
stanza.path controller
|
|
40
|
-
Trema::App.new(stanza)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
runner = DSL::Runner.new($config)
|
|
45
|
-
runner.maybe_run_switch_manager
|
|
46
|
-
$config.switches.each do | name, switch |
|
|
47
|
-
if switch.running?
|
|
48
|
-
switch.restart!
|
|
49
|
-
else
|
|
50
|
-
switch.run!
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
$config.apps.values.last.daemonize!
|
|
55
|
-
$context.dump
|
|
56
|
-
|
|
57
|
-
true
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
### Local variables:
|
|
64
|
-
### mode: Ruby
|
|
65
|
-
### coding: utf-8
|
|
66
|
-
### indent-tabs-mode: nil
|
|
67
|
-
### End:
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# send_packets command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def send_packets(source, dest, options = {})
|
|
27
|
-
assert_trema_is_built
|
|
28
|
-
Cli.new(Host[ source]).send_packets(Host[ dest], options)
|
|
29
|
-
true
|
|
30
|
-
end
|
|
31
|
-
module_function :send_packets
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
### Local variables:
|
|
37
|
-
### mode: Ruby
|
|
38
|
-
### coding: utf-8
|
|
39
|
-
### indent-tabs-mode: nil
|
|
40
|
-
### End:
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# show_stats command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def show_stats(host_name, option)
|
|
27
|
-
assert_trema_is_built
|
|
28
|
-
|
|
29
|
-
fail "Host '#{ host_name }' is not defined." if Host[ host_name].nil?
|
|
30
|
-
fail "Host '#{ host_name }' is not connected to any link." if Host[ host_name].interface.nil?
|
|
31
|
-
|
|
32
|
-
if option.to_s == 'tx'
|
|
33
|
-
Cli.new(Host[ host_name]).show_tx_stats
|
|
34
|
-
else
|
|
35
|
-
Cli.new(Host[ host_name]).show_rx_stats
|
|
36
|
-
end
|
|
37
|
-
true
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
### Local variables:
|
|
44
|
-
### mode: Ruby
|
|
45
|
-
### coding: utf-8
|
|
46
|
-
### indent-tabs-mode: nil
|
|
47
|
-
### End:
|
data/ruby/trema/shell/up.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# up command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def up(name)
|
|
27
|
-
if OpenflowSwitch[ name].running?
|
|
28
|
-
OpenflowSwitch[ name].restart!
|
|
29
|
-
else
|
|
30
|
-
OpenflowSwitch[ name].run!
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
### Local variables:
|
|
38
|
-
### mode: Ruby
|
|
39
|
-
### coding: utf-8
|
|
40
|
-
### indent-tabs-mode: nil
|
|
41
|
-
### End:
|
data/ruby/trema/shell/vhost.rb
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# vhost command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def vhost(name = nil, &block)
|
|
27
|
-
stanza = DSL::Vhost.new(name)
|
|
28
|
-
stanza.instance_eval(&block) if block
|
|
29
|
-
Host.new stanza
|
|
30
|
-
$context.dump
|
|
31
|
-
true
|
|
32
|
-
end
|
|
33
|
-
module_function :vhost
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
### Local variables:
|
|
39
|
-
### mode: Ruby
|
|
40
|
-
### coding: utf-8
|
|
41
|
-
### indent-tabs-mode: nil
|
|
42
|
-
### End:
|
data/ruby/trema/shell/vswitch.rb
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# vswitch command of Trema shell.
|
|
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 'trema/dsl'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
module Trema
|
|
25
|
-
module Shell
|
|
26
|
-
def vswitch(name = nil, &block)
|
|
27
|
-
fail 'Not in Trema shell' if $config.nil?
|
|
28
|
-
fail 'No dpid given' if name.nil? && block.nil?
|
|
29
|
-
|
|
30
|
-
stanza = DSL::Vswitch.new(name)
|
|
31
|
-
stanza.instance_eval(&block) if block
|
|
32
|
-
OpenVswitch.new(stanza, $config.port).restart!
|
|
33
|
-
|
|
34
|
-
$context.dump
|
|
35
|
-
|
|
36
|
-
true
|
|
37
|
-
end
|
|
38
|
-
module_function :vswitch
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
### Local variables:
|
|
44
|
-
### mode: Ruby
|
|
45
|
-
### coding: utf-8
|
|
46
|
-
### indent-tabs-mode: nil
|
|
47
|
-
### End:
|
data/ruby/trema/stats-helper.rb
DELETED
|
@@ -1,63 +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
|
-
module Trema
|
|
20
|
-
class StatsHelper
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# Invoked by each StatsReply subclass to assign their instance attributes
|
|
24
|
-
# to a value.
|
|
25
|
-
#
|
|
26
|
-
# @overload initialize(fields, options={})
|
|
27
|
-
#
|
|
28
|
-
# @param [Array] fields
|
|
29
|
-
# an array of attribute names.
|
|
30
|
-
#
|
|
31
|
-
# @param [Hash] options
|
|
32
|
-
# key/value pairs of attributes to match against the fields to set.
|
|
33
|
-
#
|
|
34
|
-
# @return [void]
|
|
35
|
-
#
|
|
36
|
-
def initialize(fields, options)
|
|
37
|
-
fields.each do |field|
|
|
38
|
-
instance_variable_set("@#{field}", options[field.intern])
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#
|
|
44
|
-
# @return [String]
|
|
45
|
-
# an alphabetically sorted text of attribute name/value pairs.
|
|
46
|
-
#
|
|
47
|
-
def to_s
|
|
48
|
-
str = super.to_s + "\n"
|
|
49
|
-
instance_variables.sort.each do |var|
|
|
50
|
-
str += "#{var[1..var.length]}: #{instance_variable_get(var)}\n"
|
|
51
|
-
end
|
|
52
|
-
# remove the last newline character
|
|
53
|
-
str[0..-2]
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
### Local variables:
|
|
60
|
-
### mode: Ruby
|
|
61
|
-
### coding: utf-8-unix
|
|
62
|
-
### indent-tabs-mode: nil
|
|
63
|
-
### End:
|
data/ruby/trema/stats-reply.c
DELETED
|
@@ -1,540 +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 <arpa/inet.h>
|
|
20
|
-
#include "trema.h"
|
|
21
|
-
#include "ruby.h"
|
|
22
|
-
#include "action-common.h"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
extern VALUE mTrema;
|
|
26
|
-
VALUE cStatsReply;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/*
|
|
30
|
-
* A {StatsReply} instance that encapsulates the header part of the
|
|
31
|
-
* +OFPT_STATS_REPLY+ message. The body of the reply message may be an array
|
|
32
|
-
* of one or more specific reply objects designated by the type.
|
|
33
|
-
* The user would not instantiate stats. reply objects explicitly, the stats.
|
|
34
|
-
* reply handler would normally do that while parsing the message.
|
|
35
|
-
*
|
|
36
|
-
* @overload initialize(options={})
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* StatsReply.new(
|
|
40
|
-
* :datapath_id => 0xabc,
|
|
41
|
-
* :transaction_id => 123,
|
|
42
|
-
* :type => OFPST_FLOW
|
|
43
|
-
* :flags => 0,
|
|
44
|
-
* :stats => [FlowStatsReply]
|
|
45
|
-
* )
|
|
46
|
-
*
|
|
47
|
-
* @param [Hash] options the options hash.
|
|
48
|
-
*
|
|
49
|
-
* @option options [Number] :datapath_id
|
|
50
|
-
* message originator identifier.
|
|
51
|
-
*
|
|
52
|
-
* @option options [Number] :transaction_id
|
|
53
|
-
* transaction_id value carried over from request.
|
|
54
|
-
*
|
|
55
|
-
* @option options [Number] :type
|
|
56
|
-
* type id for the reply.
|
|
57
|
-
*
|
|
58
|
-
* @option options [Number] :flags
|
|
59
|
-
* if set to 1 more replies would follow, 0 for the last reply.
|
|
60
|
-
*
|
|
61
|
-
* @option options [Array] :stats
|
|
62
|
-
* an array of objects associated with the reply instance.
|
|
63
|
-
*
|
|
64
|
-
* @return [StatsReply]
|
|
65
|
-
* an object that encapsulates the +OFPT_STATS_REPLY+ openflow message.
|
|
66
|
-
*/
|
|
67
|
-
static VALUE
|
|
68
|
-
stats_reply_init( VALUE self, VALUE options ) {
|
|
69
|
-
rb_iv_set( self, "@attribute", options );
|
|
70
|
-
return self;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
/*
|
|
75
|
-
* Message originator identifier.
|
|
76
|
-
*
|
|
77
|
-
* @return [Number] the value of datapath_id.
|
|
78
|
-
*/
|
|
79
|
-
static VALUE
|
|
80
|
-
stats_reply_datapath_id( VALUE self ) {
|
|
81
|
-
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "datapath_id" ) ) );
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
/*
|
|
86
|
-
* Transaction ids, message sequence numbers matching requests to replies.
|
|
87
|
-
*
|
|
88
|
-
* @return [Number] the value of transaction_id.
|
|
89
|
-
*/
|
|
90
|
-
static VALUE
|
|
91
|
-
stats_reply_transaction_id( VALUE self ) {
|
|
92
|
-
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "transaction_id" ) ) );
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
/*
|
|
97
|
-
* The type of this reply.
|
|
98
|
-
*
|
|
99
|
-
* @return [Number] the value of type.
|
|
100
|
-
*/
|
|
101
|
-
static VALUE
|
|
102
|
-
stats_reply_type( VALUE self ) {
|
|
103
|
-
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "type" ) ) );
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/*
|
|
108
|
-
* Flag that indicates if more reply message(s) expected to follow.
|
|
109
|
-
*
|
|
110
|
-
* @return [Number] the value of flags.
|
|
111
|
-
*/
|
|
112
|
-
static VALUE
|
|
113
|
-
stats_reply_flags( VALUE self ) {
|
|
114
|
-
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "flags" ) ) );
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
/*
|
|
119
|
-
* A list of reply type objects for this message.
|
|
120
|
-
*
|
|
121
|
-
* @return [Array<DescStatsReply>]
|
|
122
|
-
* an array of {DescStatsReply} objects if type is +OFPST_DESC+.
|
|
123
|
-
* @return [Array<FlowStatsReply>]
|
|
124
|
-
* an array of {FlowStatsReply} objects if type is +OFPST_FLOW+.
|
|
125
|
-
* @return [AggregateStatsReply]
|
|
126
|
-
* a {AggregateStatsReply} object if type is +OFPST_AGGREGATE+.
|
|
127
|
-
* @return [Array<TableStatsReply>]
|
|
128
|
-
* an array of {TableStatsReply} objects if type is +OFPST_TABLE+.
|
|
129
|
-
* @return [Array<PortStatsReply>]
|
|
130
|
-
* an array of {PortStatsReply} objects if type is +OFPST_PORT+.
|
|
131
|
-
* @return [Array<QueueStatsReply>]
|
|
132
|
-
* an array of {QueueStatsReply} objects if type is +OFPST_QUEUE+.
|
|
133
|
-
* @return [VendorStatsReply]
|
|
134
|
-
* a {VendorStatsReply} object if type is +OFPST_VENDOR+.
|
|
135
|
-
*/
|
|
136
|
-
static VALUE
|
|
137
|
-
stats_reply_stats( VALUE self ) {
|
|
138
|
-
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "stats" ) ) );
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
/*
|
|
143
|
-
* Document-class: Trema::StatsReply
|
|
144
|
-
*/
|
|
145
|
-
void
|
|
146
|
-
Init_stats_reply() {
|
|
147
|
-
rb_require( "pio" );
|
|
148
|
-
rb_require( "trema/desc-stats-reply" );
|
|
149
|
-
rb_require( "trema/flow-stats-reply" );
|
|
150
|
-
rb_require( "trema/aggregate-stats-reply" );
|
|
151
|
-
rb_require( "trema/table-stats-reply" );
|
|
152
|
-
rb_require( "trema/port-stats-reply" );
|
|
153
|
-
rb_require( "trema/queue-stats-reply" );
|
|
154
|
-
rb_require( "trema/vendor-stats-reply" );
|
|
155
|
-
mTrema = rb_eval_string( "Trema" );
|
|
156
|
-
cStatsReply = rb_define_class_under( mTrema, "StatsReply", rb_cObject );
|
|
157
|
-
rb_define_const( cStatsReply, "OFPST_DESC", INT2NUM( OFPST_DESC ) );
|
|
158
|
-
rb_define_const( cStatsReply, "OFPST_FLOW", INT2NUM( OFPST_FLOW ) );
|
|
159
|
-
rb_define_const( cStatsReply, "OFPST_AGGREGATE", INT2NUM( OFPST_AGGREGATE ) );
|
|
160
|
-
rb_define_const( cStatsReply, "OFPST_TABLE", INT2NUM( OFPST_TABLE ) );
|
|
161
|
-
rb_define_const( cStatsReply, "OFPST_PORT", INT2NUM( OFPST_PORT ) );
|
|
162
|
-
rb_define_const( cStatsReply, "OFPST_QUEUE", INT2NUM( OFPST_QUEUE ) );
|
|
163
|
-
rb_define_const( cStatsReply, "OFPST_VENDOR", INT2NUM( OFPST_VENDOR ) );
|
|
164
|
-
rb_define_method( cStatsReply, "initialize", stats_reply_init, 1 );
|
|
165
|
-
rb_define_method( cStatsReply, "datapath_id", stats_reply_datapath_id, 0 );
|
|
166
|
-
rb_define_method( cStatsReply, "transaction_id", stats_reply_transaction_id, 0 );
|
|
167
|
-
rb_define_method( cStatsReply, "type", stats_reply_type, 0 );
|
|
168
|
-
rb_define_method( cStatsReply, "flags", stats_reply_flags, 0 );
|
|
169
|
-
rb_define_method( cStatsReply, "stats", stats_reply_stats, 0 );
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
static VALUE
|
|
174
|
-
get_action( const struct ofp_action_header *ah ) {
|
|
175
|
-
VALUE action = Qnil;
|
|
176
|
-
|
|
177
|
-
switch ( ah->type ) {
|
|
178
|
-
case OFPAT_OUTPUT:
|
|
179
|
-
{
|
|
180
|
-
const struct ofp_action_output *ao = ( const struct ofp_action_output * ) ah;
|
|
181
|
-
|
|
182
|
-
VALUE options = rb_hash_new();
|
|
183
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "port_number" ) ), UINT2NUM( ao->port ) );
|
|
184
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "max_len" ) ), UINT2NUM( ao->max_len ) );
|
|
185
|
-
action = rb_funcall( rb_eval_string( "Trema::SendOutPort" ), rb_intern( "new" ), 1, options );
|
|
186
|
-
}
|
|
187
|
-
break;
|
|
188
|
-
case OFPAT_SET_VLAN_VID:
|
|
189
|
-
{
|
|
190
|
-
const struct ofp_action_vlan_vid *action_vlan_vid = ( const struct ofp_action_vlan_vid * ) ah;
|
|
191
|
-
|
|
192
|
-
VALUE vlan_id = UINT2NUM( action_vlan_vid->vlan_vid );
|
|
193
|
-
action = rb_funcall( rb_eval_string( "Trema::SetVlanVid" ), rb_intern( "new" ), 1, vlan_id );
|
|
194
|
-
}
|
|
195
|
-
break;
|
|
196
|
-
case OFPAT_SET_VLAN_PCP:
|
|
197
|
-
{
|
|
198
|
-
const struct ofp_action_vlan_pcp *action_vlan_pcp = ( const struct ofp_action_vlan_pcp * ) ah;
|
|
199
|
-
|
|
200
|
-
VALUE vlan_priority = UINT2NUM( action_vlan_pcp->vlan_pcp );
|
|
201
|
-
action = rb_funcall( rb_eval_string( "Trema::SetVlanPriority" ), rb_intern( "new" ), 1, vlan_priority );
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
204
|
-
case OFPAT_STRIP_VLAN:
|
|
205
|
-
{
|
|
206
|
-
action = rb_funcall( rb_eval_string( "Trema::StripVlanHeader" ), rb_intern( "new" ), 0 );
|
|
207
|
-
}
|
|
208
|
-
break;
|
|
209
|
-
case OFPAT_SET_DL_SRC:
|
|
210
|
-
case OFPAT_SET_DL_DST:
|
|
211
|
-
{
|
|
212
|
-
VALUE mac_address;
|
|
213
|
-
const struct ofp_action_dl_addr *action_dl_addr = ( const struct ofp_action_dl_addr * ) ah;
|
|
214
|
-
|
|
215
|
-
mac_address = rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, ULL2NUM( mac_to_uint64( action_dl_addr->dl_addr ) ) );
|
|
216
|
-
if ( ah->type == OFPAT_SET_DL_SRC ) {
|
|
217
|
-
action = rb_funcall( rb_eval_string( "Trema::SetEthSrcAddr" ), rb_intern( "new" ), 1, mac_address );
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
action = rb_funcall( rb_eval_string( "Trema::SetEthDstAddr" ), rb_intern( "new" ), 1, mac_address );
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
break;
|
|
224
|
-
case OFPAT_SET_NW_SRC:
|
|
225
|
-
case OFPAT_SET_NW_DST:
|
|
226
|
-
{
|
|
227
|
-
const struct ofp_action_nw_addr *action_nw_addr = ( const struct ofp_action_nw_addr * ) ah;
|
|
228
|
-
|
|
229
|
-
VALUE ip_address = rb_funcall( rb_eval_string( "Pio::IPv4Address " ), rb_intern( "new" ), 1, UINT2NUM( action_nw_addr->nw_addr ) );
|
|
230
|
-
if ( ah->type == OFPAT_SET_NW_SRC ) {
|
|
231
|
-
action = rb_funcall( rb_eval_string( "Trema::SetIpSrcAddr" ), rb_intern( "new" ), 1, rb_funcall( ip_address, rb_intern( "to_s" ), 0 ) );
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
action = rb_funcall( rb_eval_string( "Trema::SetIpDstAddr" ), rb_intern( "new" ), 1, rb_funcall( ip_address, rb_intern( "to_s" ), 0 ) );
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
break;
|
|
238
|
-
case OFPAT_SET_NW_TOS:
|
|
239
|
-
{
|
|
240
|
-
const struct ofp_action_nw_tos *action_nw_tos = ( const struct ofp_action_nw_tos * ) ah;
|
|
241
|
-
|
|
242
|
-
VALUE type_of_service = ULL2NUM( action_nw_tos->nw_tos );
|
|
243
|
-
action = rb_funcall( rb_eval_string( "Trema::SetIpTos" ), rb_intern( "new" ), 1, type_of_service );
|
|
244
|
-
}
|
|
245
|
-
break;
|
|
246
|
-
case OFPAT_SET_TP_SRC:
|
|
247
|
-
{
|
|
248
|
-
const struct ofp_action_tp_port *action_tp_port = ( const struct ofp_action_tp_port * ) ah;
|
|
249
|
-
|
|
250
|
-
VALUE port_number = ULL2NUM( action_tp_port->tp_port );
|
|
251
|
-
action = rb_funcall( rb_eval_string( "Trema::SetTransportSrcPort" ), rb_intern( "new" ), 1, port_number );
|
|
252
|
-
}
|
|
253
|
-
break;
|
|
254
|
-
case OFPAT_SET_TP_DST:
|
|
255
|
-
{
|
|
256
|
-
const struct ofp_action_tp_port *action_tp_port = ( const struct ofp_action_tp_port * ) ah;
|
|
257
|
-
|
|
258
|
-
VALUE port_number = ULL2NUM( action_tp_port->tp_port );
|
|
259
|
-
action = rb_funcall( rb_eval_string( "Trema::SetTransportDstPort" ), rb_intern( "new" ), 1, port_number );
|
|
260
|
-
}
|
|
261
|
-
break;
|
|
262
|
-
case OFPAT_ENQUEUE:
|
|
263
|
-
{
|
|
264
|
-
const struct ofp_action_enqueue *action_enqueue = ( const struct ofp_action_enqueue * ) ah;
|
|
265
|
-
VALUE options = rb_hash_new();
|
|
266
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "port_number" ) ), UINT2NUM( action_enqueue->port ) );
|
|
267
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "queue_id" ) ), ULL2NUM( action_enqueue->queue_id ) );
|
|
268
|
-
action = rb_funcall( rb_eval_string( "Trema::Enqueue" ), rb_intern( "new" ), 1, options );
|
|
269
|
-
}
|
|
270
|
-
break;
|
|
271
|
-
case OFPAT_VENDOR:
|
|
272
|
-
{
|
|
273
|
-
const struct ofp_action_vendor_header *vendor_header = ( const struct ofp_action_vendor_header * ) ah;
|
|
274
|
-
|
|
275
|
-
VALUE vendor_id = ULL2NUM( vendor_header->vendor );
|
|
276
|
-
if ( vendor_header->len > ( uint16_t ) sizeof( *vendor_header ) ) {
|
|
277
|
-
long length = ( long ) ( vendor_header->len - sizeof( *vendor_header ) );
|
|
278
|
-
VALUE data_array = rb_ary_new2( length );
|
|
279
|
-
const uint8_t *data = ( const uint8_t * ) ( ( const char * ) vendor_header + sizeof( *vendor_header ) );
|
|
280
|
-
long i;
|
|
281
|
-
for ( i = 0; i < length; i++ ) {
|
|
282
|
-
rb_ary_push( data_array, UINT2NUM( data[ i ] ) );
|
|
283
|
-
}
|
|
284
|
-
action = rb_funcall( rb_eval_string( "Trema::VendorAction" ), rb_intern( "new" ), 2, vendor_id, data_array );
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
action = rb_funcall( rb_eval_string( "Trema::VendorAction" ), rb_intern( "new" ), 1, vendor_id );
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
break;
|
|
291
|
-
}
|
|
292
|
-
return action;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
void
|
|
297
|
-
handle_stats_reply(
|
|
298
|
-
uint64_t datapath_id,
|
|
299
|
-
uint32_t transaction_id,
|
|
300
|
-
uint16_t type,
|
|
301
|
-
uint16_t flags,
|
|
302
|
-
const buffer *body,
|
|
303
|
-
void *user_data
|
|
304
|
-
) {
|
|
305
|
-
VALUE controller = ( VALUE ) user_data;
|
|
306
|
-
if ( rb_respond_to( controller, rb_intern( "stats_reply" ) ) == Qfalse ) {
|
|
307
|
-
return;
|
|
308
|
-
}
|
|
309
|
-
if ( body == NULL ) {
|
|
310
|
-
return;
|
|
311
|
-
}
|
|
312
|
-
if ( !body->length ) {
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
VALUE attributes = rb_hash_new();
|
|
316
|
-
|
|
317
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "datapath_id" ) ), ULL2NUM( datapath_id ) );
|
|
318
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "transaction_id" ) ), UINT2NUM( transaction_id ) );
|
|
319
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "type" ) ), UINT2NUM( type ) );
|
|
320
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "flags" ) ), UINT2NUM( flags ) );
|
|
321
|
-
|
|
322
|
-
uint16_t body_length = ( uint16_t ) body->length;
|
|
323
|
-
switch ( type ) {
|
|
324
|
-
case OFPST_DESC:
|
|
325
|
-
{
|
|
326
|
-
struct ofp_desc_stats *desc_stats = ( struct ofp_desc_stats * ) body->data;
|
|
327
|
-
VALUE options = rb_hash_new();
|
|
328
|
-
VALUE desc_stats_arr = rb_ary_new();
|
|
329
|
-
VALUE desc_stats_reply;
|
|
330
|
-
|
|
331
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "mfr_desc" ) ),
|
|
332
|
-
rb_str_new( desc_stats->mfr_desc, ( long ) strnlen( desc_stats->mfr_desc, DESC_STR_LEN - 1 ) ) );
|
|
333
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "hw_desc" ) ),
|
|
334
|
-
rb_str_new( desc_stats->hw_desc, ( long ) strnlen( desc_stats->hw_desc, DESC_STR_LEN - 1 ) ) );
|
|
335
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "sw_desc" ) ),
|
|
336
|
-
rb_str_new( desc_stats->sw_desc, ( long ) strnlen( desc_stats->sw_desc, DESC_STR_LEN - 1 ) ) );
|
|
337
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "serial_num" ) ),
|
|
338
|
-
rb_str_new( desc_stats->serial_num, ( long ) strnlen( desc_stats->serial_num, SERIAL_NUM_LEN - 1 ) ) );
|
|
339
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "dp_desc" ) ),
|
|
340
|
-
rb_str_new( desc_stats->dp_desc, ( long ) strnlen( desc_stats->dp_desc, DESC_STR_LEN - 1 ) ) );
|
|
341
|
-
desc_stats_reply = rb_funcall( rb_eval_string( " Trema::DescStatsReply" ), rb_intern( "new" ), 1, options );
|
|
342
|
-
rb_ary_push( desc_stats_arr, desc_stats_reply );
|
|
343
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), desc_stats_arr );
|
|
344
|
-
}
|
|
345
|
-
break;
|
|
346
|
-
case OFPST_FLOW:
|
|
347
|
-
{
|
|
348
|
-
struct ofp_flow_stats *flow_stats;
|
|
349
|
-
struct ofp_action_header *ah;
|
|
350
|
-
VALUE flow_stats_arr = rb_ary_new();
|
|
351
|
-
VALUE flow_stats_reply;
|
|
352
|
-
VALUE match_obj;
|
|
353
|
-
VALUE options = rb_hash_new();
|
|
354
|
-
VALUE actions_arr;
|
|
355
|
-
|
|
356
|
-
flow_stats = ( struct ofp_flow_stats * ) body->data;
|
|
357
|
-
|
|
358
|
-
while ( body_length > 0 ) {
|
|
359
|
-
actions_arr = rb_ary_new();
|
|
360
|
-
|
|
361
|
-
match_obj = rb_funcall( rb_eval_string( "Match.new" ), rb_intern( "replace" ), 1, Data_Wrap_Struct( cStatsReply, NULL, NULL, &flow_stats->match ) );
|
|
362
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "length" ) ), UINT2NUM( flow_stats->length ) );
|
|
363
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "table_id" ) ), UINT2NUM( flow_stats->table_id ) );
|
|
364
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "match" ) ), match_obj );
|
|
365
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "duration_sec" ) ), UINT2NUM( flow_stats->duration_sec ) );
|
|
366
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "duration_nsec" ) ), UINT2NUM( flow_stats->duration_nsec ) );
|
|
367
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "priority" ) ), UINT2NUM( flow_stats->priority ) );
|
|
368
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "idle_timeout" ) ), UINT2NUM( flow_stats->idle_timeout ) );
|
|
369
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "hard_timeout" ) ), UINT2NUM( flow_stats->hard_timeout ) );
|
|
370
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "cookie" ) ), ULL2NUM( flow_stats->cookie ) );
|
|
371
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "packet_count" ) ), ULL2NUM( flow_stats->packet_count ) );
|
|
372
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "byte_count" ) ), ULL2NUM( flow_stats->byte_count ) );
|
|
373
|
-
|
|
374
|
-
uint16_t actions_length = ( uint16_t ) ( flow_stats->length - offsetof( struct ofp_flow_stats, actions ) );
|
|
375
|
-
|
|
376
|
-
ah = ( struct ofp_action_header * ) flow_stats->actions;
|
|
377
|
-
while ( actions_length > 0 ) {
|
|
378
|
-
rb_ary_push( actions_arr, get_action( ah ) );
|
|
379
|
-
actions_length = ( uint16_t ) ( actions_length - ah->len );
|
|
380
|
-
if ( actions_length ) {
|
|
381
|
-
ah = ( struct ofp_action_header * ) ( ( char * ) ah + ah->len );
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "actions" ) ), actions_arr );
|
|
385
|
-
|
|
386
|
-
flow_stats_reply = rb_funcall( rb_eval_string( "Trema::FlowStatsReply" ), rb_intern( "new" ), 1, options );
|
|
387
|
-
rb_ary_push( flow_stats_arr, flow_stats_reply );
|
|
388
|
-
|
|
389
|
-
// here create flow_stats object and insert into array
|
|
390
|
-
body_length = ( uint16_t ) ( body_length - flow_stats->length );
|
|
391
|
-
|
|
392
|
-
if ( body_length ) {
|
|
393
|
-
// move pointer to next entry
|
|
394
|
-
flow_stats = ( struct ofp_flow_stats * ) ( ( char * ) flow_stats + flow_stats->length );
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), flow_stats_arr );
|
|
398
|
-
}
|
|
399
|
-
break;
|
|
400
|
-
case OFPST_AGGREGATE:
|
|
401
|
-
{
|
|
402
|
-
struct ofp_aggregate_stats_reply *aggregate_stats = ( struct ofp_aggregate_stats_reply * ) body->data;
|
|
403
|
-
VALUE options = rb_hash_new();
|
|
404
|
-
VALUE aggregate_stats_reply;
|
|
405
|
-
VALUE aggregate_stats_arr = rb_ary_new();
|
|
406
|
-
|
|
407
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "packet_count" ) ), ULL2NUM( aggregate_stats->packet_count ) );
|
|
408
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "byte_count" ) ), ULL2NUM( aggregate_stats->byte_count ) );
|
|
409
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "flow_count" ) ), UINT2NUM( aggregate_stats->flow_count ) );
|
|
410
|
-
aggregate_stats_reply = rb_funcall( rb_eval_string( " Trema::AggregateStatsReply" ), rb_intern( "new" ), 1, options );
|
|
411
|
-
rb_ary_push( aggregate_stats_arr, aggregate_stats_reply );
|
|
412
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), aggregate_stats_arr );
|
|
413
|
-
}
|
|
414
|
-
break;
|
|
415
|
-
case OFPST_TABLE:
|
|
416
|
-
{
|
|
417
|
-
struct ofp_table_stats *table_stats;
|
|
418
|
-
VALUE table_stats_arr = rb_ary_new();
|
|
419
|
-
VALUE options = rb_hash_new();
|
|
420
|
-
VALUE table_stats_reply;
|
|
421
|
-
|
|
422
|
-
table_stats = ( struct ofp_table_stats * ) body->data;
|
|
423
|
-
while ( body_length > 0 ) {
|
|
424
|
-
|
|
425
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "table_id" ) ), UINT2NUM( table_stats->table_id ) );
|
|
426
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "name" ) ), rb_str_new2( table_stats->name ) );
|
|
427
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "wildcards" ) ), UINT2NUM( table_stats->wildcards ) );
|
|
428
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "max_entries" ) ), UINT2NUM( table_stats->max_entries ) );
|
|
429
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "active_count" ) ), UINT2NUM( table_stats->active_count ) );
|
|
430
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "lookup_count" ) ), ULL2NUM( table_stats->active_count ) );
|
|
431
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "matched_count" ) ), ULL2NUM( table_stats->matched_count ) );
|
|
432
|
-
|
|
433
|
-
table_stats_reply = rb_funcall( rb_eval_string( "Trema::TableStatsReply" ), rb_intern( "new" ), 1, options );
|
|
434
|
-
|
|
435
|
-
rb_ary_push( table_stats_arr, table_stats_reply );
|
|
436
|
-
body_length = ( uint16_t ) ( body_length - sizeof( struct ofp_table_stats ) );
|
|
437
|
-
if ( body_length ) {
|
|
438
|
-
table_stats++;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), table_stats_arr );
|
|
442
|
-
}
|
|
443
|
-
break;
|
|
444
|
-
case OFPST_PORT:
|
|
445
|
-
{
|
|
446
|
-
struct ofp_port_stats *port_stats;
|
|
447
|
-
VALUE port_stats_arr = rb_ary_new();
|
|
448
|
-
VALUE options = rb_hash_new();
|
|
449
|
-
VALUE port_stats_reply;
|
|
450
|
-
|
|
451
|
-
port_stats = ( struct ofp_port_stats * ) body->data;
|
|
452
|
-
while ( body_length > 0 ) {
|
|
453
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "port_no" ) ), UINT2NUM( port_stats->port_no ) );
|
|
454
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_packets" ) ), ULL2NUM( port_stats->rx_packets ) );
|
|
455
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "tx_packets" ) ), ULL2NUM( port_stats->tx_packets ) );
|
|
456
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_bytes" ) ), ULL2NUM( port_stats->rx_bytes ) );
|
|
457
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "tx_bytes" ) ), ULL2NUM( port_stats->tx_bytes ) );
|
|
458
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_dropped" ) ), ULL2NUM( port_stats->rx_dropped ) );
|
|
459
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "tx_dropped" ) ), ULL2NUM( port_stats->tx_dropped ) );
|
|
460
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_errors" ) ), ULL2NUM( port_stats->rx_errors ) );
|
|
461
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "tx_errors" ) ), ULL2NUM( port_stats->tx_errors ) );
|
|
462
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_frame_err" ) ), ULL2NUM( port_stats->rx_frame_err ) );
|
|
463
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_over_err" ) ), ULL2NUM( port_stats->rx_over_err ) );
|
|
464
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "rx_crc_err" ) ), ULL2NUM( port_stats->rx_crc_err ) );
|
|
465
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "collisions" ) ), ULL2NUM( port_stats->collisions ) );
|
|
466
|
-
|
|
467
|
-
port_stats_reply = rb_funcall( rb_eval_string( "Trema::PortStatsReply" ), rb_intern( "new" ), 1, options );
|
|
468
|
-
|
|
469
|
-
rb_ary_push( port_stats_arr, port_stats_reply );
|
|
470
|
-
body_length = ( uint16_t ) ( body_length - sizeof( struct ofp_port_stats ) );
|
|
471
|
-
if ( body_length ) {
|
|
472
|
-
port_stats++;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), port_stats_arr );
|
|
476
|
-
}
|
|
477
|
-
break;
|
|
478
|
-
case OFPST_QUEUE:
|
|
479
|
-
{
|
|
480
|
-
struct ofp_queue_stats *queue_stats;
|
|
481
|
-
VALUE queue_stats_arr = rb_ary_new();
|
|
482
|
-
VALUE options = rb_hash_new();
|
|
483
|
-
VALUE queue_stats_reply;
|
|
484
|
-
|
|
485
|
-
queue_stats = ( struct ofp_queue_stats * ) body->data;
|
|
486
|
-
while ( body_length > 0 ) {
|
|
487
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "port_no" ) ), UINT2NUM( queue_stats->port_no ) );
|
|
488
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "queue_id" ) ), UINT2NUM( queue_stats->queue_id ) );
|
|
489
|
-
|
|
490
|
-
queue_stats_reply = rb_funcall( rb_eval_string( "Trema::QueueStatsReply" ), rb_intern( "new" ), 1, options );
|
|
491
|
-
|
|
492
|
-
rb_ary_push( queue_stats_arr, queue_stats_reply );
|
|
493
|
-
body_length = ( uint16_t ) ( body_length - sizeof( struct ofp_queue_stats ) );
|
|
494
|
-
if ( body_length ) {
|
|
495
|
-
queue_stats++;
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), queue_stats_arr );
|
|
499
|
-
}
|
|
500
|
-
break;
|
|
501
|
-
case OFPST_VENDOR:
|
|
502
|
-
{
|
|
503
|
-
uint32_t *vendor_id;
|
|
504
|
-
VALUE vendor_stats_arr = rb_ary_new2( 1 );
|
|
505
|
-
VALUE options = rb_hash_new();
|
|
506
|
-
VALUE vendor_stats_reply;
|
|
507
|
-
|
|
508
|
-
vendor_id = ( uint32_t * ) body->data;
|
|
509
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "vendor_id" ) ), UINT2NUM( *vendor_id ) );
|
|
510
|
-
if ( body_length > sizeof( uint32_t ) ) {
|
|
511
|
-
unsigned long length = body_length - sizeof( uint32_t );
|
|
512
|
-
uint8_t *data = ( uint8_t * ) body->data + sizeof( uint32_t );
|
|
513
|
-
VALUE ary = rb_ary_new2( ( signed ) length );
|
|
514
|
-
for ( unsigned long i = 0; i < length; i++ ) {
|
|
515
|
-
rb_ary_push( ary, INT2FIX( data[ i ] ) );
|
|
516
|
-
}
|
|
517
|
-
rb_hash_aset( options, ID2SYM( rb_intern( "data" ) ), ary );
|
|
518
|
-
}
|
|
519
|
-
vendor_stats_reply = rb_funcall( rb_eval_string( "Trema::VendorStatsReply" ), rb_intern( "new" ), 1, options );
|
|
520
|
-
rb_ary_push( vendor_stats_arr, vendor_stats_reply );
|
|
521
|
-
|
|
522
|
-
rb_hash_aset( attributes, ID2SYM( rb_intern( "stats" ) ), vendor_stats_arr );
|
|
523
|
-
}
|
|
524
|
-
break;
|
|
525
|
-
default:
|
|
526
|
-
critical( "Unhandled stats type ( type = %u ),", type );
|
|
527
|
-
break;
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
VALUE r_stats_reply = rb_funcall( cStatsReply, rb_intern( "new" ), 1, attributes );
|
|
531
|
-
rb_funcall( controller, rb_intern( "stats_reply" ), 2, ULL2NUM( datapath_id ), r_stats_reply );
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
/*
|
|
536
|
-
* Local variables:
|
|
537
|
-
* c-basic-offset: 2
|
|
538
|
-
* indent-tabs-mode: nil
|
|
539
|
-
* End:
|
|
540
|
-
*/
|