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,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Ruby wrapper class of OpenFlow packet_in message.
|
|
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
|
+
#ifndef PACKET_IN_H
|
|
24
|
+
#define PACKET_IN_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include "ruby.h"
|
|
28
|
+
#include "trema.h"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
extern VALUE cPacketIn;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
void Init_packet_in( void );
|
|
35
|
+
void handle_packet_in( uint64_t datapath_id, packet_in message );
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#endif // PACKET_IN_H
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* Local variables:
|
|
43
|
+
* c-basic-offset: 2
|
|
44
|
+
* indent-tabs-mode: nil
|
|
45
|
+
* End:
|
|
46
|
+
*/
|
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
require "trema/executables"
|
|
22
|
+
require "trema/network-component"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
module Trema
|
|
26
|
+
#
|
|
27
|
+
# The controller class of packetin_filter.
|
|
28
|
+
#
|
|
29
|
+
class PacketinFilter < NetworkComponent
|
|
30
|
+
#
|
|
31
|
+
# Creates a PacketinFilter controller
|
|
32
|
+
#
|
|
33
|
+
# @example
|
|
34
|
+
# Trema::PacketinFilter.new( :lldp => "topology manager", :packet_in => "OpenFlow ping-pong" )
|
|
35
|
+
#
|
|
36
|
+
# @return [PacketinFilter]
|
|
37
|
+
#
|
|
38
|
+
# @api public
|
|
39
|
+
#
|
|
40
|
+
def initialize queues
|
|
41
|
+
check_mandatory_options queues
|
|
42
|
+
@queues = queues
|
|
43
|
+
PacketinFilter.add self
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Returns the name of packetin filter
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# packetin_filter.name => "packet-in filter"
|
|
52
|
+
#
|
|
53
|
+
# @return [String]
|
|
54
|
+
#
|
|
55
|
+
# @api public
|
|
56
|
+
#
|
|
57
|
+
def name
|
|
58
|
+
"packet-in filter"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
#
|
|
63
|
+
# Starts a packetin filter process
|
|
64
|
+
#
|
|
65
|
+
# @example
|
|
66
|
+
# packetin_filter.run!
|
|
67
|
+
#
|
|
68
|
+
# @return [undefined]
|
|
69
|
+
#
|
|
70
|
+
# @api public
|
|
71
|
+
#
|
|
72
|
+
def run!
|
|
73
|
+
sh "#{ Executables.packetin_filter } --daemonize --name=filter #{ lldp_queue } #{ packetin_queue }"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
################################################################################
|
|
78
|
+
private
|
|
79
|
+
################################################################################
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
#
|
|
83
|
+
# Checks mandatory options for packetin_filter command
|
|
84
|
+
#
|
|
85
|
+
# @return [undefined]
|
|
86
|
+
#
|
|
87
|
+
# @api private
|
|
88
|
+
#
|
|
89
|
+
def check_mandatory_options queues
|
|
90
|
+
[ :lldp, :packet_in ].each do | each |
|
|
91
|
+
raise ":#{ each } is a mandatory option" if queues[ each ].nil?
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
#
|
|
97
|
+
# The lldp option of packetin_filter command
|
|
98
|
+
#
|
|
99
|
+
# @return [String]
|
|
100
|
+
#
|
|
101
|
+
# @api private
|
|
102
|
+
#
|
|
103
|
+
def lldp_queue
|
|
104
|
+
"lldp::#{ @queues[ :lldp ] }"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
#
|
|
109
|
+
# The packetin option of packetin_filter command
|
|
110
|
+
#
|
|
111
|
+
# @return [String]
|
|
112
|
+
#
|
|
113
|
+
# @api private
|
|
114
|
+
#
|
|
115
|
+
def packetin_queue
|
|
116
|
+
"packet_in::#{ @queues[ :packet_in ] }"
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
### Local variables:
|
|
123
|
+
### mode: Ruby
|
|
124
|
+
### coding: utf-8-unix
|
|
125
|
+
### indent-tabs-mode: nil
|
|
126
|
+
### End:
|
data/ruby/trema/path.rb
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Trema paths.
|
|
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
|
+
def self.home
|
|
25
|
+
File.expand_path File.join( File.dirname( __FILE__ ), "..", ".." )
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def self.objects
|
|
30
|
+
File.join home, "objects"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def self.cmockery
|
|
35
|
+
File.join objects, "cmockery"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def self.openvswitch
|
|
40
|
+
File.join objects, "openvswitch"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def self.cmockery_h
|
|
45
|
+
File.join cmockery, "include/google/cmockery.h"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def self.libcmockery_a
|
|
50
|
+
File.join cmockery, "lib/libcmockery.a"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def self.openflow
|
|
55
|
+
File.join objects, "openflow"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def self.openflow_h
|
|
60
|
+
File.join openflow, "openflow.h"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def self.oflops
|
|
65
|
+
File.join objects, "oflops"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def self.tmp
|
|
70
|
+
if ENV.key?( "TREMA_TMP" )
|
|
71
|
+
File.expand_path ENV[ "TREMA_TMP" ]
|
|
72
|
+
else
|
|
73
|
+
File.join home, "tmp"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def self.log_directory
|
|
79
|
+
File.join tmp, "log"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def self.pid_directory
|
|
84
|
+
File.join tmp, "pid"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def self.sock_directory
|
|
89
|
+
File.join tmp, "sock"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
module Vendor
|
|
94
|
+
def self.path
|
|
95
|
+
File.join Trema.home, "vendor"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def self.cmockery
|
|
100
|
+
File.join path, "cmockery-20110428"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def self.openflow
|
|
105
|
+
File.join path, "openflow-1.0.0"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def self.openflow_wireshark_plugin
|
|
110
|
+
File.join path, "openflow.git"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def self.openvswitch
|
|
115
|
+
File.join path, "openvswitch-1.2.2"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def self.phost
|
|
120
|
+
File.join path, "phost"
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def self.oflops
|
|
125
|
+
File.join path, "oflops-0.03"
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
### Local variables:
|
|
132
|
+
### mode: Ruby
|
|
133
|
+
### coding: utf-8
|
|
134
|
+
### indent-tabs-mode: nil
|
|
135
|
+
### End:
|
data/ruby/trema/phost.rb
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#
|
|
2
|
+
# The controller class of phost.
|
|
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/daemon"
|
|
24
|
+
require "trema/executables"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
module Trema
|
|
28
|
+
class Phost
|
|
29
|
+
include Trema::Daemon
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
command { | phost | "sudo #{ Executables.phost } -i #{ phost.interface } -D" }
|
|
33
|
+
wait_until_up
|
|
34
|
+
daemon_id :interface
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def initialize host
|
|
38
|
+
@host = host
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def interface
|
|
43
|
+
raise "The link(s) for vhost '#{ name }' is not defined." if @host.interface.nil?
|
|
44
|
+
@host.interface
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def running?
|
|
49
|
+
not @host.interface.nil? and super
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
################################################################################
|
|
54
|
+
private
|
|
55
|
+
################################################################################
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def name
|
|
59
|
+
@host.name
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
### Local variables:
|
|
66
|
+
### mode: Ruby
|
|
67
|
+
### coding: utf-8-unix
|
|
68
|
+
### indent-tabs-mode: nil
|
|
69
|
+
### End:
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Author: Nick Karanatsios <nickkaranatsios@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 "trema.h"
|
|
22
|
+
#include "ruby.h"
|
|
23
|
+
#include "action-common.h"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
extern VALUE mTrema;
|
|
27
|
+
VALUE cPortMod;
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
static VALUE
|
|
31
|
+
port_mod_alloc( VALUE kclass ) {
|
|
32
|
+
buffer *port_mod;
|
|
33
|
+
static const uint8_t hw_addr[ OFP_ETH_ALEN ] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
|
|
34
|
+
uint32_t config = OFPPC_PORT_DOWN;
|
|
35
|
+
uint32_t mask = 1;
|
|
36
|
+
uint32_t advertise = 0;
|
|
37
|
+
|
|
38
|
+
port_mod = create_port_mod( 1, 1, hw_addr, config, mask, advertise );
|
|
39
|
+
return Data_Wrap_Struct( kclass, NULL, free_buffer, port_mod );
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
* A {PortMod} instance a request object to perform operations on a physical port.
|
|
45
|
+
*
|
|
46
|
+
* @overload initialize(options={})
|
|
47
|
+
* @example
|
|
48
|
+
* PortMod.new(
|
|
49
|
+
* :port_no => 1,
|
|
50
|
+
* :hw_addr => "11:22:33:44:55:66",
|
|
51
|
+
* :config => 1,
|
|
52
|
+
* :mask => 1,
|
|
53
|
+
* :advertise => 0
|
|
54
|
+
* )
|
|
55
|
+
*
|
|
56
|
+
* @param [Hash] options
|
|
57
|
+
* the options to create a message with.
|
|
58
|
+
*
|
|
59
|
+
* @param [Number] :port_no
|
|
60
|
+
* an index into datapath's ports list.
|
|
61
|
+
*
|
|
62
|
+
* @param [String,Number,Trema::Mac] :hw_addr
|
|
63
|
+
* the hardware address of a port.
|
|
64
|
+
* Unique for each port. Obtained from +OFPT_FEATURES_REPLY+ message.
|
|
65
|
+
* Can be supplied as a string, number or as a Mac object.
|
|
66
|
+
*
|
|
67
|
+
* @param [Number] :config
|
|
68
|
+
* a bitmap that can be set to configure a port.
|
|
69
|
+
*
|
|
70
|
+
* @param [Number] :mask
|
|
71
|
+
* set the bits of the +config+ flag to change.
|
|
72
|
+
*
|
|
73
|
+
* @param [Number] :advertise
|
|
74
|
+
* bitmap of +ofp_port_features+ set to zero to prevent
|
|
75
|
+
* any changes. Or can be copied from +OFPT_FEATURES_REPLY+ message.
|
|
76
|
+
*
|
|
77
|
+
* @return [PortMod]
|
|
78
|
+
* an object that encapsulates the +OFPT_PORT_MOD+ OpenFlow message.
|
|
79
|
+
*/
|
|
80
|
+
static VALUE
|
|
81
|
+
port_mod_init( int argc, VALUE *argv, VALUE self ) {
|
|
82
|
+
VALUE options;
|
|
83
|
+
|
|
84
|
+
if ( rb_scan_args( argc, argv, "01", &options ) == 1 ) {
|
|
85
|
+
Check_Type( options, T_HASH );
|
|
86
|
+
buffer *port_mod;
|
|
87
|
+
Data_Get_Struct( self, buffer, port_mod );
|
|
88
|
+
VALUE mac;
|
|
89
|
+
VALUE hw_addr;
|
|
90
|
+
uint8_t *ptr;
|
|
91
|
+
uint8_t haddr[ OFP_ETH_ALEN ];
|
|
92
|
+
|
|
93
|
+
if ( ( hw_addr = rb_hash_aref( options, ID2SYM( rb_intern( "hw_addr" ) ) ) ) != Qnil ) {
|
|
94
|
+
mac = hw_addr;
|
|
95
|
+
if ( rb_obj_is_kind_of( hw_addr, rb_cString ) == Qtrue ||
|
|
96
|
+
rb_obj_is_kind_of( hw_addr, rb_cInteger ) == Qtrue ) {
|
|
97
|
+
mac = rb_funcall( rb_eval_string( "Trema::Mac" ), rb_intern( "new" ), 1, hw_addr );
|
|
98
|
+
} else if ( rb_obj_is_instance_of( hw_addr, rb_eval_string( "Trema::Mac" ) ) == Qfalse ) {
|
|
99
|
+
rb_raise( rb_eArgError, "hw_addr must be a string or an integer or Mac object" );
|
|
100
|
+
}
|
|
101
|
+
ptr = ( uint8_t* ) dl_addr_short( mac, haddr );
|
|
102
|
+
rb_iv_set( self, "@hw_addr", mac );
|
|
103
|
+
}
|
|
104
|
+
VALUE port_no;
|
|
105
|
+
if ( ( port_no = rb_hash_aref( options, ID2SYM( rb_intern( "port_no" ) ) ) ) != Qnil ) {
|
|
106
|
+
if ( rb_funcall( port_no, rb_intern( "unsigned_16bit?" ), 0 ) == Qfalse ) {
|
|
107
|
+
rb_raise( rb_eArgError, "Port number must be an unsigned 16-bit integer" );
|
|
108
|
+
}
|
|
109
|
+
rb_iv_set( self, "@port_no", port_no );
|
|
110
|
+
}
|
|
111
|
+
VALUE config;
|
|
112
|
+
if ( ( config = rb_hash_aref( options, ID2SYM( rb_intern( "config" ) ) ) ) != Qnil ){
|
|
113
|
+
rb_iv_set( self, "@config", config );
|
|
114
|
+
}
|
|
115
|
+
VALUE mask;
|
|
116
|
+
if ( ( mask = rb_hash_aref( options, ID2SYM( rb_intern( "mask" ) ) ) ) != Qnil ){
|
|
117
|
+
rb_iv_set( self, "@mask", mask );
|
|
118
|
+
}
|
|
119
|
+
VALUE advertise;
|
|
120
|
+
if ( ( advertise = rb_hash_aref( options, ID2SYM( rb_intern( "advertise" ) ) ) ) != Qnil ){
|
|
121
|
+
rb_iv_set( self, "@advertise", advertise );
|
|
122
|
+
}
|
|
123
|
+
uint32_t xid = get_transaction_id();
|
|
124
|
+
rb_iv_set( self, "@transaction_id", UINT2NUM( xid ) );
|
|
125
|
+
|
|
126
|
+
( ( struct ofp_header * ) ( port_mod->data ) )->xid = htonl( xid );
|
|
127
|
+
( ( struct ofp_port_mod * ) ( port_mod->data ) )->port_no = htons( ( uint16_t ) NUM2UINT( port_no ) );
|
|
128
|
+
memcpy( ( ( struct ofp_port_mod * ) ( port_mod->data ) )->hw_addr, ptr, OFP_ETH_ALEN );
|
|
129
|
+
( ( struct ofp_port_mod * ) ( port_mod->data ) )->config = htonl( ( uint32_t ) NUM2UINT( config ) );
|
|
130
|
+
( ( struct ofp_port_mod * ) ( port_mod->data ) )->mask = htonl( ( uint32_t ) NUM2UINT( mask ) );
|
|
131
|
+
( ( struct ofp_port_mod * ) ( port_mod->data ) )->advertise = htonl( ( uint32_t ) NUM2UINT( advertise ) );
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
rb_raise( rb_eArgError, "Port no, hw_addr, config, mask, advertise are mandatory options" );
|
|
135
|
+
}
|
|
136
|
+
return self;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
/*
|
|
141
|
+
* Transaction ids, message sequence numbers matching requests to replies.
|
|
142
|
+
*
|
|
143
|
+
* @return [Number] the value of transaction_id.
|
|
144
|
+
*/
|
|
145
|
+
static VALUE
|
|
146
|
+
port_mod_transaction_id( VALUE self ) {
|
|
147
|
+
return rb_iv_get( self, "@transaction_id" );
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
* Port number and hardware address as a pair identify a port.
|
|
153
|
+
*
|
|
154
|
+
* @return [Number] the value of port_no.
|
|
155
|
+
*/
|
|
156
|
+
static VALUE
|
|
157
|
+
port_mod_port_no( VALUE self ) {
|
|
158
|
+
return rb_iv_get( self, "@port_no" );
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* Ethernet address converted and stored as a {Trema::Mac} object.
|
|
164
|
+
*
|
|
165
|
+
* @return [Mac] the value of hw_addr.
|
|
166
|
+
*/
|
|
167
|
+
static VALUE
|
|
168
|
+
port_mod_hw_addr( VALUE self ) {
|
|
169
|
+
return rb_iv_get( self, "@hw_addr" );
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* A port can be administratively brought down, disable flooding or packet
|
|
175
|
+
* forwarding or any other options as per +ofp_port_config+. flags.
|
|
176
|
+
*
|
|
177
|
+
* @return [Number] the value of config.
|
|
178
|
+
*/
|
|
179
|
+
static VALUE
|
|
180
|
+
port_mod_config( VALUE self ) {
|
|
181
|
+
return rb_iv_get( self, "@config" );
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
* Set the bitmap as per +config+ attribute.
|
|
187
|
+
*
|
|
188
|
+
* @return [Number] the value of mask.
|
|
189
|
+
*/
|
|
190
|
+
static VALUE
|
|
191
|
+
port_mod_mask( VALUE self ) {
|
|
192
|
+
return rb_iv_get( self, "@mask" );
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
/*
|
|
197
|
+
* Set to zero to prevent any changes.
|
|
198
|
+
*
|
|
199
|
+
* @return [Number] the value of advertise.
|
|
200
|
+
*/
|
|
201
|
+
static VALUE
|
|
202
|
+
port_mod_advertise( VALUE self ) {
|
|
203
|
+
return rb_iv_get( self, "@advertise" );
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
void
|
|
208
|
+
Init_port_mod() {
|
|
209
|
+
cPortMod = rb_define_class_under( mTrema, "PortMod", rb_cObject );
|
|
210
|
+
rb_define_alloc_func( cPortMod, port_mod_alloc );
|
|
211
|
+
rb_define_method( cPortMod, "initialize", port_mod_init, -1 );
|
|
212
|
+
rb_define_method( cPortMod, "transaction_id", port_mod_transaction_id, 0 );
|
|
213
|
+
rb_define_method( cPortMod, "port_no", port_mod_port_no, 0 );
|
|
214
|
+
rb_define_method( cPortMod, "hw_addr", port_mod_hw_addr, 0 );
|
|
215
|
+
rb_define_method( cPortMod, "config", port_mod_config, 0 );
|
|
216
|
+
rb_define_method( cPortMod, "mask", port_mod_mask, 0 );
|
|
217
|
+
rb_define_method( cPortMod, "advertise", port_mod_advertise, 0 );
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
/*
|
|
222
|
+
* Local variables:
|
|
223
|
+
* c-basic-offset: 2
|
|
224
|
+
* indent-tabs-mode: nil
|
|
225
|
+
* End:
|
|
226
|
+
*/
|