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,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* OpenFlow Switch Manager
|
|
3
|
+
*
|
|
4
|
+
* Author: Kazushi SUGYO
|
|
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 SWITCH_MANAGER_H
|
|
24
|
+
#define SWITCH_MANAGER_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include "switchinfo.h"
|
|
28
|
+
#include "trema.h"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#define MESSENGER_SERVICE_TYPE_STATE 1
|
|
32
|
+
#define MESSENGER_SERVICE_TYPE_SUBSCRIBE 2
|
|
33
|
+
#define MESSENGER_SERVICE_TYPE_NOTIFY 3
|
|
34
|
+
|
|
35
|
+
#define SWITCH_STATE_TIMEOUT_HELLO 5 // in seconds
|
|
36
|
+
#define SWITCH_STATE_TIMEOUT_FEATURES_REPLY 5 // in seconds
|
|
37
|
+
|
|
38
|
+
#define SWITCH_MANAGER_PREFIX "switch."
|
|
39
|
+
#define SWITCH_MANAGER_PREFIX_STR_LEN sizeof( SWITCH_MANAGER_PREFIX )
|
|
40
|
+
#define SWITCH_MANAGER_DPID_STR_LEN sizeof( "1234567812345678" )
|
|
41
|
+
|
|
42
|
+
int switch_event_connected( struct switch_info *switch_info );
|
|
43
|
+
int switch_event_disconnected( struct switch_info *switch_info );
|
|
44
|
+
int switch_event_recv_hello( struct switch_info *switch_info );
|
|
45
|
+
int switch_event_recv_featuresreply( struct switch_info *switch_info, uint64_t *datapath_id );
|
|
46
|
+
int switch_event_recv_from_application( uint64_t *datapath_id, char *application_service_name, buffer *buf );
|
|
47
|
+
int switch_event_disconnect_request( uint64_t *datapath_id );
|
|
48
|
+
int switch_event_recv_error( struct switch_info *sw_info );
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
#endif // SWITCH_MANAGER_H
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Author: Kazushi SUGYO
|
|
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 <limits.h>
|
|
22
|
+
#include <errno.h>
|
|
23
|
+
#include <getopt.h>
|
|
24
|
+
#include <inttypes.h>
|
|
25
|
+
#include <stdio.h>
|
|
26
|
+
#include <stdlib.h>
|
|
27
|
+
#include <signal.h>
|
|
28
|
+
#include <string.h>
|
|
29
|
+
#include <unistd.h>
|
|
30
|
+
#include <sys/wait.h>
|
|
31
|
+
#include <openflow.h>
|
|
32
|
+
#include "trema.h"
|
|
33
|
+
#include "secure_channel_listener.h"
|
|
34
|
+
#include "switch_manager.h"
|
|
35
|
+
#include "dpid_table.h"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#ifdef UNIT_TESTING
|
|
39
|
+
#define static
|
|
40
|
+
|
|
41
|
+
#define main switch_manager_main
|
|
42
|
+
|
|
43
|
+
#ifdef printf
|
|
44
|
+
#undef printf
|
|
45
|
+
#endif
|
|
46
|
+
#define printf( fmt, args... ) mock_printf2( fmt, ##args )
|
|
47
|
+
int mock_printf2(const char *format, ...);
|
|
48
|
+
|
|
49
|
+
#ifdef die
|
|
50
|
+
#undef die
|
|
51
|
+
#endif
|
|
52
|
+
#define die( fmt, ... ) \
|
|
53
|
+
do { \
|
|
54
|
+
} \
|
|
55
|
+
while ( 0 )
|
|
56
|
+
|
|
57
|
+
#ifdef exit
|
|
58
|
+
#undef exit
|
|
59
|
+
#endif
|
|
60
|
+
#define exit mock_exit
|
|
61
|
+
void mock_exit( int status );
|
|
62
|
+
|
|
63
|
+
#ifdef wait3
|
|
64
|
+
#undef wait3
|
|
65
|
+
#endif
|
|
66
|
+
#define wait3 mock_wait3
|
|
67
|
+
pid_t mock_wait3( int *status, int options, struct rusage *rusage );
|
|
68
|
+
|
|
69
|
+
#ifdef secure_channel_accept
|
|
70
|
+
#undef secure_channel_accept
|
|
71
|
+
#endif
|
|
72
|
+
#define secure_channel_accept mock_secure_channel_accept
|
|
73
|
+
void mock_secure_channel_accept( struct listener_info *listener_info );
|
|
74
|
+
|
|
75
|
+
#ifdef access
|
|
76
|
+
#undef access
|
|
77
|
+
#endif
|
|
78
|
+
#define access mock_access
|
|
79
|
+
int mock_access( const char *pathname, int mode);
|
|
80
|
+
|
|
81
|
+
#ifdef get_current_dir_name
|
|
82
|
+
#undef get_current_dir_name
|
|
83
|
+
#endif
|
|
84
|
+
#define get_current_dir_name mock_get_current_dir_name
|
|
85
|
+
char *mock_get_current_dir_name( void );
|
|
86
|
+
|
|
87
|
+
#ifdef init_trema
|
|
88
|
+
#undef init_trema
|
|
89
|
+
#endif
|
|
90
|
+
#define init_trema mock_init_trema
|
|
91
|
+
void mock_init_trema( int *argc, char ***argv );
|
|
92
|
+
|
|
93
|
+
#ifdef set_fd_set_callback
|
|
94
|
+
#undef set_fd_set_callback
|
|
95
|
+
#endif
|
|
96
|
+
#define set_fd_set_callback mock_set_fd_set_callback
|
|
97
|
+
void mock_set_fd_set_callback( void ( *callback )( fd_set *read_set, fd_set *write_set ) );
|
|
98
|
+
|
|
99
|
+
#ifdef set_check_fd_isset_callback
|
|
100
|
+
#undef set_check_fd_isset_callback
|
|
101
|
+
#endif
|
|
102
|
+
#define set_check_fd_isset_callback mock_set_check_fd_isset_callback
|
|
103
|
+
void mock_set_check_fd_isset_callback( void ( *callback )( fd_set *read_set, fd_set *write_set ) );
|
|
104
|
+
|
|
105
|
+
#ifdef secure_channel_accept
|
|
106
|
+
#undef secure_channel_accept
|
|
107
|
+
#endif
|
|
108
|
+
#define secure_channel_accept mock_secure_channel_accept
|
|
109
|
+
void mock_secure_channel_accept( struct listener_info *listener_info );
|
|
110
|
+
|
|
111
|
+
#ifdef secure_channel_listen_start
|
|
112
|
+
#undef secure_channel_listen_start
|
|
113
|
+
#endif
|
|
114
|
+
#define secure_channel_listen_start mock_secure_channel_listen_start
|
|
115
|
+
bool mock_secure_channel_listen_start( struct listener_info *listener_info );
|
|
116
|
+
|
|
117
|
+
#ifdef get_trema_home
|
|
118
|
+
#undef get_trema_home
|
|
119
|
+
#endif
|
|
120
|
+
#define get_trema_home mock_get_trema_home
|
|
121
|
+
char *mock_get_trema_home( void );
|
|
122
|
+
|
|
123
|
+
#ifdef start_trema
|
|
124
|
+
#undef start_trema
|
|
125
|
+
#endif
|
|
126
|
+
#define start_trema mock_start_trema
|
|
127
|
+
void mock_start_trema( void );
|
|
128
|
+
|
|
129
|
+
#ifdef get_executable_name
|
|
130
|
+
#undef get_executable_name
|
|
131
|
+
#endif
|
|
132
|
+
#define get_executable_name mock_get_executable_name
|
|
133
|
+
const char *mock_get_executable_name( void );
|
|
134
|
+
|
|
135
|
+
#ifdef set_external_callback
|
|
136
|
+
#undef set_external_callback
|
|
137
|
+
#endif
|
|
138
|
+
#define set_external_callback mock_set_external_callback
|
|
139
|
+
void mock_set_external_callback( void ( *callback ) ( void ) );
|
|
140
|
+
|
|
141
|
+
#endif // UNIT_TESTING
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
struct listener_info listener_info;
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
static struct option long_options[] = {
|
|
148
|
+
{ "port", 1, NULL, 'p' },
|
|
149
|
+
{ "switch", 1, NULL, 's' },
|
|
150
|
+
{ NULL, 0, NULL, 0 },
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
static char short_options[] = "p:s:";
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
void
|
|
157
|
+
usage() {
|
|
158
|
+
printf(
|
|
159
|
+
"OpenFlow Switch Manager.\n"
|
|
160
|
+
"Usage: %s [OPTION]... [-- SWITCH_MANAGER_OPTION]...\n"
|
|
161
|
+
"\n"
|
|
162
|
+
" -s, --switch=PATH the command path of switch\n"
|
|
163
|
+
" -n, --name=SERVICE_NAME service name\n"
|
|
164
|
+
" -p, --port=PORT server listen port (default %u)\n"
|
|
165
|
+
" -d, --daemonize run in the background\n"
|
|
166
|
+
" -l, --logging_level=LEVEL set logging level\n"
|
|
167
|
+
" -h, --help display this help and exit\n"
|
|
168
|
+
, get_executable_name(), OFP_TCP_PORT
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
static void
|
|
174
|
+
wait_child( void ) {
|
|
175
|
+
int status;
|
|
176
|
+
pid_t pid;
|
|
177
|
+
|
|
178
|
+
while ( 1 ) {
|
|
179
|
+
pid = wait3( &status, WNOHANG, NULL );
|
|
180
|
+
if ( pid <= 0 ) {
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
if ( WIFEXITED( status ) ) {
|
|
184
|
+
debug( "Child process is exited. pid:%d, status:%d", pid, WEXITSTATUS( status ) );
|
|
185
|
+
}
|
|
186
|
+
else if ( WIFSIGNALED( status ) ) {
|
|
187
|
+
if ( WCOREDUMP( status ) ) {
|
|
188
|
+
debug( "Child process dumped core. pid:%d, signal:%d", pid, WTERMSIG( status ) );
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
debug( "Child process is terminated. pid:%d, signal:%d", pid, WTERMSIG( status ) );
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
static void
|
|
199
|
+
handle_sigchld( int signum ) {
|
|
200
|
+
UNUSED( signum );
|
|
201
|
+
|
|
202
|
+
// because wait_child() is not signal safe, we call it later.
|
|
203
|
+
if ( set_external_callback != NULL ) {
|
|
204
|
+
set_external_callback( wait_child );
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
static char *
|
|
210
|
+
xconcatenate_path( const char *dir, const char *file ) {
|
|
211
|
+
size_t len;
|
|
212
|
+
const char *sp = "/";
|
|
213
|
+
char *p;
|
|
214
|
+
|
|
215
|
+
len = strlen( dir ) + strlen( file ) + 2;
|
|
216
|
+
if ( dir[ strlen( dir ) - 1 ] == '/' ) {
|
|
217
|
+
sp = "";
|
|
218
|
+
}
|
|
219
|
+
p = xmalloc( len );
|
|
220
|
+
snprintf( p, len, "%s%s%s", dir, sp, file );
|
|
221
|
+
|
|
222
|
+
return p;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
static char *
|
|
227
|
+
absolute_path( const char *dir, const char *file ) {
|
|
228
|
+
char *p;
|
|
229
|
+
int ret;
|
|
230
|
+
|
|
231
|
+
if ( *file == '/' ) {
|
|
232
|
+
p = xstrdup( file );
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
p = xconcatenate_path( dir, file );
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// x bit check
|
|
239
|
+
ret = access( p, X_OK );
|
|
240
|
+
if ( ret != 0 ) {
|
|
241
|
+
die( "%s: %s", p, strerror( errno ) );
|
|
242
|
+
xfree( p );
|
|
243
|
+
return NULL;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return p;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
static void
|
|
251
|
+
init_listener_info( struct listener_info *listener_info ) {
|
|
252
|
+
memset( listener_info, 0, sizeof( struct listener_info ) );
|
|
253
|
+
listener_info->switch_daemon = xconcatenate_path( get_trema_home(), SWITCH_MANAGER_PATH );
|
|
254
|
+
listener_info->listen_port = OFP_TCP_PORT;
|
|
255
|
+
listener_info->listen_fd = -1;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
static void
|
|
260
|
+
finalize_listener_info( struct listener_info *listener_info ) {
|
|
261
|
+
if ( listener_info->switch_daemon != NULL ) {
|
|
262
|
+
xfree( (void *)( uintptr_t )listener_info->switch_daemon );
|
|
263
|
+
listener_info->switch_daemon = NULL;
|
|
264
|
+
}
|
|
265
|
+
if ( listener_info->listen_fd >= 0 ) {
|
|
266
|
+
set_readable( listener_info->listen_fd, false );
|
|
267
|
+
delete_fd_handler( listener_info->listen_fd );
|
|
268
|
+
|
|
269
|
+
close( listener_info->listen_fd );
|
|
270
|
+
listener_info->listen_fd = -1;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
static uint16_t
|
|
276
|
+
strtoport( const char *str ) {
|
|
277
|
+
char *ep;
|
|
278
|
+
long l;
|
|
279
|
+
|
|
280
|
+
l = strtol( str, &ep, 0 );
|
|
281
|
+
if ( l <= 0 || l > USHRT_MAX || *ep != '\0' ) {
|
|
282
|
+
die( "Invalid port. %s", str );
|
|
283
|
+
return 0;
|
|
284
|
+
}
|
|
285
|
+
return ( uint16_t ) l;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
static bool
|
|
290
|
+
parse_argument( struct listener_info *listener_info, int argc, char *argv[] ) {
|
|
291
|
+
int c;
|
|
292
|
+
|
|
293
|
+
while ( ( c = getopt_long( argc, argv, short_options, long_options, NULL ) ) != -1 ) {
|
|
294
|
+
switch ( c ) {
|
|
295
|
+
case 'p':
|
|
296
|
+
listener_info->listen_port = strtoport( optarg );
|
|
297
|
+
if ( listener_info->listen_port == 0 ) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
case 's':
|
|
302
|
+
xfree( (void *)( uintptr_t )listener_info->switch_daemon );
|
|
303
|
+
listener_info->switch_daemon = xstrdup( optarg );
|
|
304
|
+
break;
|
|
305
|
+
default:
|
|
306
|
+
usage();
|
|
307
|
+
exit( EXIT_SUCCESS );
|
|
308
|
+
return false;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
listener_info->switch_daemon_argc = argc - optind;
|
|
314
|
+
listener_info->switch_daemon_argv = &argv[ optind ];
|
|
315
|
+
|
|
316
|
+
return true;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
static void
|
|
321
|
+
catch_sigchild( void ) {
|
|
322
|
+
struct sigaction sigchld_handler;
|
|
323
|
+
|
|
324
|
+
memset( &sigchld_handler, 0, sizeof( struct sigaction ) );
|
|
325
|
+
sigchld_handler.sa_handler = ( void * ) handle_sigchld;
|
|
326
|
+
sigchld_handler.sa_flags = SA_RESTART;
|
|
327
|
+
sigaction( SIGCHLD, &sigchld_handler, NULL );
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
static void
|
|
332
|
+
handle_switch_ready( uint64_t datapath_id, void *user_data ) {
|
|
333
|
+
UNUSED( user_data );
|
|
334
|
+
|
|
335
|
+
debug( "Switch (dpid = %#" PRIx64 ") is connected.", datapath_id );
|
|
336
|
+
insert_dpid_entry( &datapath_id );
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
static void
|
|
341
|
+
handle_switch_disconnected( uint64_t datapath_id, void *user_data ) {
|
|
342
|
+
UNUSED( user_data );
|
|
343
|
+
|
|
344
|
+
debug( "Switch (dpid = %#" PRIx64 ") is disconnected.", datapath_id );
|
|
345
|
+
delete_dpid_entry( &datapath_id );
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
static void
|
|
350
|
+
recv_request( const messenger_context_handle *handle,
|
|
351
|
+
uint16_t tag, void *data, size_t len ) {
|
|
352
|
+
UNUSED( tag );
|
|
353
|
+
UNUSED( data );
|
|
354
|
+
UNUSED( len );
|
|
355
|
+
|
|
356
|
+
buffer *reply = get_switches();
|
|
357
|
+
send_reply_message( handle, 0, reply->data, reply->length );
|
|
358
|
+
free_buffer( reply );
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
static bool
|
|
363
|
+
start_service_management( void ) {
|
|
364
|
+
return add_message_requested_callback( get_trema_name(), recv_request );
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
static void
|
|
369
|
+
stop_service_management( void ) {
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
static bool
|
|
374
|
+
start_switch_management( void ) {
|
|
375
|
+
init_openflow_application_interface( get_trema_name() );
|
|
376
|
+
set_switch_ready_handler( handle_switch_ready, NULL );
|
|
377
|
+
set_switch_disconnected_handler( handle_switch_disconnected, NULL );
|
|
378
|
+
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
static void
|
|
384
|
+
stop_switch_management( void ) {
|
|
385
|
+
// do something here.
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
int
|
|
390
|
+
main( int argc, char *argv[] ) {
|
|
391
|
+
bool ret;
|
|
392
|
+
const char *switch_daemon = NULL;
|
|
393
|
+
char *startup_dir;
|
|
394
|
+
|
|
395
|
+
// get startup directory using absolute_path()
|
|
396
|
+
startup_dir = get_current_dir_name();
|
|
397
|
+
if ( startup_dir == NULL ) {
|
|
398
|
+
die( "Failed to get_current_dir_name." );
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
init_trema( &argc, &argv ); // changes the current working directory
|
|
402
|
+
|
|
403
|
+
init_listener_info( &listener_info );
|
|
404
|
+
ret = parse_argument( &listener_info, argc, argv );
|
|
405
|
+
if ( !ret ) {
|
|
406
|
+
finalize_listener_info( &listener_info );
|
|
407
|
+
exit( EXIT_FAILURE );
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
init_dpid_table();
|
|
411
|
+
start_service_management();
|
|
412
|
+
start_switch_management();
|
|
413
|
+
|
|
414
|
+
switch_daemon = listener_info.switch_daemon;
|
|
415
|
+
listener_info.switch_daemon = absolute_path( startup_dir, switch_daemon );
|
|
416
|
+
xfree( ( void * )( uintptr_t )switch_daemon );
|
|
417
|
+
// free returned buffer of get_current_dir_name()
|
|
418
|
+
free( startup_dir );
|
|
419
|
+
|
|
420
|
+
catch_sigchild();
|
|
421
|
+
|
|
422
|
+
// listener start (listen socket binding and listen)
|
|
423
|
+
ret = secure_channel_listen_start( &listener_info );
|
|
424
|
+
if ( !ret ) {
|
|
425
|
+
finalize_listener_info( &listener_info );
|
|
426
|
+
exit( EXIT_FAILURE );
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
set_fd_handler( listener_info.listen_fd, secure_channel_accept, &listener_info, NULL, NULL );
|
|
430
|
+
set_readable( listener_info.listen_fd, true );
|
|
431
|
+
|
|
432
|
+
start_trema();
|
|
433
|
+
|
|
434
|
+
finalize_listener_info( &listener_info );
|
|
435
|
+
stop_switch_management();
|
|
436
|
+
stop_service_management();
|
|
437
|
+
finalize_dpid_table();
|
|
438
|
+
|
|
439
|
+
return 0;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
/*
|
|
444
|
+
* Local variables:
|
|
445
|
+
* c-basic-offset: 2
|
|
446
|
+
* indent-tabs-mode: nil
|
|
447
|
+
* End:
|
|
448
|
+
*/
|