trema 0.4.7 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +33 -54
- data/.hound.yml +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -1
- data/.travis.yml +14 -18
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -26
- data/README.md +25 -241
- data/Rakefile +4 -1056
- data/bin/.gitignore +3 -0
- data/bin/trema +163 -237
- data/features/cleanup_on_failure.feature +118 -0
- data/features/logging.feature +73 -0
- data/features/open_flow13.feature +21 -0
- data/features/step_definitions/.gitignore +35 -0
- data/features/step_definitions/.rubocop.yml +5 -0
- data/features/step_definitions/.travis.yml +19 -0
- data/features/step_definitions/Gemfile +9 -0
- data/features/step_definitions/Guardfile +4 -0
- data/features/step_definitions/LICENSE +675 -0
- data/features/step_definitions/README.md +7 -0
- data/features/step_definitions/Rakefile +10 -0
- data/features/step_definitions/show_stats_steps.rb +56 -0
- data/features/step_definitions/virtual_link_steps.rb +8 -0
- data/features/support/env.rb +0 -73
- data/features/support/hooks.rb +6 -50
- data/features/trema_delete_link.feature +30 -0
- data/features/trema_killall.feature +56 -0
- data/features/trema_run.feature +47 -0
- data/features/trema_start.feature +73 -0
- data/features/trema_stop.feature +50 -0
- data/lib/trema.rb +4 -0
- data/lib/trema/command.rb +184 -0
- data/lib/trema/controller.rb +289 -0
- data/lib/trema/dirs.rb +14 -0
- data/lib/trema/drb.rb +32 -0
- data/lib/trema/logger.rb +63 -0
- data/lib/trema/monkey_patch/integer.rb +8 -0
- data/lib/trema/monkey_patch/integer/base_conversions.rb +12 -0
- data/lib/trema/monkey_patch/integer/durations.rb +12 -0
- data/lib/trema/switch.rb +83 -0
- data/lib/trema/version.rb +5 -0
- data/spec/spec_helper.rb +9 -178
- data/spec/trema/controller_spec.rb +4 -53
- data/tasks/.gitignore +34 -0
- data/tasks/LICENSE +675 -0
- data/tasks/README.md +6 -0
- data/tasks/cucumber.rake +14 -0
- data/tasks/flay.rake +15 -0
- data/tasks/flog.rake +25 -0
- data/tasks/gem.rake +15 -0
- data/tasks/reek.rake +11 -0
- data/tasks/relish.rake +8 -0
- data/tasks/rspec.rake +8 -0
- data/tasks/rubocop.rake +2 -16
- data/tasks/yard.rake +11 -0
- data/trema.gemspec +24 -23
- metadata +180 -720
- data/.yardopts +0 -4
- data/Doxyfile +0 -1679
- data/Guardfile +0 -14
- data/bin/quality +0 -31
- data/bin/trema-config +0 -59
- data/build.rb +0 -32
- data/cruise.rb +0 -409
- data/features/.nav +0 -50
- data/features/README.md +0 -7
- data/features/core/get_pid_by_trema_name.feature +0 -137
- data/features/core/packetin_filter.feature +0 -55
- data/features/core/switch_manager.feature +0 -41
- data/features/core/trema-config.feature +0 -55
- data/features/dsl/switch_port_specifier.feature +0 -15
- data/features/examples/dumper.feature +0 -35
- data/features/examples/hello_trema.feature +0 -23
- data/features/examples/learning_switch.feature +0 -37
- data/features/examples/list_switches.feature +0 -24
- data/features/examples/message.set_config.feature +0 -27
- data/features/examples/message.vendor-action.feature +0 -25
- data/features/examples/message.vendor-stats-request.feature +0 -20
- data/features/examples/multi_learning_switch.feature +0 -107
- data/features/examples/openflow_message.echo.feature +0 -59
- data/features/examples/openflow_message.features_request.feature +0 -35
- data/features/examples/openflow_message.hello.feature +0 -59
- data/features/examples/packet_in.feature +0 -33
- data/features/examples/packetin_filter_config.feature +0 -95
- data/features/examples/patch_panel.feature +0 -29
- data/features/examples/repeater_hub.feature +0 -52
- data/features/examples/switch_info.feature +0 -51
- data/features/examples/switch_monitor.feature +0 -35
- data/features/examples/transparent_firewall.feature +0 -73
- data/features/handlers/switch_ready.feature +0 -40
- data/features/step_definitions/misc_steps.rb +0 -85
- data/features/step_definitions/send_packets_steps.rb +0 -33
- data/features/step_definitions/stats_steps.rb +0 -39
- data/features/switch_event/C-add_forward_entry.feature +0 -114
- data/features/switch_event/C-delete_forward_entry.feature +0 -85
- data/features/switch_event/C-dump_forward_entries.feature +0 -72
- data/features/switch_event/C-set_forward_entries.feature +0 -77
- data/features/switch_event/README.md +0 -40
- data/features/switch_event/add_forward_entry.feature +0 -160
- data/features/switch_event/delete_forward_entry.feature +0 -160
- data/features/switch_event/dump_forward_entries.feature +0 -103
- data/features/switch_event/set_forward_entries.feature +0 -102
- data/features/trema_commands/README.md +0 -8
- data/features/trema_commands/dump_flows.feature +0 -41
- data/features/trema_commands/help.feature +0 -27
- data/features/trema_commands/help_option.feature +0 -20
- data/features/trema_commands/kill.feature +0 -56
- data/features/trema_commands/killall.feature +0 -32
- data/features/trema_commands/port_down.feature +0 -71
- data/features/trema_commands/port_up.feature +0 -75
- data/features/trema_commands/reset_stats.feature +0 -56
- data/features/trema_commands/run.feature +0 -56
- data/features/trema_commands/send_packets.feature +0 -46
- data/features/trema_commands/show_stats.feature +0 -66
- data/features/trema_commands/up.feature +0 -34
- data/features/trema_commands/version.feature +0 -10
- data/features/trema_commands/version_option.feature +0 -8
- data/rubocop-todo.yml +0 -159
- data/ruby/.gitignore +0 -4
- data/ruby/blocker.rb +0 -74
- data/ruby/extconf.rb +0 -80
- data/ruby/sub-process.rb +0 -289
- data/ruby/trema/action-common.c +0 -46
- data/ruby/trema/action-common.h +0 -38
- data/ruby/trema/action.rb +0 -33
- data/ruby/trema/aggregate-stats-reply.rb +0 -68
- data/ruby/trema/app.rb +0 -114
- data/ruby/trema/barrier-reply.c +0 -98
- data/ruby/trema/barrier-reply.h +0 -44
- data/ruby/trema/barrier-request.c +0 -135
- data/ruby/trema/barrier-request.h +0 -42
- data/ruby/trema/cli.rb +0 -267
- data/ruby/trema/command.rb +0 -41
- data/ruby/trema/command/dump_flows.rb +0 -43
- data/ruby/trema/command/kill.rb +0 -75
- data/ruby/trema/command/killall.rb +0 -38
- data/ruby/trema/command/netns.rb +0 -38
- data/ruby/trema/command/port_down.rb +0 -43
- data/ruby/trema/command/port_up.rb +0 -43
- data/ruby/trema/command/reset_stats.rb +0 -41
- data/ruby/trema/command/ruby.rb +0 -38
- data/ruby/trema/command/run.rb +0 -110
- data/ruby/trema/command/send_packets.rb +0 -46
- data/ruby/trema/command/shell.rb +0 -57
- data/ruby/trema/command/show_stats.rb +0 -65
- data/ruby/trema/command/up.rb +0 -44
- data/ruby/trema/command/version.rb +0 -35
- data/ruby/trema/compat.h +0 -36
- data/ruby/trema/controller.c +0 -691
- data/ruby/trema/controller.h +0 -42
- data/ruby/trema/controller.rb +0 -255
- data/ruby/trema/custom-switch.rb +0 -56
- data/ruby/trema/daemon.rb +0 -184
- data/ruby/trema/default-logger.c +0 -161
- data/ruby/trema/default-logger.h +0 -42
- data/ruby/trema/default-logger.rb +0 -29
- data/ruby/trema/default_openflow_channel_port.rb +0 -26
- data/ruby/trema/desc-stats-reply.rb +0 -75
- data/ruby/trema/dsl.rb +0 -32
- data/ruby/trema/dsl/configuration.rb +0 -145
- data/ruby/trema/dsl/context.rb +0 -69
- data/ruby/trema/dsl/custom-switch.rb +0 -44
- data/ruby/trema/dsl/link.rb +0 -39
- data/ruby/trema/dsl/netns.rb +0 -78
- data/ruby/trema/dsl/parser.rb +0 -70
- data/ruby/trema/dsl/rswitch.rb +0 -47
- data/ruby/trema/dsl/run.rb +0 -47
- data/ruby/trema/dsl/runner.rb +0 -178
- data/ruby/trema/dsl/stanza.rb +0 -51
- data/ruby/trema/dsl/switch.rb +0 -76
- data/ruby/trema/dsl/syntax-error.rb +0 -31
- data/ruby/trema/dsl/syntax.rb +0 -128
- data/ruby/trema/dsl/vhost.rb +0 -106
- data/ruby/trema/dsl/vswitch.rb +0 -45
- data/ruby/trema/echo-reply.c +0 -122
- data/ruby/trema/echo-reply.h +0 -40
- data/ruby/trema/echo-request.c +0 -117
- data/ruby/trema/echo-request.h +0 -40
- data/ruby/trema/echo.c +0 -99
- data/ruby/trema/echo.h +0 -39
- data/ruby/trema/enqueue.rb +0 -87
- data/ruby/trema/error.c +0 -262
- data/ruby/trema/error.h +0 -42
- data/ruby/trema/exact-match.rb +0 -34
- data/ruby/trema/executables.rb +0 -99
- data/ruby/trema/features-reply.c +0 -330
- data/ruby/trema/features-reply.h +0 -54
- data/ruby/trema/features-request.c +0 -134
- data/ruby/trema/features-request.h +0 -42
- data/ruby/trema/flow-mod.c +0 -150
- data/ruby/trema/flow-mod.h +0 -42
- data/ruby/trema/flow-removed.c +0 -280
- data/ruby/trema/flow-removed.h +0 -44
- data/ruby/trema/flow-stats-reply.rb +0 -107
- data/ruby/trema/flow.rb +0 -65
- data/ruby/trema/get-config-reply.c +0 -158
- data/ruby/trema/get-config-reply.h +0 -50
- data/ruby/trema/get-config-request.c +0 -136
- data/ruby/trema/get-config-request.h +0 -42
- data/ruby/trema/hardware-switch.rb +0 -86
- data/ruby/trema/hello.c +0 -133
- data/ruby/trema/hello.h +0 -42
- data/ruby/trema/host.rb +0 -263
- data/ruby/trema/link.rb +0 -177
- data/ruby/trema/list-switches-reply.c +0 -44
- data/ruby/trema/list-switches-reply.h +0 -38
- data/ruby/trema/mac.rb +0 -29
- data/ruby/trema/match.c +0 -621
- data/ruby/trema/match.h +0 -34
- data/ruby/trema/monkey-patch/integer.rb +0 -35
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +0 -34
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -49
- data/ruby/trema/monkey-patch/integer/validators.rb +0 -36
- data/ruby/trema/monkey-patch/module.rb +0 -33
- data/ruby/trema/monkey-patch/module/class-method.rb +0 -38
- data/ruby/trema/monkey-patch/module/deprecation.rb +0 -39
- data/ruby/trema/monkey-patch/string.rb +0 -31
- data/ruby/trema/monkey-patch/string/inflectors.rb +0 -52
- data/ruby/trema/netns.rb +0 -127
- data/ruby/trema/network-component.rb +0 -151
- data/ruby/trema/ofctl.rb +0 -70
- data/ruby/trema/open-vswitch.rb +0 -160
- data/ruby/trema/openflow-error.c +0 -193
- data/ruby/trema/openflow-error.h +0 -51
- data/ruby/trema/openflow-switch.rb +0 -35
- data/ruby/trema/ordered-hash.rb +0 -75
- data/ruby/trema/packet-in.c +0 -1365
- data/ruby/trema/packet-in.h +0 -44
- data/ruby/trema/packet-queue.rb +0 -181
- data/ruby/trema/packetin-filter.rb +0 -124
- data/ruby/trema/path.rb +0 -85
- data/ruby/trema/phost.rb +0 -76
- data/ruby/trema/port-mod.c +0 -232
- data/ruby/trema/port-mod.h +0 -34
- data/ruby/trema/port-stats-reply.rb +0 -109
- data/ruby/trema/port-status-add.rb +0 -60
- data/ruby/trema/port-status-delete.rb +0 -60
- data/ruby/trema/port-status-modify.rb +0 -60
- data/ruby/trema/port-status.c +0 -192
- data/ruby/trema/port-status.h +0 -41
- data/ruby/trema/port.c +0 -398
- data/ruby/trema/port.h +0 -45
- data/ruby/trema/process.rb +0 -103
- data/ruby/trema/queue-get-config-reply.c +0 -205
- data/ruby/trema/queue-get-config-reply.h +0 -45
- data/ruby/trema/queue-get-config-request.c +0 -141
- data/ruby/trema/queue-get-config-request.h +0 -42
- data/ruby/trema/queue-stats-reply.rb +0 -76
- data/ruby/trema/ruby-switch.rb +0 -62
- data/ruby/trema/send-out-port.rb +0 -113
- data/ruby/trema/set-config.c +0 -174
- data/ruby/trema/set-config.h +0 -42
- data/ruby/trema/set-eth-addr.rb +0 -54
- data/ruby/trema/set-eth-dst-addr.rb +0 -52
- data/ruby/trema/set-eth-src-addr.rb +0 -53
- data/ruby/trema/set-ip-addr.rb +0 -54
- data/ruby/trema/set-ip-dst-addr.rb +0 -53
- data/ruby/trema/set-ip-src-addr.rb +0 -52
- data/ruby/trema/set-ip-tos.rb +0 -64
- data/ruby/trema/set-transport-dst-port.rb +0 -53
- data/ruby/trema/set-transport-port.rb +0 -53
- data/ruby/trema/set-transport-src-port.rb +0 -54
- data/ruby/trema/set-vlan-priority.rb +0 -66
- data/ruby/trema/set-vlan-vid.rb +0 -65
- data/ruby/trema/shell.rb +0 -37
- data/ruby/trema/shell/down.rb +0 -37
- data/ruby/trema/shell/killall.rb +0 -38
- data/ruby/trema/shell/link.rb +0 -59
- data/ruby/trema/shell/reset_stats.rb +0 -49
- data/ruby/trema/shell/run.rb +0 -67
- data/ruby/trema/shell/send_packets.rb +0 -40
- data/ruby/trema/shell/show_stats.rb +0 -47
- data/ruby/trema/shell/up.rb +0 -41
- data/ruby/trema/shell/vhost.rb +0 -42
- data/ruby/trema/shell/vswitch.rb +0 -47
- data/ruby/trema/stats-helper.rb +0 -63
- data/ruby/trema/stats-reply.c +0 -540
- data/ruby/trema/stats-reply.h +0 -51
- data/ruby/trema/stats-request.c +0 -715
- data/ruby/trema/stats-request.h +0 -40
- data/ruby/trema/strip-vlan-header.rb +0 -41
- data/ruby/trema/switch-daemon.rb +0 -90
- data/ruby/trema/switch-disconnected.c +0 -38
- data/ruby/trema/switch-disconnected.h +0 -36
- data/ruby/trema/switch-event.c +0 -648
- data/ruby/trema/switch-event.h +0 -27
- data/ruby/trema/switch-manager.rb +0 -119
- data/ruby/trema/switch.c +0 -197
- data/ruby/trema/switch.h +0 -40
- data/ruby/trema/switch.rb +0 -56
- data/ruby/trema/table-stats-reply.rb +0 -85
- data/ruby/trema/timers.rb +0 -95
- data/ruby/trema/trema-ruby-utils.c +0 -66
- data/ruby/trema/trema-ruby-utils.h +0 -42
- data/ruby/trema/trema.c +0 -126
- data/ruby/trema/tremashark.rb +0 -46
- data/ruby/trema/util.rb +0 -116
- data/ruby/trema/vendor-action.rb +0 -82
- data/ruby/trema/vendor-stats-reply.rb +0 -64
- data/ruby/trema/vendor.c +0 -230
- data/ruby/trema/vendor.h +0 -48
- data/ruby/trema/version.rb +0 -28
- data/spec/support/action.rb +0 -49
- data/spec/support/mandatory-option.rb +0 -53
- data/spec/support/matchers/constant.rb +0 -25
- data/spec/support/openflow-message.rb +0 -173
- data/spec/support/port-status.rb +0 -35
- data/spec/trema/app_spec.rb +0 -88
- data/spec/trema/barrier-reply_spec.rb +0 -43
- data/spec/trema/barrier-request_spec.rb +0 -92
- data/spec/trema/cli_spec.rb +0 -156
- data/spec/trema/default-logger_spec.rb +0 -46
- data/spec/trema/dsl/configuration_spec.rb +0 -120
- data/spec/trema/dsl/link_spec.rb +0 -50
- data/spec/trema/dsl/run_spec.rb +0 -72
- data/spec/trema/dsl/runner_spec.rb +0 -247
- data/spec/trema/dsl/switch_spec.rb +0 -69
- data/spec/trema/dsl/syntax_spec.rb +0 -110
- data/spec/trema/dsl/vhost_spec.rb +0 -144
- data/spec/trema/dsl/vswitch_spec.rb +0 -80
- data/spec/trema/echo-reply_spec.rb +0 -84
- data/spec/trema/echo-request_spec.rb +0 -128
- data/spec/trema/enqueue_spec.rb +0 -76
- data/spec/trema/error_spec.rb +0 -81
- data/spec/trema/executables_spec.rb +0 -54
- data/spec/trema/features-reply_spec.rb +0 -91
- data/spec/trema/features-request_spec.rb +0 -93
- data/spec/trema/flow-mod_spec.rb +0 -99
- data/spec/trema/flow-removed_spec.rb +0 -144
- data/spec/trema/get-config-reply_spec.rb +0 -43
- data/spec/trema/get-config-request_spec.rb +0 -92
- data/spec/trema/hardware-switch_spec.rb +0 -54
- data/spec/trema/hello_spec.rb +0 -63
- data/spec/trema/host_spec.rb +0 -191
- data/spec/trema/link_spec.rb +0 -62
- data/spec/trema/list-switches-reply_spec.rb +0 -46
- data/spec/trema/match_spec.rb +0 -111
- data/spec/trema/open-vswitch_spec.rb +0 -121
- data/spec/trema/openflow-error_spec.rb +0 -141
- data/spec/trema/packet-in_spec.rb +0 -717
- data/spec/trema/packet-out_spec.rb +0 -125
- data/spec/trema/packetin-filter_spec.rb +0 -39
- data/spec/trema/port-mod_spec.rb +0 -98
- data/spec/trema/port-status-add_spec.rb +0 -32
- data/spec/trema/port-status-delete_spec.rb +0 -32
- data/spec/trema/port-status-modify_spec.rb +0 -71
- data/spec/trema/port-status_spec.rb +0 -38
- data/spec/trema/port_spec.rb +0 -59
- data/spec/trema/process_spec.rb +0 -69
- data/spec/trema/queue-get-config-reply_spec.rb +0 -65
- data/spec/trema/queue-get-config-request_spec.rb +0 -67
- data/spec/trema/send-out-port_spec.rb +0 -106
- data/spec/trema/set-config_spec.rb +0 -78
- data/spec/trema/set-eth-addr_spec.rb +0 -62
- data/spec/trema/set-ip-addr_spec.rb +0 -81
- data/spec/trema/set-ip-tos_spec.rb +0 -70
- data/spec/trema/set-transport-dst-port_spec.rb +0 -65
- data/spec/trema/set-transport-src-port_spec.rb +0 -65
- data/spec/trema/set-vlan-priority_spec.rb +0 -65
- data/spec/trema/set-vlan-vid_spec.rb +0 -65
- data/spec/trema/shell/vhost_spec.rb +0 -58
- data/spec/trema/shell/vswitch_spec.rb +0 -87
- data/spec/trema/stats-reply_spec.rb +0 -363
- data/spec/trema/stats-request_spec.rb +0 -166
- data/spec/trema/strip-vlan-header_spec.rb +0 -44
- data/spec/trema/switch-daemon_spec.rb +0 -81
- data/spec/trema/switch-disconnected_spec.rb +0 -56
- data/spec/trema/switch-manager_spec.rb +0 -41
- data/spec/trema/tremashark_spec.rb +0 -39
- data/spec/trema/util_spec.rb +0 -88
- data/spec/trema/vendor-action_spec.rb +0 -75
- data/spec/trema/vendor_spec.rb +0 -76
- data/spec/trema_spec.rb +0 -94
- data/src/examples/cbench_switch/README +0 -21
- data/src/examples/cbench_switch/cbench-switch.rb +0 -38
- data/src/examples/cbench_switch/cbench_switch.c +0 -66
- data/src/examples/dumper/dumper.c +0 -362
- data/src/examples/dumper/dumper.conf +0 -7
- data/src/examples/dumper/dumper.rb +0 -195
- data/src/examples/hello_trema/.gitignore +0 -2
- data/src/examples/hello_trema/README.md +0 -2
- data/src/examples/hello_trema/hello-trema.rb +0 -30
- data/src/examples/hello_trema/hello_trema.c +0 -48
- data/src/examples/hello_trema/sample.conf +0 -1
- data/src/examples/learning_switch/README +0 -15
- data/src/examples/learning_switch/fdb.rb +0 -110
- data/src/examples/learning_switch/learning-switch.rb +0 -90
- data/src/examples/learning_switch/learning_switch.c +0 -217
- data/src/examples/learning_switch/learning_switch.conf +0 -18
- data/src/examples/list_switches/README +0 -19
- data/src/examples/list_switches/list-switches.rb +0 -43
- data/src/examples/list_switches/list_switches.c +0 -79
- data/src/examples/list_switches/list_switches.conf +0 -15
- data/src/examples/match_compare/match-compare.conf +0 -30
- data/src/examples/match_compare/match-compare.rb +0 -97
- data/src/examples/multi_learning_switch/README +0 -14
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +0 -94
- data/src/examples/multi_learning_switch/multi_learning_switch.c +0 -294
- data/src/examples/multi_learning_switch/multi_learning_switch.conf +0 -17
- data/src/examples/openflow_message/README +0 -11
- data/src/examples/openflow_message/echo.c +0 -80
- data/src/examples/openflow_message/echo.rb +0 -56
- data/src/examples/openflow_message/example.rb +0 -60
- data/src/examples/openflow_message/features-request.rb +0 -96
- data/src/examples/openflow_message/features_request.c +0 -167
- data/src/examples/openflow_message/hello.c +0 -68
- data/src/examples/openflow_message/hello.rb +0 -43
- data/src/examples/openflow_message/set-config.rb +0 -57
- data/src/examples/openflow_message/set_config.c +0 -68
- data/src/examples/openflow_message/vendor-action.rb +0 -43
- data/src/examples/openflow_message/vendor-stats-request.rb +0 -66
- data/src/examples/openflow_message/vendor_action.c +0 -103
- data/src/examples/openflow_switch/echo_switch.c +0 -89
- data/src/examples/openflow_switch/hello_switch.c +0 -85
- data/src/examples/packet_in/README +0 -15
- data/src/examples/packet_in/packet-in.rb +0 -37
- data/src/examples/packet_in/packet_in.c +0 -53
- data/src/examples/packet_in/packet_in.conf +0 -15
- data/src/examples/packetin_filter_config/README +0 -12
- data/src/examples/packetin_filter_config/add_filter.c +0 -71
- data/src/examples/packetin_filter_config/delete_filter.c +0 -63
- data/src/examples/packetin_filter_config/delete_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/dump_filter.c +0 -63
- data/src/examples/packetin_filter_config/dump_filter_strict.c +0 -73
- data/src/examples/packetin_filter_config/packetin_filter_config.c +0 -132
- data/src/examples/packetin_filter_config/packetin_filter_config.conf +0 -7
- data/src/examples/packetin_filter_config/utils.c +0 -100
- data/src/examples/packetin_filter_config/utils.h +0 -40
- data/src/examples/patch_panel/network.conf +0 -14
- data/src/examples/patch_panel/patch-panel.conf +0 -1
- data/src/examples/patch_panel/patch-panel.rb +0 -59
- data/src/examples/repeater_hub/README +0 -8
- data/src/examples/repeater_hub/repeater-hub.rb +0 -41
- data/src/examples/repeater_hub/repeater-hub_spec.rb +0 -154
- data/src/examples/repeater_hub/repeater_hub.c +0 -81
- data/src/examples/repeater_hub/repeater_hub.conf +0 -28
- data/src/examples/simple_router/README +0 -18
- data/src/examples/simple_router/arp-table.rb +0 -81
- data/src/examples/simple_router/interface.rb +0 -90
- data/src/examples/simple_router/routing-table.rb +0 -60
- data/src/examples/simple_router/simple-router.rb +0 -191
- data/src/examples/simple_router/simple_router.conf +0 -24
- data/src/examples/simple_router/simple_router_netns.conf +0 -15
- data/src/examples/simple_router/simple_router_network.conf +0 -6
- data/src/examples/switch_event_config/.gitignore +0 -6
- data/src/examples/switch_event_config/add_forward_entry.c +0 -227
- data/src/examples/switch_event_config/delete_forward_entry.c +0 -226
- data/src/examples/switch_event_config/dump_forward_entries.c +0 -190
- data/src/examples/switch_event_config/network.conf +0 -2
- data/src/examples/switch_event_config/set_forward_entries.c +0 -210
- data/src/examples/switch_info/README +0 -13
- data/src/examples/switch_info/switch-info.rb +0 -44
- data/src/examples/switch_info/switch_info.c +0 -78
- data/src/examples/switch_info/switch_info.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.conf +0 -3
- data/src/examples/switch_monitor/switch-monitor.rb +0 -56
- data/src/examples/switch_monitor/switch_monitor.c +0 -152
- data/src/examples/traffic_monitor/counter.c +0 -72
- data/src/examples/traffic_monitor/counter.h +0 -46
- data/src/examples/traffic_monitor/counter.rb +0 -44
- data/src/examples/traffic_monitor/fdb.c +0 -74
- data/src/examples/traffic_monitor/fdb.h +0 -48
- data/src/examples/traffic_monitor/fdb.rb +0 -42
- data/src/examples/traffic_monitor/traffic-monitor.rb +0 -98
- data/src/examples/traffic_monitor/traffic_monitor.c +0 -161
- data/src/examples/traffic_monitor/traffic_monitor.conf +0 -16
- data/src/examples/transparent_firewall/README.md +0 -61
- data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +0 -713
- data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +0 -3440
- data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +0 -11342
- data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +0 -1937
- data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +0 -7329
- data/src/examples/transparent_firewall/block-rfc1918.rb +0 -86
- data/src/examples/transparent_firewall/pass-delegated.rb +0 -178
- data/src/examples/transparent_firewall/regen_aggregated.sh +0 -53
- data/src/examples/transparent_firewall/stats-to-cidrs.rb +0 -59
- data/src/lib/arp.h +0 -64
- data/src/lib/bool.h +0 -47
- data/src/lib/buffer.c +0 -304
- data/src/lib/buffer.h +0 -54
- data/src/lib/byteorder.c +0 -571
- data/src/lib/byteorder.h +0 -108
- data/src/lib/checks.h +0 -40
- data/src/lib/chibach.c +0 -392
- data/src/lib/chibach.h +0 -69
- data/src/lib/chibach_private.c +0 -168
- data/src/lib/chibach_private.h +0 -50
- data/src/lib/daemon.c +0 -429
- data/src/lib/daemon.h +0 -40
- data/src/lib/doubly_linked_list.c +0 -284
- data/src/lib/doubly_linked_list.h +0 -86
- data/src/lib/ether.c +0 -47
- data/src/lib/ether.h +0 -92
- data/src/lib/etherip.h +0 -44
- data/src/lib/event_forward_interface.c +0 -788
- data/src/lib/event_forward_interface.h +0 -138
- data/src/lib/event_handler.c +0 -419
- data/src/lib/event_handler.h +0 -57
- data/src/lib/external_callback.c +0 -126
- data/src/lib/external_callback.h +0 -46
- data/src/lib/hash_table.c +0 -415
- data/src/lib/hash_table.h +0 -136
- data/src/lib/icmp.h +0 -72
- data/src/lib/igmp.h +0 -48
- data/src/lib/ipv4.h +0 -64
- data/src/lib/ipv6.h +0 -46
- data/src/lib/linked_list.c +0 -244
- data/src/lib/linked_list.h +0 -84
- data/src/lib/log.c +0 -636
- data/src/lib/log.h +0 -77
- data/src/lib/management_interface.c +0 -359
- data/src/lib/management_interface.h +0 -40
- data/src/lib/management_service_interface.c +0 -102
- data/src/lib/management_service_interface.h +0 -134
- data/src/lib/match.h +0 -82
- data/src/lib/match_table.c +0 -606
- data/src/lib/match_table.h +0 -49
- data/src/lib/message_queue.c +0 -143
- data/src/lib/message_queue.h +0 -59
- data/src/lib/messenger.c +0 -1821
- data/src/lib/messenger.h +0 -145
- data/src/lib/openflow_application_interface.c +0 -1800
- data/src/lib/openflow_application_interface.h +0 -359
- data/src/lib/openflow_message.c +0 -4240
- data/src/lib/openflow_message.h +0 -291
- data/src/lib/openflow_service_interface.h +0 -58
- data/src/lib/openflow_switch_interface.c +0 -1378
- data/src/lib/openflow_switch_interface.h +0 -262
- data/src/lib/packet_info.c +0 -336
- data/src/lib/packet_info.h +0 -233
- data/src/lib/packet_parser.c +0 -522
- data/src/lib/packetin_filter_interface.c +0 -292
- data/src/lib/packetin_filter_interface.h +0 -125
- data/src/lib/persistent_storage.c +0 -478
- data/src/lib/persistent_storage.h +0 -44
- data/src/lib/secure_channel.c +0 -496
- data/src/lib/secure_channel.h +0 -43
- data/src/lib/stat.c +0 -248
- data/src/lib/stat.h +0 -51
- data/src/lib/tcp.h +0 -62
- data/src/lib/timer.c +0 -349
- data/src/lib/timer.h +0 -51
- data/src/lib/trema.c +0 -776
- data/src/lib/trema.h +0 -80
- data/src/lib/trema.hpp +0 -49
- data/src/lib/trema_private.c +0 -175
- data/src/lib/trema_private.h +0 -64
- data/src/lib/trema_wrapper.c +0 -59
- data/src/lib/trema_wrapper.h +0 -66
- data/src/lib/udp.h +0 -41
- data/src/lib/utility.c +0 -625
- data/src/lib/utility.h +0 -84
- data/src/lib/wrapper.c +0 -121
- data/src/lib/wrapper.h +0 -76
- data/src/management/application.c +0 -222
- data/src/management/echo.c +0 -183
- data/src/management/set_logging_level.c +0 -151
- data/src/management/show_stats.c +0 -148
- data/src/management/trema_manager +0 -184
- data/src/packetin_filter/README +0 -17
- data/src/packetin_filter/packetin_filter.c +0 -575
- data/src/switch_manager/README +0 -20
- data/src/switch_manager/cookie_table.c +0 -290
- data/src/switch_manager/cookie_table.h +0 -70
- data/src/switch_manager/dpid_table.c +0 -108
- data/src/switch_manager/dpid_table.h +0 -43
- data/src/switch_manager/event_forward_entry_manipulation.c +0 -120
- data/src/switch_manager/event_forward_entry_manipulation.h +0 -31
- data/src/switch_manager/ofpmsg_recv.c +0 -497
- data/src/switch_manager/ofpmsg_recv.h +0 -39
- data/src/switch_manager/ofpmsg_send.c +0 -274
- data/src/switch_manager/ofpmsg_send.h +0 -51
- data/src/switch_manager/secure_channel_listener.c +0 -296
- data/src/switch_manager/secure_channel_listener.h +0 -40
- data/src/switch_manager/secure_channel_receiver.c +0 -129
- data/src/switch_manager/secure_channel_receiver.h +0 -40
- data/src/switch_manager/secure_channel_sender.c +0 -131
- data/src/switch_manager/secure_channel_sender.h +0 -41
- data/src/switch_manager/service_interface.c +0 -180
- data/src/switch_manager/service_interface.h +0 -44
- data/src/switch_manager/switch.c +0 -988
- data/src/switch_manager/switch.h +0 -50
- data/src/switch_manager/switch_manager.c +0 -643
- data/src/switch_manager/switch_manager.h +0 -65
- data/src/switch_manager/switch_option.c +0 -30
- data/src/switch_manager/switch_option.h +0 -41
- data/src/switch_manager/switchinfo.h +0 -81
- data/src/switch_manager/xid_table.c +0 -182
- data/src/switch_manager/xid_table.h +0 -53
- data/src/tremashark/README +0 -79
- data/src/tremashark/packet_capture.c +0 -358
- data/src/tremashark/pcap_private.h +0 -45
- data/src/tremashark/pcap_queue.c +0 -195
- data/src/tremashark/pcap_queue.h +0 -56
- data/src/tremashark/plugin/.gitignore +0 -6
- data/src/tremashark/plugin/packet-trema/.gitignore +0 -5
- data/src/tremashark/plugin/packet-trema/Makefile +0 -77
- data/src/tremashark/plugin/packet-trema/Makefile.am +0 -110
- data/src/tremashark/plugin/packet-trema/Makefile.common +0 -29
- data/src/tremashark/plugin/packet-trema/moduleinfo.h +0 -39
- data/src/tremashark/plugin/packet-trema/packet-trema.c +0 -1671
- data/src/tremashark/plugin/packet-trema/plugin.c +0 -31
- data/src/tremashark/plugin/user_dlts +0 -2
- data/src/tremashark/queue.c +0 -167
- data/src/tremashark/queue.h +0 -58
- data/src/tremashark/stdin_relay.c +0 -257
- data/src/tremashark/syslog_relay.c +0 -247
- data/src/tremashark/tremashark.c +0 -554
- data/trema +0 -11
- data/trema-config +0 -11
- data/unittests/buffer_stubs.c +0 -72
- data/unittests/cmockery_trema.c +0 -121
- data/unittests/cmockery_trema.h +0 -95
- data/unittests/lib/buffer_test.c +0 -368
- data/unittests/lib/byteorder_test.c +0 -1798
- data/unittests/lib/daemon_test.c +0 -804
- data/unittests/lib/doubly_linked_list_test.c +0 -348
- data/unittests/lib/ether_test.c +0 -125
- data/unittests/lib/event_forward_interface_test.c +0 -1676
- data/unittests/lib/external_callback_test.c +0 -282
- data/unittests/lib/hash_table_test.c +0 -278
- data/unittests/lib/linked_list_test.c +0 -434
- data/unittests/lib/log_test.c +0 -672
- data/unittests/lib/management_interface_test.c +0 -238
- data/unittests/lib/management_service_interface_test.c +0 -317
- data/unittests/lib/match_table_test.c +0 -1507
- data/unittests/lib/message_queue_test.c +0 -381
- data/unittests/lib/messenger_test.c +0 -623
- data/unittests/lib/openflow_application_interface_test.c +0 -3713
- data/unittests/lib/openflow_message_test.c +0 -8047
- data/unittests/lib/packet_info_test.c +0 -558
- data/unittests/lib/packet_parser_test.c +0 -784
- data/unittests/lib/packetin_filter_interface_test.c +0 -721
- data/unittests/lib/persistent_storage_test.c +0 -800
- data/unittests/lib/stat_test.c +0 -433
- data/unittests/lib/test_packets/arp_rep.cap +0 -0
- data/unittests/lib/test_packets/arp_req.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
- data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
- data/unittests/lib/test_packets/ipx.cap +0 -0
- data/unittests/lib/test_packets/lldp.cap +0 -0
- data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
- data/unittests/lib/test_packets/rarp_req.cap +0 -0
- data/unittests/lib/test_packets/tcp.cap +0 -0
- data/unittests/lib/test_packets/tcp_syn.cap +0 -0
- data/unittests/lib/test_packets/udp.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
- data/unittests/lib/timer_test.c +0 -246
- data/unittests/lib/trema_private_test.c +0 -321
- data/unittests/lib/trema_test.c +0 -1030
- data/unittests/lib/utility_test.c +0 -711
- data/unittests/lib/wrapper_test.c +0 -228
- data/unittests/packetin_filter/packetin_filter_test.c +0 -476
- data/unittests/switch_manager/switch_manager_test.c +0 -1183
- data/unittests/wrapper_stubs.c +0 -37
- data/vendor/.gitignore +0 -6
- data/vendor/README.md +0 -29
- data/vendor/cmockery-20110428.tar.gz +0 -0
- data/vendor/oflops-0.03.trema1.tar.gz +0 -0
- data/vendor/oflops_no_snmp+1.0.0.diff +0 -340
- data/vendor/openflow-1.0.0.tar.gz +0 -0
- data/vendor/openflow.git.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2.trema1.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2_librt-check.diff +0 -21
- data/vendor/packet-openflow.diff +0 -13
- data/vendor/ruby-ifconfig-1.2/COPYING +0 -340
- data/vendor/ruby-ifconfig-1.2/Changelog +0 -16
- data/vendor/ruby-ifconfig-1.2/INSTALL +0 -239
- data/vendor/ruby-ifconfig-1.2/README +0 -38
- data/vendor/ruby-ifconfig-1.2/Rakefile +0 -14
- data/vendor/ruby-ifconfig-1.2/TODO +0 -8
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +0 -14
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +0 -17
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +0 -24
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +0 -60
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +0 -20
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +0 -36
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +0 -10
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +0 -71
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +0 -72
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +0 -69
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +0 -3
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +0 -84
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +0 -130
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +0 -43
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +0 -112
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +0 -55
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +0 -38
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +0 -77
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/setup.rb +0 -1306
- data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +0 -4
- data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +0 -31
- data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +0 -33
- data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +0 -35
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +0 -40
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +0 -49
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +0 -39
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +0 -44
data/ruby/trema/openflow-error.h
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2008-2013 NEC Corporation
|
|
3
|
-
*
|
|
4
|
-
* This program is free software; you can redistribute it and/or modify
|
|
5
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
6
|
-
* published by the Free Software Foundation.
|
|
7
|
-
*
|
|
8
|
-
* This program is distributed in the hope that it will be useful,
|
|
9
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
-
* GNU General Public License for more details.
|
|
12
|
-
*
|
|
13
|
-
* You should have received a copy of the GNU General Public License along
|
|
14
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
#ifndef OPENFLOW_ERROR_H
|
|
20
|
-
#define OPENFLOW_ERROR_H
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#include "ruby.h"
|
|
24
|
-
#include "trema.h"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
extern VALUE cOpenflowError;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
void Init_openflow_error( void );
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
void handle_openflow_error(
|
|
34
|
-
uint64_t datapath_id,
|
|
35
|
-
uint32_t transaction_id,
|
|
36
|
-
uint16_t type,
|
|
37
|
-
uint16_t code,
|
|
38
|
-
const buffer *body,
|
|
39
|
-
void *user_data
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#endif // OPENFLOW_ERROR_H
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/*
|
|
47
|
-
* Local variables:
|
|
48
|
-
* c-basic-offset: 2
|
|
49
|
-
* indent-tabs-mode: nil
|
|
50
|
-
* End:
|
|
51
|
-
*/
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 NEC Corporation
|
|
3
|
-
#
|
|
4
|
-
# This program is free software; you can redistribute it and/or modify
|
|
5
|
-
# it under the terms of the GNU General Public License, version 2, as
|
|
6
|
-
# published by the Free Software Foundation.
|
|
7
|
-
#
|
|
8
|
-
# This program is distributed in the hope that it will be useful,
|
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
-
# GNU General Public License for more details.
|
|
12
|
-
#
|
|
13
|
-
# You should have received a copy of the GNU General Public License along
|
|
14
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
require 'trema/network-component'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
module Trema
|
|
23
|
-
#
|
|
24
|
-
# Keeps a list of {HardwareSwitch} and {OpenVswitch}
|
|
25
|
-
#
|
|
26
|
-
class OpenflowSwitch < NetworkComponent
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
### Local variables:
|
|
32
|
-
### mode: Ruby
|
|
33
|
-
### coding: utf-8-unix
|
|
34
|
-
### indent-tabs-mode: nil
|
|
35
|
-
### End:
|
data/ruby/trema/ordered-hash.rb
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright (C) 2008-2013 NEC Corporation
|
|
3
|
-
#
|
|
4
|
-
# This program is free software; you can redistribute it and/or modify
|
|
5
|
-
# it under the terms of the GNU General Public License, version 2, as
|
|
6
|
-
# published by the Free Software Foundation.
|
|
7
|
-
#
|
|
8
|
-
# This program is distributed in the hope that it will be useful,
|
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
-
# GNU General Public License for more details.
|
|
12
|
-
#
|
|
13
|
-
# You should have received a copy of the GNU General Public License along
|
|
14
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
module Trema
|
|
20
|
-
class OrderedHash
|
|
21
|
-
attr_reader :keys
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def initialize
|
|
25
|
-
@keys = Array.new
|
|
26
|
-
@content = Hash.new
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def size
|
|
31
|
-
@content.size
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def [](key)
|
|
36
|
-
@content[ key]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def []=(key, value)
|
|
41
|
-
@content[ key] = value
|
|
42
|
-
unless @keys.include?(key)
|
|
43
|
-
@keys << key
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def values
|
|
49
|
-
@keys.map do | each |
|
|
50
|
-
@content[ each]
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def clear
|
|
56
|
-
@keys.clear
|
|
57
|
-
@content.clear
|
|
58
|
-
self
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def each(&block)
|
|
63
|
-
@keys.each do | each |
|
|
64
|
-
block.call each, @content[ each]
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
### Local variables:
|
|
72
|
-
### mode: Ruby
|
|
73
|
-
### coding: utf-8
|
|
74
|
-
### indent-tabs-mode: nil
|
|
75
|
-
### End:
|
data/ruby/trema/packet-in.c
DELETED
|
@@ -1,1365 +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 <string.h>
|
|
20
|
-
#include "buffer.h"
|
|
21
|
-
#include "ruby.h"
|
|
22
|
-
#include "trema.h"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
extern VALUE mTrema;
|
|
26
|
-
VALUE cPacketIn;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
#define PACKET_IN_RETURN_MAC( packet_member ) \
|
|
30
|
-
{ \
|
|
31
|
-
VALUE ret = ULL2NUM( mac_to_uint64( get_packet_in_info( self )->packet_member ) ); \
|
|
32
|
-
return rb_funcall( rb_eval_string( "Pio::Mac" ), rb_intern( "new" ), 1, ret ); \
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#define PACKET_IN_RETURN_IP( packet_member ) \
|
|
36
|
-
{ \
|
|
37
|
-
VALUE ret = ULONG2NUM( get_packet_in_info( self )->packet_member ); \
|
|
38
|
-
return rb_funcall( rb_eval_string( "Pio::IPv4Address" ), rb_intern( "new" ), 1, ret ); \
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
#define PACKET_IN_RETURN_NUM( flag, func, packet_member ) \
|
|
42
|
-
{ \
|
|
43
|
-
if ( get_packet_in_info( self )->format & flag ) { \
|
|
44
|
-
return func( get_packet_in_info( self )->packet_member ); \
|
|
45
|
-
} \
|
|
46
|
-
else { \
|
|
47
|
-
return Qnil; \
|
|
48
|
-
} \
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
typedef struct rb_packet_in {
|
|
53
|
-
packet_in packet_in;
|
|
54
|
-
buffer *data;
|
|
55
|
-
} rb_packet_in;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
static void
|
|
59
|
-
packet_in_free( rb_packet_in *_packet_in ) {
|
|
60
|
-
free_buffer( _packet_in->data );
|
|
61
|
-
xfree( _packet_in );
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
static VALUE
|
|
66
|
-
packet_in_alloc( VALUE klass ) {
|
|
67
|
-
rb_packet_in *_packet_in = xmalloc( sizeof( rb_packet_in ) );
|
|
68
|
-
memset( &_packet_in->packet_in, 0, sizeof( packet_in ) );
|
|
69
|
-
_packet_in->data = alloc_buffer_with_length( 1 );
|
|
70
|
-
parse_packet( _packet_in->data );
|
|
71
|
-
_packet_in->packet_in.data = _packet_in->data;
|
|
72
|
-
return Data_Wrap_Struct( klass, 0, packet_in_free, _packet_in );
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
static VALUE
|
|
77
|
-
packet_in_init_copy( VALUE self, VALUE orig ) {
|
|
78
|
-
if ( self == orig ) {
|
|
79
|
-
return self;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
rb_packet_in *self_pin, *orig_pin;
|
|
83
|
-
Data_Get_Struct( self, rb_packet_in, self_pin );
|
|
84
|
-
Data_Get_Struct( self, rb_packet_in, orig_pin );
|
|
85
|
-
|
|
86
|
-
memcpy( &self_pin->packet_in, &orig_pin->packet_in, sizeof( packet_in ) );
|
|
87
|
-
free_buffer( self_pin->data );
|
|
88
|
-
self_pin->data = duplicate_buffer( orig_pin->data );
|
|
89
|
-
parse_packet( self_pin->data );
|
|
90
|
-
self_pin->packet_in.data = self_pin->data;
|
|
91
|
-
|
|
92
|
-
return self;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
static packet_in *
|
|
97
|
-
get_packet_in( VALUE self ) {
|
|
98
|
-
rb_packet_in *cpacket;
|
|
99
|
-
Data_Get_Struct( self, rb_packet_in, cpacket );
|
|
100
|
-
return &cpacket->packet_in;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
static packet_info *
|
|
105
|
-
get_packet_in_info( VALUE self ) {
|
|
106
|
-
rb_packet_in *cpacket;
|
|
107
|
-
Data_Get_Struct( self, rb_packet_in, cpacket );
|
|
108
|
-
return ( packet_info * ) cpacket->data->user_data;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
/*
|
|
113
|
-
* Message originator identifier.
|
|
114
|
-
*
|
|
115
|
-
* @return [Number] the value of datapath_id.
|
|
116
|
-
*/
|
|
117
|
-
static VALUE
|
|
118
|
-
packet_in_datapath_id( VALUE self ) {
|
|
119
|
-
return ULL2NUM( get_packet_in( self )->datapath_id );
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
/*
|
|
124
|
-
* For this asynchronous message the transaction_id is set to zero.
|
|
125
|
-
*
|
|
126
|
-
* @return [Number] the value of transaction_id.
|
|
127
|
-
*/
|
|
128
|
-
static VALUE
|
|
129
|
-
packet_in_transaction_id( VALUE self ) {
|
|
130
|
-
return ULONG2NUM( get_packet_in( self )->transaction_id );
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/*
|
|
135
|
-
* Buffer id value signifies if the entire frame (packet is not buffered) or
|
|
136
|
-
* portion of it (packet is buffered) is included in the data field of
|
|
137
|
-
* this +OFPT_PACKET_IN+ message.
|
|
138
|
-
*
|
|
139
|
-
* @return [Number] the value of buffer id.
|
|
140
|
-
*/
|
|
141
|
-
static VALUE
|
|
142
|
-
packet_in_buffer_id( VALUE self ) {
|
|
143
|
-
return ULONG2NUM( get_packet_in( self )->buffer_id );
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
/*
|
|
148
|
-
* A buffer_id value either than +UINT32_MAX+ marks the packet_in as buffered.
|
|
149
|
-
*
|
|
150
|
-
* @return [Boolean] whether the packet_in is buffered or not.
|
|
151
|
-
*/
|
|
152
|
-
static VALUE
|
|
153
|
-
packet_in_is_buffered( VALUE self ) {
|
|
154
|
-
if ( get_packet_in( self )->buffer_id == UINT32_MAX ) {
|
|
155
|
-
return Qfalse;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
return Qtrue;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
/*
|
|
164
|
-
* The port the frame was received.
|
|
165
|
-
*
|
|
166
|
-
* @return [Number] the value of in_port.
|
|
167
|
-
*/
|
|
168
|
-
static VALUE
|
|
169
|
-
packet_in_in_port( VALUE self ) {
|
|
170
|
-
return UINT2NUM( get_packet_in( self )->in_port );
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
/*
|
|
175
|
-
* The full length of the received frame.
|
|
176
|
-
*
|
|
177
|
-
* @return [Number] the value of total_len.
|
|
178
|
-
*/
|
|
179
|
-
static VALUE
|
|
180
|
-
packet_in_total_len( VALUE self ) {
|
|
181
|
-
return UINT2NUM( get_packet_in( self )->total_len );
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
/*
|
|
186
|
-
* A String that holds the entire or portion of the received frame.
|
|
187
|
-
* Length of data, total_len - 20 bytes.
|
|
188
|
-
*
|
|
189
|
-
* @return [String] the value of data.
|
|
190
|
-
*/
|
|
191
|
-
static VALUE
|
|
192
|
-
packet_in_data( VALUE self ) {
|
|
193
|
-
const buffer *buf = get_packet_in( self )->data;
|
|
194
|
-
return rb_str_new( buf->data, ( long ) buf->length );
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
/*
|
|
199
|
-
* The reason why the +OFPT_PACKET_IN+ message was sent.
|
|
200
|
-
*
|
|
201
|
-
* @return [Number] the value of reason.
|
|
202
|
-
*/
|
|
203
|
-
static VALUE
|
|
204
|
-
packet_in_reason( VALUE self ) {
|
|
205
|
-
return UINT2NUM( ( unsigned int ) get_packet_in( self )->reason );
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
/*
|
|
210
|
-
* The source MAC address.
|
|
211
|
-
*
|
|
212
|
-
* @return [Mac] the value of source MAC address as a Mac object.
|
|
213
|
-
*/
|
|
214
|
-
static VALUE
|
|
215
|
-
packet_in_macsa( VALUE self ) {
|
|
216
|
-
PACKET_IN_RETURN_MAC( eth_macsa );
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
/*
|
|
221
|
-
* The destination MAC address.
|
|
222
|
-
*
|
|
223
|
-
* @return [Mac] the value of destination MAC address as a
|
|
224
|
-
* Trema::MAC object.
|
|
225
|
-
*/
|
|
226
|
-
static VALUE
|
|
227
|
-
packet_in_macda( VALUE self ) {
|
|
228
|
-
PACKET_IN_RETURN_MAC( eth_macda );
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
/*
|
|
233
|
-
* The ethernet type.
|
|
234
|
-
*
|
|
235
|
-
* @return [Integer] the value of ethernet type.
|
|
236
|
-
*/
|
|
237
|
-
static VALUE
|
|
238
|
-
packet_in_eth_type( VALUE self ) {
|
|
239
|
-
return UINT2NUM( get_packet_in_info( self )->eth_type );
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
/*
|
|
244
|
-
* Is it an IEEE 802.1q packet?
|
|
245
|
-
*
|
|
246
|
-
* @return [Boolean] whether the packet is an IEEE 802.1q or not.
|
|
247
|
-
*/
|
|
248
|
-
static VALUE
|
|
249
|
-
packet_in_is_vtag( VALUE self ) {
|
|
250
|
-
if ( ( get_packet_in_info( self )->format & ETH_8021Q ) ) {
|
|
251
|
-
return Qtrue;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
return Qfalse;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
/*
|
|
260
|
-
* The vlan tag protocol identifier (tpid).
|
|
261
|
-
*
|
|
262
|
-
* @return [Integer] the value of the vlan tag protocol identifier.
|
|
263
|
-
*/
|
|
264
|
-
static VALUE
|
|
265
|
-
packet_in_vlan_tpid( VALUE self ) {
|
|
266
|
-
PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_tpid );
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
/*
|
|
271
|
-
* The vlan tag control identifier (tci).
|
|
272
|
-
*
|
|
273
|
-
* @return [Integer] the value of the vlan tag control identifier.
|
|
274
|
-
*/
|
|
275
|
-
static VALUE
|
|
276
|
-
packet_in_vlan_tci( VALUE self ) {
|
|
277
|
-
PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_tci );
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
/*
|
|
282
|
-
* The vlan priority.
|
|
283
|
-
*
|
|
284
|
-
* @return [Integer] the value of the vlan priority.
|
|
285
|
-
*/
|
|
286
|
-
static VALUE
|
|
287
|
-
packet_in_vlan_prio( VALUE self ) {
|
|
288
|
-
PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_prio );
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
/*
|
|
293
|
-
* The vlan canonical format indicator (cfi).
|
|
294
|
-
*
|
|
295
|
-
* @return [Integer] the value of the vlan canonical format indicator.
|
|
296
|
-
*/
|
|
297
|
-
static VALUE
|
|
298
|
-
packet_in_vlan_cfi( VALUE self ) {
|
|
299
|
-
PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_cfi );
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
/*
|
|
304
|
-
* The vlan identifier.
|
|
305
|
-
*
|
|
306
|
-
* @return [Integer] the value of the vlan identifier.
|
|
307
|
-
*/
|
|
308
|
-
static VALUE
|
|
309
|
-
packet_in_vlan_vid( VALUE self ) {
|
|
310
|
-
PACKET_IN_RETURN_NUM( ETH_8021Q, UINT2NUM, vlan_vid );
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
/*
|
|
315
|
-
* Is it an ARP packet?
|
|
316
|
-
*
|
|
317
|
-
* @return [Boolean] whether the packet is an ARP packet or not.
|
|
318
|
-
*/
|
|
319
|
-
static VALUE
|
|
320
|
-
packet_in_is_arp( VALUE self ) {
|
|
321
|
-
if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
|
|
322
|
-
return Qtrue;
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
return Qfalse;
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
/*
|
|
331
|
-
* Is it an ARP request packet?
|
|
332
|
-
*
|
|
333
|
-
* @return [Boolean] whether the packet is an ARP request packet or not.
|
|
334
|
-
*/
|
|
335
|
-
static VALUE
|
|
336
|
-
packet_in_is_arp_request( VALUE self ) {
|
|
337
|
-
if ( packet_type_arp_request( get_packet_in( self )->data ) ) {
|
|
338
|
-
return Qtrue;
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
return Qfalse;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
/*
|
|
347
|
-
* Is it an ARP reply packet?
|
|
348
|
-
*
|
|
349
|
-
* @return [Boolean] whether the packet is an ARP reply packet or not.
|
|
350
|
-
*/
|
|
351
|
-
static VALUE
|
|
352
|
-
packet_in_is_arp_reply( VALUE self ) {
|
|
353
|
-
if ( packet_type_arp_reply( get_packet_in( self )->data ) ) {
|
|
354
|
-
return Qtrue;
|
|
355
|
-
}
|
|
356
|
-
else {
|
|
357
|
-
return Qfalse;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
/*
|
|
363
|
-
* The ARP operation code.
|
|
364
|
-
*
|
|
365
|
-
* @return [Integer] the value of the ARP opcode field.
|
|
366
|
-
*/
|
|
367
|
-
static VALUE
|
|
368
|
-
packet_in_arp_oper( VALUE self ) {
|
|
369
|
-
PACKET_IN_RETURN_NUM( NW_ARP, UINT2NUM, arp_ar_op );
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
/*
|
|
374
|
-
* The ARP source hardware address of a packet.
|
|
375
|
-
*
|
|
376
|
-
* @return [Mac, nil]
|
|
377
|
-
* the value of the ARP source hardware address as a Mac object or nil
|
|
378
|
-
* if packet not an ARP.
|
|
379
|
-
*/
|
|
380
|
-
static VALUE
|
|
381
|
-
packet_in_arp_sha( VALUE self ) {
|
|
382
|
-
if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
|
|
383
|
-
PACKET_IN_RETURN_MAC( arp_sha );
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
return Qnil;
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
/*
|
|
392
|
-
* The ARP source protocol address of a packet.
|
|
393
|
-
*
|
|
394
|
-
* @return [Pio::IPv4Address, nil]
|
|
395
|
-
* the value of ARP source protocol address as a Pio::IPv4Address object or nil if
|
|
396
|
-
* packet is not an ARP.
|
|
397
|
-
*/
|
|
398
|
-
static VALUE
|
|
399
|
-
packet_in_arp_spa( VALUE self ) {
|
|
400
|
-
if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
|
|
401
|
-
PACKET_IN_RETURN_IP( arp_spa );
|
|
402
|
-
}
|
|
403
|
-
else {
|
|
404
|
-
return Qnil;
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
/*
|
|
410
|
-
* The ARP target hardware address of a packet.
|
|
411
|
-
*
|
|
412
|
-
* @return [Mac]
|
|
413
|
-
* the value of ARP target hardware address as a Mac object or nil if
|
|
414
|
-
* packet is not an ARP.
|
|
415
|
-
*/
|
|
416
|
-
static VALUE
|
|
417
|
-
packet_in_arp_tha( VALUE self ) {
|
|
418
|
-
if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
|
|
419
|
-
PACKET_IN_RETURN_MAC( arp_tha );
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
return Qnil;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
/*
|
|
428
|
-
* The ARP target protocol address of a packet.
|
|
429
|
-
*
|
|
430
|
-
* @return [Pio::IPv4Address]
|
|
431
|
-
* the value of ARP target protocol address as a Pio::IPv4Address object or nil if
|
|
432
|
-
* packet is not an ARP.
|
|
433
|
-
*/
|
|
434
|
-
static VALUE
|
|
435
|
-
packet_in_arp_tpa( VALUE self ) {
|
|
436
|
-
if ( ( get_packet_in_info( self )->format & NW_ARP ) ) {
|
|
437
|
-
PACKET_IN_RETURN_IP( arp_tpa );
|
|
438
|
-
}
|
|
439
|
-
else {
|
|
440
|
-
return Qnil;
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
/*
|
|
446
|
-
* Is it an RARP packet?
|
|
447
|
-
*
|
|
448
|
-
* @return [Boolean] whether the packet is an RARP packet or not.
|
|
449
|
-
*/
|
|
450
|
-
static VALUE
|
|
451
|
-
packet_in_is_rarp( VALUE self ) {
|
|
452
|
-
if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
|
|
453
|
-
return Qtrue;
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
return Qfalse;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
/*
|
|
462
|
-
* Is it an RARP request packet?
|
|
463
|
-
*
|
|
464
|
-
* @return [Boolean] whether the packet is an RARP request packet or not.
|
|
465
|
-
*/
|
|
466
|
-
static VALUE
|
|
467
|
-
packet_in_is_rarp_request( VALUE self ) {
|
|
468
|
-
if ( packet_type_rarp_request( get_packet_in( self )->data ) ) {
|
|
469
|
-
return Qtrue;
|
|
470
|
-
}
|
|
471
|
-
else {
|
|
472
|
-
return Qfalse;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
/*
|
|
478
|
-
* Is it an RARP reply packet?
|
|
479
|
-
*
|
|
480
|
-
* @return [Boolean] whether the packet is an RARP reply packet or not.
|
|
481
|
-
*/
|
|
482
|
-
static VALUE
|
|
483
|
-
packet_in_is_rarp_reply( VALUE self ) {
|
|
484
|
-
if ( packet_type_rarp_reply( get_packet_in( self )->data ) ) {
|
|
485
|
-
return Qtrue;
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
return Qfalse;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
/*
|
|
494
|
-
* The RARP operation code.
|
|
495
|
-
*
|
|
496
|
-
* @return [Integer] the value of the RARP opcode field.
|
|
497
|
-
*/
|
|
498
|
-
static VALUE
|
|
499
|
-
packet_in_rarp_oper( VALUE self ) {
|
|
500
|
-
PACKET_IN_RETURN_NUM( NW_RARP, UINT2NUM, arp_ar_op );
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
/*
|
|
505
|
-
* The RARP source hardware address of a packet.
|
|
506
|
-
*
|
|
507
|
-
* @return [Mac, nil]
|
|
508
|
-
* the value of the RARP source hardware address as a Mac object or nil
|
|
509
|
-
* if packet not an RARP.
|
|
510
|
-
*/
|
|
511
|
-
static VALUE
|
|
512
|
-
packet_in_rarp_sha( VALUE self ) {
|
|
513
|
-
if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
|
|
514
|
-
PACKET_IN_RETURN_MAC( arp_sha );
|
|
515
|
-
}
|
|
516
|
-
else {
|
|
517
|
-
return Qnil;
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
/*
|
|
523
|
-
* The RARP source protocol address of a packet.
|
|
524
|
-
*
|
|
525
|
-
* @return [Pio::IPv4Address, nil]
|
|
526
|
-
* the value of RARP source protocol address as a Pio::IPv4Address object or nil if
|
|
527
|
-
* packet is not an RARP.
|
|
528
|
-
*/
|
|
529
|
-
static VALUE
|
|
530
|
-
packet_in_rarp_spa( VALUE self ) {
|
|
531
|
-
if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
|
|
532
|
-
PACKET_IN_RETURN_IP( arp_spa );
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
535
|
-
return Qnil;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
/*
|
|
541
|
-
* The RARP target hardware address of a packet.
|
|
542
|
-
*
|
|
543
|
-
* @return [Mac]
|
|
544
|
-
* the value of RARP target hardware address as a Mac object or nil if
|
|
545
|
-
* packet is not an RARP.
|
|
546
|
-
*/
|
|
547
|
-
static VALUE
|
|
548
|
-
packet_in_rarp_tha( VALUE self ) {
|
|
549
|
-
if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
|
|
550
|
-
PACKET_IN_RETURN_MAC( arp_tha );
|
|
551
|
-
}
|
|
552
|
-
else {
|
|
553
|
-
return Qnil;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
/*
|
|
559
|
-
* The ARP target protocol address of a packet.
|
|
560
|
-
*
|
|
561
|
-
* @return [Pio::IPv4Address]
|
|
562
|
-
* the value of RARP target protocol address as a Pio::IPv4Address object or nil if
|
|
563
|
-
* packet is not an RARP.
|
|
564
|
-
*/
|
|
565
|
-
static VALUE
|
|
566
|
-
packet_in_rarp_tpa( VALUE self ) {
|
|
567
|
-
if ( ( get_packet_in_info( self )->format & NW_RARP ) ) {
|
|
568
|
-
PACKET_IN_RETURN_IP( arp_tpa );
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
return Qnil;
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
/*
|
|
577
|
-
* Is it an IPv4 packet?
|
|
578
|
-
*
|
|
579
|
-
* @return [Boolean] whether the packet is an IPv4 packet or not.
|
|
580
|
-
*/
|
|
581
|
-
static VALUE
|
|
582
|
-
packet_in_is_ipv4( VALUE self ) {
|
|
583
|
-
if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
|
|
584
|
-
return Qtrue;
|
|
585
|
-
}
|
|
586
|
-
else {
|
|
587
|
-
return Qfalse;
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
/*
|
|
593
|
-
* The IPv4 version number (version).
|
|
594
|
-
*
|
|
595
|
-
* @return [Integer] the value of IPv4 version number.
|
|
596
|
-
*/
|
|
597
|
-
static VALUE
|
|
598
|
-
packet_in_ipv4_version( VALUE self ) {
|
|
599
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_version );
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
/*
|
|
604
|
-
* The IPv4 internet header length (ihl).
|
|
605
|
-
*
|
|
606
|
-
* @return [Integer] the value of IPv4 internet header length.
|
|
607
|
-
*/
|
|
608
|
-
static VALUE
|
|
609
|
-
packet_in_ipv4_ihl( VALUE self ) {
|
|
610
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_ihl );
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
/*
|
|
615
|
-
* The IPv4 type of service (tos).
|
|
616
|
-
*
|
|
617
|
-
* @return [Integer] the value of IPv4 type of service.
|
|
618
|
-
*/
|
|
619
|
-
static VALUE
|
|
620
|
-
packet_in_ipv4_tos( VALUE self ) {
|
|
621
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_tos );
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
/*
|
|
626
|
-
* The IPv4 total length, the length of the datagram.
|
|
627
|
-
*
|
|
628
|
-
* @return [Integer] the value of IPv4 total length.
|
|
629
|
-
*/
|
|
630
|
-
static VALUE
|
|
631
|
-
packet_in_ipv4_tot_len( VALUE self ) {
|
|
632
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_tot_len );
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
/*
|
|
637
|
-
* The IPv4 identification.
|
|
638
|
-
*
|
|
639
|
-
* @return [Integer] the value of IPv4 identification.
|
|
640
|
-
*/
|
|
641
|
-
static VALUE
|
|
642
|
-
packet_in_ipv4_id( VALUE self ) {
|
|
643
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_id );
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
/*
|
|
648
|
-
* The IPv4 fragment offset.
|
|
649
|
-
*
|
|
650
|
-
* @return [Integer] the value of IPv4 fragment offset.
|
|
651
|
-
*/
|
|
652
|
-
static VALUE
|
|
653
|
-
packet_in_ipv4_frag_off( VALUE self ) {
|
|
654
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_frag_off );
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
/*
|
|
659
|
-
* The IPv4 time to live (ttl).
|
|
660
|
-
*
|
|
661
|
-
* @return [Integer] the value of IPv4 time to live.
|
|
662
|
-
*/
|
|
663
|
-
static VALUE
|
|
664
|
-
packet_in_ipv4_ttl( VALUE self ) {
|
|
665
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_ttl );
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
/*
|
|
670
|
-
* The IPv4 protocol number.
|
|
671
|
-
*
|
|
672
|
-
* @return [Integer] the value of IPv4 protocol number.
|
|
673
|
-
*/
|
|
674
|
-
static VALUE
|
|
675
|
-
packet_in_ipv4_protocol( VALUE self ) {
|
|
676
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_protocol );
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
/*
|
|
681
|
-
* The IPv4 checksum.
|
|
682
|
-
*
|
|
683
|
-
* @return [Integer] the value of IPv4 checksum.
|
|
684
|
-
*/
|
|
685
|
-
static VALUE
|
|
686
|
-
packet_in_ipv4_checksum( VALUE self ) {
|
|
687
|
-
PACKET_IN_RETURN_NUM( NW_IPV4, UINT2NUM, ipv4_checksum );
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
/*
|
|
692
|
-
* The IPv4 source IP address of a packet.
|
|
693
|
-
*
|
|
694
|
-
* @return [Pio::IPv4Address,nil]
|
|
695
|
-
* the value of IPv4 source IP address as a Pio::IPv4Address object or nil if
|
|
696
|
-
* packet is not an IPv4.
|
|
697
|
-
*/
|
|
698
|
-
static VALUE
|
|
699
|
-
packet_in_ipv4_saddr( VALUE self ) {
|
|
700
|
-
if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
|
|
701
|
-
PACKET_IN_RETURN_IP( ipv4_saddr );
|
|
702
|
-
}
|
|
703
|
-
else {
|
|
704
|
-
return Qnil;
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
/*
|
|
710
|
-
* The IPV4 destination IP address of a packet.
|
|
711
|
-
*
|
|
712
|
-
* @return [Pio::IPv4Address, nil]
|
|
713
|
-
* the value of IPv4 destination IP address as a Pio::IPv4Address object or nil if
|
|
714
|
-
* packet is not an IPv4.
|
|
715
|
-
*/
|
|
716
|
-
static VALUE
|
|
717
|
-
packet_in_ipv4_daddr( VALUE self ) {
|
|
718
|
-
if ( ( get_packet_in_info( self )->format & NW_IPV4 ) ) {
|
|
719
|
-
PACKET_IN_RETURN_IP( ipv4_daddr );
|
|
720
|
-
}
|
|
721
|
-
else {
|
|
722
|
-
return Qnil;
|
|
723
|
-
}
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
/*
|
|
728
|
-
* Is it a LLDP packet?
|
|
729
|
-
*
|
|
730
|
-
* @return [Boolean] whether the packet is a LLDP packet or not.
|
|
731
|
-
*/
|
|
732
|
-
static VALUE
|
|
733
|
-
packet_in_is_lldp( VALUE self ) {
|
|
734
|
-
if ( ( get_packet_in_info( self )->format & NW_LLDP ) ) {
|
|
735
|
-
return Qtrue;
|
|
736
|
-
}
|
|
737
|
-
else {
|
|
738
|
-
return Qfalse;
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
/*
|
|
744
|
-
* Is it an ICMPv4 packet?
|
|
745
|
-
*
|
|
746
|
-
* @return [Boolean] whether the packet is an ICMPv4 packet or not.
|
|
747
|
-
*/
|
|
748
|
-
static VALUE
|
|
749
|
-
packet_in_is_icmpv4( VALUE self ) {
|
|
750
|
-
if ( ( get_packet_in_info( self )->format & NW_ICMPV4 ) ) {
|
|
751
|
-
return Qtrue;
|
|
752
|
-
}
|
|
753
|
-
else {
|
|
754
|
-
return Qfalse;
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
/*
|
|
760
|
-
* The ICMPv4 message type, ie echo_reply, echo_request.
|
|
761
|
-
*
|
|
762
|
-
* @return [Integer] the value of ICMPv4 message type.
|
|
763
|
-
*/
|
|
764
|
-
static VALUE
|
|
765
|
-
packet_in_icmpv4_type( VALUE self ) {
|
|
766
|
-
PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_type );
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
/*
|
|
771
|
-
* The ICMPv4 message code the further qualifies the message type.
|
|
772
|
-
*
|
|
773
|
-
* @return [Integer] the value of ICMPv4 message code.
|
|
774
|
-
*/
|
|
775
|
-
static VALUE
|
|
776
|
-
packet_in_icmpv4_code( VALUE self ) {
|
|
777
|
-
PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_code );
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
/*
|
|
782
|
-
* The ICMPv4 message checksum.
|
|
783
|
-
*
|
|
784
|
-
* @return [Integer] the value of ICMPv4 message checksum.
|
|
785
|
-
*/
|
|
786
|
-
static VALUE
|
|
787
|
-
packet_in_icmpv4_checksum( VALUE self ) {
|
|
788
|
-
PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_checksum );
|
|
789
|
-
}
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
/*
|
|
793
|
-
* The ICMPv4 echo identifier to be used to match echo requests to echo replies.
|
|
794
|
-
*
|
|
795
|
-
* @return [Integer] the value of ICMPv4 echo identifier.
|
|
796
|
-
*/
|
|
797
|
-
static VALUE
|
|
798
|
-
packet_in_icmpv4_id( VALUE self ) {
|
|
799
|
-
PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_id );
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
/*
|
|
804
|
-
* The ICMPv4 echo sequence number.
|
|
805
|
-
*
|
|
806
|
-
* @return [Integer] the value of ICMPv4 echo sequence number.
|
|
807
|
-
*/
|
|
808
|
-
static VALUE
|
|
809
|
-
packet_in_icmpv4_seq( VALUE self ) {
|
|
810
|
-
PACKET_IN_RETURN_NUM( NW_ICMPV4, UINT2NUM, icmpv4_seq );
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
/*
|
|
815
|
-
* The ICMPv4 redirect message gateway IP address.
|
|
816
|
-
*
|
|
817
|
-
* @return [Pio::IPv4Address, nil]
|
|
818
|
-
* the value of ICMPv4 redirect message IP gateway address as a Pio::IPv4Address
|
|
819
|
-
* object or nil if packet is not ICMPv4.
|
|
820
|
-
*/
|
|
821
|
-
static VALUE
|
|
822
|
-
packet_in_icmpv4_gateway( VALUE self ) {
|
|
823
|
-
if ( ( get_packet_in_info( self )->format & NW_ICMPV4 ) ) {
|
|
824
|
-
PACKET_IN_RETURN_IP( icmpv4_gateway );
|
|
825
|
-
}
|
|
826
|
-
else {
|
|
827
|
-
return Qnil;
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
/*
|
|
833
|
-
* Is it an ICMPv4 echo reply packet?
|
|
834
|
-
*
|
|
835
|
-
* @return [Boolean] whether the packet is an ICMPv4 echo reply packet or not.
|
|
836
|
-
*/
|
|
837
|
-
static VALUE
|
|
838
|
-
packet_in_is_icmpv4_echo_reply( VALUE self ) {
|
|
839
|
-
if ( packet_type_icmpv4_echo_reply( get_packet_in( self )->data ) ) {
|
|
840
|
-
return Qtrue;
|
|
841
|
-
}
|
|
842
|
-
else {
|
|
843
|
-
return Qfalse;
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
/*
|
|
849
|
-
* Is it an ICMPv4 destination unreachable packet?
|
|
850
|
-
*
|
|
851
|
-
* @return [Boolean] whether the packet is an ICMPv4 destination
|
|
852
|
-
* unreachable packet or not.
|
|
853
|
-
*/
|
|
854
|
-
static VALUE
|
|
855
|
-
packet_in_is_icmpv4_dst_unreach( VALUE self ) {
|
|
856
|
-
if ( packet_type_icmpv4_dst_unreach( get_packet_in( self )->data ) ) {
|
|
857
|
-
return Qtrue;
|
|
858
|
-
}
|
|
859
|
-
else {
|
|
860
|
-
return Qfalse;
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
/*
|
|
866
|
-
* Is it an ICMPv4 redirect packet?
|
|
867
|
-
*
|
|
868
|
-
* @return [Boolean] whether the packet is an ICMPv4 redirect packet or not.
|
|
869
|
-
*/
|
|
870
|
-
static VALUE
|
|
871
|
-
packet_in_is_icmpv4_redirect( VALUE self ) {
|
|
872
|
-
if ( packet_type_icmpv4_redirect( get_packet_in( self )->data ) ) {
|
|
873
|
-
return Qtrue;
|
|
874
|
-
}
|
|
875
|
-
else {
|
|
876
|
-
return Qfalse;
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
/*
|
|
882
|
-
* Is it an ICMPv4 echo request packet?
|
|
883
|
-
*
|
|
884
|
-
* @return [Boolean] whether the packet is an ICMPv4 echo request packet or not.
|
|
885
|
-
*/
|
|
886
|
-
static VALUE
|
|
887
|
-
packet_in_is_icmpv4_echo_request( VALUE self ) {
|
|
888
|
-
if ( packet_type_icmpv4_echo_request( get_packet_in( self )->data ) ) {
|
|
889
|
-
return Qtrue;
|
|
890
|
-
}
|
|
891
|
-
else {
|
|
892
|
-
return Qfalse;
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
/*
|
|
898
|
-
* Is it an IGMP packet?
|
|
899
|
-
*
|
|
900
|
-
* @return [Boolean] whether the packet is an IGMP packet or not.
|
|
901
|
-
*/
|
|
902
|
-
static VALUE
|
|
903
|
-
packet_in_is_igmp( VALUE self ) {
|
|
904
|
-
if ( ( get_packet_in_info( self )->format & NW_IGMP ) ) {
|
|
905
|
-
return Qtrue;
|
|
906
|
-
}
|
|
907
|
-
else {
|
|
908
|
-
return Qfalse;
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
/*
|
|
914
|
-
* Is it an IGMP membership query packet?
|
|
915
|
-
*
|
|
916
|
-
* @return [Boolean] whether the packet is an IGMP membership query
|
|
917
|
-
* packet or not.
|
|
918
|
-
*/
|
|
919
|
-
static VALUE
|
|
920
|
-
packet_in_is_igmp_membership_query( VALUE self ) {
|
|
921
|
-
if ( packet_type_igmp_membership_query( get_packet_in( self )->data ) ) {
|
|
922
|
-
return Qtrue;
|
|
923
|
-
}
|
|
924
|
-
else {
|
|
925
|
-
return Qfalse;
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
/*
|
|
931
|
-
* Is it an IGMP v1 membership report packet?
|
|
932
|
-
*
|
|
933
|
-
* @return [Boolean] whether the packet is an IGMP v1 membership report packet
|
|
934
|
-
* or not.
|
|
935
|
-
*/
|
|
936
|
-
static VALUE
|
|
937
|
-
packet_in_is_igmp_v1_membership_report( VALUE self ) {
|
|
938
|
-
if ( packet_type_igmp_v1_membership_report( get_packet_in( self )->data ) ) {
|
|
939
|
-
return Qtrue;
|
|
940
|
-
}
|
|
941
|
-
else {
|
|
942
|
-
return Qfalse;
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
/*
|
|
948
|
-
* Is it an IGMP v2 membership report packet?
|
|
949
|
-
*
|
|
950
|
-
* @return [Boolean] whether the packet is an IGMP v2 membership report packet
|
|
951
|
-
* or not.
|
|
952
|
-
*/
|
|
953
|
-
static VALUE
|
|
954
|
-
packet_in_is_igmp_v2_membership_report( VALUE self ) {
|
|
955
|
-
if ( packet_type_igmp_v2_membership_report( get_packet_in( self )->data ) ) {
|
|
956
|
-
return Qtrue;
|
|
957
|
-
}
|
|
958
|
-
else {
|
|
959
|
-
return Qfalse;
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
/*
|
|
965
|
-
* Is it an IGMP v2 leave group packet?
|
|
966
|
-
*
|
|
967
|
-
* @return [Boolean] whether the packet is an IGMP v2 leave group packet
|
|
968
|
-
* or not.
|
|
969
|
-
*/
|
|
970
|
-
static VALUE
|
|
971
|
-
packet_in_is_igmp_v2_leave_group( VALUE self ) {
|
|
972
|
-
if ( packet_type_igmp_v2_leave_group( get_packet_in( self )->data ) ) {
|
|
973
|
-
return Qtrue;
|
|
974
|
-
}
|
|
975
|
-
else {
|
|
976
|
-
return Qfalse;
|
|
977
|
-
}
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
/*
|
|
982
|
-
* Is it an IGMP v3 membership report packet?
|
|
983
|
-
*
|
|
984
|
-
* @return [Boolean] whether the packet is an IGMP v3 membership report packet
|
|
985
|
-
* or not.
|
|
986
|
-
*/
|
|
987
|
-
static VALUE
|
|
988
|
-
packet_in_is_igmp_v3_membership_report( VALUE self ) {
|
|
989
|
-
if ( packet_type_igmp_v3_membership_report( get_packet_in( self )->data ) ) {
|
|
990
|
-
return Qtrue;
|
|
991
|
-
}
|
|
992
|
-
else {
|
|
993
|
-
return Qfalse;
|
|
994
|
-
}
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
/*
|
|
999
|
-
* The IGMP message type.
|
|
1000
|
-
*
|
|
1001
|
-
* @return [Integer] the value of IGMP message type.
|
|
1002
|
-
*/
|
|
1003
|
-
static VALUE
|
|
1004
|
-
packet_in_igmp_type( VALUE self ) {
|
|
1005
|
-
PACKET_IN_RETURN_NUM( NW_IGMP, UINT2NUM, igmp_type );
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
/*
|
|
1010
|
-
* The IGMP group address.
|
|
1011
|
-
*
|
|
1012
|
-
* @return [Pio::IPv4Address, nil]
|
|
1013
|
-
* the value of IGMP IP group address as a Pio::IPv4Address object
|
|
1014
|
-
* or nil if packet is not IGMP.
|
|
1015
|
-
*/
|
|
1016
|
-
static VALUE
|
|
1017
|
-
packet_in_igmp_group( VALUE self ) {
|
|
1018
|
-
if ( ( get_packet_in_info( self )->format & NW_IGMP ) ) {
|
|
1019
|
-
PACKET_IN_RETURN_IP( igmp_group );
|
|
1020
|
-
}
|
|
1021
|
-
else {
|
|
1022
|
-
return Qnil;
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
/*
|
|
1028
|
-
* The IGMP checksum.
|
|
1029
|
-
*
|
|
1030
|
-
* @return [Integer] the value of IGMP checksum.
|
|
1031
|
-
*/
|
|
1032
|
-
static VALUE
|
|
1033
|
-
packet_in_igmp_checksum( VALUE self ) {
|
|
1034
|
-
PACKET_IN_RETURN_NUM( NW_IGMP, UINT2NUM, igmp_checksum );
|
|
1035
|
-
}
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
/*
|
|
1039
|
-
* Is it a TCP packet?
|
|
1040
|
-
*
|
|
1041
|
-
* @return [Boolean] whether the packet is a TCP packet or not.
|
|
1042
|
-
*/
|
|
1043
|
-
static VALUE
|
|
1044
|
-
packet_in_is_tcp( VALUE self ) {
|
|
1045
|
-
if ( ( get_packet_in_info( self )->format & TP_TCP ) ) {
|
|
1046
|
-
return Qtrue;
|
|
1047
|
-
}
|
|
1048
|
-
else {
|
|
1049
|
-
return Qfalse;
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
/*
|
|
1055
|
-
* The TCP source port.
|
|
1056
|
-
*
|
|
1057
|
-
* @return [Integer] the value of TCP source port.
|
|
1058
|
-
*/
|
|
1059
|
-
static VALUE
|
|
1060
|
-
packet_in_tcp_src_port( VALUE self ) {
|
|
1061
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_src_port );
|
|
1062
|
-
}
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
/*
|
|
1066
|
-
* The TCP destination port.
|
|
1067
|
-
*
|
|
1068
|
-
* @return [Integer] the value of TCP destination port.
|
|
1069
|
-
*/
|
|
1070
|
-
static VALUE
|
|
1071
|
-
packet_in_tcp_dst_port( VALUE self ) {
|
|
1072
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_dst_port );
|
|
1073
|
-
}
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
/*
|
|
1077
|
-
* The TCP sequence number.
|
|
1078
|
-
*
|
|
1079
|
-
* @return [Integer] the value of TCP sequence number.
|
|
1080
|
-
*/
|
|
1081
|
-
static VALUE
|
|
1082
|
-
packet_in_tcp_seq_no( VALUE self ) {
|
|
1083
|
-
PACKET_IN_RETURN_NUM( TP_TCP, ULONG2NUM, tcp_seq_no );
|
|
1084
|
-
}
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
/*
|
|
1088
|
-
* The TCP acknowledgment number.
|
|
1089
|
-
*
|
|
1090
|
-
* @return [Integer] the value of TCP acknowledgment number.
|
|
1091
|
-
*/
|
|
1092
|
-
static VALUE
|
|
1093
|
-
packet_in_tcp_ack_no( VALUE self ) {
|
|
1094
|
-
PACKET_IN_RETURN_NUM( TP_TCP, ULONG2NUM, tcp_ack_no );
|
|
1095
|
-
}
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
/*
|
|
1099
|
-
* The TCP data offset.
|
|
1100
|
-
*
|
|
1101
|
-
* @return [Integer] the value of TCP data offset.
|
|
1102
|
-
*/
|
|
1103
|
-
static VALUE
|
|
1104
|
-
packet_in_tcp_offset( VALUE self ) {
|
|
1105
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_offset );
|
|
1106
|
-
}
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
/*
|
|
1110
|
-
* The TCP flags.
|
|
1111
|
-
*
|
|
1112
|
-
* @return [Integer] the value of TCP flags.
|
|
1113
|
-
*/
|
|
1114
|
-
static VALUE
|
|
1115
|
-
packet_in_tcp_flags( VALUE self ) {
|
|
1116
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_flags );
|
|
1117
|
-
}
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
/*
|
|
1121
|
-
* The TCP window.
|
|
1122
|
-
*
|
|
1123
|
-
* @return [Integer] the value of TCP window.
|
|
1124
|
-
*/
|
|
1125
|
-
static VALUE
|
|
1126
|
-
packet_in_tcp_window( VALUE self ) {
|
|
1127
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_window );
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
/*
|
|
1132
|
-
* The TCP checksum.
|
|
1133
|
-
*
|
|
1134
|
-
* @return [Integer] the value of TCP checksum.
|
|
1135
|
-
*/
|
|
1136
|
-
static VALUE
|
|
1137
|
-
packet_in_tcp_checksum( VALUE self ) {
|
|
1138
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_checksum );
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
/*
|
|
1143
|
-
* The TCP urgent pointer.
|
|
1144
|
-
*
|
|
1145
|
-
* @return [Integer] the value of TCP urgent pointer.
|
|
1146
|
-
*/
|
|
1147
|
-
static VALUE
|
|
1148
|
-
packet_in_tcp_urgent( VALUE self ) {
|
|
1149
|
-
PACKET_IN_RETURN_NUM( TP_TCP, UINT2NUM, tcp_urgent );
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
/*
|
|
1154
|
-
* Is it a UDP packet?
|
|
1155
|
-
*
|
|
1156
|
-
* @return [Boolean] whether the packet is a UDP packet or not.
|
|
1157
|
-
*/
|
|
1158
|
-
static VALUE
|
|
1159
|
-
packet_in_is_udp( VALUE self ) {
|
|
1160
|
-
if ( ( get_packet_in_info( self )->format & TP_UDP ) ) {
|
|
1161
|
-
return Qtrue;
|
|
1162
|
-
}
|
|
1163
|
-
else {
|
|
1164
|
-
return Qfalse;
|
|
1165
|
-
}
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
/*
|
|
1170
|
-
* A String that holds the UDP payload.
|
|
1171
|
-
* Length of data, total_len - 20 bytes.
|
|
1172
|
-
*
|
|
1173
|
-
* @return [String] the value of data.
|
|
1174
|
-
*/
|
|
1175
|
-
static VALUE
|
|
1176
|
-
packet_in_udp_payload( VALUE self ) {
|
|
1177
|
-
packet_info *cpacket = get_packet_in_info( self );
|
|
1178
|
-
return rb_str_new( cpacket->l4_payload, ( long ) cpacket->l4_payload_length );
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
/*
|
|
1183
|
-
* The UDP source port.
|
|
1184
|
-
*
|
|
1185
|
-
* @return [Integer] the value of UDP source port.
|
|
1186
|
-
*/
|
|
1187
|
-
static VALUE
|
|
1188
|
-
packet_in_udp_src_port( VALUE self ) {
|
|
1189
|
-
PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_src_port );
|
|
1190
|
-
}
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
/*
|
|
1194
|
-
* The UDP destination port.
|
|
1195
|
-
*
|
|
1196
|
-
* @return [Integer] the value of UDP destination port.
|
|
1197
|
-
*/
|
|
1198
|
-
static VALUE
|
|
1199
|
-
packet_in_udp_dst_port( VALUE self ) {
|
|
1200
|
-
PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_dst_port );
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
/*
|
|
1205
|
-
* The UDP length
|
|
1206
|
-
*
|
|
1207
|
-
* @return [Integer] the value in bytes of UDP header and data.
|
|
1208
|
-
*/
|
|
1209
|
-
static VALUE
|
|
1210
|
-
packet_in_udp_len( VALUE self ) {
|
|
1211
|
-
PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_len );
|
|
1212
|
-
}
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
/*
|
|
1216
|
-
* The UDP checksum.
|
|
1217
|
-
*
|
|
1218
|
-
* @return [Integer] the value of UDP checksum.
|
|
1219
|
-
*/
|
|
1220
|
-
static VALUE
|
|
1221
|
-
packet_in_udp_checksum( VALUE self ) {
|
|
1222
|
-
PACKET_IN_RETURN_NUM( TP_UDP, UINT2NUM, udp_checksum );
|
|
1223
|
-
}
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
/*
|
|
1227
|
-
* Document-class: Trema::PacketIn
|
|
1228
|
-
*/
|
|
1229
|
-
void
|
|
1230
|
-
Init_packet_in() {
|
|
1231
|
-
rb_require( "pio" );
|
|
1232
|
-
|
|
1233
|
-
mTrema = rb_eval_string( "Trema" );
|
|
1234
|
-
cPacketIn = rb_define_class_under( mTrema, "PacketIn", rb_cObject );
|
|
1235
|
-
rb_define_alloc_func( cPacketIn, packet_in_alloc );
|
|
1236
|
-
|
|
1237
|
-
rb_define_const( cPacketIn, "OFPR_NO_MATCH", INT2NUM( OFPR_NO_MATCH ) );
|
|
1238
|
-
rb_define_const( cPacketIn, "OFPR_ACTION", INT2NUM( OFPR_ACTION ) );
|
|
1239
|
-
|
|
1240
|
-
rb_define_method( cPacketIn, "datapath_id", packet_in_datapath_id, 0 );
|
|
1241
|
-
rb_define_method( cPacketIn, "transaction_id", packet_in_transaction_id, 0 );
|
|
1242
|
-
rb_define_method( cPacketIn, "buffer_id", packet_in_buffer_id, 0 );
|
|
1243
|
-
rb_define_method( cPacketIn, "buffered?", packet_in_is_buffered, 0 );
|
|
1244
|
-
rb_define_method( cPacketIn, "in_port", packet_in_in_port, 0 );
|
|
1245
|
-
rb_define_method( cPacketIn, "total_len", packet_in_total_len, 0 );
|
|
1246
|
-
rb_define_method( cPacketIn, "reason", packet_in_reason, 0 );
|
|
1247
|
-
rb_define_method( cPacketIn, "data", packet_in_data, 0 );
|
|
1248
|
-
|
|
1249
|
-
rb_define_method( cPacketIn, "macsa", packet_in_macsa, 0 );
|
|
1250
|
-
rb_define_method( cPacketIn, "macda", packet_in_macda, 0 );
|
|
1251
|
-
rb_define_method( cPacketIn, "eth_type", packet_in_eth_type, 0 );
|
|
1252
|
-
|
|
1253
|
-
rb_define_method( cPacketIn, "vtag?", packet_in_is_vtag, 0 );
|
|
1254
|
-
rb_define_method( cPacketIn, "arp?", packet_in_is_arp, 0 );
|
|
1255
|
-
rb_define_method( cPacketIn, "rarp?", packet_in_is_rarp, 0 );
|
|
1256
|
-
rb_define_method( cPacketIn, "ipv4?", packet_in_is_ipv4, 0 );
|
|
1257
|
-
rb_define_method( cPacketIn, "lldp?", packet_in_is_lldp, 0 );
|
|
1258
|
-
rb_define_method( cPacketIn, "icmpv4?", packet_in_is_icmpv4, 0 );
|
|
1259
|
-
rb_define_method( cPacketIn, "igmp?", packet_in_is_igmp, 0 );
|
|
1260
|
-
rb_define_method( cPacketIn, "tcp?", packet_in_is_tcp, 0 );
|
|
1261
|
-
rb_define_method( cPacketIn, "udp?", packet_in_is_udp, 0 );
|
|
1262
|
-
|
|
1263
|
-
rb_define_method( cPacketIn, "vlan_tpid", packet_in_vlan_tpid, 0 );
|
|
1264
|
-
rb_define_method( cPacketIn, "vlan_tci", packet_in_vlan_tci, 0 );
|
|
1265
|
-
rb_define_method( cPacketIn, "vlan_prio", packet_in_vlan_prio, 0 );
|
|
1266
|
-
rb_define_method( cPacketIn, "vlan_cfi", packet_in_vlan_cfi, 0 );
|
|
1267
|
-
rb_define_method( cPacketIn, "vlan_vid", packet_in_vlan_vid, 0 );
|
|
1268
|
-
|
|
1269
|
-
rb_define_method( cPacketIn, "arp_oper", packet_in_arp_oper, 0 );
|
|
1270
|
-
rb_define_method( cPacketIn, "arp_sha", packet_in_arp_sha, 0 );
|
|
1271
|
-
rb_define_method( cPacketIn, "arp_spa", packet_in_arp_spa, 0 );
|
|
1272
|
-
rb_define_method( cPacketIn, "arp_tha", packet_in_arp_tha, 0 );
|
|
1273
|
-
rb_define_method( cPacketIn, "arp_tpa", packet_in_arp_tpa, 0 );
|
|
1274
|
-
rb_define_method( cPacketIn, "arp_request?", packet_in_is_arp_request, 0 );
|
|
1275
|
-
rb_define_method( cPacketIn, "arp_reply?", packet_in_is_arp_reply, 0 );
|
|
1276
|
-
|
|
1277
|
-
rb_define_method( cPacketIn, "rarp_oper", packet_in_rarp_oper, 0 );
|
|
1278
|
-
rb_define_method( cPacketIn, "rarp_sha", packet_in_rarp_sha, 0 );
|
|
1279
|
-
rb_define_method( cPacketIn, "rarp_spa", packet_in_rarp_spa, 0 );
|
|
1280
|
-
rb_define_method( cPacketIn, "rarp_tha", packet_in_rarp_tha, 0 );
|
|
1281
|
-
rb_define_method( cPacketIn, "rarp_tpa", packet_in_rarp_tpa, 0 );
|
|
1282
|
-
rb_define_method( cPacketIn, "rarp_request?", packet_in_is_rarp_request, 0 );
|
|
1283
|
-
rb_define_method( cPacketIn, "rarp_reply?", packet_in_is_rarp_reply, 0 );
|
|
1284
|
-
|
|
1285
|
-
rb_define_method( cPacketIn, "ipv4_version", packet_in_ipv4_version, 0 );
|
|
1286
|
-
rb_define_method( cPacketIn, "ipv4_ihl", packet_in_ipv4_ihl, 0 );
|
|
1287
|
-
rb_define_method( cPacketIn, "ipv4_tos", packet_in_ipv4_tos, 0 );
|
|
1288
|
-
rb_define_method( cPacketIn, "ipv4_tot_len", packet_in_ipv4_tot_len, 0 );
|
|
1289
|
-
rb_define_method( cPacketIn, "ipv4_id", packet_in_ipv4_id, 0 );
|
|
1290
|
-
rb_define_method( cPacketIn, "ipv4_frag_off", packet_in_ipv4_frag_off, 0 );
|
|
1291
|
-
rb_define_method( cPacketIn, "ipv4_ttl", packet_in_ipv4_ttl, 0 );
|
|
1292
|
-
rb_define_method( cPacketIn, "ipv4_protocol", packet_in_ipv4_protocol, 0 );
|
|
1293
|
-
rb_define_method( cPacketIn, "ipv4_checksum", packet_in_ipv4_checksum, 0 );
|
|
1294
|
-
rb_define_method( cPacketIn, "ipv4_saddr", packet_in_ipv4_saddr, 0 );
|
|
1295
|
-
rb_define_method( cPacketIn, "ipv4_daddr", packet_in_ipv4_daddr, 0 );
|
|
1296
|
-
|
|
1297
|
-
rb_define_method( cPacketIn, "icmpv4_type", packet_in_icmpv4_type, 0 );
|
|
1298
|
-
rb_define_method( cPacketIn, "icmpv4_code", packet_in_icmpv4_code, 0 );
|
|
1299
|
-
rb_define_method( cPacketIn, "icmpv4_checksum", packet_in_icmpv4_checksum, 0 );
|
|
1300
|
-
rb_define_method( cPacketIn, "icmpv4_id", packet_in_icmpv4_id, 0 );
|
|
1301
|
-
rb_define_method( cPacketIn, "icmpv4_seq", packet_in_icmpv4_seq, 0 );
|
|
1302
|
-
rb_define_method( cPacketIn, "icmpv4_gateway", packet_in_icmpv4_gateway, 0 );
|
|
1303
|
-
rb_define_method( cPacketIn, "icmpv4_echo_reply?", packet_in_is_icmpv4_echo_reply, 0 );
|
|
1304
|
-
rb_define_method( cPacketIn, "icmpv4_dst_unreach?", packet_in_is_icmpv4_dst_unreach, 0 );
|
|
1305
|
-
rb_define_method( cPacketIn, "icmpv4_redirect?", packet_in_is_icmpv4_redirect, 0 );
|
|
1306
|
-
rb_define_method( cPacketIn, "icmpv4_echo_request?", packet_in_is_icmpv4_echo_request, 0 );
|
|
1307
|
-
|
|
1308
|
-
rb_define_method( cPacketIn, "igmp_type", packet_in_igmp_type, 0 );
|
|
1309
|
-
rb_define_method( cPacketIn, "igmp_group", packet_in_igmp_group, 0 );
|
|
1310
|
-
rb_define_method( cPacketIn, "igmp_checksum", packet_in_igmp_checksum, 0 );
|
|
1311
|
-
rb_define_method( cPacketIn, "igmp_membership_query?", packet_in_is_igmp_membership_query, 0 );
|
|
1312
|
-
rb_define_method( cPacketIn, "igmp_v1_membership_report?", packet_in_is_igmp_v1_membership_report, 0 );
|
|
1313
|
-
rb_define_method( cPacketIn, "igmp_v2_membership_report?", packet_in_is_igmp_v2_membership_report, 0 );
|
|
1314
|
-
rb_define_method( cPacketIn, "igmp_v2_leave_group?", packet_in_is_igmp_v2_leave_group, 0 );
|
|
1315
|
-
rb_define_method( cPacketIn, "igmp_v3_membership_report?", packet_in_is_igmp_v3_membership_report, 0 );
|
|
1316
|
-
|
|
1317
|
-
rb_define_method( cPacketIn, "tcp_src_port", packet_in_tcp_src_port, 0 );
|
|
1318
|
-
rb_define_method( cPacketIn, "tcp_dst_port", packet_in_tcp_dst_port, 0 );
|
|
1319
|
-
rb_define_method( cPacketIn, "tcp_seq_no", packet_in_tcp_seq_no, 0 );
|
|
1320
|
-
rb_define_method( cPacketIn, "tcp_ack_no", packet_in_tcp_ack_no, 0 );
|
|
1321
|
-
rb_define_method( cPacketIn, "tcp_offset", packet_in_tcp_offset, 0 );
|
|
1322
|
-
rb_define_method( cPacketIn, "tcp_flags", packet_in_tcp_flags, 0 );
|
|
1323
|
-
rb_define_method( cPacketIn, "tcp_window", packet_in_tcp_window, 0 );
|
|
1324
|
-
rb_define_method( cPacketIn, "tcp_checksum", packet_in_tcp_checksum, 0 );
|
|
1325
|
-
rb_define_method( cPacketIn, "tcp_urgent", packet_in_tcp_urgent, 0 );
|
|
1326
|
-
|
|
1327
|
-
rb_define_method( cPacketIn, "udp_payload", packet_in_udp_payload, 0 );
|
|
1328
|
-
rb_define_method( cPacketIn, "udp_src_port", packet_in_udp_src_port, 0 );
|
|
1329
|
-
rb_define_method( cPacketIn, "udp_dst_port", packet_in_udp_dst_port, 0 );
|
|
1330
|
-
rb_define_method( cPacketIn, "udp_checksum", packet_in_udp_checksum, 0 );
|
|
1331
|
-
rb_define_method( cPacketIn, "udp_len", packet_in_udp_len, 0 );
|
|
1332
|
-
|
|
1333
|
-
rb_define_private_method( cPacketIn, "initialize_copy", packet_in_init_copy, 1 );
|
|
1334
|
-
}
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
/*
|
|
1338
|
-
* Handler called when +OFPT_PACKET_IN+ message is received.
|
|
1339
|
-
*/
|
|
1340
|
-
void
|
|
1341
|
-
handle_packet_in( uint64_t datapath_id, packet_in message ) {
|
|
1342
|
-
VALUE controller = ( VALUE ) message.user_data;
|
|
1343
|
-
if ( rb_respond_to( controller, rb_intern( "packet_in" ) ) == Qfalse ) {
|
|
1344
|
-
return;
|
|
1345
|
-
}
|
|
1346
|
-
|
|
1347
|
-
VALUE r_message = rb_funcall( cPacketIn, rb_intern( "new" ), 0 );
|
|
1348
|
-
rb_packet_in *tmp = NULL;
|
|
1349
|
-
Data_Get_Struct( r_message, rb_packet_in, tmp );
|
|
1350
|
-
memcpy( &tmp->packet_in, &message, sizeof( packet_in ) );
|
|
1351
|
-
free_buffer( tmp->data );
|
|
1352
|
-
tmp->data = duplicate_buffer( message.data );
|
|
1353
|
-
parse_packet( tmp->data );
|
|
1354
|
-
tmp->packet_in.data = tmp->data;
|
|
1355
|
-
|
|
1356
|
-
rb_funcall( controller, rb_intern( "packet_in" ), 2, ULL2NUM( datapath_id ), r_message );
|
|
1357
|
-
}
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
/*
|
|
1361
|
-
* Local variables:
|
|
1362
|
-
* c-basic-offset: 2
|
|
1363
|
-
* indent-tabs-mode: nil
|
|
1364
|
-
* End:
|
|
1365
|
-
*/
|