trema 0.4.7 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +33 -54
- data/.hound.yml +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -1
- data/.travis.yml +14 -18
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -26
- data/README.md +25 -241
- data/Rakefile +4 -1056
- data/bin/.gitignore +3 -0
- data/bin/trema +163 -237
- data/features/cleanup_on_failure.feature +118 -0
- data/features/logging.feature +73 -0
- data/features/open_flow13.feature +21 -0
- data/features/step_definitions/.gitignore +35 -0
- data/features/step_definitions/.rubocop.yml +5 -0
- data/features/step_definitions/.travis.yml +19 -0
- data/features/step_definitions/Gemfile +9 -0
- data/features/step_definitions/Guardfile +4 -0
- data/features/step_definitions/LICENSE +675 -0
- data/features/step_definitions/README.md +7 -0
- data/features/step_definitions/Rakefile +10 -0
- data/features/step_definitions/show_stats_steps.rb +56 -0
- data/features/step_definitions/virtual_link_steps.rb +8 -0
- data/features/support/env.rb +0 -73
- data/features/support/hooks.rb +6 -50
- data/features/trema_delete_link.feature +30 -0
- data/features/trema_killall.feature +56 -0
- data/features/trema_run.feature +47 -0
- data/features/trema_start.feature +73 -0
- data/features/trema_stop.feature +50 -0
- data/lib/trema.rb +4 -0
- data/lib/trema/command.rb +184 -0
- data/lib/trema/controller.rb +289 -0
- data/lib/trema/dirs.rb +14 -0
- data/lib/trema/drb.rb +32 -0
- data/lib/trema/logger.rb +63 -0
- data/lib/trema/monkey_patch/integer.rb +8 -0
- data/lib/trema/monkey_patch/integer/base_conversions.rb +12 -0
- data/lib/trema/monkey_patch/integer/durations.rb +12 -0
- data/lib/trema/switch.rb +83 -0
- data/lib/trema/version.rb +5 -0
- data/spec/spec_helper.rb +9 -178
- data/spec/trema/controller_spec.rb +4 -53
- data/tasks/.gitignore +34 -0
- data/tasks/LICENSE +675 -0
- data/tasks/README.md +6 -0
- data/tasks/cucumber.rake +14 -0
- data/tasks/flay.rake +15 -0
- data/tasks/flog.rake +25 -0
- data/tasks/gem.rake +15 -0
- data/tasks/reek.rake +11 -0
- data/tasks/relish.rake +8 -0
- data/tasks/rspec.rake +8 -0
- data/tasks/rubocop.rake +2 -16
- data/tasks/yard.rake +11 -0
- data/trema.gemspec +24 -23
- metadata +180 -720
- data/.yardopts +0 -4
- data/Doxyfile +0 -1679
- data/Guardfile +0 -14
- data/bin/quality +0 -31
- data/bin/trema-config +0 -59
- data/build.rb +0 -32
- data/cruise.rb +0 -409
- data/features/.nav +0 -50
- data/features/README.md +0 -7
- data/features/core/get_pid_by_trema_name.feature +0 -137
- data/features/core/packetin_filter.feature +0 -55
- data/features/core/switch_manager.feature +0 -41
- data/features/core/trema-config.feature +0 -55
- data/features/dsl/switch_port_specifier.feature +0 -15
- data/features/examples/dumper.feature +0 -35
- data/features/examples/hello_trema.feature +0 -23
- data/features/examples/learning_switch.feature +0 -37
- data/features/examples/list_switches.feature +0 -24
- data/features/examples/message.set_config.feature +0 -27
- data/features/examples/message.vendor-action.feature +0 -25
- data/features/examples/message.vendor-stats-request.feature +0 -20
- data/features/examples/multi_learning_switch.feature +0 -107
- data/features/examples/openflow_message.echo.feature +0 -59
- data/features/examples/openflow_message.features_request.feature +0 -35
- data/features/examples/openflow_message.hello.feature +0 -59
- data/features/examples/packet_in.feature +0 -33
- data/features/examples/packetin_filter_config.feature +0 -95
- data/features/examples/patch_panel.feature +0 -29
- data/features/examples/repeater_hub.feature +0 -52
- data/features/examples/switch_info.feature +0 -51
- data/features/examples/switch_monitor.feature +0 -35
- data/features/examples/transparent_firewall.feature +0 -73
- data/features/handlers/switch_ready.feature +0 -40
- data/features/step_definitions/misc_steps.rb +0 -85
- data/features/step_definitions/send_packets_steps.rb +0 -33
- data/features/step_definitions/stats_steps.rb +0 -39
- data/features/switch_event/C-add_forward_entry.feature +0 -114
- data/features/switch_event/C-delete_forward_entry.feature +0 -85
- data/features/switch_event/C-dump_forward_entries.feature +0 -72
- data/features/switch_event/C-set_forward_entries.feature +0 -77
- data/features/switch_event/README.md +0 -40
- data/features/switch_event/add_forward_entry.feature +0 -160
- data/features/switch_event/delete_forward_entry.feature +0 -160
- data/features/switch_event/dump_forward_entries.feature +0 -103
- data/features/switch_event/set_forward_entries.feature +0 -102
- data/features/trema_commands/README.md +0 -8
- data/features/trema_commands/dump_flows.feature +0 -41
- data/features/trema_commands/help.feature +0 -27
- data/features/trema_commands/help_option.feature +0 -20
- data/features/trema_commands/kill.feature +0 -56
- data/features/trema_commands/killall.feature +0 -32
- data/features/trema_commands/port_down.feature +0 -71
- data/features/trema_commands/port_up.feature +0 -75
- data/features/trema_commands/reset_stats.feature +0 -56
- data/features/trema_commands/run.feature +0 -56
- data/features/trema_commands/send_packets.feature +0 -46
- data/features/trema_commands/show_stats.feature +0 -66
- data/features/trema_commands/up.feature +0 -34
- data/features/trema_commands/version.feature +0 -10
- data/features/trema_commands/version_option.feature +0 -8
- data/rubocop-todo.yml +0 -159
- data/ruby/.gitignore +0 -4
- data/ruby/blocker.rb +0 -74
- data/ruby/extconf.rb +0 -80
- data/ruby/sub-process.rb +0 -289
- data/ruby/trema/action-common.c +0 -46
- data/ruby/trema/action-common.h +0 -38
- data/ruby/trema/action.rb +0 -33
- data/ruby/trema/aggregate-stats-reply.rb +0 -68
- data/ruby/trema/app.rb +0 -114
- data/ruby/trema/barrier-reply.c +0 -98
- data/ruby/trema/barrier-reply.h +0 -44
- data/ruby/trema/barrier-request.c +0 -135
- data/ruby/trema/barrier-request.h +0 -42
- data/ruby/trema/cli.rb +0 -267
- data/ruby/trema/command.rb +0 -41
- data/ruby/trema/command/dump_flows.rb +0 -43
- data/ruby/trema/command/kill.rb +0 -75
- data/ruby/trema/command/killall.rb +0 -38
- data/ruby/trema/command/netns.rb +0 -38
- data/ruby/trema/command/port_down.rb +0 -43
- data/ruby/trema/command/port_up.rb +0 -43
- data/ruby/trema/command/reset_stats.rb +0 -41
- data/ruby/trema/command/ruby.rb +0 -38
- data/ruby/trema/command/run.rb +0 -110
- data/ruby/trema/command/send_packets.rb +0 -46
- data/ruby/trema/command/shell.rb +0 -57
- data/ruby/trema/command/show_stats.rb +0 -65
- data/ruby/trema/command/up.rb +0 -44
- data/ruby/trema/command/version.rb +0 -35
- data/ruby/trema/compat.h +0 -36
- data/ruby/trema/controller.c +0 -691
- data/ruby/trema/controller.h +0 -42
- data/ruby/trema/controller.rb +0 -255
- data/ruby/trema/custom-switch.rb +0 -56
- data/ruby/trema/daemon.rb +0 -184
- data/ruby/trema/default-logger.c +0 -161
- data/ruby/trema/default-logger.h +0 -42
- data/ruby/trema/default-logger.rb +0 -29
- data/ruby/trema/default_openflow_channel_port.rb +0 -26
- data/ruby/trema/desc-stats-reply.rb +0 -75
- data/ruby/trema/dsl.rb +0 -32
- data/ruby/trema/dsl/configuration.rb +0 -145
- data/ruby/trema/dsl/context.rb +0 -69
- data/ruby/trema/dsl/custom-switch.rb +0 -44
- data/ruby/trema/dsl/link.rb +0 -39
- data/ruby/trema/dsl/netns.rb +0 -78
- data/ruby/trema/dsl/parser.rb +0 -70
- data/ruby/trema/dsl/rswitch.rb +0 -47
- data/ruby/trema/dsl/run.rb +0 -47
- data/ruby/trema/dsl/runner.rb +0 -178
- data/ruby/trema/dsl/stanza.rb +0 -51
- data/ruby/trema/dsl/switch.rb +0 -76
- data/ruby/trema/dsl/syntax-error.rb +0 -31
- data/ruby/trema/dsl/syntax.rb +0 -128
- data/ruby/trema/dsl/vhost.rb +0 -106
- data/ruby/trema/dsl/vswitch.rb +0 -45
- data/ruby/trema/echo-reply.c +0 -122
- data/ruby/trema/echo-reply.h +0 -40
- data/ruby/trema/echo-request.c +0 -117
- data/ruby/trema/echo-request.h +0 -40
- data/ruby/trema/echo.c +0 -99
- data/ruby/trema/echo.h +0 -39
- data/ruby/trema/enqueue.rb +0 -87
- data/ruby/trema/error.c +0 -262
- data/ruby/trema/error.h +0 -42
- data/ruby/trema/exact-match.rb +0 -34
- data/ruby/trema/executables.rb +0 -99
- data/ruby/trema/features-reply.c +0 -330
- data/ruby/trema/features-reply.h +0 -54
- data/ruby/trema/features-request.c +0 -134
- data/ruby/trema/features-request.h +0 -42
- data/ruby/trema/flow-mod.c +0 -150
- data/ruby/trema/flow-mod.h +0 -42
- data/ruby/trema/flow-removed.c +0 -280
- data/ruby/trema/flow-removed.h +0 -44
- data/ruby/trema/flow-stats-reply.rb +0 -107
- data/ruby/trema/flow.rb +0 -65
- data/ruby/trema/get-config-reply.c +0 -158
- data/ruby/trema/get-config-reply.h +0 -50
- data/ruby/trema/get-config-request.c +0 -136
- data/ruby/trema/get-config-request.h +0 -42
- data/ruby/trema/hardware-switch.rb +0 -86
- data/ruby/trema/hello.c +0 -133
- data/ruby/trema/hello.h +0 -42
- data/ruby/trema/host.rb +0 -263
- data/ruby/trema/link.rb +0 -177
- data/ruby/trema/list-switches-reply.c +0 -44
- data/ruby/trema/list-switches-reply.h +0 -38
- data/ruby/trema/mac.rb +0 -29
- data/ruby/trema/match.c +0 -621
- data/ruby/trema/match.h +0 -34
- data/ruby/trema/monkey-patch/integer.rb +0 -35
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +0 -34
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -49
- data/ruby/trema/monkey-patch/integer/validators.rb +0 -36
- data/ruby/trema/monkey-patch/module.rb +0 -33
- data/ruby/trema/monkey-patch/module/class-method.rb +0 -38
- data/ruby/trema/monkey-patch/module/deprecation.rb +0 -39
- data/ruby/trema/monkey-patch/string.rb +0 -31
- data/ruby/trema/monkey-patch/string/inflectors.rb +0 -52
- data/ruby/trema/netns.rb +0 -127
- data/ruby/trema/network-component.rb +0 -151
- data/ruby/trema/ofctl.rb +0 -70
- data/ruby/trema/open-vswitch.rb +0 -160
- data/ruby/trema/openflow-error.c +0 -193
- data/ruby/trema/openflow-error.h +0 -51
- data/ruby/trema/openflow-switch.rb +0 -35
- data/ruby/trema/ordered-hash.rb +0 -75
- data/ruby/trema/packet-in.c +0 -1365
- data/ruby/trema/packet-in.h +0 -44
- data/ruby/trema/packet-queue.rb +0 -181
- data/ruby/trema/packetin-filter.rb +0 -124
- data/ruby/trema/path.rb +0 -85
- data/ruby/trema/phost.rb +0 -76
- data/ruby/trema/port-mod.c +0 -232
- data/ruby/trema/port-mod.h +0 -34
- data/ruby/trema/port-stats-reply.rb +0 -109
- data/ruby/trema/port-status-add.rb +0 -60
- data/ruby/trema/port-status-delete.rb +0 -60
- data/ruby/trema/port-status-modify.rb +0 -60
- data/ruby/trema/port-status.c +0 -192
- data/ruby/trema/port-status.h +0 -41
- data/ruby/trema/port.c +0 -398
- data/ruby/trema/port.h +0 -45
- data/ruby/trema/process.rb +0 -103
- data/ruby/trema/queue-get-config-reply.c +0 -205
- data/ruby/trema/queue-get-config-reply.h +0 -45
- data/ruby/trema/queue-get-config-request.c +0 -141
- data/ruby/trema/queue-get-config-request.h +0 -42
- data/ruby/trema/queue-stats-reply.rb +0 -76
- data/ruby/trema/ruby-switch.rb +0 -62
- data/ruby/trema/send-out-port.rb +0 -113
- data/ruby/trema/set-config.c +0 -174
- data/ruby/trema/set-config.h +0 -42
- data/ruby/trema/set-eth-addr.rb +0 -54
- data/ruby/trema/set-eth-dst-addr.rb +0 -52
- data/ruby/trema/set-eth-src-addr.rb +0 -53
- data/ruby/trema/set-ip-addr.rb +0 -54
- data/ruby/trema/set-ip-dst-addr.rb +0 -53
- data/ruby/trema/set-ip-src-addr.rb +0 -52
- data/ruby/trema/set-ip-tos.rb +0 -64
- data/ruby/trema/set-transport-dst-port.rb +0 -53
- data/ruby/trema/set-transport-port.rb +0 -53
- data/ruby/trema/set-transport-src-port.rb +0 -54
- data/ruby/trema/set-vlan-priority.rb +0 -66
- data/ruby/trema/set-vlan-vid.rb +0 -65
- data/ruby/trema/shell.rb +0 -37
- data/ruby/trema/shell/down.rb +0 -37
- data/ruby/trema/shell/killall.rb +0 -38
- data/ruby/trema/shell/link.rb +0 -59
- data/ruby/trema/shell/reset_stats.rb +0 -49
- data/ruby/trema/shell/run.rb +0 -67
- data/ruby/trema/shell/send_packets.rb +0 -40
- data/ruby/trema/shell/show_stats.rb +0 -47
- data/ruby/trema/shell/up.rb +0 -41
- data/ruby/trema/shell/vhost.rb +0 -42
- data/ruby/trema/shell/vswitch.rb +0 -47
- data/ruby/trema/stats-helper.rb +0 -63
- data/ruby/trema/stats-reply.c +0 -540
- data/ruby/trema/stats-reply.h +0 -51
- data/ruby/trema/stats-request.c +0 -715
- data/ruby/trema/stats-request.h +0 -40
- data/ruby/trema/strip-vlan-header.rb +0 -41
- data/ruby/trema/switch-daemon.rb +0 -90
- data/ruby/trema/switch-disconnected.c +0 -38
- data/ruby/trema/switch-disconnected.h +0 -36
- data/ruby/trema/switch-event.c +0 -648
- data/ruby/trema/switch-event.h +0 -27
- data/ruby/trema/switch-manager.rb +0 -119
- data/ruby/trema/switch.c +0 -197
- data/ruby/trema/switch.h +0 -40
- data/ruby/trema/switch.rb +0 -56
- data/ruby/trema/table-stats-reply.rb +0 -85
- data/ruby/trema/timers.rb +0 -95
- data/ruby/trema/trema-ruby-utils.c +0 -66
- data/ruby/trema/trema-ruby-utils.h +0 -42
- data/ruby/trema/trema.c +0 -126
- data/ruby/trema/tremashark.rb +0 -46
- data/ruby/trema/util.rb +0 -116
- data/ruby/trema/vendor-action.rb +0 -82
- data/ruby/trema/vendor-stats-reply.rb +0 -64
- data/ruby/trema/vendor.c +0 -230
- data/ruby/trema/vendor.h +0 -48
- data/ruby/trema/version.rb +0 -28
- data/spec/support/action.rb +0 -49
- data/spec/support/mandatory-option.rb +0 -53
- data/spec/support/matchers/constant.rb +0 -25
- data/spec/support/openflow-message.rb +0 -173
- data/spec/support/port-status.rb +0 -35
- data/spec/trema/app_spec.rb +0 -88
- data/spec/trema/barrier-reply_spec.rb +0 -43
- data/spec/trema/barrier-request_spec.rb +0 -92
- data/spec/trema/cli_spec.rb +0 -156
- data/spec/trema/default-logger_spec.rb +0 -46
- data/spec/trema/dsl/configuration_spec.rb +0 -120
- data/spec/trema/dsl/link_spec.rb +0 -50
- data/spec/trema/dsl/run_spec.rb +0 -72
- data/spec/trema/dsl/runner_spec.rb +0 -247
- data/spec/trema/dsl/switch_spec.rb +0 -69
- data/spec/trema/dsl/syntax_spec.rb +0 -110
- data/spec/trema/dsl/vhost_spec.rb +0 -144
- data/spec/trema/dsl/vswitch_spec.rb +0 -80
- data/spec/trema/echo-reply_spec.rb +0 -84
- data/spec/trema/echo-request_spec.rb +0 -128
- data/spec/trema/enqueue_spec.rb +0 -76
- data/spec/trema/error_spec.rb +0 -81
- data/spec/trema/executables_spec.rb +0 -54
- data/spec/trema/features-reply_spec.rb +0 -91
- data/spec/trema/features-request_spec.rb +0 -93
- data/spec/trema/flow-mod_spec.rb +0 -99
- data/spec/trema/flow-removed_spec.rb +0 -144
- data/spec/trema/get-config-reply_spec.rb +0 -43
- data/spec/trema/get-config-request_spec.rb +0 -92
- data/spec/trema/hardware-switch_spec.rb +0 -54
- data/spec/trema/hello_spec.rb +0 -63
- data/spec/trema/host_spec.rb +0 -191
- data/spec/trema/link_spec.rb +0 -62
- data/spec/trema/list-switches-reply_spec.rb +0 -46
- data/spec/trema/match_spec.rb +0 -111
- data/spec/trema/open-vswitch_spec.rb +0 -121
- data/spec/trema/openflow-error_spec.rb +0 -141
- data/spec/trema/packet-in_spec.rb +0 -717
- data/spec/trema/packet-out_spec.rb +0 -125
- data/spec/trema/packetin-filter_spec.rb +0 -39
- data/spec/trema/port-mod_spec.rb +0 -98
- data/spec/trema/port-status-add_spec.rb +0 -32
- data/spec/trema/port-status-delete_spec.rb +0 -32
- data/spec/trema/port-status-modify_spec.rb +0 -71
- data/spec/trema/port-status_spec.rb +0 -38
- data/spec/trema/port_spec.rb +0 -59
- data/spec/trema/process_spec.rb +0 -69
- data/spec/trema/queue-get-config-reply_spec.rb +0 -65
- data/spec/trema/queue-get-config-request_spec.rb +0 -67
- data/spec/trema/send-out-port_spec.rb +0 -106
- data/spec/trema/set-config_spec.rb +0 -78
- data/spec/trema/set-eth-addr_spec.rb +0 -62
- data/spec/trema/set-ip-addr_spec.rb +0 -81
- data/spec/trema/set-ip-tos_spec.rb +0 -70
- data/spec/trema/set-transport-dst-port_spec.rb +0 -65
- data/spec/trema/set-transport-src-port_spec.rb +0 -65
- data/spec/trema/set-vlan-priority_spec.rb +0 -65
- data/spec/trema/set-vlan-vid_spec.rb +0 -65
- data/spec/trema/shell/vhost_spec.rb +0 -58
- data/spec/trema/shell/vswitch_spec.rb +0 -87
- data/spec/trema/stats-reply_spec.rb +0 -363
- data/spec/trema/stats-request_spec.rb +0 -166
- data/spec/trema/strip-vlan-header_spec.rb +0 -44
- data/spec/trema/switch-daemon_spec.rb +0 -81
- data/spec/trema/switch-disconnected_spec.rb +0 -56
- data/spec/trema/switch-manager_spec.rb +0 -41
- data/spec/trema/tremashark_spec.rb +0 -39
- data/spec/trema/util_spec.rb +0 -88
- data/spec/trema/vendor-action_spec.rb +0 -75
- data/spec/trema/vendor_spec.rb +0 -76
- data/spec/trema_spec.rb +0 -94
- data/src/examples/cbench_switch/README +0 -21
- data/src/examples/cbench_switch/cbench-switch.rb +0 -38
- data/src/examples/cbench_switch/cbench_switch.c +0 -66
- data/src/examples/dumper/dumper.c +0 -362
- data/src/examples/dumper/dumper.conf +0 -7
- data/src/examples/dumper/dumper.rb +0 -195
- data/src/examples/hello_trema/.gitignore +0 -2
- data/src/examples/hello_trema/README.md +0 -2
- data/src/examples/hello_trema/hello-trema.rb +0 -30
- data/src/examples/hello_trema/hello_trema.c +0 -48
- data/src/examples/hello_trema/sample.conf +0 -1
- data/src/examples/learning_switch/README +0 -15
- data/src/examples/learning_switch/fdb.rb +0 -110
- data/src/examples/learning_switch/learning-switch.rb +0 -90
- data/src/examples/learning_switch/learning_switch.c +0 -217
- data/src/examples/learning_switch/learning_switch.conf +0 -18
- data/src/examples/list_switches/README +0 -19
- data/src/examples/list_switches/list-switches.rb +0 -43
- data/src/examples/list_switches/list_switches.c +0 -79
- data/src/examples/list_switches/list_switches.conf +0 -15
- data/src/examples/match_compare/match-compare.conf +0 -30
- data/src/examples/match_compare/match-compare.rb +0 -97
- data/src/examples/multi_learning_switch/README +0 -14
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +0 -94
- data/src/examples/multi_learning_switch/multi_learning_switch.c +0 -294
- data/src/examples/multi_learning_switch/multi_learning_switch.conf +0 -17
- data/src/examples/openflow_message/README +0 -11
- data/src/examples/openflow_message/echo.c +0 -80
- data/src/examples/openflow_message/echo.rb +0 -56
- data/src/examples/openflow_message/example.rb +0 -60
- data/src/examples/openflow_message/features-request.rb +0 -96
- data/src/examples/openflow_message/features_request.c +0 -167
- data/src/examples/openflow_message/hello.c +0 -68
- data/src/examples/openflow_message/hello.rb +0 -43
- data/src/examples/openflow_message/set-config.rb +0 -57
- data/src/examples/openflow_message/set_config.c +0 -68
- data/src/examples/openflow_message/vendor-action.rb +0 -43
- data/src/examples/openflow_message/vendor-stats-request.rb +0 -66
- data/src/examples/openflow_message/vendor_action.c +0 -103
- data/src/examples/openflow_switch/echo_switch.c +0 -89
- data/src/examples/openflow_switch/hello_switch.c +0 -85
- data/src/examples/packet_in/README +0 -15
- data/src/examples/packet_in/packet-in.rb +0 -37
- data/src/examples/packet_in/packet_in.c +0 -53
- data/src/examples/packet_in/packet_in.conf +0 -15
- data/src/examples/packetin_filter_config/README +0 -12
- data/src/examples/packetin_filter_config/add_filter.c +0 -71
- data/src/examples/packetin_filter_config/delete_filter.c +0 -63
- data/src/examples/packetin_filter_config/delete_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/dump_filter.c +0 -63
- data/src/examples/packetin_filter_config/dump_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/packetin_filter_config.c +0 -132
- data/src/examples/packetin_filter_config/packetin_filter_config.conf +0 -7
- data/src/examples/packetin_filter_config/utils.c +0 -100
- data/src/examples/packetin_filter_config/utils.h +0 -40
- data/src/examples/patch_panel/network.conf +0 -14
- data/src/examples/patch_panel/patch-panel.conf +0 -1
- data/src/examples/patch_panel/patch-panel.rb +0 -59
- data/src/examples/repeater_hub/README +0 -8
- data/src/examples/repeater_hub/repeater-hub.rb +0 -41
- data/src/examples/repeater_hub/repeater-hub_spec.rb +0 -154
- data/src/examples/repeater_hub/repeater_hub.c +0 -81
- data/src/examples/repeater_hub/repeater_hub.conf +0 -28
- data/src/examples/simple_router/README +0 -18
- data/src/examples/simple_router/arp-table.rb +0 -81
- data/src/examples/simple_router/interface.rb +0 -90
- data/src/examples/simple_router/routing-table.rb +0 -60
- data/src/examples/simple_router/simple-router.rb +0 -191
- data/src/examples/simple_router/simple_router.conf +0 -24
- data/src/examples/simple_router/simple_router_netns.conf +0 -15
- data/src/examples/simple_router/simple_router_network.conf +0 -6
- data/src/examples/switch_event_config/.gitignore +0 -6
- data/src/examples/switch_event_config/add_forward_entry.c +0 -227
- data/src/examples/switch_event_config/delete_forward_entry.c +0 -226
- data/src/examples/switch_event_config/dump_forward_entries.c +0 -190
- data/src/examples/switch_event_config/network.conf +0 -2
- data/src/examples/switch_event_config/set_forward_entries.c +0 -210
- data/src/examples/switch_info/README +0 -13
- data/src/examples/switch_info/switch-info.rb +0 -44
- data/src/examples/switch_info/switch_info.c +0 -78
- data/src/examples/switch_info/switch_info.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.rb +0 -56
- data/src/examples/switch_monitor/switch_monitor.c +0 -152
- data/src/examples/traffic_monitor/counter.c +0 -72
- data/src/examples/traffic_monitor/counter.h +0 -46
- data/src/examples/traffic_monitor/counter.rb +0 -44
- data/src/examples/traffic_monitor/fdb.c +0 -74
- data/src/examples/traffic_monitor/fdb.h +0 -48
- data/src/examples/traffic_monitor/fdb.rb +0 -42
- data/src/examples/traffic_monitor/traffic-monitor.rb +0 -98
- data/src/examples/traffic_monitor/traffic_monitor.c +0 -161
- data/src/examples/traffic_monitor/traffic_monitor.conf +0 -16
- data/src/examples/transparent_firewall/README.md +0 -61
- data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +0 -713
- data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +0 -3440
- data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +0 -11342
- data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +0 -1937
- data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +0 -7329
- data/src/examples/transparent_firewall/block-rfc1918.rb +0 -86
- data/src/examples/transparent_firewall/pass-delegated.rb +0 -178
- data/src/examples/transparent_firewall/regen_aggregated.sh +0 -53
- data/src/examples/transparent_firewall/stats-to-cidrs.rb +0 -59
- data/src/lib/arp.h +0 -64
- data/src/lib/bool.h +0 -47
- data/src/lib/buffer.c +0 -304
- data/src/lib/buffer.h +0 -54
- data/src/lib/byteorder.c +0 -571
- data/src/lib/byteorder.h +0 -108
- data/src/lib/checks.h +0 -40
- data/src/lib/chibach.c +0 -392
- data/src/lib/chibach.h +0 -69
- data/src/lib/chibach_private.c +0 -168
- data/src/lib/chibach_private.h +0 -50
- data/src/lib/daemon.c +0 -429
- data/src/lib/daemon.h +0 -40
- data/src/lib/doubly_linked_list.c +0 -284
- data/src/lib/doubly_linked_list.h +0 -86
- data/src/lib/ether.c +0 -47
- data/src/lib/ether.h +0 -92
- data/src/lib/etherip.h +0 -44
- data/src/lib/event_forward_interface.c +0 -788
- data/src/lib/event_forward_interface.h +0 -138
- data/src/lib/event_handler.c +0 -419
- data/src/lib/event_handler.h +0 -57
- data/src/lib/external_callback.c +0 -126
- data/src/lib/external_callback.h +0 -46
- data/src/lib/hash_table.c +0 -415
- data/src/lib/hash_table.h +0 -136
- data/src/lib/icmp.h +0 -72
- data/src/lib/igmp.h +0 -48
- data/src/lib/ipv4.h +0 -64
- data/src/lib/ipv6.h +0 -46
- data/src/lib/linked_list.c +0 -244
- data/src/lib/linked_list.h +0 -84
- data/src/lib/log.c +0 -636
- data/src/lib/log.h +0 -77
- data/src/lib/management_interface.c +0 -359
- data/src/lib/management_interface.h +0 -40
- data/src/lib/management_service_interface.c +0 -102
- data/src/lib/management_service_interface.h +0 -134
- data/src/lib/match.h +0 -82
- data/src/lib/match_table.c +0 -606
- data/src/lib/match_table.h +0 -49
- data/src/lib/message_queue.c +0 -143
- data/src/lib/message_queue.h +0 -59
- data/src/lib/messenger.c +0 -1821
- data/src/lib/messenger.h +0 -145
- data/src/lib/openflow_application_interface.c +0 -1800
- data/src/lib/openflow_application_interface.h +0 -359
- data/src/lib/openflow_message.c +0 -4240
- data/src/lib/openflow_message.h +0 -291
- data/src/lib/openflow_service_interface.h +0 -58
- data/src/lib/openflow_switch_interface.c +0 -1378
- data/src/lib/openflow_switch_interface.h +0 -262
- data/src/lib/packet_info.c +0 -336
- data/src/lib/packet_info.h +0 -233
- data/src/lib/packet_parser.c +0 -522
- data/src/lib/packetin_filter_interface.c +0 -292
- data/src/lib/packetin_filter_interface.h +0 -125
- data/src/lib/persistent_storage.c +0 -478
- data/src/lib/persistent_storage.h +0 -44
- data/src/lib/secure_channel.c +0 -496
- data/src/lib/secure_channel.h +0 -43
- data/src/lib/stat.c +0 -248
- data/src/lib/stat.h +0 -51
- data/src/lib/tcp.h +0 -62
- data/src/lib/timer.c +0 -349
- data/src/lib/timer.h +0 -51
- data/src/lib/trema.c +0 -776
- data/src/lib/trema.h +0 -80
- data/src/lib/trema.hpp +0 -49
- data/src/lib/trema_private.c +0 -175
- data/src/lib/trema_private.h +0 -64
- data/src/lib/trema_wrapper.c +0 -59
- data/src/lib/trema_wrapper.h +0 -66
- data/src/lib/udp.h +0 -41
- data/src/lib/utility.c +0 -625
- data/src/lib/utility.h +0 -84
- data/src/lib/wrapper.c +0 -121
- data/src/lib/wrapper.h +0 -76
- data/src/management/application.c +0 -222
- data/src/management/echo.c +0 -183
- data/src/management/set_logging_level.c +0 -151
- data/src/management/show_stats.c +0 -148
- data/src/management/trema_manager +0 -184
- data/src/packetin_filter/README +0 -17
- data/src/packetin_filter/packetin_filter.c +0 -575
- data/src/switch_manager/README +0 -20
- data/src/switch_manager/cookie_table.c +0 -290
- data/src/switch_manager/cookie_table.h +0 -70
- data/src/switch_manager/dpid_table.c +0 -108
- data/src/switch_manager/dpid_table.h +0 -43
- data/src/switch_manager/event_forward_entry_manipulation.c +0 -120
- data/src/switch_manager/event_forward_entry_manipulation.h +0 -31
- data/src/switch_manager/ofpmsg_recv.c +0 -497
- data/src/switch_manager/ofpmsg_recv.h +0 -39
- data/src/switch_manager/ofpmsg_send.c +0 -274
- data/src/switch_manager/ofpmsg_send.h +0 -51
- data/src/switch_manager/secure_channel_listener.c +0 -296
- data/src/switch_manager/secure_channel_listener.h +0 -40
- data/src/switch_manager/secure_channel_receiver.c +0 -129
- data/src/switch_manager/secure_channel_receiver.h +0 -40
- data/src/switch_manager/secure_channel_sender.c +0 -131
- data/src/switch_manager/secure_channel_sender.h +0 -41
- data/src/switch_manager/service_interface.c +0 -180
- data/src/switch_manager/service_interface.h +0 -44
- data/src/switch_manager/switch.c +0 -988
- data/src/switch_manager/switch.h +0 -50
- data/src/switch_manager/switch_manager.c +0 -643
- data/src/switch_manager/switch_manager.h +0 -65
- data/src/switch_manager/switch_option.c +0 -30
- data/src/switch_manager/switch_option.h +0 -41
- data/src/switch_manager/switchinfo.h +0 -81
- data/src/switch_manager/xid_table.c +0 -182
- data/src/switch_manager/xid_table.h +0 -53
- data/src/tremashark/README +0 -79
- data/src/tremashark/packet_capture.c +0 -358
- data/src/tremashark/pcap_private.h +0 -45
- data/src/tremashark/pcap_queue.c +0 -195
- data/src/tremashark/pcap_queue.h +0 -56
- data/src/tremashark/plugin/.gitignore +0 -6
- data/src/tremashark/plugin/packet-trema/.gitignore +0 -5
- data/src/tremashark/plugin/packet-trema/Makefile +0 -77
- data/src/tremashark/plugin/packet-trema/Makefile.am +0 -110
- data/src/tremashark/plugin/packet-trema/Makefile.common +0 -29
- data/src/tremashark/plugin/packet-trema/moduleinfo.h +0 -39
- data/src/tremashark/plugin/packet-trema/packet-trema.c +0 -1671
- data/src/tremashark/plugin/packet-trema/plugin.c +0 -31
- data/src/tremashark/plugin/user_dlts +0 -2
- data/src/tremashark/queue.c +0 -167
- data/src/tremashark/queue.h +0 -58
- data/src/tremashark/stdin_relay.c +0 -257
- data/src/tremashark/syslog_relay.c +0 -247
- data/src/tremashark/tremashark.c +0 -554
- data/trema +0 -11
- data/trema-config +0 -11
- data/unittests/buffer_stubs.c +0 -72
- data/unittests/cmockery_trema.c +0 -121
- data/unittests/cmockery_trema.h +0 -95
- data/unittests/lib/buffer_test.c +0 -368
- data/unittests/lib/byteorder_test.c +0 -1798
- data/unittests/lib/daemon_test.c +0 -804
- data/unittests/lib/doubly_linked_list_test.c +0 -348
- data/unittests/lib/ether_test.c +0 -125
- data/unittests/lib/event_forward_interface_test.c +0 -1676
- data/unittests/lib/external_callback_test.c +0 -282
- data/unittests/lib/hash_table_test.c +0 -278
- data/unittests/lib/linked_list_test.c +0 -434
- data/unittests/lib/log_test.c +0 -672
- data/unittests/lib/management_interface_test.c +0 -238
- data/unittests/lib/management_service_interface_test.c +0 -317
- data/unittests/lib/match_table_test.c +0 -1507
- data/unittests/lib/message_queue_test.c +0 -381
- data/unittests/lib/messenger_test.c +0 -623
- data/unittests/lib/openflow_application_interface_test.c +0 -3713
- data/unittests/lib/openflow_message_test.c +0 -8047
- data/unittests/lib/packet_info_test.c +0 -558
- data/unittests/lib/packet_parser_test.c +0 -784
- data/unittests/lib/packetin_filter_interface_test.c +0 -721
- data/unittests/lib/persistent_storage_test.c +0 -800
- data/unittests/lib/stat_test.c +0 -433
- data/unittests/lib/test_packets/arp_rep.cap +0 -0
- data/unittests/lib/test_packets/arp_req.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
- data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
- data/unittests/lib/test_packets/ipx.cap +0 -0
- data/unittests/lib/test_packets/lldp.cap +0 -0
- data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
- data/unittests/lib/test_packets/rarp_req.cap +0 -0
- data/unittests/lib/test_packets/tcp.cap +0 -0
- data/unittests/lib/test_packets/tcp_syn.cap +0 -0
- data/unittests/lib/test_packets/udp.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
- data/unittests/lib/timer_test.c +0 -246
- data/unittests/lib/trema_private_test.c +0 -321
- data/unittests/lib/trema_test.c +0 -1030
- data/unittests/lib/utility_test.c +0 -711
- data/unittests/lib/wrapper_test.c +0 -228
- data/unittests/packetin_filter/packetin_filter_test.c +0 -476
- data/unittests/switch_manager/switch_manager_test.c +0 -1183
- data/unittests/wrapper_stubs.c +0 -37
- data/vendor/.gitignore +0 -6
- data/vendor/README.md +0 -29
- data/vendor/cmockery-20110428.tar.gz +0 -0
- data/vendor/oflops-0.03.trema1.tar.gz +0 -0
- data/vendor/oflops_no_snmp+1.0.0.diff +0 -340
- data/vendor/openflow-1.0.0.tar.gz +0 -0
- data/vendor/openflow.git.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2.trema1.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2_librt-check.diff +0 -21
- data/vendor/packet-openflow.diff +0 -13
- data/vendor/ruby-ifconfig-1.2/COPYING +0 -340
- data/vendor/ruby-ifconfig-1.2/Changelog +0 -16
- data/vendor/ruby-ifconfig-1.2/INSTALL +0 -239
- data/vendor/ruby-ifconfig-1.2/README +0 -38
- data/vendor/ruby-ifconfig-1.2/Rakefile +0 -14
- data/vendor/ruby-ifconfig-1.2/TODO +0 -8
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +0 -14
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +0 -24
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +0 -60
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +0 -20
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +0 -36
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +0 -71
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +0 -72
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +0 -69
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +0 -3
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +0 -84
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +0 -130
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +0 -43
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +0 -112
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +0 -55
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +0 -38
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +0 -77
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/setup.rb +0 -1306
- data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +0 -31
- data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +0 -44
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* OpenFlow Switch Manager
|
|
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 DPID_TABLE_H
|
|
22
|
-
#define DPID_TABLE_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include "trema.h"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
void init_dpid_table( void );
|
|
29
|
-
void finalize_dpid_table( void );
|
|
30
|
-
void insert_dpid_entry( uint64_t *dpid );
|
|
31
|
-
void delete_dpid_entry( uint64_t *dpid );
|
|
32
|
-
buffer *get_switches( void );
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
#endif // DPID_TABLE_H
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/*
|
|
39
|
-
* Local variables:
|
|
40
|
-
* c-basic-offset: 2
|
|
41
|
-
* indent-tabs-mode: nil
|
|
42
|
-
* End:
|
|
43
|
-
*/
|
|
@@ -1,120 +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 "trema.h"
|
|
20
|
-
#include "event_forward_entry_manipulation.h"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
void
|
|
24
|
-
management_event_forward_entry_add( list_element **service_list,
|
|
25
|
-
const event_forward_operation_request *request, size_t request_len ) {
|
|
26
|
-
if ( request->n_services == 0 ) return;
|
|
27
|
-
if ( request->n_services > 1 ) {
|
|
28
|
-
warn( "Only 1 service name expected for EVENT_FWD_ENTRY_ADD. Ignoring others." );
|
|
29
|
-
}
|
|
30
|
-
const size_t service_name_len = request_len - offsetof( event_forward_operation_request, service_list );
|
|
31
|
-
if ( service_name_len == 0 ) return;
|
|
32
|
-
|
|
33
|
-
char *service_name = xcalloc( service_name_len + 1, sizeof( char ) );
|
|
34
|
-
strncpy( service_name, request->service_list, service_name_len );
|
|
35
|
-
|
|
36
|
-
const char *match = find_list_custom( *service_list, string_equal, service_name );
|
|
37
|
-
if ( match == NULL ) {
|
|
38
|
-
info( "Adding '%s' to event filter.", service_name );
|
|
39
|
-
append_to_tail( service_list, service_name );
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
// already there
|
|
43
|
-
xfree( service_name );
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
void
|
|
49
|
-
management_event_forward_entry_delete( list_element **service_list,
|
|
50
|
-
const event_forward_operation_request *request, size_t request_len ) {
|
|
51
|
-
if ( request->n_services == 0 ) return;
|
|
52
|
-
if ( request->n_services > 1 ) {
|
|
53
|
-
warn( "Only 1 service name expected for EVENT_FWD_ENTRY_DELETE. Ignoring others." );
|
|
54
|
-
}
|
|
55
|
-
const size_t service_name_len = request_len - offsetof( event_forward_operation_request, service_list );
|
|
56
|
-
if ( service_name_len == 0 ) return;
|
|
57
|
-
|
|
58
|
-
char *service_name = xcalloc( service_name_len + 1, sizeof( char ) );
|
|
59
|
-
strncpy( service_name, request->service_list, service_name_len );
|
|
60
|
-
|
|
61
|
-
const char *match = find_list_custom( *service_list, string_equal, service_name );
|
|
62
|
-
if ( match == NULL ) {
|
|
63
|
-
// didn't exist
|
|
64
|
-
xfree( service_name );
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
info( "Deleting '%s' from event filter.", service_name );
|
|
68
|
-
bool success = delete_element( service_list, match );
|
|
69
|
-
assert( success );
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
void
|
|
75
|
-
management_event_forward_entries_set( list_element **service_list,
|
|
76
|
-
const event_forward_operation_request *request, size_t request_len ) {
|
|
77
|
-
const size_t service_name_list_len = request_len - offsetof( event_forward_operation_request, service_list );
|
|
78
|
-
|
|
79
|
-
const char **service_name_list = xcalloc( request->n_services, sizeof( char * ) );
|
|
80
|
-
|
|
81
|
-
// split null terminated string list.
|
|
82
|
-
unsigned int n_services = 0;
|
|
83
|
-
const char *name_begin = request->service_list;
|
|
84
|
-
for ( size_t i = 0 ; i < service_name_list_len ; ++i ) {
|
|
85
|
-
if ( request->service_list[ i ] == '\0' ) {
|
|
86
|
-
service_name_list[ n_services++ ] = name_begin;
|
|
87
|
-
if ( n_services == request->n_services ) {
|
|
88
|
-
if ( i + 1 != service_name_list_len ) {
|
|
89
|
-
warn( "Expecting %d name(s) for EVENT_FWD_ENTRY_SET, but more exist. Ignoring.", request->n_services );
|
|
90
|
-
}
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
name_begin = &request->service_list[ i + 1 ];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if ( n_services != request->n_services ) {
|
|
97
|
-
warn( "Expected %d name(s) for EVENT_FWD_ENTRY_SET, but found %d.", request->n_services, n_services );
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
info( "Resetting event filter(s)." );
|
|
101
|
-
// clear current list
|
|
102
|
-
iterate_list( *service_list, xfree_data, NULL );
|
|
103
|
-
delete_list( *service_list );
|
|
104
|
-
create_list( service_list );
|
|
105
|
-
|
|
106
|
-
// set new list
|
|
107
|
-
for ( unsigned int i = 0 ; i < n_services ; ++i ) {
|
|
108
|
-
const size_t service_name_len = strlen( service_name_list[ i ] );
|
|
109
|
-
if ( service_name_len == 0 ) {
|
|
110
|
-
warn( "Ignoring 0 length service name in EVENT_FWD_ENTRY_SET" );
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
info( " Adding '%s' to event filter.", service_name_list[ i ] );
|
|
114
|
-
append_to_tail( service_list, xstrdup( service_name_list[ i ] ) );
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
xfree( service_name_list );
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
@@ -1,31 +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
|
-
#ifndef EVENT_FORWARD_ENTRY_MANIPULATION_H_
|
|
19
|
-
#define EVENT_FORWARD_ENTRY_MANIPULATION_H_
|
|
20
|
-
|
|
21
|
-
#include "event_forward_interface.h"
|
|
22
|
-
|
|
23
|
-
void management_event_forward_entry_add( list_element** service_list,
|
|
24
|
-
const event_forward_operation_request* request, size_t request_len );
|
|
25
|
-
void management_event_forward_entry_delete( list_element** service_list,
|
|
26
|
-
const event_forward_operation_request* request, size_t request_len );
|
|
27
|
-
void management_event_forward_entries_set( list_element** service_list,
|
|
28
|
-
const event_forward_operation_request* request, size_t request_len );
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
#endif /* EVENT_FORWARD_ENTRY_MANIPULATION_H_ */
|
|
@@ -1,497 +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 <assert.h>
|
|
20
|
-
#include <inttypes.h>
|
|
21
|
-
#include <openflow.h>
|
|
22
|
-
#include "openflow_message.h"
|
|
23
|
-
#include "cookie_table.h"
|
|
24
|
-
#include "ofpmsg_recv.h"
|
|
25
|
-
#include "ofpmsg_send.h"
|
|
26
|
-
#include "service_interface.h"
|
|
27
|
-
#include "switch.h"
|
|
28
|
-
#include "xid_table.h"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
static int ofpmsg_recv_hello( struct switch_info *sw_info, buffer *buf );
|
|
32
|
-
static int ofpmsg_recv_error( struct switch_info *sw_info, buffer *buf );
|
|
33
|
-
static int ofpmsg_recv_echorequest( struct switch_info *sw_info, buffer *buf );
|
|
34
|
-
static int ofpmsg_recv_echoreply( struct switch_info *sw_info, buffer *buf );
|
|
35
|
-
static int ofpmsg_recv_vendor( struct switch_info *sw_info, buffer *buf );
|
|
36
|
-
static int ofpmsg_recv_featuresreply( struct switch_info *sw_info, buffer *buf );
|
|
37
|
-
static int ofpmsg_recv_getconfigreply( struct switch_info *sw_info, buffer *buf );
|
|
38
|
-
static int ofpmsg_recv_packetin( struct switch_info *sw_info, buffer *buf );
|
|
39
|
-
static int ofpmsg_recv_flowremoved( struct switch_info *sw_info, buffer *buf );
|
|
40
|
-
static int ofpmsg_recv_portstatus( struct switch_info *sw_info, buffer *buf );
|
|
41
|
-
static int ofpmsg_recv_statsreply( struct switch_info *sw_info, buffer *buf );
|
|
42
|
-
static int ofpmsg_recv_barrierreply( struct switch_info *sw_info, buffer *buf );
|
|
43
|
-
static int ofpmsg_recv_queue_getconfigreply( struct switch_info *sw_info, buffer *buf );
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
#define ofpmsg_debug( format, args... ) \
|
|
47
|
-
do { \
|
|
48
|
-
debug( format " state:%d, dpid:%#" PRIx64 ", fd:%d.", \
|
|
49
|
-
## args, sw_info->state, sw_info->datapath_id, \
|
|
50
|
-
sw_info->secure_channel_fd ); \
|
|
51
|
-
} \
|
|
52
|
-
while ( 0 )
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
static int
|
|
56
|
-
send_transaction_reply( struct switch_info *sw_info, buffer *buf ) {
|
|
57
|
-
struct ofp_header *header;
|
|
58
|
-
uint32_t xid;
|
|
59
|
-
xid_entry_t *xid_entry;
|
|
60
|
-
|
|
61
|
-
header = buf->data;
|
|
62
|
-
xid = ntohl( header->xid );
|
|
63
|
-
|
|
64
|
-
xid_entry = lookup_xid_entry( xid );
|
|
65
|
-
if ( xid_entry == NULL ) {
|
|
66
|
-
free_buffer( buf );
|
|
67
|
-
return -1;
|
|
68
|
-
}
|
|
69
|
-
header->xid = htonl( xid_entry->original_xid );
|
|
70
|
-
service_send_to_reply( xid_entry->service_name, MESSENGER_OPENFLOW_MESSAGE,
|
|
71
|
-
&sw_info->datapath_id, buf );
|
|
72
|
-
delete_xid_entry( xid_entry );
|
|
73
|
-
free_buffer( buf );
|
|
74
|
-
|
|
75
|
-
return 0;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
int
|
|
80
|
-
ofpmsg_recv_hello( struct switch_info *sw_info, buffer *buf ) {
|
|
81
|
-
int ret;
|
|
82
|
-
|
|
83
|
-
ofpmsg_debug( "Receive 'hello' from a switch." );
|
|
84
|
-
|
|
85
|
-
free_buffer( buf );
|
|
86
|
-
|
|
87
|
-
ret = switch_event_recv_hello( sw_info );
|
|
88
|
-
if ( ret < 0 ) {
|
|
89
|
-
return ret;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return ret;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
int
|
|
97
|
-
ofpmsg_recv_error( struct switch_info *sw_info, buffer *buf ) {
|
|
98
|
-
int ret;
|
|
99
|
-
struct ofp_error_msg *error_msg;
|
|
100
|
-
|
|
101
|
-
ofpmsg_debug( "Receive 'error' from a switch." );
|
|
102
|
-
|
|
103
|
-
error_msg = buf->data;
|
|
104
|
-
|
|
105
|
-
uint16_t type = ntohs( error_msg->type );
|
|
106
|
-
uint16_t code = ntohs( error_msg->code );
|
|
107
|
-
|
|
108
|
-
notice( "Receive 'error' from a switch. xid:%#x, type:%d, code:%d.",
|
|
109
|
-
ntohl( error_msg->header.xid ), type, code );
|
|
110
|
-
|
|
111
|
-
ret = switch_event_recv_error( sw_info );
|
|
112
|
-
if ( ret < 0 ) {
|
|
113
|
-
free_buffer( buf );
|
|
114
|
-
return ret;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if ( type == OFPET_FLOW_MOD_FAILED ) {
|
|
118
|
-
size_t length = ntohs( error_msg->header.length ) - offsetof( struct ofp_error_msg, data );
|
|
119
|
-
if ( length >= offsetof( struct ofp_flow_mod, command ) ) {
|
|
120
|
-
struct ofp_flow_mod *flow_mod = ( struct ofp_flow_mod * ) error_msg->data;
|
|
121
|
-
uint32_t xid = ntohl( flow_mod->header.xid );
|
|
122
|
-
xid_entry_t *xid_entry = lookup_xid_entry( xid );
|
|
123
|
-
if ( xid_entry != NULL ) {
|
|
124
|
-
flow_mod->header.xid = htonl( xid_entry->original_xid );
|
|
125
|
-
}
|
|
126
|
-
uint64_t cookie = ntohll( flow_mod->cookie );
|
|
127
|
-
if ( cookie == RESERVED_COOKIE ) {
|
|
128
|
-
free_buffer( buf );
|
|
129
|
-
return 0;
|
|
130
|
-
}
|
|
131
|
-
if ( sw_info->cookie_translation ) {
|
|
132
|
-
cookie_entry_t *entry = lookup_cookie_entry_by_cookie( &cookie );
|
|
133
|
-
if ( entry != NULL ) {
|
|
134
|
-
flow_mod->cookie = htonll( entry->application.cookie );
|
|
135
|
-
if ( length >= offsetof( struct ofp_flow_mod, actions ) ) {
|
|
136
|
-
flow_mod->flags = htons( entry->application.flags );
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if ( length >= offsetof( struct ofp_flow_mod, idle_timeout ) ) {
|
|
141
|
-
uint16_t command = ntohs( flow_mod->command );
|
|
142
|
-
switch ( command ) {
|
|
143
|
-
case OFPFC_ADD:
|
|
144
|
-
{
|
|
145
|
-
if ( entry != NULL ) {
|
|
146
|
-
delete_cookie_entry( entry );
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
error( "No cookie entry found ( cookie = %#" PRIx64 " ).", cookie );
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
break;
|
|
153
|
-
|
|
154
|
-
case OFPFC_MODIFY:
|
|
155
|
-
case OFPFC_MODIFY_STRICT:
|
|
156
|
-
case OFPFC_DELETE:
|
|
157
|
-
case OFPFC_DELETE_STRICT:
|
|
158
|
-
break;
|
|
159
|
-
|
|
160
|
-
default:
|
|
161
|
-
error( "Undefined flow_mod command ( command = %#x ).", command );
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
send_transaction_reply( sw_info, buf );
|
|
169
|
-
|
|
170
|
-
return 0;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
int
|
|
175
|
-
ofpmsg_recv_echorequest( struct switch_info *sw_info, buffer *buf ) {
|
|
176
|
-
int ret;
|
|
177
|
-
struct ofp_header *ofp_header;
|
|
178
|
-
|
|
179
|
-
ofpmsg_debug( "Receive 'echo request' from a switch." );
|
|
180
|
-
|
|
181
|
-
ofp_header = buf->data;
|
|
182
|
-
remove_front_buffer( buf, sizeof( struct ofp_header ) );
|
|
183
|
-
ret = ofpmsg_send_echoreply( sw_info, ntohl( ofp_header->xid ), buf );
|
|
184
|
-
|
|
185
|
-
return ret;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
int
|
|
190
|
-
ofpmsg_recv_echoreply( struct switch_info *sw_info, buffer *buf ) {
|
|
191
|
-
ofpmsg_debug( "Receive 'echo reply' from a switch." );
|
|
192
|
-
|
|
193
|
-
int ret = switch_event_recv_echoreply( sw_info, buf );
|
|
194
|
-
if ( ret < 0 ) {
|
|
195
|
-
free_buffer( buf );
|
|
196
|
-
return ret;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
send_transaction_reply( sw_info, buf );
|
|
200
|
-
|
|
201
|
-
return 0;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
int
|
|
206
|
-
ofpmsg_recv_vendor( struct switch_info *sw_info, buffer *buf ) {
|
|
207
|
-
ofpmsg_debug( "Receive 'vendor' from a switch." );
|
|
208
|
-
|
|
209
|
-
service_send_to_application( sw_info->vendor_service_name_list,
|
|
210
|
-
MESSENGER_OPENFLOW_MESSAGE,
|
|
211
|
-
&sw_info->datapath_id, buf );
|
|
212
|
-
free_buffer( buf );
|
|
213
|
-
|
|
214
|
-
return 0;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
int
|
|
219
|
-
ofpmsg_recv_featuresreply( struct switch_info *sw_info, buffer *buf ) {
|
|
220
|
-
int ret;
|
|
221
|
-
struct ofp_switch_features *feat_rep;
|
|
222
|
-
uint64_t datapath_id;
|
|
223
|
-
|
|
224
|
-
ofpmsg_debug( "Receive 'features reply' from a switch." );
|
|
225
|
-
|
|
226
|
-
feat_rep = buf->data;
|
|
227
|
-
|
|
228
|
-
datapath_id = ntohll( feat_rep->datapath_id );
|
|
229
|
-
|
|
230
|
-
ret = switch_event_recv_featuresreply( sw_info, &datapath_id );
|
|
231
|
-
if ( ret < 0 ) {
|
|
232
|
-
free_buffer( buf );
|
|
233
|
-
return ret;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
send_transaction_reply( sw_info, buf );
|
|
237
|
-
|
|
238
|
-
return 0;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
int
|
|
243
|
-
ofpmsg_recv_getconfigreply( struct switch_info *sw_info, buffer *buf ) {
|
|
244
|
-
ofpmsg_debug( "Receive 'get config reply' from a switch." );
|
|
245
|
-
|
|
246
|
-
send_transaction_reply( sw_info, buf );
|
|
247
|
-
|
|
248
|
-
return 0;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
int
|
|
253
|
-
ofpmsg_recv_packetin( struct switch_info *sw_info, buffer *buf ) {
|
|
254
|
-
ofpmsg_debug( "Receive 'packet in' from a switch." );
|
|
255
|
-
|
|
256
|
-
service_send_to_application( sw_info->packetin_service_name_list,
|
|
257
|
-
MESSENGER_OPENFLOW_MESSAGE,
|
|
258
|
-
&sw_info->datapath_id, buf );
|
|
259
|
-
free_buffer( buf );
|
|
260
|
-
|
|
261
|
-
return 0;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
int
|
|
266
|
-
ofpmsg_recv_flowremoved( struct switch_info *sw_info, buffer *buf ) {
|
|
267
|
-
struct ofp_flow_removed *flow_removed;
|
|
268
|
-
uint64_t cookie;
|
|
269
|
-
cookie_entry_t *entry;
|
|
270
|
-
|
|
271
|
-
ofpmsg_debug( "Receive 'flow removed' from a switch." );
|
|
272
|
-
|
|
273
|
-
flow_removed = buf->data;
|
|
274
|
-
|
|
275
|
-
cookie = ntohll( flow_removed->cookie );
|
|
276
|
-
if ( cookie == RESERVED_COOKIE ) {
|
|
277
|
-
free_buffer( buf );
|
|
278
|
-
return 0;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
if ( !sw_info->cookie_translation ) {
|
|
282
|
-
service_send_to_application( sw_info->state_service_name_list, MESSENGER_OPENFLOW_MESSAGE,
|
|
283
|
-
&sw_info->datapath_id, buf );
|
|
284
|
-
free_buffer( buf );
|
|
285
|
-
return 0;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
entry = lookup_cookie_entry_by_cookie( &cookie );
|
|
289
|
-
if ( entry == NULL ) {
|
|
290
|
-
error( "No cookie entry found ( cookie = %#" PRIx64 " ).", cookie );
|
|
291
|
-
free_buffer( buf );
|
|
292
|
-
return 0;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
debug( "Cookie found ( cookie = %#" PRIx64 ", application = [ cookie = %#" PRIx64
|
|
296
|
-
", service name = %s, flags = %#x ], reference_count = %d, expire_at = %" PRIu64 " ).",
|
|
297
|
-
cookie, entry->application.cookie, entry->application.service_name, entry->application.flags,
|
|
298
|
-
entry->reference_count, ( int64_t ) entry->expire_at );
|
|
299
|
-
|
|
300
|
-
if ( entry->application.flags & OFPFF_SEND_FLOW_REM ) {
|
|
301
|
-
flow_removed->cookie = htonll( entry->application.cookie );
|
|
302
|
-
|
|
303
|
-
service_send_to_reply( entry->application.service_name, MESSENGER_OPENFLOW_MESSAGE,
|
|
304
|
-
&sw_info->datapath_id, buf );
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
delete_cookie_entry( entry );
|
|
308
|
-
free_buffer( buf );
|
|
309
|
-
|
|
310
|
-
return 0;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
int
|
|
315
|
-
ofpmsg_recv_portstatus( struct switch_info *sw_info, buffer *buf ) {
|
|
316
|
-
ofpmsg_debug( "Receive 'port status' from a switch." );
|
|
317
|
-
|
|
318
|
-
service_send_to_application( sw_info->portstatus_service_name_list,
|
|
319
|
-
MESSENGER_OPENFLOW_MESSAGE,
|
|
320
|
-
&sw_info->datapath_id, buf );
|
|
321
|
-
free_buffer( buf );
|
|
322
|
-
|
|
323
|
-
return 0;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
int
|
|
328
|
-
ofpmsg_recv_statsreply( struct switch_info *sw_info, buffer *buf ) {
|
|
329
|
-
struct ofp_stats_reply *stats_reply = buf->data;
|
|
330
|
-
uint16_t type = ntohs( stats_reply->type );
|
|
331
|
-
|
|
332
|
-
ofpmsg_debug( "Receive 'statistics reply' from a switch." );
|
|
333
|
-
|
|
334
|
-
if ( type == OFPST_FLOW && sw_info->cookie_translation ) {
|
|
335
|
-
size_t body_offset = offsetof( struct ofp_stats_reply, body );
|
|
336
|
-
int body_length = ntohs( stats_reply->header.length ) - ( int ) body_offset;
|
|
337
|
-
struct ofp_flow_stats *flow_stats = ( void * ) ( ( char * ) stats_reply + body_offset );
|
|
338
|
-
while ( body_length > 0 ) {
|
|
339
|
-
uint64_t cookie = ntohll( flow_stats->cookie );
|
|
340
|
-
cookie_entry_t *entry = lookup_cookie_entry_by_cookie( &cookie );
|
|
341
|
-
if ( entry != NULL ) {
|
|
342
|
-
debug( "Cookie entry found ( cookie = %#" PRIx64 ", application = [ cookie = %#" PRIx64 ", service name = %s ] ).",
|
|
343
|
-
cookie, entry->application.cookie, entry->application.service_name );
|
|
344
|
-
flow_stats->cookie = htonll( entry->application.cookie );
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
warn( "No cookie entry found ( cookie = %#" PRIx64 " ).", cookie );
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
body_length = body_length - ntohs( flow_stats->length );
|
|
351
|
-
flow_stats = ( void * ) ( ( char * ) flow_stats + ntohs( flow_stats->length ) );
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// since we may receive multiple replies, we cannot call send_transaction_reply().
|
|
356
|
-
uint32_t xid = ntohl( stats_reply->header.xid );
|
|
357
|
-
xid_entry_t *xid_entry = lookup_xid_entry( xid );
|
|
358
|
-
if ( xid_entry == NULL ) {
|
|
359
|
-
error( "No transaction id entry found ( transaction_id = %#" PRIx32 " ).", xid );
|
|
360
|
-
free_buffer( buf );
|
|
361
|
-
return -1;
|
|
362
|
-
}
|
|
363
|
-
stats_reply->header.xid = htonl( xid_entry->original_xid );
|
|
364
|
-
service_send_to_reply( xid_entry->service_name, MESSENGER_OPENFLOW_MESSAGE,
|
|
365
|
-
&sw_info->datapath_id, buf );
|
|
366
|
-
|
|
367
|
-
if ( ( ntohs( stats_reply->flags ) & OFPSF_REPLY_MORE ) == 0 ) {
|
|
368
|
-
delete_xid_entry( xid_entry );
|
|
369
|
-
}
|
|
370
|
-
free_buffer( buf );
|
|
371
|
-
|
|
372
|
-
return 0;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
int
|
|
377
|
-
ofpmsg_recv_barrierreply( struct switch_info *sw_info, buffer *buf ) {
|
|
378
|
-
ofpmsg_debug( "Receive 'barrier reply' from a switch." );
|
|
379
|
-
|
|
380
|
-
send_transaction_reply( sw_info, buf );
|
|
381
|
-
|
|
382
|
-
return 0;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
int
|
|
387
|
-
ofpmsg_recv_queue_getconfigreply( struct switch_info *sw_info, buffer *buf ) {
|
|
388
|
-
ofpmsg_debug( "Receive 'queue get config reply' from a switch." );
|
|
389
|
-
|
|
390
|
-
send_transaction_reply( sw_info, buf );
|
|
391
|
-
|
|
392
|
-
return 0;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
int
|
|
397
|
-
ofpmsg_recv( struct switch_info *sw_info, buffer *buf ) {
|
|
398
|
-
int ret;
|
|
399
|
-
struct ofp_header *header;
|
|
400
|
-
uint16_t error_type, error_code;
|
|
401
|
-
|
|
402
|
-
ofpmsg_debug( "Receive a message from a switch." );
|
|
403
|
-
|
|
404
|
-
header = buf->data;
|
|
405
|
-
ret = validate_openflow_message( buf );
|
|
406
|
-
if ( ret != 0 ) {
|
|
407
|
-
notice( "Invalid openflow message. type:%d, errno:%d", header->type, ret );
|
|
408
|
-
|
|
409
|
-
if ( header->type != OFPT_ERROR ) {
|
|
410
|
-
// Do not send an error of error
|
|
411
|
-
error_type = OFPET_BAD_REQUEST;
|
|
412
|
-
error_code = OFPBRC_BAD_TYPE;
|
|
413
|
-
get_error_type_and_code( header->type, ret, &error_type, &error_code );
|
|
414
|
-
debug( "Validation error. type %u, errno %d, error type %u, error code %u",
|
|
415
|
-
header->type, ret, error_type, error_code );
|
|
416
|
-
|
|
417
|
-
ofpmsg_send_error_msg( sw_info, error_type, error_code, buf );
|
|
418
|
-
free_buffer( buf );
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
return -1;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
switch ( header->type ) {
|
|
425
|
-
// Immutable messages.
|
|
426
|
-
case OFPT_HELLO:
|
|
427
|
-
ret = ofpmsg_recv_hello( sw_info, buf );
|
|
428
|
-
break;
|
|
429
|
-
|
|
430
|
-
case OFPT_ERROR:
|
|
431
|
-
ret = ofpmsg_recv_error( sw_info, buf );
|
|
432
|
-
break;
|
|
433
|
-
|
|
434
|
-
case OFPT_ECHO_REQUEST:
|
|
435
|
-
ret = ofpmsg_recv_echorequest( sw_info, buf );
|
|
436
|
-
break;
|
|
437
|
-
|
|
438
|
-
case OFPT_ECHO_REPLY:
|
|
439
|
-
ret = ofpmsg_recv_echoreply( sw_info, buf );
|
|
440
|
-
break;
|
|
441
|
-
|
|
442
|
-
case OFPT_VENDOR:
|
|
443
|
-
ret = ofpmsg_recv_vendor( sw_info, buf );
|
|
444
|
-
break;
|
|
445
|
-
|
|
446
|
-
// Switch configuration messages.
|
|
447
|
-
case OFPT_FEATURES_REPLY:
|
|
448
|
-
ret = ofpmsg_recv_featuresreply( sw_info, buf );
|
|
449
|
-
break;
|
|
450
|
-
|
|
451
|
-
case OFPT_GET_CONFIG_REPLY:
|
|
452
|
-
ret = ofpmsg_recv_getconfigreply( sw_info, buf );
|
|
453
|
-
break;
|
|
454
|
-
|
|
455
|
-
// Asynchronous messages.
|
|
456
|
-
case OFPT_PACKET_IN:
|
|
457
|
-
ret = ofpmsg_recv_packetin( sw_info, buf );
|
|
458
|
-
break;
|
|
459
|
-
|
|
460
|
-
case OFPT_FLOW_REMOVED:
|
|
461
|
-
ret = ofpmsg_recv_flowremoved( sw_info, buf );
|
|
462
|
-
break;
|
|
463
|
-
|
|
464
|
-
case OFPT_PORT_STATUS:
|
|
465
|
-
ret = ofpmsg_recv_portstatus( sw_info, buf );
|
|
466
|
-
break;
|
|
467
|
-
|
|
468
|
-
// Statistics messages.
|
|
469
|
-
case OFPT_STATS_REPLY:
|
|
470
|
-
ret = ofpmsg_recv_statsreply( sw_info, buf );
|
|
471
|
-
break;
|
|
472
|
-
|
|
473
|
-
// Barrier messages.
|
|
474
|
-
case OFPT_BARRIER_REPLY:
|
|
475
|
-
ret = ofpmsg_recv_barrierreply( sw_info, buf );
|
|
476
|
-
break;
|
|
477
|
-
|
|
478
|
-
// Queue Configuration messages.
|
|
479
|
-
case OFPT_QUEUE_GET_CONFIG_REPLY:
|
|
480
|
-
ret = ofpmsg_recv_queue_getconfigreply( sw_info, buf );
|
|
481
|
-
break;
|
|
482
|
-
|
|
483
|
-
default:
|
|
484
|
-
assert( 0 );
|
|
485
|
-
break;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
return ret;
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
/*
|
|
493
|
-
* Local variables:
|
|
494
|
-
* c-basic-offset: 2
|
|
495
|
-
* indent-tabs-mode: nil
|
|
496
|
-
* End:
|
|
497
|
-
*/
|