trema 0.1.3
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.
- data/.mono.rant +4107 -0
- data/.rspec +1 -0
- data/.yardopts +4 -0
- data/Doxyfile +1679 -0
- data/GPL2 +339 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +71 -0
- data/README.md +135 -0
- data/Rakefile +140 -0
- data/Rantfile +834 -0
- data/VERSION +1 -0
- data/build.rb +32 -0
- data/cruise.rb +389 -0
- data/features/example.dumper.feature +87 -0
- data/features/example.learning_switch.feature +39 -0
- data/features/example.list_switches.feature +38 -0
- data/features/example.message.echo_reply.feature +26 -0
- data/features/example.message.echo_request.feature +25 -0
- data/features/example.message.features_request.feature +84 -0
- data/features/example.message.hello.feature +25 -0
- data/features/example.message.set_config.feature +27 -0
- data/features/example.multi_learning_switch.feature +135 -0
- data/features/example.packetin_filter_config.feature +91 -0
- data/features/example.repeater_hub.feature +49 -0
- data/features/example.switch_monitor.feature +39 -0
- data/features/packetin_filter.feature +49 -0
- data/features/step_definitions/kill_steps.rb +30 -0
- data/features/step_definitions/log_steps.rb +90 -0
- data/features/step_definitions/misc_steps.rb +64 -0
- data/features/step_definitions/off_steps.rb +30 -0
- data/features/step_definitions/run_steps.rb +91 -0
- data/features/step_definitions/send_packets_steps.rb +42 -0
- data/features/step_definitions/show_stats_steps.rb +43 -0
- data/features/step_definitions/stats_steps.rb +39 -0
- data/features/support/env.rb +75 -0
- data/features/support/hooks.rb +8 -0
- data/features/switch_manager.feature +35 -0
- data/features/trema-config.feature +68 -0
- data/features/trema.dump_flows.feature +25 -0
- data/features/trema.feature +25 -0
- data/features/trema.kill.feature +53 -0
- data/features/trema.killall.feature +30 -0
- data/features/trema.reset_stats.feature +14 -0
- data/features/trema.run.feature +46 -0
- data/features/trema.send_packets.feature +56 -0
- data/features/trema.show_stats.feature +67 -0
- data/features/tutorial.hello_trema.feature +27 -0
- data/features/tutorial.packet_in.feature +47 -0
- data/features/tutorial.switch_info.feature +55 -0
- data/ruby/.gitignore +4 -0
- data/ruby/blocker.rb +78 -0
- data/ruby/extconf.rb +71 -0
- data/ruby/sub-process.rb +291 -0
- data/ruby/trema/action-common.c +60 -0
- data/ruby/trema/action-common.h +42 -0
- data/ruby/trema/action-enqueue.c +161 -0
- data/ruby/trema/action-enqueue.h +40 -0
- data/ruby/trema/action-output.c +169 -0
- data/ruby/trema/action-output.h +42 -0
- data/ruby/trema/action-set-dl-dst.c +131 -0
- data/ruby/trema/action-set-dl-dst.h +44 -0
- data/ruby/trema/action-set-dl-src.c +131 -0
- data/ruby/trema/action-set-dl-src.h +44 -0
- data/ruby/trema/action-set-nw-dst.c +135 -0
- data/ruby/trema/action-set-nw-dst.h +42 -0
- data/ruby/trema/action-set-nw-src.c +140 -0
- data/ruby/trema/action-set-nw-src.h +42 -0
- data/ruby/trema/action-set-nw-tos.c +124 -0
- data/ruby/trema/action-set-nw-tos.h +42 -0
- data/ruby/trema/action-set-tp-dst.c +122 -0
- data/ruby/trema/action-set-tp-dst.h +42 -0
- data/ruby/trema/action-set-tp-src.c +124 -0
- data/ruby/trema/action-set-tp-src.h +42 -0
- data/ruby/trema/action-set-vlan-pcp.c +128 -0
- data/ruby/trema/action-set-vlan-pcp.h +42 -0
- data/ruby/trema/action-set-vlan-vid.c +125 -0
- data/ruby/trema/action-set-vlan-vid.h +42 -0
- data/ruby/trema/action-strip-vlan.c +81 -0
- data/ruby/trema/action-strip-vlan.h +42 -0
- data/ruby/trema/action-vendor.c +121 -0
- data/ruby/trema/action-vendor.h +42 -0
- data/ruby/trema/aggregate-stats-reply.rb +70 -0
- data/ruby/trema/app.rb +112 -0
- data/ruby/trema/barrier-reply.c +99 -0
- data/ruby/trema/barrier-reply.h +46 -0
- data/ruby/trema/barrier-request.c +108 -0
- data/ruby/trema/barrier-request.h +44 -0
- data/ruby/trema/cli.rb +269 -0
- data/ruby/trema/command.rb +40 -0
- data/ruby/trema/command/dump_flows.rb +62 -0
- data/ruby/trema/command/kill.rb +71 -0
- data/ruby/trema/command/killall.rb +56 -0
- data/ruby/trema/command/reset_stats.rb +61 -0
- data/ruby/trema/command/ruby.rb +55 -0
- data/ruby/trema/command/run.rb +120 -0
- data/ruby/trema/command/send_packets.rb +130 -0
- data/ruby/trema/command/shell.rb +61 -0
- data/ruby/trema/command/show_stats.rb +84 -0
- data/ruby/trema/command/usage.rb +61 -0
- data/ruby/trema/command/version.rb +39 -0
- data/ruby/trema/controller.c +595 -0
- data/ruby/trema/controller.h +44 -0
- data/ruby/trema/controller.rb +81 -0
- data/ruby/trema/daemon.rb +167 -0
- data/ruby/trema/dsl.rb +34 -0
- data/ruby/trema/dsl/configuration.rb +153 -0
- data/ruby/trema/dsl/context.rb +71 -0
- data/ruby/trema/dsl/link.rb +41 -0
- data/ruby/trema/dsl/parser.rb +70 -0
- data/ruby/trema/dsl/run.rb +49 -0
- data/ruby/trema/dsl/runner.rb +165 -0
- data/ruby/trema/dsl/stanza.rb +53 -0
- data/ruby/trema/dsl/switch.rb +78 -0
- data/ruby/trema/dsl/syntax-error.rb +33 -0
- data/ruby/trema/dsl/syntax.rb +109 -0
- data/ruby/trema/dsl/vhost.rb +108 -0
- data/ruby/trema/dsl/vswitch.rb +47 -0
- data/ruby/trema/echo-reply.c +107 -0
- data/ruby/trema/echo-reply.h +42 -0
- data/ruby/trema/echo-request.c +140 -0
- data/ruby/trema/echo-request.h +42 -0
- data/ruby/trema/error.c +253 -0
- data/ruby/trema/error.h +44 -0
- data/ruby/trema/exact-match.rb +36 -0
- data/ruby/trema/executables.rb +95 -0
- data/ruby/trema/features-reply.c +238 -0
- data/ruby/trema/features-reply.h +60 -0
- data/ruby/trema/features-request.c +109 -0
- data/ruby/trema/features-request.h +44 -0
- data/ruby/trema/flow-removed.c +275 -0
- data/ruby/trema/flow-removed.h +46 -0
- data/ruby/trema/flow-stats-reply.rb +109 -0
- data/ruby/trema/flow.rb +56 -0
- data/ruby/trema/get-config-reply.c +159 -0
- data/ruby/trema/get-config-reply.h +52 -0
- data/ruby/trema/get-config-request.c +107 -0
- data/ruby/trema/get-config-request.h +44 -0
- data/ruby/trema/hello.c +110 -0
- data/ruby/trema/hello.h +44 -0
- data/ruby/trema/host.rb +257 -0
- data/ruby/trema/ip.rb +101 -0
- data/ruby/trema/link.rb +176 -0
- data/ruby/trema/list-switches-reply.c +46 -0
- data/ruby/trema/list-switches-reply.h +40 -0
- data/ruby/trema/logger.c +162 -0
- data/ruby/trema/logger.h +44 -0
- data/ruby/trema/mac.rb +151 -0
- data/ruby/trema/match.c +594 -0
- data/ruby/trema/match.h +36 -0
- data/ruby/trema/monkey-patch/integer.rb +35 -0
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +36 -0
- data/ruby/trema/monkey-patch/integer/ranges.rb +51 -0
- data/ruby/trema/monkey-patch/module.rb +33 -0
- data/ruby/trema/monkey-patch/module/deprecation.rb +41 -0
- data/ruby/trema/monkey-patch/string.rb +33 -0
- data/ruby/trema/monkey-patch/string/inflectors.rb +54 -0
- data/ruby/trema/network-component.rb +153 -0
- data/ruby/trema/ofctl.rb +62 -0
- data/ruby/trema/open-vswitch.rb +154 -0
- data/ruby/trema/openflow-error.c +191 -0
- data/ruby/trema/openflow-error.h +53 -0
- data/ruby/trema/openflow-switch.rb +88 -0
- data/ruby/trema/ordered-hash.rb +74 -0
- data/ruby/trema/packet-queue.rb +178 -0
- data/ruby/trema/packet_in.c +736 -0
- data/ruby/trema/packet_in.h +46 -0
- data/ruby/trema/packetin-filter.rb +126 -0
- data/ruby/trema/path.rb +135 -0
- data/ruby/trema/phost.rb +69 -0
- data/ruby/trema/port-mod.c +226 -0
- data/ruby/trema/port-mod.h +36 -0
- data/ruby/trema/port-stats-reply.rb +111 -0
- data/ruby/trema/port-status.c +156 -0
- data/ruby/trema/port-status.h +45 -0
- data/ruby/trema/port.c +295 -0
- data/ruby/trema/port.h +47 -0
- data/ruby/trema/process.rb +76 -0
- data/ruby/trema/queue-get-config-reply.c +200 -0
- data/ruby/trema/queue-get-config-reply.h +47 -0
- data/ruby/trema/queue-get-config-request.c +141 -0
- data/ruby/trema/queue-get-config-request.h +44 -0
- data/ruby/trema/queue-stats-reply.rb +78 -0
- data/ruby/trema/set-config.c +171 -0
- data/ruby/trema/set-config.h +44 -0
- data/ruby/trema/shell.rb +39 -0
- data/ruby/trema/shell/down.rb +39 -0
- data/ruby/trema/shell/killall.rb +40 -0
- data/ruby/trema/shell/link.rb +61 -0
- data/ruby/trema/shell/reset_stats.rb +50 -0
- data/ruby/trema/shell/run.rb +67 -0
- data/ruby/trema/shell/send_packets.rb +42 -0
- data/ruby/trema/shell/show_stats.rb +49 -0
- data/ruby/trema/shell/up.rb +43 -0
- data/ruby/trema/shell/vhost.rb +44 -0
- data/ruby/trema/shell/vswitch.rb +49 -0
- data/ruby/trema/stats-helper.rb +65 -0
- data/ruby/trema/stats-reply.c +483 -0
- data/ruby/trema/stats-reply.h +53 -0
- data/ruby/trema/stats-request.c +634 -0
- data/ruby/trema/stats-request.h +42 -0
- data/ruby/trema/switch-daemon.rb +74 -0
- data/ruby/trema/switch-disconnected.c +40 -0
- data/ruby/trema/switch-disconnected.h +38 -0
- data/ruby/trema/switch-manager.rb +121 -0
- data/ruby/trema/switch.rb +37 -0
- data/ruby/trema/table-stats-reply.rb +87 -0
- data/ruby/trema/timers.rb +97 -0
- data/ruby/trema/trema.c +122 -0
- data/ruby/trema/tremashark.rb +39 -0
- data/ruby/trema/util.rb +84 -0
- data/ruby/trema/vendor-request.c +193 -0
- data/ruby/trema/vendor-request.h +44 -0
- data/ruby/trema/vendor-stats-reply.rb +62 -0
- data/ruby/trema/vendor.c +152 -0
- data/ruby/trema/vendor.h +52 -0
- data/ruby/trema/version.rb +30 -0
- data/spec/spec_helper.rb +153 -0
- data/spec/support/openflow-message.rb +94 -0
- data/spec/trema/action-enqueue_spec.rb +100 -0
- data/spec/trema/action-output_spec.rb +116 -0
- data/spec/trema/action-set-dl-dst_spec.rb +95 -0
- data/spec/trema/action-set-dl-src_spec.rb +92 -0
- data/spec/trema/action-set-nw-dst_spec.rb +96 -0
- data/spec/trema/action-set-nw-src_spec.rb +97 -0
- data/spec/trema/action-set-nw-tos_spec.rb +88 -0
- data/spec/trema/action-set-tp-dst_spec.rb +88 -0
- data/spec/trema/action-set-tp-src_spec.rb +88 -0
- data/spec/trema/action-set-vlan-pcp_spec.rb +91 -0
- data/spec/trema/action-set-vlan-vid_spec.rb +91 -0
- data/spec/trema/action-strip-vlan_spec.rb +57 -0
- data/spec/trema/action-vendor_spec.rb +90 -0
- data/spec/trema/app_spec.rb +90 -0
- data/spec/trema/barrier-reply_spec.rb +45 -0
- data/spec/trema/barrier-request_spec.rb +83 -0
- data/spec/trema/cli_spec.rb +160 -0
- data/spec/trema/controller_spec.rb +100 -0
- data/spec/trema/dsl/configuration_spec.rb +122 -0
- data/spec/trema/dsl/link_spec.rb +54 -0
- data/spec/trema/dsl/run_spec.rb +78 -0
- data/spec/trema/dsl/runner_spec.rb +239 -0
- data/spec/trema/dsl/switch_spec.rb +77 -0
- data/spec/trema/dsl/syntax_spec.rb +121 -0
- data/spec/trema/dsl/vhost_spec.rb +148 -0
- data/spec/trema/dsl/vswitch_spec.rb +90 -0
- data/spec/trema/echo-reply_spec.rb +49 -0
- data/spec/trema/echo-request_spec.rb +75 -0
- data/spec/trema/error_spec.rb +142 -0
- data/spec/trema/executables_spec.rb +75 -0
- data/spec/trema/features-reply_spec.rb +57 -0
- data/spec/trema/features-request_spec.rb +66 -0
- data/spec/trema/flow-removed_spec.rb +146 -0
- data/spec/trema/get-config-reply_spec.rb +43 -0
- data/spec/trema/get-config-request_spec.rb +82 -0
- data/spec/trema/hello_spec.rb +49 -0
- data/spec/trema/host_spec.rb +193 -0
- data/spec/trema/link_spec.rb +64 -0
- data/spec/trema/list-switches-reply_spec.rb +48 -0
- data/spec/trema/logger_spec.rb +48 -0
- data/spec/trema/mac_spec.rb +115 -0
- data/spec/trema/match_spec.rb +113 -0
- data/spec/trema/open-vswitch_spec.rb +123 -0
- data/spec/trema/openflow-error_spec.rb +141 -0
- data/spec/trema/openflow-switch_spec.rb +56 -0
- data/spec/trema/packet-in_spec.rb +168 -0
- data/spec/trema/packet-out_spec.rb +128 -0
- data/spec/trema/packetin-filter_spec.rb +41 -0
- data/spec/trema/port-mod_spec.rb +101 -0
- data/spec/trema/port-status_spec.rb +108 -0
- data/spec/trema/port_spec.rb +61 -0
- data/spec/trema/process_spec.rb +71 -0
- data/spec/trema/queue-get-config-reply_spec.rb +66 -0
- data/spec/trema/queue-get-config-request_spec.rb +69 -0
- data/spec/trema/set-config_spec.rb +80 -0
- data/spec/trema/shell/vhost_spec.rb +57 -0
- data/spec/trema/shell/vswitch_spec.rb +89 -0
- data/spec/trema/stats-reply_spec.rb +306 -0
- data/spec/trema/stats-request_spec.rb +151 -0
- data/spec/trema/switch-disconnected_spec.rb +58 -0
- data/spec/trema/switch-manager_spec.rb +43 -0
- data/spec/trema/tremashark_spec.rb +41 -0
- data/spec/trema/util_spec.rb +93 -0
- data/spec/trema/vendor-request_spec.rb +79 -0
- data/src/examples/cbench_switch/README +21 -0
- data/src/examples/cbench_switch/cbench-switch.rb +39 -0
- data/src/examples/cbench_switch/cbench_switch.c +68 -0
- data/src/examples/dumper/dumper.c +370 -0
- data/src/examples/dumper/dumper.conf +7 -0
- data/src/examples/dumper/dumper.rb +196 -0
- data/src/examples/hello_trema/README +13 -0
- data/src/examples/hello_trema/hello_trema.c +51 -0
- data/src/examples/hello_trema/hello_trema.conf +3 -0
- data/src/examples/hello_trema/hello_trema.rb +35 -0
- data/src/examples/learning_switch/README +15 -0
- data/src/examples/learning_switch/fdb.rb +112 -0
- data/src/examples/learning_switch/learning-switch.rb +88 -0
- data/src/examples/learning_switch/learning_switch.c +236 -0
- data/src/examples/learning_switch/learning_switch.conf +18 -0
- data/src/examples/list_switches/README +19 -0
- data/src/examples/list_switches/list-switches.rb +45 -0
- data/src/examples/list_switches/list_switches.c +81 -0
- data/src/examples/list_switches/list_switches.conf +15 -0
- data/src/examples/match_compare/match-compare.conf +30 -0
- data/src/examples/match_compare/match-compare.rb +99 -0
- data/src/examples/multi_learning_switch/README +14 -0
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +96 -0
- data/src/examples/multi_learning_switch/multi_learning_switch.c +296 -0
- data/src/examples/multi_learning_switch/multi_learning_switch.conf +17 -0
- data/src/examples/openflow_message/README +11 -0
- data/src/examples/openflow_message/echo-reply.rb +59 -0
- data/src/examples/openflow_message/echo-request.rb +58 -0
- data/src/examples/openflow_message/echo_reply.c +70 -0
- data/src/examples/openflow_message/echo_request.c +70 -0
- data/src/examples/openflow_message/example.rb +63 -0
- data/src/examples/openflow_message/features-request.rb +97 -0
- data/src/examples/openflow_message/features_request.c +168 -0
- data/src/examples/openflow_message/hello.c +70 -0
- data/src/examples/openflow_message/hello.rb +58 -0
- data/src/examples/openflow_message/set-config.rb +59 -0
- data/src/examples/openflow_message/set_config.c +70 -0
- data/src/examples/packet_in/README +15 -0
- data/src/examples/packet_in/packet_in.c +55 -0
- data/src/examples/packet_in/packet_in.conf +15 -0
- data/src/examples/packet_in/packet_in.rb +34 -0
- data/src/examples/packetin_filter_config/README +12 -0
- data/src/examples/packetin_filter_config/add_filter.c +73 -0
- data/src/examples/packetin_filter_config/delete_filter.c +65 -0
- data/src/examples/packetin_filter_config/delete_filter_strict.c +75 -0
- data/src/examples/packetin_filter_config/dump_filter.c +65 -0
- data/src/examples/packetin_filter_config/dump_filter_strict.c +75 -0
- data/src/examples/packetin_filter_config/packetin_filter_config.c +134 -0
- data/src/examples/packetin_filter_config/packetin_filter_config.conf +7 -0
- data/src/examples/packetin_filter_config/utils.c +102 -0
- data/src/examples/packetin_filter_config/utils.h +42 -0
- data/src/examples/repeater_hub/README +8 -0
- data/src/examples/repeater_hub/repeater-hub.rb +43 -0
- data/src/examples/repeater_hub/repeater-hub_spec.rb +156 -0
- data/src/examples/repeater_hub/repeater_hub.c +83 -0
- data/src/examples/repeater_hub/repeater_hub.conf +28 -0
- data/src/examples/switch_info/README +13 -0
- data/src/examples/switch_info/switch_info.c +80 -0
- data/src/examples/switch_info/switch_info.conf +3 -0
- data/src/examples/switch_info/switch_info.rb +46 -0
- data/src/examples/switch_monitor/switch-monitor.conf +3 -0
- data/src/examples/switch_monitor/switch-monitor.rb +58 -0
- data/src/examples/switch_monitor/switch_monitor.c +154 -0
- data/src/examples/traffic_monitor/counter.c +74 -0
- data/src/examples/traffic_monitor/counter.h +48 -0
- data/src/examples/traffic_monitor/counter.rb +46 -0
- data/src/examples/traffic_monitor/fdb.c +76 -0
- data/src/examples/traffic_monitor/fdb.h +50 -0
- data/src/examples/traffic_monitor/fdb.rb +44 -0
- data/src/examples/traffic_monitor/traffic-monitor.rb +100 -0
- data/src/examples/traffic_monitor/traffic_monitor.c +163 -0
- data/src/examples/traffic_monitor/traffic_monitor.conf +16 -0
- data/src/lib/arp.h +61 -0
- data/src/lib/bool.h +49 -0
- data/src/lib/buffer.c +305 -0
- data/src/lib/buffer.h +56 -0
- data/src/lib/byteorder.c +547 -0
- data/src/lib/byteorder.h +110 -0
- data/src/lib/checks.h +42 -0
- data/src/lib/daemon.c +302 -0
- data/src/lib/daemon.h +42 -0
- data/src/lib/doubly_linked_list.c +281 -0
- data/src/lib/doubly_linked_list.h +88 -0
- data/src/lib/ether.c +48 -0
- data/src/lib/ether.h +94 -0
- data/src/lib/etherip.h +46 -0
- data/src/lib/event_handler.c +389 -0
- data/src/lib/event_handler.h +64 -0
- data/src/lib/hash_table.c +417 -0
- data/src/lib/hash_table.h +138 -0
- data/src/lib/icmp.h +74 -0
- data/src/lib/igmp.h +50 -0
- data/src/lib/ipv4.h +50 -0
- data/src/lib/linked_list.c +199 -0
- data/src/lib/linked_list.h +84 -0
- data/src/lib/log.c +402 -0
- data/src/lib/log.h +78 -0
- data/src/lib/match.h +84 -0
- data/src/lib/match_table.c +608 -0
- data/src/lib/match_table.h +51 -0
- data/src/lib/message_queue.c +143 -0
- data/src/lib/message_queue.h +61 -0
- data/src/lib/messenger.c +1714 -0
- data/src/lib/messenger.h +145 -0
- data/src/lib/openflow_application_interface.c +1673 -0
- data/src/lib/openflow_application_interface.h +329 -0
- data/src/lib/openflow_message.c +4051 -0
- data/src/lib/openflow_message.h +288 -0
- data/src/lib/openflow_service_interface.h +59 -0
- data/src/lib/packet_info.c +230 -0
- data/src/lib/packet_info.h +209 -0
- data/src/lib/packet_parser.c +502 -0
- data/src/lib/packetin_filter_interface.c +294 -0
- data/src/lib/packetin_filter_interface.h +127 -0
- data/src/lib/persistent_storage.c +480 -0
- data/src/lib/persistent_storage.h +46 -0
- data/src/lib/stat.c +213 -0
- data/src/lib/stat.h +44 -0
- data/src/lib/tcp.h +67 -0
- data/src/lib/timer.c +350 -0
- data/src/lib/timer.h +53 -0
- data/src/lib/trema.c +710 -0
- data/src/lib/trema.h +79 -0
- data/src/lib/trema_private.c +177 -0
- data/src/lib/trema_private.h +60 -0
- data/src/lib/trema_wrapper.c +56 -0
- data/src/lib/trema_wrapper.h +64 -0
- data/src/lib/udp.h +43 -0
- data/src/lib/utility.c +515 -0
- data/src/lib/utility.h +67 -0
- data/src/lib/wrapper.c +100 -0
- data/src/lib/wrapper.h +76 -0
- data/src/packetin_filter/README +17 -0
- data/src/packetin_filter/packetin_filter.c +575 -0
- data/src/switch_manager/README +20 -0
- data/src/switch_manager/cookie_table.c +292 -0
- data/src/switch_manager/cookie_table.h +72 -0
- data/src/switch_manager/dpid_table.c +110 -0
- data/src/switch_manager/dpid_table.h +46 -0
- data/src/switch_manager/management_interface.h +44 -0
- data/src/switch_manager/ofpmsg_recv.c +482 -0
- data/src/switch_manager/ofpmsg_recv.h +42 -0
- data/src/switch_manager/ofpmsg_send.c +235 -0
- data/src/switch_manager/ofpmsg_send.h +50 -0
- data/src/switch_manager/secure_channel_listener.c +281 -0
- data/src/switch_manager/secure_channel_listener.h +42 -0
- data/src/switch_manager/secure_channel_receiver.c +126 -0
- data/src/switch_manager/secure_channel_receiver.h +43 -0
- data/src/switch_manager/secure_channel_sender.c +126 -0
- data/src/switch_manager/secure_channel_sender.h +43 -0
- data/src/switch_manager/service_interface.c +181 -0
- data/src/switch_manager/service_interface.h +46 -0
- data/src/switch_manager/switch.c +538 -0
- data/src/switch_manager/switch.h +51 -0
- data/src/switch_manager/switch_manager.c +448 -0
- data/src/switch_manager/switch_manager.h +63 -0
- data/src/switch_manager/switchinfo.h +72 -0
- data/src/switch_manager/xid_table.c +184 -0
- data/src/switch_manager/xid_table.h +56 -0
- data/src/tremashark/README +78 -0
- data/src/tremashark/packet_capture.c +357 -0
- data/src/tremashark/pcap_private.h +47 -0
- data/src/tremashark/pcap_queue.c +197 -0
- data/src/tremashark/pcap_queue.h +58 -0
- data/src/tremashark/plugin/.gitignore +6 -0
- data/src/tremashark/plugin/packet-trema/.gitignore +5 -0
- data/src/tremashark/plugin/packet-trema/Makefile +77 -0
- data/src/tremashark/plugin/packet-trema/Makefile.am +110 -0
- data/src/tremashark/plugin/packet-trema/Makefile.common +31 -0
- data/src/tremashark/plugin/packet-trema/moduleinfo.h +41 -0
- data/src/tremashark/plugin/packet-trema/packet-trema.c +1659 -0
- data/src/tremashark/plugin/packet-trema/plugin.c +31 -0
- data/src/tremashark/plugin/user_dlts +2 -0
- data/src/tremashark/queue.c +168 -0
- data/src/tremashark/queue.h +60 -0
- data/src/tremashark/stdin_relay.c +257 -0
- data/src/tremashark/syslog_relay.c +247 -0
- data/src/tremashark/tremashark.c +556 -0
- data/trema +93 -0
- data/trema-config +61 -0
- data/unittests/buffer_stubs.c +74 -0
- data/unittests/cmockery_trema.c +123 -0
- data/unittests/cmockery_trema.h +96 -0
- data/unittests/lib/buffer_test.c +370 -0
- data/unittests/lib/byteorder_test.c +1717 -0
- data/unittests/lib/daemon_test.c +664 -0
- data/unittests/lib/doubly_linked_list_test.c +346 -0
- data/unittests/lib/ether_test.c +127 -0
- data/unittests/lib/hash_table_test.c +278 -0
- data/unittests/lib/linked_list_test.c +343 -0
- data/unittests/lib/log_test.c +459 -0
- data/unittests/lib/match_table_test.c +1509 -0
- data/unittests/lib/message_queue_test.c +379 -0
- data/unittests/lib/messenger_test.c +438 -0
- data/unittests/lib/openflow_application_interface_test.c +3488 -0
- data/unittests/lib/openflow_message_test.c +7337 -0
- data/unittests/lib/packet_info_test.c +544 -0
- data/unittests/lib/packet_parser_test.c +703 -0
- data/unittests/lib/packetin_filter_interface_test.c +723 -0
- data/unittests/lib/persistent_storage_test.c +802 -0
- data/unittests/lib/stat_test.c +291 -0
- 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/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/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 +248 -0
- data/unittests/lib/trema_private_test.c +323 -0
- data/unittests/lib/trema_test.c +985 -0
- data/unittests/lib/utility_test.c +628 -0
- data/unittests/lib/wrapper_test.c +201 -0
- data/unittests/packetin_filter/packetin_filter_test.c +477 -0
- data/unittests/switch_manager/switch_manager_test.c +1178 -0
- data/unittests/wrapper_stubs.c +39 -0
- data/vendor/.gitignore +6 -0
- data/vendor/README +30 -0
- data/vendor/cmockery-20110428.tar.gz +0 -0
- data/vendor/oflops-0.03.tar.gz +0 -0
- data/vendor/oflops_no_snmp+1.0.0.patch +340 -0
- data/vendor/openflow-1.0.0.tar.gz +0 -0
- data/vendor/openflow.git.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2.tar.gz +0 -0
- data/vendor/ruby-ifconfig-1.2/COPYING +340 -0
- data/vendor/ruby-ifconfig-1.2/Changelog +16 -0
- data/vendor/ruby-ifconfig-1.2/INSTALL +239 -0
- data/vendor/ruby-ifconfig-1.2/README +38 -0
- data/vendor/ruby-ifconfig-1.2/Rakefile +14 -0
- data/vendor/ruby-ifconfig-1.2/TODO +8 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +17 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +14 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +17 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +24 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +60 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +20 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +36 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +71 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +72 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +69 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +3 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +84 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +130 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +49 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +43 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +112 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +55 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +38 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +77 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +4 -0
- data/vendor/ruby-ifconfig-1.2/setup.rb +1306 -0
- data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +4 -0
- data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +31 -0
- data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +40 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +40 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +49 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +44 -0
- metadata +856 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#
|
|
2
|
+
# trema show_stats command.
|
|
3
|
+
#
|
|
4
|
+
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
+
#
|
|
6
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
|
+
#
|
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
# published by the Free Software Foundation.
|
|
11
|
+
#
|
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU General Public License along
|
|
18
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
require "optparse"
|
|
24
|
+
require "trema/cli"
|
|
25
|
+
require "trema/dsl"
|
|
26
|
+
require "trema/util"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
module Trema
|
|
30
|
+
module Command
|
|
31
|
+
include Trema::Util
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def show_stats
|
|
35
|
+
sanity_check
|
|
36
|
+
|
|
37
|
+
stats = nil
|
|
38
|
+
|
|
39
|
+
options = OptionParser.new
|
|
40
|
+
options.banner = "Usage: #{ $0 } show_stats HOSTNAME [OPTIONS ...]"
|
|
41
|
+
|
|
42
|
+
options.on( "-t", "--tx" ) do
|
|
43
|
+
stats = :tx
|
|
44
|
+
end
|
|
45
|
+
options.on( "-r", "--rx" ) do
|
|
46
|
+
stats = :rx
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
options.separator ""
|
|
50
|
+
|
|
51
|
+
options.on( "-h", "--help" ) do
|
|
52
|
+
puts options.to_s
|
|
53
|
+
exit 0
|
|
54
|
+
end
|
|
55
|
+
options.on( "-v", "--verbose" ) do
|
|
56
|
+
$verbose = true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
options.parse! ARGV
|
|
60
|
+
|
|
61
|
+
host = Trema::DSL::Context.load_current.hosts[ ARGV[ 0 ] ]
|
|
62
|
+
raise "Unknown host: #{ ARGV[ 0 ] }" if host.nil?
|
|
63
|
+
|
|
64
|
+
case stats
|
|
65
|
+
when :tx
|
|
66
|
+
Trema::Cli.new( host ).show_tx_stats
|
|
67
|
+
when :rx
|
|
68
|
+
Trema::Cli.new( host ).show_rx_stats
|
|
69
|
+
else
|
|
70
|
+
puts "Sent packets:"
|
|
71
|
+
Trema::Cli.new( host ).show_tx_stats
|
|
72
|
+
puts "Received packets:"
|
|
73
|
+
Trema::Cli.new( host ).show_rx_stats
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
### Local variables:
|
|
81
|
+
### mode: Ruby
|
|
82
|
+
### coding: utf-8
|
|
83
|
+
### indent-tabs-mode: nil
|
|
84
|
+
### End:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#
|
|
2
|
+
# trema usage (help) command.
|
|
3
|
+
#
|
|
4
|
+
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
+
#
|
|
6
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
|
+
#
|
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
# published by the Free Software Foundation.
|
|
11
|
+
#
|
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU General Public License along
|
|
18
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Trema
|
|
24
|
+
module Command
|
|
25
|
+
def usage
|
|
26
|
+
command = ARGV.shift
|
|
27
|
+
|
|
28
|
+
ARGV.clear << "--help"
|
|
29
|
+
if command.nil?
|
|
30
|
+
puts <<-EOL
|
|
31
|
+
usage: #{ $PROGRAM_NAME } <COMMAND> [OPTIONS ...]
|
|
32
|
+
|
|
33
|
+
Trema command-line tool
|
|
34
|
+
Type '#{ $PROGRAM_NAME } help <COMMAND>' for help on a specific command.
|
|
35
|
+
|
|
36
|
+
Available commands:
|
|
37
|
+
run - runs a trema application.
|
|
38
|
+
kill - terminates a trema process.
|
|
39
|
+
killall - terminates all trema processes.
|
|
40
|
+
send_packets - sends UDP packets to destination host.
|
|
41
|
+
show_stats - shows stats of packets.
|
|
42
|
+
reset_stats - resets stats of packets.
|
|
43
|
+
dump_flows - print all flow entries.
|
|
44
|
+
ruby - opens in your browser Trema's Ruby API documentation.
|
|
45
|
+
EOL
|
|
46
|
+
elsif method_for( command )
|
|
47
|
+
__send__ method_for( command )
|
|
48
|
+
else
|
|
49
|
+
STDERR.puts "Type '#{ $PROGRAM_NAME } help' for usage."
|
|
50
|
+
exit false
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### Local variables:
|
|
58
|
+
### mode: Ruby
|
|
59
|
+
### coding: utf-8
|
|
60
|
+
### indent-tabs-mode: nil
|
|
61
|
+
### End:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#
|
|
2
|
+
# trema version command.
|
|
3
|
+
#
|
|
4
|
+
# Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
+
#
|
|
6
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
|
7
|
+
#
|
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
# published by the Free Software Foundation.
|
|
11
|
+
#
|
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU General Public License along
|
|
18
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
require "trema/version"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
module Trema
|
|
27
|
+
module Command
|
|
28
|
+
def version
|
|
29
|
+
puts "trema version #{ Trema::VERSION }"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Local variables:
|
|
36
|
+
### mode: Ruby
|
|
37
|
+
### coding: utf-8
|
|
38
|
+
### indent-tabs-mode: nil
|
|
39
|
+
### End:
|
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2008-2012 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
|
+
#include "barrier-reply.h"
|
|
22
|
+
#include "buffer.h"
|
|
23
|
+
#include "controller.h"
|
|
24
|
+
#include "features-reply.h"
|
|
25
|
+
#include "flow-removed.h"
|
|
26
|
+
#include "get-config-reply.h"
|
|
27
|
+
#include "list-switches-reply.h"
|
|
28
|
+
#include "logger.h"
|
|
29
|
+
#include "openflow-error.h"
|
|
30
|
+
#include "openflow.h"
|
|
31
|
+
#include "packet_in.h"
|
|
32
|
+
#include "port-status.h"
|
|
33
|
+
#include "queue-get-config-reply.h"
|
|
34
|
+
#include "ruby.h"
|
|
35
|
+
#include "rubysig.h"
|
|
36
|
+
#include "stats-reply.h"
|
|
37
|
+
#include "switch-disconnected.h"
|
|
38
|
+
#include "trema.h"
|
|
39
|
+
#include "vendor.h"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
VALUE mTrema;
|
|
43
|
+
VALUE cController;
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
static void
|
|
47
|
+
handle_timer_event( void *self ) {
|
|
48
|
+
if ( rb_respond_to( ( VALUE ) self, rb_intern( "handle_timer_event" ) ) == Qtrue ) {
|
|
49
|
+
rb_funcall( ( VALUE ) self, rb_intern( "handle_timer_event" ), 0 );
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* @overload send_message(datapath_id, message)
|
|
56
|
+
* Sends an OpenFlow message to the datapath.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* send_message datapath_id, FeaturesRequest.new
|
|
60
|
+
*
|
|
61
|
+
*
|
|
62
|
+
* @param [Number] datapath_id
|
|
63
|
+
* the datapath to which a message is sent.
|
|
64
|
+
*
|
|
65
|
+
* @param [FeaturesRequest] message
|
|
66
|
+
* the message to be sent.
|
|
67
|
+
*/
|
|
68
|
+
static VALUE
|
|
69
|
+
controller_send_message( VALUE self, VALUE datapath_id, VALUE message ) {
|
|
70
|
+
buffer *buf;
|
|
71
|
+
Data_Get_Struct( message, buffer, buf );
|
|
72
|
+
send_openflow_message( NUM2ULL( datapath_id ), buf );
|
|
73
|
+
return self;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
static VALUE
|
|
78
|
+
controller_send_list_switches_request( VALUE self ) {
|
|
79
|
+
send_list_switches_request( ( void * ) self );
|
|
80
|
+
return self;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
static void
|
|
85
|
+
form_actions( VALUE raction, openflow_actions *actions ) {
|
|
86
|
+
VALUE *data_ptr;
|
|
87
|
+
int i;
|
|
88
|
+
|
|
89
|
+
if ( raction != Qnil ) {
|
|
90
|
+
switch ( TYPE( raction ) ) {
|
|
91
|
+
case T_ARRAY:
|
|
92
|
+
data_ptr = RARRAY_PTR( raction );
|
|
93
|
+
|
|
94
|
+
for ( i = 0; i < RARRAY_LEN( raction ); i++ ) {
|
|
95
|
+
VALUE value = data_ptr[i];
|
|
96
|
+
rb_funcall( value, rb_intern( "append" ), 1, Data_Wrap_Struct( cController, NULL, NULL, actions ) );
|
|
97
|
+
}
|
|
98
|
+
break;
|
|
99
|
+
case T_OBJECT:
|
|
100
|
+
rb_funcall( raction, rb_intern( "append" ), 1, Data_Wrap_Struct( cController, NULL, NULL, actions ) );
|
|
101
|
+
break;
|
|
102
|
+
default:
|
|
103
|
+
rb_raise( rb_eTypeError, "actions argument must be an Array or an Action object" );
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
static VALUE
|
|
110
|
+
get_strict( int argc, VALUE *argv ) {
|
|
111
|
+
VALUE datapath_id = Qnil;
|
|
112
|
+
VALUE options = Qnil;
|
|
113
|
+
VALUE strict = Qnil;
|
|
114
|
+
|
|
115
|
+
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
116
|
+
if ( options != Qnil ) {
|
|
117
|
+
strict = rb_hash_aref( options, ID2SYM( rb_intern( "strict" ) ) );
|
|
118
|
+
}
|
|
119
|
+
return strict;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
static VALUE
|
|
124
|
+
controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self ) {
|
|
125
|
+
VALUE datapath_id = Qnil;
|
|
126
|
+
VALUE options = Qnil;
|
|
127
|
+
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
128
|
+
|
|
129
|
+
// Defaults
|
|
130
|
+
struct ofp_match default_match;
|
|
131
|
+
memset( &default_match, 0, sizeof( struct ofp_match ) );
|
|
132
|
+
default_match.wildcards = OFPFW_ALL;
|
|
133
|
+
struct ofp_match *match = &default_match;
|
|
134
|
+
uint64_t cookie = get_cookie();
|
|
135
|
+
uint16_t idle_timeout = 0;
|
|
136
|
+
uint16_t hard_timeout = 0;
|
|
137
|
+
uint16_t priority = UINT16_MAX;
|
|
138
|
+
uint32_t buffer_id = UINT32_MAX;
|
|
139
|
+
uint16_t flags = OFPFF_SEND_FLOW_REM;
|
|
140
|
+
openflow_actions *actions = create_actions();
|
|
141
|
+
|
|
142
|
+
// Options
|
|
143
|
+
if ( options != Qnil ) {
|
|
144
|
+
VALUE opt_match = rb_hash_aref( options, ID2SYM( rb_intern( "match" ) ) );
|
|
145
|
+
if ( opt_match != Qnil ) {
|
|
146
|
+
Data_Get_Struct( opt_match, struct ofp_match, match );
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
VALUE opt_cookie = rb_hash_aref( options, ID2SYM( rb_intern( "cookie" ) ) );
|
|
150
|
+
if ( opt_cookie != Qnil ) {
|
|
151
|
+
cookie = NUM2ULL( opt_cookie );
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
|
|
155
|
+
if ( opt_idle_timeout != Qnil ) {
|
|
156
|
+
idle_timeout = ( uint16_t )NUM2UINT( opt_idle_timeout );
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
VALUE opt_hard_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "hard_timeout" ) ) );
|
|
160
|
+
if ( opt_hard_timeout != Qnil ) {
|
|
161
|
+
hard_timeout = ( uint16_t )NUM2UINT( opt_hard_timeout );
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
VALUE opt_priority = rb_hash_aref( options, ID2SYM( rb_intern( "priority" ) ) );
|
|
165
|
+
if ( opt_priority != Qnil ) {
|
|
166
|
+
priority = ( uint16_t )NUM2UINT( opt_priority );
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
|
|
170
|
+
if ( opt_buffer_id != Qnil ) {
|
|
171
|
+
buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
VALUE opt_send_flow_rem = rb_hash_aref( options, ID2SYM( rb_intern( "send_flow_rem" ) ) );
|
|
175
|
+
if ( opt_send_flow_rem == Qfalse ) {
|
|
176
|
+
flags &= ( uint16_t ) ~OFPFF_SEND_FLOW_REM;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
VALUE opt_check_overlap = rb_hash_aref( options, ID2SYM( rb_intern( "check_overlap" ) ) );
|
|
180
|
+
if ( opt_check_overlap != Qnil ) {
|
|
181
|
+
flags |= OFPFF_CHECK_OVERLAP;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
VALUE opt_emerg = rb_hash_aref( options, ID2SYM( rb_intern( "emerg" ) ) );
|
|
185
|
+
if ( opt_emerg != Qnil ) {
|
|
186
|
+
flags |= OFPFF_EMERG;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
VALUE opt_actions = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
|
|
190
|
+
if ( opt_actions != Qnil ) {
|
|
191
|
+
form_actions( opt_actions, actions );
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
buffer *flow_mod = create_flow_mod(
|
|
196
|
+
get_transaction_id(),
|
|
197
|
+
*match,
|
|
198
|
+
cookie,
|
|
199
|
+
command,
|
|
200
|
+
idle_timeout,
|
|
201
|
+
hard_timeout,
|
|
202
|
+
priority,
|
|
203
|
+
buffer_id,
|
|
204
|
+
OFPP_NONE,
|
|
205
|
+
flags,
|
|
206
|
+
actions
|
|
207
|
+
);
|
|
208
|
+
send_openflow_message( NUM2ULL( datapath_id ), flow_mod );
|
|
209
|
+
|
|
210
|
+
free_buffer( flow_mod );
|
|
211
|
+
delete_actions( actions );
|
|
212
|
+
|
|
213
|
+
return self;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
/*
|
|
218
|
+
* @overload send_flow_mod_add(datapath_id, options={})
|
|
219
|
+
* Sends a flow_mod message to add a flow into the datapath.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* def packet_in datapath_id, message
|
|
223
|
+
* send_flow_mod_add datapath_id, :match => Match.from(message), :actions => ActionOutput.new(OFPP_FLOOD)
|
|
224
|
+
* end
|
|
225
|
+
*
|
|
226
|
+
*
|
|
227
|
+
* @param [Number] datapath_id
|
|
228
|
+
* the datapath to which a message is sent.
|
|
229
|
+
*
|
|
230
|
+
* @param [Hash] options
|
|
231
|
+
* the options to create a message with.
|
|
232
|
+
*
|
|
233
|
+
*
|
|
234
|
+
* @option options [Match, nil] :match (nil)
|
|
235
|
+
* A {Match} object describing the fields of the flow.
|
|
236
|
+
*
|
|
237
|
+
* @option options [Number] :idle_timeout (0)
|
|
238
|
+
* The idle time in seconds before discarding.
|
|
239
|
+
* Zero means flow never expires.
|
|
240
|
+
*
|
|
241
|
+
* @option options [Number] :cookie
|
|
242
|
+
* An opaque issued identifier.
|
|
243
|
+
*
|
|
244
|
+
* @option options [Number] :hard_timeout (0)
|
|
245
|
+
* The maximum time before discarding in seconds.
|
|
246
|
+
* Zero means flow never expires.
|
|
247
|
+
*
|
|
248
|
+
* @option options [Number] :priority (0xffff)
|
|
249
|
+
* The priority level of the flow entry.
|
|
250
|
+
*
|
|
251
|
+
* @option options [Number] :buffer_id (0xffffffff)
|
|
252
|
+
* The buffer ID assigned by the datapath of a buffered packet to
|
|
253
|
+
* apply the flow to. If 0xffffffff, no buffered packet is to be
|
|
254
|
+
* applied to flow actions.
|
|
255
|
+
*
|
|
256
|
+
* @option options [Boolean] :send_flow_rem (true)
|
|
257
|
+
* If true, send a flow_removed message when the flow expires or
|
|
258
|
+
* is deleted.
|
|
259
|
+
*
|
|
260
|
+
* @option options [Boolean] :check_overlap (false)
|
|
261
|
+
* If true, check for overlapping entries first, i.e. if there are
|
|
262
|
+
* conflicting entries with the same priority, the flow is not
|
|
263
|
+
* added and the modification fails.
|
|
264
|
+
*
|
|
265
|
+
* @option options [Boolean] :emerg (false)
|
|
266
|
+
* if true, the switch must consider this flow entry as an
|
|
267
|
+
* emergency entry, and only use it for forwarding when
|
|
268
|
+
* disconnected from the controller.
|
|
269
|
+
*
|
|
270
|
+
* @option options [ActionOutput, Array<ActionOutput>, nil] :actions (nil)
|
|
271
|
+
* The sequence of actions specifying the actions to perform on
|
|
272
|
+
* the flow's packets.
|
|
273
|
+
*/
|
|
274
|
+
static VALUE
|
|
275
|
+
controller_send_flow_mod_add( int argc, VALUE *argv, VALUE self ) {
|
|
276
|
+
return controller_send_flow_mod( OFPFC_ADD, argc, argv, self );
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
/*
|
|
281
|
+
* @overload send_flow_mod_modify(datapath, options={})
|
|
282
|
+
* Sends a flow_mod message to either modify or modify strict a flow from datapath.
|
|
283
|
+
* Both flow_mod modify and flow_mod modify strict commands would modify
|
|
284
|
+
* matched flow actions. The strict option adds the flow priority to the
|
|
285
|
+
* matched criteria. Accepts the same options as #send_flow_mod_add with the
|
|
286
|
+
* following additional option.
|
|
287
|
+
*
|
|
288
|
+
* @option options [Symbol] :strict
|
|
289
|
+
* If set to true modify_strict command is invoked otherwise the modify
|
|
290
|
+
* command is invoked.
|
|
291
|
+
*/
|
|
292
|
+
static VALUE
|
|
293
|
+
controller_send_flow_mod_modify( int argc, VALUE *argv, VALUE self ) {
|
|
294
|
+
uint16_t command = OFPFC_MODIFY;
|
|
295
|
+
|
|
296
|
+
if ( get_strict( argc, argv ) == Qtrue ) {
|
|
297
|
+
command = OFPFC_MODIFY_STRICT;
|
|
298
|
+
}
|
|
299
|
+
return controller_send_flow_mod( command, argc, argv, self );
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
/*
|
|
304
|
+
* @overload send_flow_mod_delete(datapath_id, options={})
|
|
305
|
+
* Sends a flow_mod_delete message to delete all matching flows.
|
|
306
|
+
* Both flow_mod delete and flow_mod delete strict commands would delete matched flows.
|
|
307
|
+
* The strict option adds the flow priority to the matched criteria.
|
|
308
|
+
* Accepts the same options as #send_flow_mod_add with the following additional
|
|
309
|
+
* option.
|
|
310
|
+
*
|
|
311
|
+
* @option options [Symbol] :strict
|
|
312
|
+
* If set to true delete_strict command is invoked otherwise the delete
|
|
313
|
+
* command is invoked.
|
|
314
|
+
*/
|
|
315
|
+
static VALUE
|
|
316
|
+
controller_send_flow_mod_delete( int argc, VALUE *argv, VALUE self ) {
|
|
317
|
+
uint16_t command = OFPFC_DELETE;
|
|
318
|
+
|
|
319
|
+
if ( get_strict( argc, argv ) == Qtrue ) {
|
|
320
|
+
command = OFPFC_DELETE_STRICT;
|
|
321
|
+
}
|
|
322
|
+
return controller_send_flow_mod( command, argc, argv, self );
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
/*
|
|
327
|
+
* @overload send_packet_out(datapath_id, options={})
|
|
328
|
+
* Sends a packet_out message to have a packet processed by the datapath.
|
|
329
|
+
*
|
|
330
|
+
* @example
|
|
331
|
+
* send_packet_out(
|
|
332
|
+
* datapath_id,
|
|
333
|
+
* :packet_in => message,
|
|
334
|
+
* :actions => Trema::ActionOutput.new(port_no)
|
|
335
|
+
* )
|
|
336
|
+
*
|
|
337
|
+
*
|
|
338
|
+
* @param [Number] datapath_id
|
|
339
|
+
* the datapath to which a message is sent.
|
|
340
|
+
*
|
|
341
|
+
* @param [Hash] options
|
|
342
|
+
* the options to create a message with.
|
|
343
|
+
*
|
|
344
|
+
*
|
|
345
|
+
* @option options [PacketIn] :packet_in (nil)
|
|
346
|
+
* The {PacketIn} object received by packet_in handler. If this
|
|
347
|
+
* option is not nil, :buffer_id, :data, and :in_port option is
|
|
348
|
+
* set automatically according to the value of :packet_in.
|
|
349
|
+
*
|
|
350
|
+
* @option options [Number] :in_port (OFPP_NONE)
|
|
351
|
+
* The port from which the frame is to be sent. OFPP_NONE if
|
|
352
|
+
* none. OFPP_TABLE to perform the actions defined in the flow
|
|
353
|
+
* table.
|
|
354
|
+
*
|
|
355
|
+
* @option options [Number] :buffer_id (0xffffffff)
|
|
356
|
+
* The buffer ID assigned by the datapath. If 0xffffffff, the
|
|
357
|
+
* frame is not buffered, and the entire frame must be passed in
|
|
358
|
+
* :data.
|
|
359
|
+
*
|
|
360
|
+
* @option options [String, nil] :data (nil)
|
|
361
|
+
* The entire Ethernet frame. Should be of length 0 if buffer_id
|
|
362
|
+
* is 0xffffffff, and should be of length >0 otherwise.
|
|
363
|
+
*
|
|
364
|
+
* @option options [ActionOutput, Array<ActionOutput>, nil] :actions (nil)
|
|
365
|
+
* The sequence of actions specifying the actions to perform on
|
|
366
|
+
* the frame.
|
|
367
|
+
*/
|
|
368
|
+
static VALUE
|
|
369
|
+
controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
|
|
370
|
+
VALUE datapath_id = Qnil;
|
|
371
|
+
VALUE options = Qnil;
|
|
372
|
+
rb_scan_args( argc, argv, "11", &datapath_id, &options );
|
|
373
|
+
|
|
374
|
+
// Defaults.
|
|
375
|
+
uint32_t buffer_id = UINT32_MAX;
|
|
376
|
+
uint16_t in_port = OFPP_NONE;
|
|
377
|
+
openflow_actions *actions = create_actions();
|
|
378
|
+
const buffer *data = NULL;
|
|
379
|
+
buffer *allocated_data = NULL;
|
|
380
|
+
|
|
381
|
+
if ( options != Qnil ) {
|
|
382
|
+
VALUE opt_message = rb_hash_aref( options, ID2SYM( rb_intern( "packet_in" ) ) );
|
|
383
|
+
if ( opt_message != Qnil ) {
|
|
384
|
+
packet_in *message;
|
|
385
|
+
Data_Get_Struct( opt_message, packet_in, message );
|
|
386
|
+
|
|
387
|
+
if ( NUM2ULL( datapath_id ) == message->datapath_id ) {
|
|
388
|
+
buffer_id = message->buffer_id;
|
|
389
|
+
in_port = message->in_port;
|
|
390
|
+
}
|
|
391
|
+
data = ( buffer_id == UINT32_MAX ? message->data : NULL );
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
VALUE opt_buffer_id = rb_hash_aref( options, ID2SYM( rb_intern( "buffer_id" ) ) );
|
|
395
|
+
if ( opt_buffer_id != Qnil ) {
|
|
396
|
+
buffer_id = ( uint32_t ) NUM2ULONG( opt_buffer_id );
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
VALUE opt_in_port = rb_hash_aref( options, ID2SYM( rb_intern( "in_port" ) ) );
|
|
400
|
+
if ( opt_in_port != Qnil ) {
|
|
401
|
+
in_port = ( uint16_t ) NUM2UINT( opt_in_port );
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
VALUE opt_action = rb_hash_aref( options, ID2SYM( rb_intern( "actions" ) ) );
|
|
405
|
+
if ( opt_action != Qnil ) {
|
|
406
|
+
form_actions( opt_action, actions );
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
VALUE opt_data = rb_hash_aref( options, ID2SYM( rb_intern( "data" ) ) );
|
|
410
|
+
if ( opt_data != Qnil ) {
|
|
411
|
+
Check_Type( opt_data, T_STRING );
|
|
412
|
+
uint16_t length = ( u_int16_t ) RSTRING_LEN( opt_data );
|
|
413
|
+
allocated_data = alloc_buffer_with_length( length );
|
|
414
|
+
memcpy( append_back_buffer( allocated_data, length ), RSTRING_PTR( opt_data ), length );
|
|
415
|
+
data = allocated_data;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
buffer *packet_out = create_packet_out(
|
|
420
|
+
get_transaction_id(),
|
|
421
|
+
buffer_id,
|
|
422
|
+
in_port,
|
|
423
|
+
actions,
|
|
424
|
+
data
|
|
425
|
+
);
|
|
426
|
+
send_openflow_message( NUM2ULL( datapath_id ), packet_out );
|
|
427
|
+
|
|
428
|
+
if ( allocated_data != NULL ) {
|
|
429
|
+
free_buffer( allocated_data );
|
|
430
|
+
}
|
|
431
|
+
free_buffer( packet_out );
|
|
432
|
+
delete_actions( actions );
|
|
433
|
+
return self;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
/*
|
|
438
|
+
* Starts this controller. Usually you do not need to invoke
|
|
439
|
+
* explicitly, because this is called implicitly by "trema run"
|
|
440
|
+
* command.
|
|
441
|
+
*/
|
|
442
|
+
static VALUE
|
|
443
|
+
controller_run( VALUE self ) {
|
|
444
|
+
setenv( "TREMA_HOME", STR2CSTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
|
|
445
|
+
|
|
446
|
+
VALUE name = rb_funcall( self, rb_intern( "name" ), 0 );
|
|
447
|
+
rb_gv_set( "$PROGRAM_NAME", name );
|
|
448
|
+
|
|
449
|
+
int argc = 3;
|
|
450
|
+
char **argv = xmalloc( sizeof ( char * ) * ( uint32_t ) ( argc + 1 ) );
|
|
451
|
+
argv[ 0 ] = STR2CSTR( name );
|
|
452
|
+
argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
|
|
453
|
+
argv[ 2 ] = STR2CSTR( name );
|
|
454
|
+
argv[ 3 ] = NULL;
|
|
455
|
+
init_trema( &argc, &argv );
|
|
456
|
+
xfree( argv );
|
|
457
|
+
|
|
458
|
+
set_switch_ready_handler( handle_switch_ready, ( void * ) self );
|
|
459
|
+
set_features_reply_handler( handle_features_reply, ( void * ) self );
|
|
460
|
+
set_packet_in_handler( handle_packet_in, ( void * ) self );
|
|
461
|
+
set_flow_removed_handler( handle_flow_removed, ( void * ) self );
|
|
462
|
+
set_switch_disconnected_handler( handle_switch_disconnected, ( void * ) self );
|
|
463
|
+
set_port_status_handler( handle_port_status, ( void * ) self );
|
|
464
|
+
set_stats_reply_handler( handle_stats_reply, ( void * ) self );
|
|
465
|
+
set_error_handler( handle_openflow_error, ( void * ) self );
|
|
466
|
+
set_get_config_reply_handler( handle_get_config_reply, ( void * ) self );
|
|
467
|
+
set_barrier_reply_handler( handle_barrier_reply, ( void * ) self );
|
|
468
|
+
set_vendor_handler( handle_vendor, ( void * ) self );
|
|
469
|
+
set_queue_get_config_reply_handler( handle_queue_get_config_reply, ( void * ) self );
|
|
470
|
+
set_list_switches_reply_handler( handle_list_switches_reply );
|
|
471
|
+
|
|
472
|
+
struct itimerspec interval;
|
|
473
|
+
interval.it_interval.tv_sec = 1;
|
|
474
|
+
interval.it_interval.tv_nsec = 0;
|
|
475
|
+
interval.it_value.tv_sec = 0;
|
|
476
|
+
interval.it_value.tv_nsec = 0;
|
|
477
|
+
add_timer_event_callback( &interval, handle_timer_event, ( void * ) self );
|
|
478
|
+
|
|
479
|
+
if ( rb_respond_to( self, rb_intern( "start" ) ) == Qtrue ) {
|
|
480
|
+
rb_funcall( self, rb_intern( "start" ), 0 );
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
rb_funcall( self, rb_intern( "start_trema" ), 0 );
|
|
484
|
+
|
|
485
|
+
return self;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
/*
|
|
490
|
+
* @overload shutdown!
|
|
491
|
+
* In the context of trema framework stops this controller and its applications.
|
|
492
|
+
*/
|
|
493
|
+
static VALUE
|
|
494
|
+
controller_shutdown( VALUE self ) {
|
|
495
|
+
stop_trema();
|
|
496
|
+
return self;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
static void
|
|
501
|
+
thread_pass( void *user_data ) {
|
|
502
|
+
UNUSED( user_data );
|
|
503
|
+
CHECK_INTS;
|
|
504
|
+
rb_funcall( rb_cThread, rb_intern( "pass" ), 0 );
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
/*
|
|
509
|
+
* In the context of trema framework invokes the scheduler to start its applications.
|
|
510
|
+
*/
|
|
511
|
+
static VALUE
|
|
512
|
+
controller_start_trema( VALUE self ) {
|
|
513
|
+
struct itimerspec interval;
|
|
514
|
+
interval.it_interval.tv_sec = 0;
|
|
515
|
+
interval.it_interval.tv_nsec = 1000000;
|
|
516
|
+
interval.it_value.tv_sec = 0;
|
|
517
|
+
interval.it_value.tv_nsec = 0;
|
|
518
|
+
add_timer_event_callback( &interval, thread_pass, NULL );
|
|
519
|
+
|
|
520
|
+
start_trema();
|
|
521
|
+
|
|
522
|
+
return self;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/********************************************************************************
|
|
526
|
+
* Init Controller module.
|
|
527
|
+
********************************************************************************/
|
|
528
|
+
|
|
529
|
+
void
|
|
530
|
+
Init_controller() {
|
|
531
|
+
rb_require( "trema/app" );
|
|
532
|
+
VALUE cApp = rb_eval_string( "Trema::App" );
|
|
533
|
+
cController = rb_define_class_under( mTrema, "Controller", cApp );
|
|
534
|
+
rb_include_module( cController, mLogger );
|
|
535
|
+
|
|
536
|
+
rb_define_const( cController, "OFPP_MAX", INT2NUM( OFPP_MAX ) );
|
|
537
|
+
rb_define_const( cController, "OFPP_IN_PORT", INT2NUM( OFPP_IN_PORT ) );
|
|
538
|
+
rb_define_const( cController, "OFPP_TABLE", INT2NUM( OFPP_TABLE ) );
|
|
539
|
+
rb_define_const( cController, "OFPP_NORMAL", INT2NUM( OFPP_NORMAL ) );
|
|
540
|
+
rb_define_const( cController, "OFPP_FLOOD", INT2NUM( OFPP_FLOOD ) );
|
|
541
|
+
rb_define_const( cController, "OFPP_ALL", INT2NUM( OFPP_ALL ) );
|
|
542
|
+
rb_define_const( cController, "OFPP_CONTROLLER", INT2NUM( OFPP_CONTROLLER ) );
|
|
543
|
+
rb_define_const( cController, "OFPP_LOCAL", INT2NUM( OFPP_LOCAL ) );
|
|
544
|
+
rb_define_const( cController, "OFPP_NONE", INT2NUM( OFPP_NONE ) );
|
|
545
|
+
|
|
546
|
+
rb_define_const( cController, "OFPPR_ADD", INT2NUM( OFPPR_ADD ) );
|
|
547
|
+
rb_define_const( cController, "OFPPR_DELETE", INT2NUM( OFPPR_DELETE ) );
|
|
548
|
+
rb_define_const( cController, "OFPPR_MODIFY", INT2NUM( OFPPR_MODIFY ) );
|
|
549
|
+
|
|
550
|
+
rb_define_const( cController, "OFPC_FLOW_STATS", INT2NUM( OFPC_FLOW_STATS ) );
|
|
551
|
+
rb_define_const( cController, "OFPC_TABLE_STATS", INT2NUM( OFPC_TABLE_STATS ) );
|
|
552
|
+
rb_define_const( cController, "OFPC_PORT_STATS", INT2NUM( OFPC_PORT_STATS ) );
|
|
553
|
+
rb_define_const( cController, "OFPC_STP", INT2NUM( OFPC_STP) );
|
|
554
|
+
rb_define_const( cController, "OFPC_RESERVED", INT2NUM( OFPC_RESERVED ) );
|
|
555
|
+
rb_define_const( cController, "OFPC_IP_REASM", INT2NUM( OFPC_IP_REASM ) );
|
|
556
|
+
rb_define_const( cController, "OFPC_QUEUE_STATS", INT2NUM( OFPC_QUEUE_STATS ) );
|
|
557
|
+
rb_define_const( cController, "OFPC_ARP_MATCH_IP", INT2NUM( OFPC_ARP_MATCH_IP ) );
|
|
558
|
+
|
|
559
|
+
rb_define_const( cController, "OFPAT_OUTPUT", INT2NUM( OFPAT_OUTPUT ) );
|
|
560
|
+
rb_define_const( cController, "OFPAT_SET_VLAN_VID", INT2NUM( OFPAT_SET_VLAN_VID ) );
|
|
561
|
+
rb_define_const( cController, "OFPAT_SET_VLAN_PCP", INT2NUM( OFPAT_SET_VLAN_PCP ) );
|
|
562
|
+
rb_define_const( cController, "OFPAT_STRIP_VLAN", INT2NUM( OFPAT_STRIP_VLAN ) );
|
|
563
|
+
rb_define_const( cController, "OFPAT_SET_DL_SRC", INT2NUM( OFPAT_SET_DL_SRC) );
|
|
564
|
+
rb_define_const( cController, "OFPAT_SET_DL_DST", INT2NUM( OFPAT_SET_DL_DST) );
|
|
565
|
+
rb_define_const( cController, "OFPAT_SET_NW_SRC", INT2NUM( OFPAT_SET_NW_SRC ) );
|
|
566
|
+
rb_define_const( cController, "OFPAT_SET_NW_DST", INT2NUM( OFPAT_SET_NW_DST ) );
|
|
567
|
+
rb_define_const( cController, "OFPAT_SET_NW_TOS", INT2NUM( OFPAT_SET_NW_TOS ) );
|
|
568
|
+
rb_define_const( cController, "OFPAT_SET_TP_SRC", INT2NUM( OFPAT_SET_TP_SRC ) );
|
|
569
|
+
rb_define_const( cController, "OFPAT_SET_TP_DST", INT2NUM( OFPAT_SET_TP_DST ) );
|
|
570
|
+
rb_define_const( cController, "OFPAT_ENQUEUE", INT2NUM( OFPAT_ENQUEUE ) );
|
|
571
|
+
rb_define_const( cController, "OFPAT_VENDOR", INT2NUM( OFPAT_VENDOR ) );
|
|
572
|
+
|
|
573
|
+
rb_define_method( cController, "send_message", controller_send_message, 2 );
|
|
574
|
+
rb_define_method( cController, "send_list_switches_request", controller_send_list_switches_request, 0 );
|
|
575
|
+
rb_define_method( cController, "send_flow_mod_add", controller_send_flow_mod_add, -1 );
|
|
576
|
+
rb_define_method( cController, "send_flow_mod_modify", controller_send_flow_mod_modify, -1 );
|
|
577
|
+
rb_define_method( cController, "send_flow_mod_delete", controller_send_flow_mod_delete, -1 );
|
|
578
|
+
rb_define_method( cController, "send_packet_out", controller_send_packet_out, -1 );
|
|
579
|
+
|
|
580
|
+
rb_define_method( cController, "run!", controller_run, 0 );
|
|
581
|
+
rb_define_method( cController, "shutdown!", controller_shutdown, 0 );
|
|
582
|
+
|
|
583
|
+
// Private
|
|
584
|
+
rb_define_private_method( cController, "start_trema", controller_start_trema, 0 );
|
|
585
|
+
|
|
586
|
+
rb_require( "trema/controller" );
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
/*
|
|
591
|
+
* Local variables:
|
|
592
|
+
* c-basic-offset: 2
|
|
593
|
+
* indent-tabs-mode: nil
|
|
594
|
+
* End:
|
|
595
|
+
*/
|