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,102 +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
|
-
|
|
19
|
-
#include <arpa/inet.h>
|
|
20
|
-
#include <assert.h>
|
|
21
|
-
#include <string.h>
|
|
22
|
-
#include "bool.h"
|
|
23
|
-
#include "checks.h"
|
|
24
|
-
#include "log.h"
|
|
25
|
-
#include "management_service_interface.h"
|
|
26
|
-
#include "messenger.h"
|
|
27
|
-
#include "trema_private.h"
|
|
28
|
-
#include "trema_wrapper.h"
|
|
29
|
-
#include "utility.h"
|
|
30
|
-
#include "wrapper.h"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
static char management_service_name[ MESSENGER_SERVICE_NAME_LENGTH ];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
static const char *
|
|
37
|
-
_get_management_service_name( const char *service_name ) {
|
|
38
|
-
if ( service_name == NULL ) {
|
|
39
|
-
die( "Service name must not be NULL." );
|
|
40
|
-
}
|
|
41
|
-
if ( strlen( service_name ) == 0 ) {
|
|
42
|
-
die( "Service name length must not be zero." );
|
|
43
|
-
}
|
|
44
|
-
if ( strlen( service_name ) >= ( MESSENGER_SERVICE_NAME_LENGTH - 2 ) ) {
|
|
45
|
-
die( "Too long service name ( %s ).", service_name );
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
memset( management_service_name, '\0', MESSENGER_SERVICE_NAME_LENGTH );
|
|
49
|
-
snprintf( management_service_name, MESSENGER_SERVICE_NAME_LENGTH, "%s.m", service_name );
|
|
50
|
-
|
|
51
|
-
return management_service_name;
|
|
52
|
-
}
|
|
53
|
-
const char *( *get_management_service_name )( const char *service_name ) = _get_management_service_name;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
management_application_reply *
|
|
57
|
-
_create_management_application_reply( uint8_t status, uint32_t application_id, void *data, size_t data_length ) {
|
|
58
|
-
size_t length = offsetof( management_application_reply, data );
|
|
59
|
-
if ( data != NULL ) {
|
|
60
|
-
length += data_length;
|
|
61
|
-
}
|
|
62
|
-
management_application_reply *reply = xmalloc( length );
|
|
63
|
-
memset( reply, 0, length );
|
|
64
|
-
reply->header.type = htons( MANAGEMENT_APPLICATION_REPLY );
|
|
65
|
-
reply->header.status = status;
|
|
66
|
-
reply->header.length = htonl( ( uint32_t ) length );
|
|
67
|
-
reply->application_id = htonl( application_id );
|
|
68
|
-
if ( data != NULL ) {
|
|
69
|
-
memcpy( reply->data, data, data_length );
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return reply;
|
|
73
|
-
}
|
|
74
|
-
management_application_reply *( *create_management_application_reply )( uint8_t status, uint32_t application_id, void *data, size_t data_length ) = _create_management_application_reply;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
bool
|
|
78
|
-
_send_management_application_reply( const messenger_context_handle *handle, const management_application_reply *reply ) {
|
|
79
|
-
if ( handle == NULL || reply == NULL ) {
|
|
80
|
-
error( "Both context handle and reply message must not be NULL ( handle = %p, reply = %p ).", handle, reply );
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
bool ret = send_reply_message( handle, MESSENGER_MANAGEMENT_REPLY, reply, ( size_t ) ntohl( reply->header.length ) );
|
|
84
|
-
if ( !ret ) {
|
|
85
|
-
error( "Failed to send an application specific management reply." );
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
bool ( *send_management_application_reply )( const messenger_context_handle *handle, const management_application_reply *reply ) = _send_management_application_reply;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
void ( *set_management_application_request_handler )( management_application_request_handler callback, void *user_data ) = _set_management_application_request_handler;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
/*
|
|
98
|
-
* Local variables:
|
|
99
|
-
* c-basic-offset: 2
|
|
100
|
-
* indent-tabs-mode: nil
|
|
101
|
-
* End:
|
|
102
|
-
*/
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Management service interface.
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 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 MANAGEMENT_SERVICE_INTERFACE_H
|
|
22
|
-
#define MANAGEMENT_SERVICE_INTERFACE_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include <inttypes.h>
|
|
26
|
-
#include <time.h>
|
|
27
|
-
#include "messenger.h"
|
|
28
|
-
#include "stat.h"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
enum {
|
|
32
|
-
MESSENGER_MANAGEMENT_REQUEST = 0x0020,
|
|
33
|
-
MESSENGER_MANAGEMENT_REPLY,
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
enum {
|
|
37
|
-
MANAGEMENT_REQUEST_SUCCEEDED,
|
|
38
|
-
MANAGEMENT_REQUEST_FAILED,
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
enum {
|
|
42
|
-
MANAGEMENT_ECHO_REQUEST,
|
|
43
|
-
MANAGEMENT_ECHO_REPLY,
|
|
44
|
-
MANAGEMENT_SET_LOGGING_LEVEL_REQUEST,
|
|
45
|
-
MANAGEMENT_SET_LOGGING_LEVEL_REPLY,
|
|
46
|
-
MANAGEMENT_SHOW_STATS_REQUEST,
|
|
47
|
-
MANAGEMENT_SHOW_STATS_REPLY,
|
|
48
|
-
MANAGEMENT_APPLICATION_REQUEST,
|
|
49
|
-
MANAGEMENT_APPLICATION_REPLY,
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
typedef struct {
|
|
54
|
-
uint16_t type;
|
|
55
|
-
uint32_t length;
|
|
56
|
-
} __attribute__( ( packed ) ) management_request_header;
|
|
57
|
-
|
|
58
|
-
typedef struct {
|
|
59
|
-
uint32_t tv_sec;
|
|
60
|
-
uint32_t tv_nsec;
|
|
61
|
-
} timespec_n;
|
|
62
|
-
|
|
63
|
-
typedef struct {
|
|
64
|
-
management_request_header header;
|
|
65
|
-
timespec_n sent_at;
|
|
66
|
-
} __attribute__( ( packed ) ) management_echo_request;
|
|
67
|
-
|
|
68
|
-
typedef struct {
|
|
69
|
-
management_request_header header;
|
|
70
|
-
char level[ LOGGING_LEVEL_STR_LENGTH ];
|
|
71
|
-
} __attribute__( ( packed ) ) management_set_logging_level_request;
|
|
72
|
-
|
|
73
|
-
typedef struct {
|
|
74
|
-
management_request_header header;
|
|
75
|
-
} __attribute__( ( packed ) ) management_show_stats_request;
|
|
76
|
-
|
|
77
|
-
typedef struct {
|
|
78
|
-
management_request_header header;
|
|
79
|
-
uint32_t application_id;
|
|
80
|
-
uint8_t data[ 0 ];
|
|
81
|
-
} __attribute__( ( packed ) ) management_application_request;
|
|
82
|
-
|
|
83
|
-
typedef struct {
|
|
84
|
-
uint16_t type;
|
|
85
|
-
uint8_t status;
|
|
86
|
-
uint8_t flags;
|
|
87
|
-
uint32_t length;
|
|
88
|
-
} __attribute__( ( packed ) ) management_reply_header;
|
|
89
|
-
|
|
90
|
-
typedef struct {
|
|
91
|
-
management_reply_header header;
|
|
92
|
-
timespec_n sent_at;
|
|
93
|
-
timespec_n received_at;
|
|
94
|
-
} __attribute__( ( packed ) ) management_echo_reply;
|
|
95
|
-
|
|
96
|
-
typedef struct {
|
|
97
|
-
management_reply_header header;
|
|
98
|
-
} __attribute__( ( packed ) ) management_set_logging_level_reply;
|
|
99
|
-
|
|
100
|
-
typedef struct {
|
|
101
|
-
management_reply_header header;
|
|
102
|
-
stat_entry entries[ 0 ];
|
|
103
|
-
} __attribute__( ( packed ) ) management_show_stats_reply;
|
|
104
|
-
|
|
105
|
-
typedef struct {
|
|
106
|
-
management_reply_header header;
|
|
107
|
-
uint32_t application_id;
|
|
108
|
-
uint8_t data[ 0 ];
|
|
109
|
-
} __attribute__( ( packed ) ) management_application_reply;
|
|
110
|
-
|
|
111
|
-
typedef void ( *management_application_request_handler )(
|
|
112
|
-
const messenger_context_handle *handle,
|
|
113
|
-
uint32_t application_id,
|
|
114
|
-
void *data,
|
|
115
|
-
size_t data_length,
|
|
116
|
-
void *user_data
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
extern const char *( *get_management_service_name )( const char *service_name );
|
|
121
|
-
extern void ( *set_management_application_request_handler )( management_application_request_handler callback, void *user_data );
|
|
122
|
-
extern management_application_reply *( *create_management_application_reply )( uint8_t status, uint32_t application_id, void *data, size_t data_length );
|
|
123
|
-
extern bool ( *send_management_application_reply )( const messenger_context_handle *handle, const management_application_reply *reply );
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
#endif // MANAGEMENT_SERVICE_INTERFACE_H
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
/*
|
|
130
|
-
* Local variables:
|
|
131
|
-
* c-basic-offset: 2
|
|
132
|
-
* indent-tabs-mode: nil
|
|
133
|
-
* End:
|
|
134
|
-
*/
|
data/src/lib/match.h
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* OpenFlow flow matching library
|
|
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 MATCH_H
|
|
22
|
-
#define MATCH_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include <openflow.h>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
#define COMPARE_MAC( _x, _y ) \
|
|
29
|
-
( ( ( ( uint16_t * ) &( _x ) )[ 0 ] == ( ( uint16_t * ) &( _y ) )[ 0 ] ) \
|
|
30
|
-
&& ( ( ( uint16_t * ) &( _x ) )[ 1 ] == ( ( uint16_t * ) &( _y ) )[ 1 ] ) \
|
|
31
|
-
&& ( ( ( uint16_t * ) &( _x ) )[ 2 ] == ( ( uint16_t * ) &( _y ) )[ 2 ] ) )
|
|
32
|
-
|
|
33
|
-
#define create_nw_src_mask( _w ) \
|
|
34
|
-
( { \
|
|
35
|
-
uint32_t _m = ( ( _w ) & OFPFW_NW_SRC_MASK ) >> OFPFW_NW_SRC_SHIFT; \
|
|
36
|
-
( _m >= 32 ) ? 0 : 0xffffffff << _m; \
|
|
37
|
-
} \
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
#define create_nw_dst_mask( _w ) \
|
|
41
|
-
( { \
|
|
42
|
-
uint32_t _m = ( ( _w ) & OFPFW_NW_DST_MASK ) >> OFPFW_NW_DST_SHIFT; \
|
|
43
|
-
( _m >= 32 ) ? 0 : 0xffffffff << _m; \
|
|
44
|
-
} \
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
#define compare_match( _x, _y ) \
|
|
48
|
-
( { \
|
|
49
|
-
uint32_t _w = ( _x )->wildcards | ( _y )->wildcards; \
|
|
50
|
-
uint32_t _sm = create_nw_src_mask( ( _x )->wildcards ) \
|
|
51
|
-
& create_nw_src_mask( ( _y )->wildcards ); \
|
|
52
|
-
uint32_t _dm = create_nw_dst_mask( ( _x )->wildcards ) \
|
|
53
|
-
& create_nw_dst_mask( ( _y )->wildcards ); \
|
|
54
|
-
( ( _w & OFPFW_IN_PORT || ( _x )->in_port == ( _y )->in_port ) \
|
|
55
|
-
&& ( _w & OFPFW_DL_VLAN || ( _x )->dl_vlan == ( _y )->dl_vlan ) \
|
|
56
|
-
&& ( _w & OFPFW_DL_VLAN_PCP || ( _x )->dl_vlan_pcp == ( _y )->dl_vlan_pcp ) \
|
|
57
|
-
&& ( _w & OFPFW_DL_SRC || COMPARE_MAC( ( _x )->dl_src, ( _y )->dl_src ) ) \
|
|
58
|
-
&& ( _w & OFPFW_DL_DST || COMPARE_MAC( ( _x )->dl_dst, ( _y )->dl_dst ) ) \
|
|
59
|
-
&& ( _w & OFPFW_DL_TYPE || ( _x )->dl_type == ( _y )->dl_type ) \
|
|
60
|
-
&& !( ( ( _x )->nw_src ^ ( _y )->nw_src ) & _sm ) \
|
|
61
|
-
&& !( ( ( _x )->nw_dst ^ ( _y )->nw_dst ) & _dm ) \
|
|
62
|
-
&& ( _w & OFPFW_NW_TOS || ( _x )->nw_tos == ( _y )->nw_tos ) \
|
|
63
|
-
&& ( _w & OFPFW_NW_PROTO || ( _x )->nw_proto == ( _y )->nw_proto ) \
|
|
64
|
-
&& ( _w & OFPFW_TP_SRC || ( _x )->tp_src == ( _y )->tp_src ) \
|
|
65
|
-
&& ( _w & OFPFW_TP_DST || ( _x )->tp_dst == ( _y )->tp_dst ) ); \
|
|
66
|
-
} \
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
#define compare_match_strict( _x, _y ) \
|
|
70
|
-
( ( ( ( ( _x )->wildcards ^ ( _y )->wildcards ) & OFPFW_ALL ) == 0 ) \
|
|
71
|
-
&& compare_match( ( _x ), ( _y ) ) )
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
#endif // MATCH_H
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/*
|
|
78
|
-
* Local variables:
|
|
79
|
-
* c-basic-offset: 2
|
|
80
|
-
* indent-tabs-mode: nil
|
|
81
|
-
* End:
|
|
82
|
-
*/
|
data/src/lib/match_table.c
DELETED
|
@@ -1,606 +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 <openflow.h>
|
|
21
|
-
#include <pthread.h>
|
|
22
|
-
#include <stdlib.h>
|
|
23
|
-
#include <string.h>
|
|
24
|
-
#include "checks.h"
|
|
25
|
-
#include "match.h"
|
|
26
|
-
#include "match_table.h"
|
|
27
|
-
#include "log.h"
|
|
28
|
-
#include "wrapper.h"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
#define VLAN_VID_MASK 0x0fff // 12 bits
|
|
32
|
-
#define VLAN_PCP_MASK 0x07 // 3 bits
|
|
33
|
-
#define NW_TOS_MASK 0xfc // upper 6 bits
|
|
34
|
-
|
|
35
|
-
#define MATCH_STRING_LENGTH 1024
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
typedef struct {
|
|
39
|
-
struct ofp_match match; // match data. host byte order
|
|
40
|
-
uint16_t priority;
|
|
41
|
-
void *data;
|
|
42
|
-
} match_entry;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
typedef struct {
|
|
46
|
-
hash_table *exact_table; // no wildcards are set
|
|
47
|
-
list_element *wildcards_table; // wildcards flags are set
|
|
48
|
-
pthread_mutex_t *mutex;
|
|
49
|
-
} match_table;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
typedef struct {
|
|
53
|
-
struct ofp_match *match;
|
|
54
|
-
void ( *function )( struct ofp_match, uint16_t, void *, void * );
|
|
55
|
-
void *user_data;
|
|
56
|
-
} match_walker;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
match_table *_match_table_head = NULL; // non-static variable for use in unit testing
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
static inline bool
|
|
63
|
-
exact_match( struct ofp_match *match ) {
|
|
64
|
-
assert( match != NULL );
|
|
65
|
-
|
|
66
|
-
return ( ( match->wildcards & OFPFW_ALL ) == 0 );
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
static match_entry *
|
|
71
|
-
allocate_match_entry( struct ofp_match *match, uint16_t priority, void *data ) {
|
|
72
|
-
match_entry *new_entry = xmalloc( sizeof( match_entry ) );
|
|
73
|
-
new_entry->match = *match;
|
|
74
|
-
new_entry->priority = priority;
|
|
75
|
-
new_entry->data = data;
|
|
76
|
-
|
|
77
|
-
return new_entry;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
static void
|
|
82
|
-
free_match_entry( match_entry *free_entry ) {
|
|
83
|
-
assert( free_entry != NULL );
|
|
84
|
-
|
|
85
|
-
xfree( free_entry );
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
static bool
|
|
90
|
-
compare_filter_match( struct ofp_match *x, struct ofp_match *y ) {
|
|
91
|
-
uint32_t w_x = x->wildcards & OFPFW_ALL;
|
|
92
|
-
uint32_t w_y = y->wildcards & OFPFW_ALL;
|
|
93
|
-
uint32_t sm_x = create_nw_src_mask( w_x );
|
|
94
|
-
uint32_t dm_x = create_nw_dst_mask( w_x );
|
|
95
|
-
uint32_t sm_y = create_nw_src_mask( w_y );
|
|
96
|
-
uint32_t dm_y = create_nw_dst_mask( w_y );
|
|
97
|
-
|
|
98
|
-
w_x &= ( uint32_t ) ~( OFPFW_NW_SRC_MASK | OFPFW_NW_DST_MASK );
|
|
99
|
-
w_y &= ( uint32_t ) ~( OFPFW_NW_SRC_MASK | OFPFW_NW_DST_MASK );
|
|
100
|
-
if ( ( ~w_x & w_y ) != 0 ) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
if ( sm_x > sm_y ) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
if ( dm_x > dm_y ) {
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return ( ( w_x & OFPFW_IN_PORT || x->in_port == y->in_port )
|
|
111
|
-
&& ( w_x & OFPFW_DL_VLAN || x->dl_vlan == y->dl_vlan )
|
|
112
|
-
&& ( w_x & OFPFW_DL_VLAN_PCP || x->dl_vlan_pcp == y->dl_vlan_pcp )
|
|
113
|
-
&& ( w_x & OFPFW_DL_SRC || COMPARE_MAC( x->dl_src, y->dl_src ) )
|
|
114
|
-
&& ( w_x & OFPFW_DL_DST || COMPARE_MAC( x->dl_dst, y->dl_dst ) )
|
|
115
|
-
&& ( w_x & OFPFW_DL_TYPE || x->dl_type == y->dl_type )
|
|
116
|
-
&& !( ( x->nw_src ^ y->nw_src ) & sm_x )
|
|
117
|
-
&& !( ( x->nw_dst ^ y->nw_dst ) & dm_x )
|
|
118
|
-
&& ( w_x & OFPFW_NW_TOS || x->nw_tos == y->nw_tos )
|
|
119
|
-
&& ( w_x & OFPFW_NW_PROTO || x->nw_proto == y->nw_proto )
|
|
120
|
-
&& ( w_x & OFPFW_TP_SRC || x->tp_src == y->tp_src )
|
|
121
|
-
&& ( w_x & OFPFW_TP_DST || x->tp_dst == y->tp_dst ) ) != 0 ? true : false;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
static bool
|
|
126
|
-
compare_exact_match_entry( const void *x, const void *y ) {
|
|
127
|
-
assert( x != NULL );
|
|
128
|
-
assert( y != NULL );
|
|
129
|
-
|
|
130
|
-
const struct ofp_match *xofp_match = x;
|
|
131
|
-
const struct ofp_match *yofp_match = y;
|
|
132
|
-
return compare_match_strict( xofp_match, yofp_match );
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
static unsigned int
|
|
137
|
-
hash_exact_match_entry( const void *key ) {
|
|
138
|
-
assert( key != NULL );
|
|
139
|
-
const struct ofp_match *match = key;
|
|
140
|
-
|
|
141
|
-
uint16_t dl_vlan = match->dl_vlan;
|
|
142
|
-
if ( dl_vlan != UINT16_MAX ) {
|
|
143
|
-
dl_vlan = ( uint16_t ) ( dl_vlan & VLAN_VID_MASK );
|
|
144
|
-
}
|
|
145
|
-
uint8_t dl_vlan_pcp = ( uint8_t ) ( match->dl_vlan_pcp & VLAN_PCP_MASK );
|
|
146
|
-
uint8_t nw_tos = ( uint8_t ) ( match->nw_tos & NW_TOS_MASK );
|
|
147
|
-
|
|
148
|
-
unsigned int hash = 0;
|
|
149
|
-
hash ^= ( unsigned int ) ( match->in_port << 16 );
|
|
150
|
-
hash ^= ( unsigned int ) hash_mac( match->dl_src );
|
|
151
|
-
hash ^= ( unsigned int ) hash_mac( match->dl_dst );
|
|
152
|
-
hash ^= dl_vlan;
|
|
153
|
-
hash ^= ( unsigned int ) ( dl_vlan_pcp << 24 );
|
|
154
|
-
hash ^= ( unsigned int ) ( match->dl_type << 8 );
|
|
155
|
-
hash ^= nw_tos;
|
|
156
|
-
hash ^= ( unsigned int ) ( match->nw_proto << 24 );
|
|
157
|
-
hash ^= match->nw_src;
|
|
158
|
-
hash ^= match->nw_dst;
|
|
159
|
-
hash ^= ( unsigned int ) ( match->tp_src << 16 );
|
|
160
|
-
hash ^= match->tp_dst;
|
|
161
|
-
|
|
162
|
-
return hash;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
static void
|
|
167
|
-
init_exact_match_table( hash_table **exact_table ) {
|
|
168
|
-
assert( exact_table != NULL );
|
|
169
|
-
|
|
170
|
-
*exact_table = create_hash( compare_exact_match_entry, hash_exact_match_entry );
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
static void
|
|
175
|
-
free_exact_match_entry( void *key, void *value, void *user_data ) {
|
|
176
|
-
UNUSED( key );
|
|
177
|
-
assert( value != NULL );
|
|
178
|
-
UNUSED( user_data );
|
|
179
|
-
|
|
180
|
-
match_entry *entry = value;
|
|
181
|
-
|
|
182
|
-
free_match_entry( entry );
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
static void
|
|
187
|
-
finalize_exact_match_table( hash_table *exact_table ) {
|
|
188
|
-
assert( exact_table != NULL );
|
|
189
|
-
|
|
190
|
-
foreach_hash( exact_table, free_exact_match_entry, NULL );
|
|
191
|
-
delete_hash( exact_table );
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
static bool
|
|
196
|
-
insert_exact_match_entry( hash_table *exact_table, struct ofp_match *match, void *data ) {
|
|
197
|
-
assert( exact_table != NULL );
|
|
198
|
-
assert( match != NULL );
|
|
199
|
-
|
|
200
|
-
match_entry *entry = lookup_hash_entry( exact_table, match );
|
|
201
|
-
if ( entry != NULL ) {
|
|
202
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
203
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
204
|
-
warn( "exact match entry already exists ( match = [%s] )", match_string );
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
match_entry *new_entry = allocate_match_entry( match, 0 /* dummy priority */, data );
|
|
208
|
-
match_entry *conflict_entry = insert_hash_entry( exact_table, &new_entry->match, new_entry );
|
|
209
|
-
assert( conflict_entry == NULL );
|
|
210
|
-
return true;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
static match_entry *
|
|
215
|
-
lookup_exact_match_strict_entry( hash_table *exact_table, struct ofp_match *match ) {
|
|
216
|
-
assert( exact_table != NULL );
|
|
217
|
-
assert( match != NULL );
|
|
218
|
-
|
|
219
|
-
return lookup_hash_entry( exact_table, match );
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
#define lookup_exact_match_entry( table, match ) lookup_exact_match_strict_entry( table, match )
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
static bool
|
|
227
|
-
update_exact_match_entry( hash_table *exact_table, struct ofp_match *match, void *data ) {
|
|
228
|
-
assert( exact_table != NULL );
|
|
229
|
-
assert( match != NULL );
|
|
230
|
-
|
|
231
|
-
match_entry *entry = lookup_exact_match_strict_entry( exact_table, match );
|
|
232
|
-
if ( entry == NULL ) {
|
|
233
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
234
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
235
|
-
warn( "exact match entry not found ( match = [%s] )",
|
|
236
|
-
match_string );
|
|
237
|
-
return false;
|
|
238
|
-
}
|
|
239
|
-
entry->data = data;
|
|
240
|
-
return true;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
static void *
|
|
245
|
-
delete_exact_match_strict_entry( hash_table *exact_table, struct ofp_match *match ) {
|
|
246
|
-
assert( exact_table != NULL );
|
|
247
|
-
assert( match != NULL );
|
|
248
|
-
|
|
249
|
-
match_entry *entry = lookup_hash_entry( exact_table, match );
|
|
250
|
-
if ( entry == NULL ) {
|
|
251
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
252
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
253
|
-
warn( "exact match entry not found ( match = [%s] )",
|
|
254
|
-
match_string );
|
|
255
|
-
return NULL;
|
|
256
|
-
}
|
|
257
|
-
void *data = entry->data;
|
|
258
|
-
delete_hash_entry( exact_table, match );
|
|
259
|
-
free_match_entry( entry );
|
|
260
|
-
return data;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
static void
|
|
265
|
-
exact_match_table_walker( void *key, void *value, void *user_data ) {
|
|
266
|
-
UNUSED( key );
|
|
267
|
-
assert( value != NULL );
|
|
268
|
-
match_walker *walker = user_data;
|
|
269
|
-
assert( walker != NULL );
|
|
270
|
-
assert( walker->function != NULL );
|
|
271
|
-
|
|
272
|
-
match_entry *entry = value;
|
|
273
|
-
if ( walker->match != NULL ) {
|
|
274
|
-
if ( !compare_filter_match( walker->match, &entry->match ) ) {
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
void ( *function )( struct ofp_match, uint16_t, void *, void * ) = walker->function;
|
|
279
|
-
|
|
280
|
-
function( entry->match, entry->priority, entry->data, walker->user_data );
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
static void
|
|
285
|
-
map_exact_match_table( hash_table *exact_table, struct ofp_match *match, void function( struct ofp_match, uint16_t, void *, void * ), void *user_data ) {
|
|
286
|
-
assert( exact_table != NULL );
|
|
287
|
-
assert( function != NULL );
|
|
288
|
-
match_walker walker;
|
|
289
|
-
walker.match = match;
|
|
290
|
-
walker.function = function;
|
|
291
|
-
walker.user_data = user_data;
|
|
292
|
-
foreach_hash( exact_table, exact_match_table_walker, &walker );
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
static void
|
|
297
|
-
init_wildcards_match_table( list_element **wildcards_table ) {
|
|
298
|
-
assert( wildcards_table != NULL );
|
|
299
|
-
|
|
300
|
-
create_list( wildcards_table );
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
static void
|
|
305
|
-
finalize_wildcards_match_table( list_element *wildcards_table ) {
|
|
306
|
-
list_element *element;
|
|
307
|
-
for ( element = wildcards_table; element != NULL; element = element->next ) {
|
|
308
|
-
free_match_entry( element->data );
|
|
309
|
-
element->data = NULL;
|
|
310
|
-
}
|
|
311
|
-
delete_list( wildcards_table );
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
static bool
|
|
316
|
-
insert_wildcards_match_entry( list_element **wildcards_table, struct ofp_match *match, uint16_t priority, void *data ) {
|
|
317
|
-
assert( match != NULL );
|
|
318
|
-
|
|
319
|
-
list_element *element;
|
|
320
|
-
for ( element = *wildcards_table; element != NULL; element = element->next ) {
|
|
321
|
-
match_entry *entry = element->data;
|
|
322
|
-
if ( entry->priority < priority ) {
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
assert( entry != NULL );
|
|
326
|
-
if ( entry->priority == priority && compare_match_strict( &entry->match, match ) ) {
|
|
327
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
328
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
329
|
-
warn( "wildcards match entry already exists ( match = [%s], priority = %u )",
|
|
330
|
-
match_string, priority );
|
|
331
|
-
return false;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
match_entry *new_entry = allocate_match_entry( match, priority, data );
|
|
335
|
-
if ( element == NULL ) {
|
|
336
|
-
// tail
|
|
337
|
-
append_to_tail( wildcards_table, new_entry );
|
|
338
|
-
}
|
|
339
|
-
else if ( element == *wildcards_table ) {
|
|
340
|
-
// head
|
|
341
|
-
insert_in_front( wildcards_table, new_entry );
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
// insert before
|
|
345
|
-
insert_before( wildcards_table, element->data, new_entry );
|
|
346
|
-
}
|
|
347
|
-
return true;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
static match_entry *
|
|
352
|
-
lookup_wildcards_match_strict_entry( list_element *wildcards_table, struct ofp_match *match, uint16_t priority ) {
|
|
353
|
-
assert( match != NULL );
|
|
354
|
-
|
|
355
|
-
list_element *element;
|
|
356
|
-
for ( element = wildcards_table; element != NULL; element = element->next ) {
|
|
357
|
-
match_entry *entry = element->data;
|
|
358
|
-
if ( entry->priority < priority ) {
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
if ( entry->priority == priority && compare_match_strict( &entry->match, match ) ) {
|
|
362
|
-
return entry;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
return NULL;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
static match_entry *
|
|
370
|
-
lookup_wildcards_match_entry( list_element *wildcards_table, struct ofp_match *match ) {
|
|
371
|
-
assert( match != NULL );
|
|
372
|
-
|
|
373
|
-
list_element *element;
|
|
374
|
-
for ( element = wildcards_table; element != NULL; element = element->next ) {
|
|
375
|
-
match_entry *entry = element->data;
|
|
376
|
-
if ( compare_match( &entry->match, match ) ) {
|
|
377
|
-
return entry;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
return NULL;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
static bool
|
|
385
|
-
update_wildcards_match_entry( list_element *wildcards_table, struct ofp_match *match, uint16_t priority, void *data ) {
|
|
386
|
-
assert( match != NULL );
|
|
387
|
-
|
|
388
|
-
match_entry *entry = lookup_wildcards_match_strict_entry( wildcards_table, match, priority );
|
|
389
|
-
if ( entry == NULL ) {
|
|
390
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
391
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
392
|
-
warn( "wildcards match entry not found ( match = [%s], priority = %u )",
|
|
393
|
-
match_string, priority );
|
|
394
|
-
return false;
|
|
395
|
-
}
|
|
396
|
-
entry->data = data;
|
|
397
|
-
return true;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
static void *
|
|
402
|
-
delete_wildcards_match_strict_entry( list_element **wildcards_table, struct ofp_match *match, uint16_t priority ) {
|
|
403
|
-
assert( match != NULL );
|
|
404
|
-
|
|
405
|
-
match_entry *entry = lookup_wildcards_match_strict_entry( *wildcards_table, match, priority );
|
|
406
|
-
if ( entry == NULL ) {
|
|
407
|
-
char match_string[ MATCH_STRING_LENGTH ];
|
|
408
|
-
match_to_string( match, match_string, sizeof( match_string ) );
|
|
409
|
-
warn( "wildcards match entry not found ( match = [%s], priority = %u )",
|
|
410
|
-
match_string, priority );
|
|
411
|
-
return NULL;
|
|
412
|
-
}
|
|
413
|
-
void *data = entry->data;
|
|
414
|
-
delete_element( wildcards_table, entry );
|
|
415
|
-
free_match_entry( entry );
|
|
416
|
-
return data;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
static void
|
|
421
|
-
map_wildcards_match_table( list_element *wildcards_table, struct ofp_match *match, void function( struct ofp_match, uint16_t, void *, void * ), void * user_data ) {
|
|
422
|
-
assert( function != NULL );
|
|
423
|
-
|
|
424
|
-
list_element *element = wildcards_table;
|
|
425
|
-
while ( element != NULL ) {
|
|
426
|
-
match_entry *entry = element->data;
|
|
427
|
-
element = element->next;
|
|
428
|
-
if ( match != NULL ) {
|
|
429
|
-
if ( !compare_filter_match( match, &entry->match ) ) {
|
|
430
|
-
continue;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
function( entry->match, entry->priority, entry->data, user_data );
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
void
|
|
439
|
-
init_match_table( void ) {
|
|
440
|
-
if ( _match_table_head != NULL ) {
|
|
441
|
-
die( "match table is already initialized." );
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
match_table *table = xmalloc( sizeof( match_table ) );
|
|
445
|
-
init_exact_match_table( &table->exact_table );
|
|
446
|
-
init_wildcards_match_table( &table->wildcards_table );
|
|
447
|
-
pthread_mutexattr_t attr;
|
|
448
|
-
pthread_mutexattr_init( &attr );
|
|
449
|
-
pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE_NP );
|
|
450
|
-
table->mutex = xmalloc( sizeof( pthread_mutex_t ) );
|
|
451
|
-
pthread_mutex_init( table->mutex, &attr );
|
|
452
|
-
|
|
453
|
-
_match_table_head = table;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
void
|
|
458
|
-
finalize_match_table( void ) {
|
|
459
|
-
if ( _match_table_head == NULL ) {
|
|
460
|
-
die( "match table is not initialized." );
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
pthread_mutex_t *mutex = _match_table_head->mutex;
|
|
464
|
-
|
|
465
|
-
pthread_mutex_lock( mutex );
|
|
466
|
-
finalize_exact_match_table( _match_table_head->exact_table );
|
|
467
|
-
finalize_wildcards_match_table( _match_table_head->wildcards_table );
|
|
468
|
-
xfree( _match_table_head );
|
|
469
|
-
_match_table_head = NULL;
|
|
470
|
-
pthread_mutex_unlock( mutex );
|
|
471
|
-
pthread_mutex_destroy( mutex );
|
|
472
|
-
xfree( mutex );
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
bool
|
|
477
|
-
insert_match_entry( struct ofp_match match, uint16_t priority, void *data ) {
|
|
478
|
-
if ( _match_table_head == NULL ) {
|
|
479
|
-
die( "match table is not initialized." );
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
483
|
-
bool result;
|
|
484
|
-
if ( exact_match( &match ) ) {
|
|
485
|
-
result = insert_exact_match_entry( _match_table_head->exact_table, &match, data );
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
// wildcards flags are set
|
|
489
|
-
result = insert_wildcards_match_entry( &_match_table_head->wildcards_table, &match, priority, data );
|
|
490
|
-
}
|
|
491
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
492
|
-
return result;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
void *
|
|
497
|
-
lookup_match_strict_entry( struct ofp_match match, uint16_t priority ) {
|
|
498
|
-
if ( _match_table_head == NULL ) {
|
|
499
|
-
die( "match table is not initialized." );
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
503
|
-
match_entry *entry;
|
|
504
|
-
if ( exact_match( &match ) ) {
|
|
505
|
-
entry = lookup_exact_match_strict_entry( _match_table_head->exact_table, &match );
|
|
506
|
-
}
|
|
507
|
-
else {
|
|
508
|
-
entry = lookup_wildcards_match_strict_entry( _match_table_head->wildcards_table, &match, priority );
|
|
509
|
-
}
|
|
510
|
-
void *data = ( entry != NULL ? entry->data : NULL );
|
|
511
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
512
|
-
return data;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
void *
|
|
517
|
-
lookup_match_entry( struct ofp_match match ) {
|
|
518
|
-
if ( _match_table_head == NULL ) {
|
|
519
|
-
die( "match table is not initialized." );
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
523
|
-
match_entry *entry = lookup_exact_match_entry( _match_table_head->exact_table, &match );
|
|
524
|
-
if ( entry == NULL ) {
|
|
525
|
-
entry = lookup_wildcards_match_entry( _match_table_head->wildcards_table, &match );
|
|
526
|
-
}
|
|
527
|
-
void *data = ( entry != NULL ? entry->data : NULL );
|
|
528
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
529
|
-
return data;
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
bool
|
|
534
|
-
update_match_entry( struct ofp_match match, uint16_t priority, void *data ) {
|
|
535
|
-
if ( _match_table_head == NULL ) {
|
|
536
|
-
die( "match table is not initialized." );
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
540
|
-
bool result;
|
|
541
|
-
if ( exact_match( &match ) ) {
|
|
542
|
-
result = update_exact_match_entry( _match_table_head->exact_table, &match, data );
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
// wildcards flags are set
|
|
546
|
-
result = update_wildcards_match_entry( _match_table_head->wildcards_table, &match, priority, data );
|
|
547
|
-
}
|
|
548
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
549
|
-
return result;
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
void *
|
|
554
|
-
delete_match_strict_entry( struct ofp_match match, uint16_t priority ) {
|
|
555
|
-
if ( _match_table_head == NULL ) {
|
|
556
|
-
die( "match table is not initialized." );
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
560
|
-
void *data = NULL;
|
|
561
|
-
if ( exact_match( &match ) ) {
|
|
562
|
-
data = delete_exact_match_strict_entry( _match_table_head->exact_table, &match );
|
|
563
|
-
}
|
|
564
|
-
else {
|
|
565
|
-
// wildcards flags are set
|
|
566
|
-
data = delete_wildcards_match_strict_entry( &_match_table_head->wildcards_table, &match, priority );
|
|
567
|
-
}
|
|
568
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
569
|
-
return data;
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
static void
|
|
574
|
-
_map_match_table( struct ofp_match *match, void function( struct ofp_match match, uint16_t priority, void *data, void *user_data ), void *user_data ) {
|
|
575
|
-
if ( _match_table_head == NULL ) {
|
|
576
|
-
die( "match table is not initialized." );
|
|
577
|
-
}
|
|
578
|
-
if ( function == NULL ) {
|
|
579
|
-
die( "function must not be NULL" );
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
pthread_mutex_lock( _match_table_head->mutex );
|
|
583
|
-
map_exact_match_table( _match_table_head->exact_table, match, function, user_data );
|
|
584
|
-
map_wildcards_match_table( _match_table_head->wildcards_table, match, function, user_data );
|
|
585
|
-
pthread_mutex_unlock( _match_table_head->mutex );
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
void
|
|
590
|
-
foreach_match_table( void function( struct ofp_match, uint16_t, void *, void * ), void *user_data ) {
|
|
591
|
-
_map_match_table( NULL, function, user_data );
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
void
|
|
596
|
-
map_match_table( struct ofp_match match, void function( struct ofp_match match, uint16_t priority, void *data, void *user_data ), void *user_data ) {
|
|
597
|
-
_map_match_table( &match, function, user_data );
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
/*
|
|
602
|
-
* Local variables:
|
|
603
|
-
* c-basic-offset: 2
|
|
604
|
-
* indent-tabs-mode: nil
|
|
605
|
-
* End:
|
|
606
|
-
*/
|