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,36 @@
|
|
|
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 "ruby.h"
|
|
22
|
+
#include "trema.h"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
extern VALUE cPortMod;
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
void Init_port_mod( void );
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
* Local variables:
|
|
33
|
+
* c-basic-offset: 2
|
|
34
|
+
* indent-tabs-mode: nil
|
|
35
|
+
* End:
|
|
36
|
+
*/
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
require "trema/stats-helper"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
module Trema
|
|
25
|
+
class PortStatsReply < StatsHelper
|
|
26
|
+
FIELDS = %w(port_no rx_packets tx_packets rx_bytes) +
|
|
27
|
+
%w(tx_bytes rx_dropped tx_dropped rx_errors tx_errors) +
|
|
28
|
+
%w(rx_frame_err rx_over_err rx_crc_err collisions )
|
|
29
|
+
FIELDS.each { |field| attr_reader field.intern }
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# Port counters or errors for one or more physical ports.
|
|
33
|
+
# A user would not explicitly instantiate a {PortStatsReply} object but would
|
|
34
|
+
# be created as a result of parsing the +OFPT_STATS_REPLY(OFPST_PORT)+ message.
|
|
35
|
+
#
|
|
36
|
+
# @overload initialize(options={})
|
|
37
|
+
#
|
|
38
|
+
# @example
|
|
39
|
+
# PortStatsReply.new(
|
|
40
|
+
# :port_no => 1,
|
|
41
|
+
# :rx_packets => 7,
|
|
42
|
+
# :tx_packets => 10,
|
|
43
|
+
# :rx_bytes => 1454,
|
|
44
|
+
# :tx_bytes => 2314
|
|
45
|
+
# :rx_dropped => 0,
|
|
46
|
+
# :tx_dropped => 0,
|
|
47
|
+
# :rx_errors => 0,
|
|
48
|
+
# :tx_errors => 0,
|
|
49
|
+
# :rx_frame_err => 0,
|
|
50
|
+
# :rx_over_err => 0,
|
|
51
|
+
# :rx_crc_err => 0,
|
|
52
|
+
# :collisions => 0
|
|
53
|
+
# )
|
|
54
|
+
#
|
|
55
|
+
# @param [Hash] options
|
|
56
|
+
# the options to create this instance with.
|
|
57
|
+
#
|
|
58
|
+
# @option options [Number] :port_no
|
|
59
|
+
# the port_no statistics are reported for.
|
|
60
|
+
#
|
|
61
|
+
# @option options [Number] :rx_packets
|
|
62
|
+
# a counter of received packets.
|
|
63
|
+
#
|
|
64
|
+
# @option options [Number] :tx_packets
|
|
65
|
+
# a counter of transmitted packets.
|
|
66
|
+
#
|
|
67
|
+
# @option options [Number] :rx_bytes
|
|
68
|
+
# a counter of received bytes.
|
|
69
|
+
#
|
|
70
|
+
# @option options [Number] :tx_bytes
|
|
71
|
+
# a counter of transmitted bytes.
|
|
72
|
+
#
|
|
73
|
+
# @option options [Number] :rx_dropped
|
|
74
|
+
# a counter of received dropped frames.
|
|
75
|
+
#
|
|
76
|
+
# @option options [Number] :tx_dropped
|
|
77
|
+
# a counter of transmitted dropped frames.
|
|
78
|
+
#
|
|
79
|
+
# @option options [Number] :rx_errors
|
|
80
|
+
# a counter of received errors.
|
|
81
|
+
#
|
|
82
|
+
# @option options [Number] :tx_errors
|
|
83
|
+
# a counter of transmitted errors.
|
|
84
|
+
#
|
|
85
|
+
# @option options [Number] :rx_frame_err
|
|
86
|
+
# a counter of received frame errors.
|
|
87
|
+
#
|
|
88
|
+
# @option options [Number] :rx_over_err
|
|
89
|
+
# a counter of received overrun errors.
|
|
90
|
+
#
|
|
91
|
+
# @option options [Number] :rx_crc_err
|
|
92
|
+
# a counter of crc errors.
|
|
93
|
+
#
|
|
94
|
+
# @option options [Number] :collisions
|
|
95
|
+
# a counter of detected collisions.
|
|
96
|
+
#
|
|
97
|
+
# @return [PortStatsReply]
|
|
98
|
+
# an object that encapsulates the OFPST_STATS_REPLY(OFPST_PORT) OpenFlow message.
|
|
99
|
+
#
|
|
100
|
+
def initialize options
|
|
101
|
+
super FIELDS, options
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
### Local variables:
|
|
108
|
+
### mode: Ruby
|
|
109
|
+
### coding: utf-8-unix
|
|
110
|
+
### indent-tabs-mode: nil
|
|
111
|
+
### End:
|
|
@@ -0,0 +1,156 @@
|
|
|
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 "port.h"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
extern VALUE mTrema;
|
|
27
|
+
VALUE cPortStatus;
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* An object that is implemented to wrap the details of the +OFPT_PORT_STATUS+
|
|
32
|
+
* asynchronous message. This message is sent when a state transition on any
|
|
33
|
+
* physical port is detected.
|
|
34
|
+
*
|
|
35
|
+
* @overload initialize(options={})
|
|
36
|
+
* @example
|
|
37
|
+
* PortStatus.new(
|
|
38
|
+
* :datapath_id => 2748,
|
|
39
|
+
* :transaction_id => 0,
|
|
40
|
+
* :reason => 2,
|
|
41
|
+
* :phy_port => Port
|
|
42
|
+
* )
|
|
43
|
+
*
|
|
44
|
+
* @param [Hash] options
|
|
45
|
+
* the options to create a message with.
|
|
46
|
+
*
|
|
47
|
+
* @option options [Number] :datapath_id
|
|
48
|
+
* message originator identifier.
|
|
49
|
+
*
|
|
50
|
+
* @option options [Number] :transaction_id
|
|
51
|
+
* unsolicited message transaction_id is zero.
|
|
52
|
+
*
|
|
53
|
+
* @option options [Number] :reason
|
|
54
|
+
* the reason why this message was sent.
|
|
55
|
+
*
|
|
56
|
+
* @option options [Port] :phy_port
|
|
57
|
+
* a {Port} object describing the properties of the port.
|
|
58
|
+
*
|
|
59
|
+
* @return [PortStatus]
|
|
60
|
+
* an object that encapsulates the +OFPT_PORT_STATUS+ OpenFlow message.
|
|
61
|
+
*/
|
|
62
|
+
static VALUE
|
|
63
|
+
port_status_init( VALUE self, VALUE options ) {
|
|
64
|
+
rb_iv_set( self, "@attribute", options );
|
|
65
|
+
return self;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/*
|
|
70
|
+
* Message originator identifier.
|
|
71
|
+
*
|
|
72
|
+
* @return [Number] the value of datapath_id.
|
|
73
|
+
*/
|
|
74
|
+
static VALUE
|
|
75
|
+
port_status_datapath_id( VALUE self ) {
|
|
76
|
+
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "datapath_id" ) ) );
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* For this asynchronous message the transaction_id is set to zero.
|
|
82
|
+
*
|
|
83
|
+
* @return [Number] the value of transaction_id.
|
|
84
|
+
*/
|
|
85
|
+
static VALUE
|
|
86
|
+
port_status_transaction_id( VALUE self ) {
|
|
87
|
+
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "transaction_id" ) ) );
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
/*
|
|
92
|
+
* The reason value specifies an addition, deletion or modification to a port.
|
|
93
|
+
*
|
|
94
|
+
* @return [Number] the value of reason.
|
|
95
|
+
*/
|
|
96
|
+
static VALUE
|
|
97
|
+
port_status_reason( VALUE self ) {
|
|
98
|
+
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "reason" ) ) );
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* Port detailed description, state.
|
|
104
|
+
*
|
|
105
|
+
* @return [Port] the value of phy_port.
|
|
106
|
+
*/
|
|
107
|
+
static VALUE
|
|
108
|
+
port_status_phy_port( VALUE self ) {
|
|
109
|
+
return rb_hash_aref( rb_iv_get( self, "@attribute" ), ID2SYM( rb_intern( "phy_port" ) ) );
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
void
|
|
114
|
+
Init_port_status() {
|
|
115
|
+
cPortStatus = rb_define_class_under( mTrema, "PortStatus", rb_cObject );
|
|
116
|
+
rb_define_method( cPortStatus, "initialize", port_status_init, 1 );
|
|
117
|
+
rb_define_method( cPortStatus, "datapath_id", port_status_datapath_id, 0 );
|
|
118
|
+
rb_define_method( cPortStatus, "transaction_id", port_status_transaction_id, 0 );
|
|
119
|
+
rb_define_method( cPortStatus, "reason", port_status_reason, 0 );
|
|
120
|
+
rb_define_method( cPortStatus, "phy_port", port_status_phy_port, 0 );
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* Handler called when +OFPT_PORT_STATUS+ message is received.
|
|
125
|
+
*/
|
|
126
|
+
void
|
|
127
|
+
handle_port_status(
|
|
128
|
+
uint64_t datapath_id,
|
|
129
|
+
uint32_t transaction_id,
|
|
130
|
+
uint8_t reason,
|
|
131
|
+
struct ofp_phy_port phy_port,
|
|
132
|
+
void *user_data
|
|
133
|
+
) {
|
|
134
|
+
VALUE controller = ( VALUE ) user_data;
|
|
135
|
+
if ( rb_respond_to( controller, rb_intern( "port_status" ) ) == Qfalse ) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
VALUE attributes = rb_hash_new();
|
|
139
|
+
|
|
140
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "datapath_id" ) ), ULL2NUM( datapath_id ) );
|
|
141
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "transaction_id" ) ), UINT2NUM( transaction_id ) );
|
|
142
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "reason" ) ), UINT2NUM( reason ) );
|
|
143
|
+
|
|
144
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "phy_port" ) ), port_from( &phy_port ) );
|
|
145
|
+
|
|
146
|
+
VALUE port_status = rb_funcall( cPortStatus, rb_intern( "new" ), 1, attributes );
|
|
147
|
+
rb_funcall( controller, rb_intern( "port_status" ), 1, port_status );
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
* Local variables:
|
|
153
|
+
* c-basic-offset: 2
|
|
154
|
+
* indent-tabs-mode: nil
|
|
155
|
+
* End:
|
|
156
|
+
*/
|
|
@@ -0,0 +1,45 @@
|
|
|
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 "ruby.h"
|
|
22
|
+
#include "trema.h"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
extern VALUE cPortStatus;
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
void Init_port_status( void );
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
void handle_port_status(
|
|
32
|
+
uint64_t datapath_id,
|
|
33
|
+
uint32_t transaction_id,
|
|
34
|
+
uint8_t reason,
|
|
35
|
+
struct ofp_phy_port phy_port,
|
|
36
|
+
void *user_data
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* Local variables:
|
|
42
|
+
* c-basic-offset: 2
|
|
43
|
+
* indent-tabs-mode: nil
|
|
44
|
+
* End:
|
|
45
|
+
*/
|
data/ruby/trema/port.c
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
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 "trema.h"
|
|
22
|
+
#include "ruby.h"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
extern VALUE mTrema;
|
|
26
|
+
VALUE cPort;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* Creates a {Port} instance that encapsulates the properties of a physical port.
|
|
31
|
+
* The newly-created instance is initialized from an options hash.
|
|
32
|
+
*
|
|
33
|
+
* @overload initialize(options={})
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* Port.new(
|
|
37
|
+
* :number => 1,
|
|
38
|
+
* :hw_addr => Mac.new( "4e:1e:9a:7a:44:be" ),
|
|
39
|
+
* :name => "trema0-0",
|
|
40
|
+
* :config => 0,
|
|
41
|
+
* :state => 0,
|
|
42
|
+
* :curr => 192,
|
|
43
|
+
* :advertised => 0,
|
|
44
|
+
* :supported => 0,
|
|
45
|
+
* :peer => 0
|
|
46
|
+
* )
|
|
47
|
+
*
|
|
48
|
+
* @param [Hash] options the options hash.
|
|
49
|
+
*
|
|
50
|
+
* @option options [Number] :number
|
|
51
|
+
* the port's unique number.
|
|
52
|
+
*
|
|
53
|
+
* @option options [Mac] :hw_addr
|
|
54
|
+
* the port's Ethernet address expressed as a {Mac} object.
|
|
55
|
+
*
|
|
56
|
+
* @option options [String] :name
|
|
57
|
+
* the port's human readable defined name.
|
|
58
|
+
*
|
|
59
|
+
* @option options [Number] :config
|
|
60
|
+
* the port's configuration as a 32-bit bitmap.
|
|
61
|
+
*
|
|
62
|
+
* @option options [Number] :state
|
|
63
|
+
* the port's state as a 32-bit bitmap.
|
|
64
|
+
*
|
|
65
|
+
* @option options [Number] :curr
|
|
66
|
+
* the port's current features as a 32-bit bitmap.
|
|
67
|
+
*
|
|
68
|
+
* @option options [Number] :advertised
|
|
69
|
+
* the port's advertised features as a 32-bit bitmap.
|
|
70
|
+
*
|
|
71
|
+
* @option options [Number] :supported
|
|
72
|
+
* the port's supported features as a 32-bit bitmap.
|
|
73
|
+
*
|
|
74
|
+
* @option options [Number] :peer
|
|
75
|
+
* the features advertised by the peer connected to the port as a 32-bit bitmap.
|
|
76
|
+
*
|
|
77
|
+
* @return [Port]
|
|
78
|
+
* an object that encapsulates the properties of a physical port.
|
|
79
|
+
*/
|
|
80
|
+
static VALUE
|
|
81
|
+
port_init( VALUE self, VALUE options ) {
|
|
82
|
+
VALUE number = rb_hash_aref( options, ID2SYM( rb_intern( "number" ) ) );
|
|
83
|
+
rb_iv_set( self, "@number", number );
|
|
84
|
+
|
|
85
|
+
VALUE hw_addr = rb_hash_aref( options, ID2SYM( rb_intern( "hw_addr" ) ) );
|
|
86
|
+
rb_iv_set( self, "@hw_addr", hw_addr );
|
|
87
|
+
|
|
88
|
+
VALUE name = rb_hash_aref( options, ID2SYM( rb_intern( "name" ) ) );
|
|
89
|
+
rb_iv_set( self, "@name", name );
|
|
90
|
+
|
|
91
|
+
VALUE config = rb_hash_aref( options, ID2SYM( rb_intern( "config" ) ) );
|
|
92
|
+
rb_iv_set( self, "@config", config );
|
|
93
|
+
|
|
94
|
+
VALUE state = rb_hash_aref( options, ID2SYM( rb_intern( "state" ) ) );
|
|
95
|
+
rb_iv_set( self, "@state", state );
|
|
96
|
+
|
|
97
|
+
VALUE curr = rb_hash_aref( options, ID2SYM( rb_intern( "curr" ) ) );
|
|
98
|
+
rb_iv_set( self, "@curr", curr );
|
|
99
|
+
|
|
100
|
+
VALUE advertised = rb_hash_aref( options, ID2SYM( rb_intern( "advertised" ) ) );
|
|
101
|
+
rb_iv_set( self, "@advertised", advertised );
|
|
102
|
+
|
|
103
|
+
VALUE supported = rb_hash_aref( options, ID2SYM( rb_intern( "supported" ) ) );
|
|
104
|
+
rb_iv_set( self, "@supported", supported );
|
|
105
|
+
|
|
106
|
+
VALUE peer = rb_hash_aref( options, ID2SYM( rb_intern( "peer" ) ) );
|
|
107
|
+
rb_iv_set( self, "@peer", peer );
|
|
108
|
+
return self;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* The port's unique number.
|
|
114
|
+
*
|
|
115
|
+
* @return [Number] the value of number.
|
|
116
|
+
*/
|
|
117
|
+
static VALUE
|
|
118
|
+
port_number( VALUE self ) {
|
|
119
|
+
return rb_iv_get( self, "@number" );
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* The port's Ethernet address expressed as a {Mac} object.
|
|
125
|
+
*
|
|
126
|
+
* @return [Mac] the value of hw_addr.
|
|
127
|
+
*/
|
|
128
|
+
static VALUE
|
|
129
|
+
port_hw_addr( VALUE self ) {
|
|
130
|
+
return rb_iv_get( self, "@hw_addr" );
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
* The port's human readable defined name.
|
|
136
|
+
*
|
|
137
|
+
* @return [String] the value of name.
|
|
138
|
+
*/
|
|
139
|
+
static VALUE
|
|
140
|
+
port_name( VALUE self ) {
|
|
141
|
+
return rb_iv_get( self, "@name" );
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
* The port's configuration as a 32-bit bitmap.
|
|
147
|
+
*
|
|
148
|
+
* @return [Number] the value of config.
|
|
149
|
+
*/
|
|
150
|
+
static VALUE
|
|
151
|
+
port_config( VALUE self ) {
|
|
152
|
+
return rb_iv_get( self, "@config" );
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
* The port's state as a 32-bit bitmap.
|
|
158
|
+
*
|
|
159
|
+
* @return [Number] the value of state.
|
|
160
|
+
*/
|
|
161
|
+
static VALUE
|
|
162
|
+
port_state( VALUE self ) {
|
|
163
|
+
return rb_iv_get( self, "@state" );
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
/*
|
|
168
|
+
* The port's current features as a 32-bit bitmap.
|
|
169
|
+
*
|
|
170
|
+
* @return [Number] the value of curr.
|
|
171
|
+
*/
|
|
172
|
+
static VALUE
|
|
173
|
+
port_curr( VALUE self ) {
|
|
174
|
+
return rb_iv_get( self, "@curr" );
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
/*
|
|
179
|
+
* The port's advertised features as a 32-bit bitmap.
|
|
180
|
+
*
|
|
181
|
+
* @return [Number] the value of advertised.
|
|
182
|
+
*/
|
|
183
|
+
static VALUE
|
|
184
|
+
port_advertised( VALUE self ) {
|
|
185
|
+
return rb_iv_get( self, "@advertised" );
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
/*
|
|
190
|
+
* The port's supported features as a 32-bit bitmap.
|
|
191
|
+
*
|
|
192
|
+
* @return [Number] the value of supported.
|
|
193
|
+
*/
|
|
194
|
+
static VALUE
|
|
195
|
+
port_supported( VALUE self ) {
|
|
196
|
+
return rb_iv_get( self, "@supported" );
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* The features advertised by the peer connected to the port as a 32-bit bitmap.
|
|
202
|
+
*
|
|
203
|
+
* @return [Number] the value of peer.
|
|
204
|
+
*/
|
|
205
|
+
static VALUE
|
|
206
|
+
port_peer( VALUE self ) {
|
|
207
|
+
return rb_iv_get( self, "@peer" );
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
/*
|
|
212
|
+
* Tests if the port is up.
|
|
213
|
+
*
|
|
214
|
+
* @return [Boolean] true if port is up otherwise false.
|
|
215
|
+
*/
|
|
216
|
+
static VALUE
|
|
217
|
+
port_up( VALUE self ) {
|
|
218
|
+
uint32_t config = ( uint16_t ) NUM2UINT( rb_iv_get( self, "@config" ) );
|
|
219
|
+
if ( ( config & OFPPC_PORT_DOWN ) == OFPPC_PORT_DOWN ) {
|
|
220
|
+
return Qfalse;
|
|
221
|
+
}
|
|
222
|
+
uint32_t state = ( uint16_t ) NUM2UINT( rb_iv_get( self, "@state" ) );
|
|
223
|
+
if ( ( state & OFPPS_LINK_DOWN ) == OFPPS_LINK_DOWN ) {
|
|
224
|
+
return Qfalse;
|
|
225
|
+
}
|
|
226
|
+
return Qtrue;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
/*
|
|
231
|
+
* Tests if the port is down.
|
|
232
|
+
*
|
|
233
|
+
* @return [Boolean] true if port is down otherwise false.
|
|
234
|
+
*/
|
|
235
|
+
static VALUE
|
|
236
|
+
port_down( VALUE self ) {
|
|
237
|
+
return port_up( self ) == Qfalse ? Qtrue : Qfalse;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
/*
|
|
242
|
+
* Compares two ports by substracting their unique numbers.
|
|
243
|
+
*
|
|
244
|
+
* @return [Number] the result of the substraction. Zero ports are equal.
|
|
245
|
+
*/
|
|
246
|
+
static VALUE
|
|
247
|
+
port_compare( VALUE self, VALUE other ) {
|
|
248
|
+
uint16_t a = ( uint16_t ) NUM2UINT( rb_iv_get( self, "@number" ) );
|
|
249
|
+
uint16_t b = ( uint16_t ) NUM2UINT( rb_iv_get( other, "@number" ) );
|
|
250
|
+
return UINT2NUM( ( uint16_t ) ( a - b ) );
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
void
|
|
255
|
+
Init_port() {
|
|
256
|
+
cPort = rb_define_class_under( mTrema, "Port", rb_cObject );
|
|
257
|
+
rb_define_method( cPort, "initialize", port_init, 1 );
|
|
258
|
+
rb_define_method( cPort, "number", port_number, 0 );
|
|
259
|
+
rb_define_method( cPort, "hw_addr", port_hw_addr, 0 );
|
|
260
|
+
rb_define_method( cPort, "name", port_name, 0 );
|
|
261
|
+
rb_define_method( cPort, "config", port_config, 0 );
|
|
262
|
+
rb_define_method( cPort, "state", port_state, 0 );
|
|
263
|
+
rb_define_method( cPort, "curr", port_curr, 0 );
|
|
264
|
+
rb_define_method( cPort, "advertised", port_advertised, 0 );
|
|
265
|
+
rb_define_method( cPort, "supported", port_supported, 0 );
|
|
266
|
+
rb_define_method( cPort, "peer", port_peer, 0 );
|
|
267
|
+
rb_define_method( cPort, "up?", port_up, 0 );
|
|
268
|
+
rb_define_method( cPort, "down?", port_down, 0 );
|
|
269
|
+
rb_define_method( cPort, "<=>", port_compare, 1 );
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
VALUE
|
|
274
|
+
port_from( const struct ofp_phy_port *phy_port ) {
|
|
275
|
+
VALUE attributes = rb_hash_new();
|
|
276
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "number" ) ), UINT2NUM( phy_port->port_no ) );
|
|
277
|
+
VALUE hw_addr = rb_funcall( rb_eval_string( "Trema::Mac" ), rb_intern( "new" ), 1, ULL2NUM( mac_to_uint64( phy_port->hw_addr ) ) );
|
|
278
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "hw_addr" ) ), hw_addr );
|
|
279
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "name" ) ), rb_str_new2( phy_port->name ) );
|
|
280
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "config" ) ), UINT2NUM( phy_port->config ) );
|
|
281
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "state" ) ), UINT2NUM( phy_port->state ) );
|
|
282
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "curr" ) ), UINT2NUM( phy_port->curr ) );
|
|
283
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "advertised" ) ), UINT2NUM( phy_port->advertised ) );
|
|
284
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "supported" ) ), UINT2NUM( phy_port->supported ) );
|
|
285
|
+
rb_hash_aset( attributes, ID2SYM( rb_intern( "peer" ) ), UINT2NUM( phy_port->peer ) );
|
|
286
|
+
return rb_funcall( cPort, rb_intern( "new" ), 1, attributes );
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
/*
|
|
291
|
+
* Local variables:
|
|
292
|
+
* c-basic-offset: 2
|
|
293
|
+
* indent-tabs-mode: nil
|
|
294
|
+
* End:
|
|
295
|
+
*/
|