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/src/lib/ether.h
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Ethernet header definitions
|
|
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
|
-
#ifndef ETHER_H
|
|
22
|
-
#define ETHER_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include <stdint.h>
|
|
26
|
-
#include "bool.h"
|
|
27
|
-
#include "buffer.h"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
#define ETH_ADDRLEN 6
|
|
31
|
-
#define ETH_FCS_LENGTH 4
|
|
32
|
-
#define ETH_MINIMUM_LENGTH 64
|
|
33
|
-
#define ETH_MAXIMUM_LENGTH 1518
|
|
34
|
-
#define ETH_HDR_LENGTH sizeof( ether_header_t )
|
|
35
|
-
#define ETH_MTU ( ETH_MAXIMUM_LENGTH - ETH_HDR_LENGTH - ETH_FCS_LENGTH )
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
//Ethernet payload types
|
|
39
|
-
#define ETH_ETHTYPE_8023 0x05dc
|
|
40
|
-
#define ETH_ETHTYPE_IPV4 0x0800
|
|
41
|
-
#define ETH_ETHTYPE_ARP 0x0806
|
|
42
|
-
#define ETH_ETHTYPE_RARP 0x8035
|
|
43
|
-
#define ETH_ETHTYPE_TPID 0x8100
|
|
44
|
-
#define ETH_ETHTYPE_IPV6 0x86DD
|
|
45
|
-
#define ETH_ETHTYPE_EAPOL 0x88c7
|
|
46
|
-
#define ETH_ETHTYPE_LLDP 0x88cc
|
|
47
|
-
#define ETH_ETHTYPE_UKNOWN 0xffff
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
typedef struct ether_headr {
|
|
51
|
-
uint8_t macda[ ETH_ADDRLEN ];
|
|
52
|
-
uint8_t macsa[ ETH_ADDRLEN ];
|
|
53
|
-
uint16_t type;
|
|
54
|
-
} ether_header_t;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
typedef struct vlantag_header {
|
|
58
|
-
uint16_t tci;
|
|
59
|
-
uint16_t type;
|
|
60
|
-
} vlantag_header_t;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
typedef struct snap_header {
|
|
64
|
-
uint8_t llc[ 3 ];
|
|
65
|
-
uint8_t oui[ 3 ];
|
|
66
|
-
uint16_t type;
|
|
67
|
-
} snap_header_t;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
#define TCI_GET_PRIO( _tci ) ( uint8_t )( ( ( _tci ) >> 13 ) & 7 )
|
|
71
|
-
|
|
72
|
-
#define TCI_GET_CFI( _tci ) ( uint8_t )( ( ( _tci ) >> 12 ) & 1 )
|
|
73
|
-
|
|
74
|
-
#define TCI_GET_VID( _tci ) ( uint16_t )( ( _tci ) & 0x0FFF )
|
|
75
|
-
|
|
76
|
-
#define TCI_CREATE( _prio, _cfi, _vid ) \
|
|
77
|
-
( uint16_t )( ( ( ( _prio ) & 7 ) << 13 ) | \
|
|
78
|
-
( ( ( _cfi ) & 1 ) << 12 ) | \
|
|
79
|
-
( ( _vid ) & 0x0FFF ) )
|
|
80
|
-
|
|
81
|
-
uint16_t fill_ether_padding( buffer *buf );
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
#endif // ETHER_H
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/*
|
|
88
|
-
* Local variables:
|
|
89
|
-
* c-basic-offset: 2
|
|
90
|
-
* indent-tabs-mode: nil
|
|
91
|
-
* End:
|
|
92
|
-
*/
|
data/src/lib/etherip.h
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* EtherIP definitions
|
|
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
|
-
#ifndef ETHERIP_H
|
|
22
|
-
#define ETHERIP_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#define IPPROTO_ETHERIP 97
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
typedef struct etherip_headr {
|
|
29
|
-
uint16_t version;
|
|
30
|
-
} etherip_header;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
#define ETHERIP_VERSION ( 0x3 << 12 )
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#endif // ETHERIP_H
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/*
|
|
40
|
-
* Local variables:
|
|
41
|
-
* c-basic-offset: 2
|
|
42
|
-
* indent-tabs-mode: nil
|
|
43
|
-
* End:
|
|
44
|
-
*/
|
|
@@ -1,788 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 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
|
-
#include <assert.h>
|
|
19
|
-
#include <sys/types.h>
|
|
20
|
-
#include <unistd.h>
|
|
21
|
-
#include "trema.h"
|
|
22
|
-
#include "trema_wrapper.h"
|
|
23
|
-
#include "event_forward_interface.h"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
static char *efi_queue_name = NULL;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// txid -> all_sw_tx;
|
|
30
|
-
static hash_table *efi_tx_table = NULL;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
struct event_forward_operation_request_param {
|
|
34
|
-
event_forward_entry_operation_callback callback;
|
|
35
|
-
void *user_data;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
struct event_forward_operation_to_all_request_param {
|
|
40
|
-
bool add;
|
|
41
|
-
enum efi_event_type type;
|
|
42
|
-
char *service_name;
|
|
43
|
-
event_forward_entry_to_all_callback callback;
|
|
44
|
-
void *user_data;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
struct sw_list_request_param {
|
|
49
|
-
switch_list_request_callback callback;
|
|
50
|
-
void *user_data;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
typedef struct all_sw_tx {
|
|
55
|
-
uint32_t txid;
|
|
56
|
-
hash_table *waiting_dpid;
|
|
57
|
-
enum efi_result tx_result;
|
|
58
|
-
|
|
59
|
-
struct event_forward_operation_to_all_request_param *request_param;
|
|
60
|
-
} all_sw_tx;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
struct txinfo {
|
|
64
|
-
uint64_t dpid;
|
|
65
|
-
uint32_t txid;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
static void
|
|
70
|
-
xfree_event_forward_operation_to_all_request_param( struct event_forward_operation_to_all_request_param *param ) {
|
|
71
|
-
xfree( param->service_name );
|
|
72
|
-
param->service_name = NULL;
|
|
73
|
-
xfree( param );
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// foreach_hash helper function
|
|
78
|
-
static void
|
|
79
|
-
xfree_dpid( void *key, void *value, void *user_data ) {
|
|
80
|
-
UNUSED( value );
|
|
81
|
-
UNUSED( user_data );
|
|
82
|
-
xfree( key );
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
static void
|
|
87
|
-
xfree_all_sw_tx( all_sw_tx *tx ) {
|
|
88
|
-
struct event_forward_operation_to_all_request_param *param = tx->request_param;
|
|
89
|
-
xfree_event_forward_operation_to_all_request_param( param );
|
|
90
|
-
tx->request_param = NULL;
|
|
91
|
-
|
|
92
|
-
foreach_hash( tx->waiting_dpid, xfree_dpid, NULL );
|
|
93
|
-
delete_hash( tx->waiting_dpid );
|
|
94
|
-
tx->waiting_dpid = NULL;
|
|
95
|
-
xfree( tx );
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const char*
|
|
100
|
-
_get_efi_queue_name( void ) {
|
|
101
|
-
return efi_queue_name;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
buffer*
|
|
106
|
-
create_event_forward_operation_request( buffer *buf, enum efi_event_type type, list_element *service_list ) {
|
|
107
|
-
if ( buf == NULL ) {
|
|
108
|
-
buf = alloc_buffer_with_length( sizeof( event_forward_operation_request ) + MESSENGER_SERVICE_NAME_LENGTH );
|
|
109
|
-
}
|
|
110
|
-
event_forward_operation_request *req = append_back_buffer( buf, sizeof( event_forward_operation_request ) );
|
|
111
|
-
memset( req, 0, sizeof( event_forward_operation_request ) );
|
|
112
|
-
|
|
113
|
-
req->type = ( uint8_t ) type;
|
|
114
|
-
|
|
115
|
-
size_t request_head_offset = sizeof( event_forward_operation_request );
|
|
116
|
-
uint32_t n_services = 0;
|
|
117
|
-
if ( service_list != NULL ) {
|
|
118
|
-
for ( list_element *e = service_list; e != NULL; e = e->next ) {
|
|
119
|
-
const size_t len = strlen( e->data );
|
|
120
|
-
char *dst = append_back_buffer( buf, len + 1 );
|
|
121
|
-
req = ( event_forward_operation_request * )( dst - request_head_offset );
|
|
122
|
-
request_head_offset += len + 1;
|
|
123
|
-
strcpy( dst, e->data );
|
|
124
|
-
dst[ len ] = '\0';
|
|
125
|
-
++n_services;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
req->n_services = htonl( n_services );
|
|
130
|
-
return buf;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
buffer*
|
|
135
|
-
create_event_forward_operation_reply( enum efi_event_type type, enum efi_result result, list_element *service_list ) {
|
|
136
|
-
buffer *buf = alloc_buffer_with_length( sizeof( event_forward_operation_reply ) + MESSENGER_SERVICE_NAME_LENGTH );
|
|
137
|
-
event_forward_operation_reply *rep = append_back_buffer( buf, sizeof( event_forward_operation_reply ) );
|
|
138
|
-
memset( rep, 0, sizeof( event_forward_operation_reply ) );
|
|
139
|
-
|
|
140
|
-
rep->type = ( uint8_t ) type;
|
|
141
|
-
rep->result = ( uint8_t ) result;
|
|
142
|
-
|
|
143
|
-
size_t reply_head_offset = sizeof( event_forward_operation_reply );
|
|
144
|
-
uint32_t n_services = 0;
|
|
145
|
-
if ( service_list != NULL ) {
|
|
146
|
-
for ( list_element *e = service_list; e != NULL; e = e->next ) {
|
|
147
|
-
const size_t len = strlen( e->data );
|
|
148
|
-
char *dst = append_back_buffer( buf, len + 1 );
|
|
149
|
-
rep = ( event_forward_operation_reply * )( dst - reply_head_offset );
|
|
150
|
-
reply_head_offset += len + 1;
|
|
151
|
-
strcpy( dst, e->data );
|
|
152
|
-
dst[ len ] = '\0';
|
|
153
|
-
++n_services;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
rep->n_services = htonl( n_services );
|
|
158
|
-
return buf;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
static void
|
|
163
|
-
handle_event_forward_operation_reply( management_application_reply *reply, size_t length, struct event_forward_operation_request_param *param ) {
|
|
164
|
-
event_forward_operation_result result;
|
|
165
|
-
result.result = EFI_OPERATION_FAILED;
|
|
166
|
-
result.n_services = 0;
|
|
167
|
-
result.services = NULL;
|
|
168
|
-
|
|
169
|
-
event_forward_operation_reply *efi_reply = ( event_forward_operation_reply * ) reply->data;
|
|
170
|
-
efi_reply->n_services = ntohl( efi_reply->n_services );
|
|
171
|
-
|
|
172
|
-
if ( reply->header.status == MANAGEMENT_REQUEST_FAILED ) {
|
|
173
|
-
warn( "Management request failed." );
|
|
174
|
-
result.result = EFI_OPERATION_FAILED;
|
|
175
|
-
if ( param->callback != NULL ) {
|
|
176
|
-
param->callback( result, param->user_data );
|
|
177
|
-
}
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
switch ( efi_reply->result ) {
|
|
182
|
-
case EFI_OPERATION_SUCCEEDED:
|
|
183
|
-
result.result = EFI_OPERATION_SUCCEEDED;
|
|
184
|
-
break;
|
|
185
|
-
case EFI_OPERATION_FAILED:
|
|
186
|
-
result.result = EFI_OPERATION_FAILED;
|
|
187
|
-
break;
|
|
188
|
-
default:
|
|
189
|
-
warn( "Unknown result type %#x. Translating as FAILED.", efi_reply->result );
|
|
190
|
-
result.result = EFI_OPERATION_FAILED;
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if ( result.result == EFI_OPERATION_FAILED ) {
|
|
195
|
-
if ( param->callback != NULL ) {
|
|
196
|
-
param->callback( result, param->user_data );
|
|
197
|
-
}
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const size_t service_list_len = length
|
|
202
|
-
- offsetof( management_application_reply, data )
|
|
203
|
-
- offsetof( event_forward_operation_reply, service_list );
|
|
204
|
-
|
|
205
|
-
// null terminate input to avoid overrun.
|
|
206
|
-
efi_reply->service_list[ service_list_len ] = '\0';
|
|
207
|
-
|
|
208
|
-
const uint32_t n_services_expected = efi_reply->n_services;
|
|
209
|
-
result.services = xcalloc( n_services_expected, sizeof( char * ) );
|
|
210
|
-
|
|
211
|
-
result.n_services = 0;
|
|
212
|
-
const char *next_name = efi_reply->service_list;
|
|
213
|
-
while ( next_name < &efi_reply->service_list[ service_list_len ] ) {
|
|
214
|
-
const size_t name_len = strlen( next_name );
|
|
215
|
-
if ( name_len > 0 ) {
|
|
216
|
-
if ( result.n_services < n_services_expected ) {
|
|
217
|
-
result.services[ result.n_services++ ] = next_name;
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
warn( "Expected %d name(s), but found more service name. Ignoring '%s'.", n_services_expected, next_name );
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
warn( "Encountered empty service name." );
|
|
225
|
-
}
|
|
226
|
-
next_name += name_len + 1;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if ( param->callback != NULL ) {
|
|
230
|
-
param->callback( result, param->user_data );
|
|
231
|
-
}
|
|
232
|
-
xfree( result.services );
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
static void
|
|
237
|
-
handle_get_switch_list_reply( management_application_reply *reply, size_t length, struct sw_list_request_param *param ) {
|
|
238
|
-
|
|
239
|
-
if ( reply->header.status == MANAGEMENT_REQUEST_FAILED ) {
|
|
240
|
-
warn( "Management request failed." );
|
|
241
|
-
if ( param->callback != NULL ) {
|
|
242
|
-
param->callback( NULL, 0, param->user_data );
|
|
243
|
-
}
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
uint64_t *dpids = ( uint64_t * ) reply->data;
|
|
248
|
-
const size_t data_bytes = length - sizeof( management_application_reply );
|
|
249
|
-
if ( data_bytes % sizeof( uint64_t ) != 0 ) {
|
|
250
|
-
warn( "data length was not multiple of uint64_t size %zu", data_bytes );
|
|
251
|
-
}
|
|
252
|
-
const size_t n_dpids = data_bytes / sizeof( uint64_t );
|
|
253
|
-
|
|
254
|
-
for ( size_t i = 0 ; i < n_dpids ; ++i ) {
|
|
255
|
-
dpids[ i ] = ntohll( dpids[ i ] );
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
if ( param->callback != NULL ) {
|
|
259
|
-
param->callback( dpids, n_dpids, param->user_data );
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
static void
|
|
265
|
-
handle_efi_reply( uint16_t tag, void *data, size_t length, void *user_data ) {
|
|
266
|
-
|
|
267
|
-
debug( "handle_efi_reply: tag=%#x, data=%p, length=%zu, user_data=%p", tag, data, length, user_data );
|
|
268
|
-
|
|
269
|
-
if ( tag != MESSENGER_MANAGEMENT_REPLY ) {
|
|
270
|
-
error( "Unexpected message received tag=%#x", tag );
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
if ( data == NULL ) {
|
|
274
|
-
error( "Received reply had no data" );
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
if ( length < sizeof( management_application_reply ) ) {
|
|
278
|
-
error( "Data length too short %zu. expecting >= %zu", length, sizeof( management_application_reply ) );
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
management_application_reply *reply = data;
|
|
283
|
-
if ( ntohs( reply->header.type ) != MANAGEMENT_APPLICATION_REPLY ) {
|
|
284
|
-
error( "Invalid reply type %#x, expecting MANAGEMENT_APPLICATION_REPLY:%#x", ntohs( reply->header.type ), MANAGEMENT_APPLICATION_REPLY );
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
const uint32_t command = ntohl( reply->application_id );
|
|
288
|
-
|
|
289
|
-
// check command validity
|
|
290
|
-
switch ( command ) {
|
|
291
|
-
case EVENT_FORWARD_ENTRY_ADD:
|
|
292
|
-
case EVENT_FORWARD_ENTRY_DELETE:
|
|
293
|
-
case EVENT_FORWARD_ENTRY_DUMP:
|
|
294
|
-
case EVENT_FORWARD_ENTRY_SET:
|
|
295
|
-
{
|
|
296
|
-
struct event_forward_operation_request_param *param = user_data;
|
|
297
|
-
handle_event_forward_operation_reply( reply, length, param );
|
|
298
|
-
xfree( param );
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
break;
|
|
302
|
-
|
|
303
|
-
case EFI_GET_SWLIST:
|
|
304
|
-
{
|
|
305
|
-
struct sw_list_request_param *param = user_data;
|
|
306
|
-
handle_get_switch_list_reply( reply, length, param );
|
|
307
|
-
xfree( param );
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
break;
|
|
311
|
-
|
|
312
|
-
default:
|
|
313
|
-
warn( "Invalid command/application_id: %#x", command );
|
|
314
|
-
return;
|
|
315
|
-
break;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
bool
|
|
321
|
-
init_event_forward_interface( void ) {
|
|
322
|
-
if ( efi_queue_name != NULL ) {
|
|
323
|
-
warn( "already initialized." );
|
|
324
|
-
return false;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
efi_queue_name = xcalloc( 1, MESSENGER_SERVICE_NAME_LENGTH );
|
|
328
|
-
|
|
329
|
-
int chWrite = snprintf( efi_queue_name, MESSENGER_SERVICE_NAME_LENGTH,
|
|
330
|
-
"%s-efic-%d", get_trema_name(), trema_getpid() );
|
|
331
|
-
if ( chWrite >= MESSENGER_SERVICE_NAME_LENGTH ) {
|
|
332
|
-
snprintf( efi_queue_name, MESSENGER_SERVICE_NAME_LENGTH,
|
|
333
|
-
"efic-%d", trema_getpid() );
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
// management reply handler
|
|
337
|
-
add_message_replied_callback( efi_queue_name, handle_efi_reply );
|
|
338
|
-
|
|
339
|
-
efi_tx_table = create_hash( compare_uint32, hash_uint32 );
|
|
340
|
-
return true;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
static void
|
|
345
|
-
maybe_init_event_forward_interface( void ) {
|
|
346
|
-
if ( efi_queue_name == NULL ) {
|
|
347
|
-
info( "Initializing at maybe_init_event_forward_interface()" );
|
|
348
|
-
init_event_forward_interface();
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
void
|
|
354
|
-
_cleanup_tx_table() {
|
|
355
|
-
hash_iterator it;
|
|
356
|
-
init_hash_iterator( efi_tx_table, &it );
|
|
357
|
-
hash_entry *e = NULL;
|
|
358
|
-
while ( ( e = iterate_hash_next( &it ) ) != NULL ) {
|
|
359
|
-
all_sw_tx *tx = e->value;
|
|
360
|
-
warn( "txid:%#x was left behind.", tx->txid );
|
|
361
|
-
|
|
362
|
-
delete_hash_entry( efi_tx_table, &tx->txid );
|
|
363
|
-
xfree_all_sw_tx( tx );
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
bool
|
|
369
|
-
finalize_event_forward_interface( void ) {
|
|
370
|
-
if ( efi_queue_name == NULL ) {
|
|
371
|
-
warn( "already finalized." );
|
|
372
|
-
return false;
|
|
373
|
-
}
|
|
374
|
-
delete_message_replied_callback( efi_queue_name, handle_efi_reply );
|
|
375
|
-
|
|
376
|
-
xfree( efi_queue_name );
|
|
377
|
-
efi_queue_name = NULL;
|
|
378
|
-
|
|
379
|
-
_cleanup_tx_table();
|
|
380
|
-
delete_hash( efi_tx_table );
|
|
381
|
-
efi_tx_table = NULL;
|
|
382
|
-
|
|
383
|
-
return true;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
static bool
|
|
388
|
-
send_efi_event_config_request( const char *service_name, enum switch_management_command command, enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
389
|
-
maybe_init_event_forward_interface();
|
|
390
|
-
if ( service_name == NULL ) {
|
|
391
|
-
return false;
|
|
392
|
-
}
|
|
393
|
-
switch( command ) {
|
|
394
|
-
case EVENT_FORWARD_ENTRY_ADD:
|
|
395
|
-
case EVENT_FORWARD_ENTRY_DELETE:
|
|
396
|
-
case EVENT_FORWARD_ENTRY_DUMP:
|
|
397
|
-
case EVENT_FORWARD_ENTRY_SET:
|
|
398
|
-
// do nothing;
|
|
399
|
-
break;
|
|
400
|
-
default:
|
|
401
|
-
return false;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
buffer *all_req = alloc_buffer_with_length( sizeof( management_application_request ) + sizeof( event_forward_operation_request ) + MESSENGER_SERVICE_NAME_LENGTH );
|
|
405
|
-
|
|
406
|
-
management_application_request *apreq = append_back_buffer( all_req, sizeof( management_application_request ) );
|
|
407
|
-
apreq->header.type = htons( MANAGEMENT_APPLICATION_REQUEST );
|
|
408
|
-
apreq->application_id = htonl( command );
|
|
409
|
-
create_event_forward_operation_request( all_req, type, service_list );
|
|
410
|
-
apreq = all_req->data;
|
|
411
|
-
apreq->header.length = htonl( ( uint32_t ) all_req->length );
|
|
412
|
-
|
|
413
|
-
struct event_forward_operation_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_request_param ) );
|
|
414
|
-
param->callback = callback;
|
|
415
|
-
param->user_data = user_data;
|
|
416
|
-
|
|
417
|
-
bool sent = send_request_message( service_name, efi_queue_name, MESSENGER_MANAGEMENT_REQUEST,
|
|
418
|
-
all_req->data, all_req->length, param );
|
|
419
|
-
if ( !sent ) {
|
|
420
|
-
xfree( param );
|
|
421
|
-
}
|
|
422
|
-
free_buffer( all_req );
|
|
423
|
-
|
|
424
|
-
return sent;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
// Low level API for switch manager
|
|
429
|
-
bool
|
|
430
|
-
set_switch_manager_event_forward_entries( enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
431
|
-
const char switch_manager[] = "switch_manager.m";
|
|
432
|
-
return send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_SET, type, service_list, callback, user_data );
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
bool
|
|
437
|
-
add_switch_manager_event_forward_entry( enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
438
|
-
const char switch_manager[] = "switch_manager.m";
|
|
439
|
-
list_element service_list;
|
|
440
|
-
service_list.next = NULL;
|
|
441
|
-
// Copying only to avoid const_cast warnings. Will not modify in callee.
|
|
442
|
-
service_list.data = xstrdup( service_name );
|
|
443
|
-
bool sent_ok = send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_ADD, type, &service_list, callback, user_data );
|
|
444
|
-
xfree( service_list.data );
|
|
445
|
-
return sent_ok;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
bool
|
|
450
|
-
delete_switch_manager_event_forward_entry( enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
451
|
-
const char switch_manager[] = "switch_manager.m";
|
|
452
|
-
list_element service_list;
|
|
453
|
-
service_list.next = NULL;
|
|
454
|
-
// Copying only to avoid const_cast warnings. Will not modify in callee.
|
|
455
|
-
service_list.data = xstrdup( service_name );
|
|
456
|
-
bool sent_ok = send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_DELETE, type, &service_list, callback, user_data );
|
|
457
|
-
xfree( service_list.data );
|
|
458
|
-
return sent_ok;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
bool
|
|
463
|
-
dump_switch_manager_event_forward_entries( enum efi_event_type type, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
464
|
-
const char switch_manager[] = "switch_manager.m";
|
|
465
|
-
return send_efi_event_config_request( switch_manager, EVENT_FORWARD_ENTRY_DUMP, type, NULL, callback, user_data );
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
bool
|
|
470
|
-
set_switch_event_forward_entries( uint64_t dpid, enum efi_event_type type, list_element *service_list, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
471
|
-
char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
|
|
472
|
-
snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
|
|
473
|
-
return send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_SET, type, service_list, callback, user_data );
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
bool
|
|
478
|
-
add_switch_event_forward_entry( uint64_t dpid, enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
479
|
-
char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
|
|
480
|
-
snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
|
|
481
|
-
list_element service_list;
|
|
482
|
-
service_list.next = NULL;
|
|
483
|
-
// Copying only to avoid const_cast warnings. Will not modify in callee.
|
|
484
|
-
service_list.data = xstrdup( service_name );
|
|
485
|
-
bool sent_ok = send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_ADD, type, &service_list, callback, user_data );
|
|
486
|
-
xfree( service_list.data );
|
|
487
|
-
return sent_ok;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
bool
|
|
492
|
-
delete_switch_event_forward_entry( uint64_t dpid, enum efi_event_type type, const char *service_name, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
493
|
-
char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
|
|
494
|
-
snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
|
|
495
|
-
list_element service_list;
|
|
496
|
-
service_list.next = NULL;
|
|
497
|
-
// Copying only to avoid const_cast warnings. Will not modify in callee.
|
|
498
|
-
service_list.data = xstrdup( service_name );
|
|
499
|
-
bool sent_ok = send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_DELETE, type, &service_list, callback, user_data );
|
|
500
|
-
xfree( service_list.data );
|
|
501
|
-
return sent_ok;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
bool
|
|
506
|
-
dump_switch_event_forward_entries( uint64_t dpid, enum efi_event_type type, event_forward_entry_operation_callback callback, void *user_data ) {
|
|
507
|
-
char switch_name[ MESSENGER_SERVICE_NAME_LENGTH ];
|
|
508
|
-
snprintf( switch_name, MESSENGER_SERVICE_NAME_LENGTH, "switch.%#" PRIx64 ".m", dpid );
|
|
509
|
-
return send_efi_event_config_request( switch_name, EVENT_FORWARD_ENTRY_DUMP, type, NULL, callback, user_data );
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
bool
|
|
514
|
-
send_efi_switch_list_request( switch_list_request_callback callback, void *user_data ) {
|
|
515
|
-
maybe_init_event_forward_interface();
|
|
516
|
-
if ( callback == NULL ) {
|
|
517
|
-
return false;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
management_application_request req;
|
|
521
|
-
req.header.type = htons( MANAGEMENT_APPLICATION_REQUEST );
|
|
522
|
-
req.header.length = htonl( ( uint32_t ) sizeof( management_application_request ) );
|
|
523
|
-
req.application_id = htonl( EFI_GET_SWLIST );
|
|
524
|
-
|
|
525
|
-
struct sw_list_request_param *param = xcalloc( 1, sizeof( struct sw_list_request_param ) );
|
|
526
|
-
param->callback = callback;
|
|
527
|
-
param->user_data = user_data;
|
|
528
|
-
|
|
529
|
-
bool sent_ok = send_request_message( "switch_manager.m", efi_queue_name, MESSENGER_MANAGEMENT_REQUEST,
|
|
530
|
-
&req, sizeof( management_application_request ), param );
|
|
531
|
-
if ( !sent_ok ) {
|
|
532
|
-
xfree( param );
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
return sent_ok;
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
static uint32_t
|
|
540
|
-
get_txid() {
|
|
541
|
-
static uint32_t txid = 0;
|
|
542
|
-
return ++txid;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
static bool
|
|
547
|
-
hash_table_is_empty( hash_table *tbl ) {
|
|
548
|
-
hash_iterator it;
|
|
549
|
-
init_hash_iterator( tbl, &it );
|
|
550
|
-
return ( iterate_hash_next( &it ) == NULL );
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
static bool
|
|
555
|
-
check_tx_result_and_respond( all_sw_tx *tx ) {
|
|
556
|
-
if ( tx->tx_result == EFI_OPERATION_FAILED ) {
|
|
557
|
-
struct event_forward_operation_to_all_request_param *all_param = tx->request_param;
|
|
558
|
-
if ( all_param->callback != NULL ) {
|
|
559
|
-
all_param->callback( tx->tx_result, all_param->user_data );
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
info( "txid %#x completed with failure.", tx->txid );
|
|
563
|
-
// remove and cleanup tx
|
|
564
|
-
delete_hash_entry( efi_tx_table, &tx->txid );
|
|
565
|
-
xfree_all_sw_tx( tx );
|
|
566
|
-
return true;
|
|
567
|
-
}
|
|
568
|
-
return false;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
void
|
|
573
|
-
_switch_response_timeout( void *user_data ) {
|
|
574
|
-
struct txinfo *txinfo = user_data;
|
|
575
|
-
const uint64_t dpid = txinfo->dpid;
|
|
576
|
-
const uint32_t txid = txinfo->txid;
|
|
577
|
-
// xfree( txinfo ); // cannot free since _switch_response_handler may be called later.
|
|
578
|
-
txinfo = NULL;
|
|
579
|
-
debug( "txid %#x switch %#" PRIx64 " time out. called", txid, dpid );
|
|
580
|
-
|
|
581
|
-
all_sw_tx *tx = lookup_hash_entry( efi_tx_table, &txid );
|
|
582
|
-
if ( tx == NULL ) {
|
|
583
|
-
// transaction already failed. Do nothing.
|
|
584
|
-
return;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
uint64_t *dpid_in_list = lookup_hash_entry( tx->waiting_dpid, &dpid );
|
|
588
|
-
if ( dpid_in_list != NULL ) {
|
|
589
|
-
info( "txid %#x switch %#" PRIx64 " timed out.", txid, dpid );
|
|
590
|
-
delete_hash_entry( tx->waiting_dpid, &dpid );
|
|
591
|
-
xfree( dpid_in_list );
|
|
592
|
-
tx->tx_result = EFI_OPERATION_FAILED;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
check_tx_result_and_respond( tx );
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
void
|
|
600
|
-
_switch_response_handler( event_forward_operation_result result, void *user_data ) {
|
|
601
|
-
struct txinfo *txinfo = user_data;
|
|
602
|
-
const uint64_t dpid = txinfo->dpid;
|
|
603
|
-
const uint32_t txid = txinfo->txid;
|
|
604
|
-
delete_timer_event( _switch_response_timeout, txinfo );
|
|
605
|
-
xfree( txinfo );
|
|
606
|
-
txinfo = NULL;
|
|
607
|
-
debug( "txid %#x switch %#" PRIx64 " response.", txid, dpid );
|
|
608
|
-
|
|
609
|
-
all_sw_tx *tx = lookup_hash_entry( efi_tx_table, &txid );
|
|
610
|
-
if ( tx == NULL ) {
|
|
611
|
-
// transaction already failed. Do nothing.
|
|
612
|
-
return;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
uint64_t *dpid_in_list = lookup_hash_entry( tx->waiting_dpid, &dpid );
|
|
616
|
-
if ( dpid_in_list == NULL ) {
|
|
617
|
-
// probably timed out. Do nothing.
|
|
618
|
-
return;
|
|
619
|
-
}
|
|
620
|
-
delete_hash_entry( tx->waiting_dpid, &dpid );
|
|
621
|
-
xfree( dpid_in_list );
|
|
622
|
-
dpid_in_list = NULL;
|
|
623
|
-
|
|
624
|
-
if ( result.result == EFI_OPERATION_FAILED ) {
|
|
625
|
-
warn( "txid %#x Setting event forwarding entry to switch %#" PRIx64 " failed.", txid, dpid );
|
|
626
|
-
tx->tx_result = EFI_OPERATION_FAILED;
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
bool tx_ended = check_tx_result_and_respond( tx );
|
|
630
|
-
if ( tx_ended ) return;
|
|
631
|
-
|
|
632
|
-
struct event_forward_operation_to_all_request_param *all_param = tx->request_param;
|
|
633
|
-
if ( hash_table_is_empty( tx->waiting_dpid ) ) {
|
|
634
|
-
// was last element in tx. callback result.
|
|
635
|
-
if ( all_param->callback != NULL ) {
|
|
636
|
-
all_param->callback( tx->tx_result, all_param->user_data );
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
info( "txid %#x complete.", tx->txid );
|
|
640
|
-
// remove and cleanup tx
|
|
641
|
-
delete_hash_entry( efi_tx_table, &tx->txid );
|
|
642
|
-
xfree_all_sw_tx( tx );
|
|
643
|
-
return;
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
all_sw_tx*
|
|
649
|
-
_insert_tx( size_t n_dpids, struct event_forward_operation_to_all_request_param *param ) {
|
|
650
|
-
all_sw_tx *tx = xcalloc( 1, sizeof(all_sw_tx) );
|
|
651
|
-
tx->txid = get_txid();
|
|
652
|
-
tx->request_param = param;
|
|
653
|
-
tx->tx_result = EFI_OPERATION_SUCCEEDED;
|
|
654
|
-
tx->waiting_dpid = create_hash_with_size( compare_datapath_id,
|
|
655
|
-
hash_datapath_id,
|
|
656
|
-
( unsigned ) n_dpids );
|
|
657
|
-
void *dupe_tx = insert_hash_entry( efi_tx_table, &tx->txid, tx );
|
|
658
|
-
assert( dupe_tx == NULL );
|
|
659
|
-
return tx;
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
void
|
|
664
|
-
_dispatch_to_all_switch( uint64_t *dpids, size_t n_dpids, void *user_data ) {
|
|
665
|
-
struct event_forward_operation_to_all_request_param *param = user_data;
|
|
666
|
-
|
|
667
|
-
all_sw_tx *tx = _insert_tx( n_dpids, param );
|
|
668
|
-
info( "txid %#x Start dispatching to switches", tx->txid );
|
|
669
|
-
debug( "dispatching to %zd switches", n_dpids );
|
|
670
|
-
// copy dpid hash to transaction.
|
|
671
|
-
for ( size_t i = 0 ; i < n_dpids ; ++i ) {
|
|
672
|
-
uint64_t *dpid = xmalloc( sizeof( uint64_t ) );
|
|
673
|
-
*dpid = dpids[i];
|
|
674
|
-
uint64_t *dupe_dpid = insert_hash_entry( tx->waiting_dpid, dpid, dpid );
|
|
675
|
-
if ( dupe_dpid == NULL ) {
|
|
676
|
-
struct txinfo *txinfo = xcalloc( 1, sizeof( struct txinfo ) );
|
|
677
|
-
txinfo->dpid = *dpid;
|
|
678
|
-
txinfo->txid = tx->txid;
|
|
679
|
-
bool send_ok;
|
|
680
|
-
|
|
681
|
-
if ( param->add ) {
|
|
682
|
-
send_ok = add_switch_event_forward_entry( *dpid, param->type, param->service_name, _switch_response_handler, txinfo );
|
|
683
|
-
}
|
|
684
|
-
else {
|
|
685
|
-
send_ok = delete_switch_event_forward_entry( *dpid, param->type, param->service_name, _switch_response_handler, txinfo );
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
if ( !send_ok ) {
|
|
689
|
-
tx->tx_result = EFI_OPERATION_FAILED;
|
|
690
|
-
warn( "txid %#x Failed to send request to switch %#" PRIx64 ".", tx->txid, *dpid );
|
|
691
|
-
xfree( delete_hash_entry( tx->waiting_dpid, dpid ) );
|
|
692
|
-
dpid = NULL;
|
|
693
|
-
xfree( txinfo );
|
|
694
|
-
continue;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
struct itimerspec interval;
|
|
698
|
-
interval.it_interval.tv_sec = 0;
|
|
699
|
-
interval.it_interval.tv_nsec = 0;
|
|
700
|
-
interval.it_value.tv_sec = 5; // FIXME make this configurable?
|
|
701
|
-
interval.it_value.tv_nsec = 0;
|
|
702
|
-
bool set_ok = add_timer_event_callback( &interval, _switch_response_timeout, txinfo );
|
|
703
|
-
if ( !set_ok ) {
|
|
704
|
-
tx->tx_result = EFI_OPERATION_FAILED;
|
|
705
|
-
warn( "txid %#x Failed to set timeout timer for switch %#" PRIx64 ".", tx->txid, *dpid );
|
|
706
|
-
xfree( delete_hash_entry( tx->waiting_dpid, dpid ) );
|
|
707
|
-
dpid = NULL;
|
|
708
|
-
// txinfo will be freed by _switch_response_handler
|
|
709
|
-
continue;
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
else {
|
|
713
|
-
warn( "Duplicate dpid returned %#." PRIx64, *dupe_dpid );
|
|
714
|
-
xfree( dupe_dpid );
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
if ( n_dpids == 0 || tx->tx_result == EFI_OPERATION_FAILED ) {
|
|
719
|
-
if ( n_dpids == 0 ) {
|
|
720
|
-
info( "txid %#x completed. No switches found.", tx->txid );
|
|
721
|
-
}
|
|
722
|
-
else if ( tx->tx_result == EFI_OPERATION_FAILED ) {
|
|
723
|
-
info( "txid %#x completed with failure.", tx->txid );
|
|
724
|
-
}
|
|
725
|
-
if ( param->callback != NULL ) {
|
|
726
|
-
param->callback( tx->tx_result, param->user_data );
|
|
727
|
-
}
|
|
728
|
-
// remove and cleanup tx
|
|
729
|
-
delete_hash_entry( efi_tx_table, &tx->txid );
|
|
730
|
-
xfree_all_sw_tx( tx );
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
void
|
|
736
|
-
_get_switch_list_after_swm_succ( event_forward_operation_result result, void *user_data ) {
|
|
737
|
-
struct event_forward_operation_to_all_request_param *param = user_data;
|
|
738
|
-
bool success = true;
|
|
739
|
-
if ( result.result == EFI_OPERATION_SUCCEEDED ) {
|
|
740
|
-
// get switch list
|
|
741
|
-
success = send_efi_switch_list_request( _dispatch_to_all_switch, param );
|
|
742
|
-
}
|
|
743
|
-
else {
|
|
744
|
-
success = false;
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
if ( !success ) {
|
|
748
|
-
warn( "Failed to set event forwarding entry to switch manager." );
|
|
749
|
-
if ( param->callback != NULL ) {
|
|
750
|
-
param->callback( EFI_OPERATION_FAILED, param->user_data );
|
|
751
|
-
}
|
|
752
|
-
xfree_event_forward_operation_to_all_request_param( param );
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
bool
|
|
758
|
-
add_event_forward_entry_to_all_switches( enum efi_event_type type, const char *service_name, event_forward_entry_to_all_callback callback, void *user_data ) {
|
|
759
|
-
struct event_forward_operation_to_all_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_to_all_request_param ) );
|
|
760
|
-
param->add = true;
|
|
761
|
-
param->type = type;
|
|
762
|
-
param->service_name = xstrdup( service_name );
|
|
763
|
-
param->callback = callback;
|
|
764
|
-
param->user_data = user_data;
|
|
765
|
-
bool sent_ok = add_switch_manager_event_forward_entry( type, service_name, _get_switch_list_after_swm_succ, param );
|
|
766
|
-
if ( !sent_ok ) {
|
|
767
|
-
xfree_event_forward_operation_to_all_request_param( param );
|
|
768
|
-
}
|
|
769
|
-
return sent_ok;
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
bool
|
|
774
|
-
delete_event_forward_entry_to_all_switches( enum efi_event_type type, const char *service_name, event_forward_entry_to_all_callback callback, void *user_data ) {
|
|
775
|
-
struct event_forward_operation_to_all_request_param *param = xcalloc( 1, sizeof( struct event_forward_operation_to_all_request_param ) );
|
|
776
|
-
param->add = false;
|
|
777
|
-
param->type = type;
|
|
778
|
-
param->service_name = xstrdup( service_name );
|
|
779
|
-
param->callback = callback;
|
|
780
|
-
param->user_data = user_data;
|
|
781
|
-
bool sent_ok = delete_switch_manager_event_forward_entry( type, service_name, _get_switch_list_after_swm_succ, param );
|
|
782
|
-
if ( !sent_ok ) {
|
|
783
|
-
xfree_event_forward_operation_to_all_request_param( param );
|
|
784
|
-
}
|
|
785
|
-
return sent_ok;
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
|