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,42 @@
|
|
|
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
|
+
#ifndef RSWITCH_RECV_H
|
|
23
|
+
#define RSWITCH_RECV_H
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
#include "trema.h"
|
|
27
|
+
#include "switch.h"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
int ofpmsg_recv( struct switch_info *sw_info, buffer *buf );
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
#endif // RSWITCH_RECV_H
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Local variables:
|
|
38
|
+
* c-basic-offset: 2
|
|
39
|
+
* indent-tabs-mode: nil
|
|
40
|
+
* End:
|
|
41
|
+
*/
|
|
42
|
+
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* OpenFlow Switch Manager
|
|
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 <openflow.h>
|
|
22
|
+
#include <inttypes.h>
|
|
23
|
+
#include <stdio.h>
|
|
24
|
+
#include <string.h>
|
|
25
|
+
#include "cookie_table.h"
|
|
26
|
+
#include "ofpmsg_send.h"
|
|
27
|
+
#include "secure_channel_sender.h"
|
|
28
|
+
#include "switch.h"
|
|
29
|
+
#include "trema.h"
|
|
30
|
+
#include "xid_table.h"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
int
|
|
34
|
+
ofpmsg_send_hello( struct switch_info *sw_info ) {
|
|
35
|
+
int ret;
|
|
36
|
+
buffer *buf;
|
|
37
|
+
|
|
38
|
+
buf = create_hello( generate_xid() );
|
|
39
|
+
|
|
40
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
41
|
+
if ( ret == 0 ) {
|
|
42
|
+
debug( "Send 'hello' to a switch. fd:%d", sw_info->secure_channel_fd );
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return ret;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
int
|
|
50
|
+
ofpmsg_send_echoreply( struct switch_info *sw_info, uint32_t xid, buffer *body ) {
|
|
51
|
+
int ret;
|
|
52
|
+
buffer *buf;
|
|
53
|
+
|
|
54
|
+
buf = create_echo_reply( xid, body );
|
|
55
|
+
free_buffer( body );
|
|
56
|
+
|
|
57
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
58
|
+
if ( ret == 0 ) {
|
|
59
|
+
debug( "Send 'echo reply' to a switch %#" PRIx64 ".", sw_info->datapath_id );
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return ret;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
int
|
|
67
|
+
ofpmsg_send_featuresrequest( struct switch_info *sw_info ) {
|
|
68
|
+
int ret;
|
|
69
|
+
buffer *buf;
|
|
70
|
+
|
|
71
|
+
buf = create_features_request( generate_xid() );
|
|
72
|
+
|
|
73
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
74
|
+
if ( ret == 0 ) {
|
|
75
|
+
debug( "Send 'features request' to a switch. fd:%d", sw_info->secure_channel_fd );
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return ret;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
int
|
|
83
|
+
ofpmsg_send_setconfig( struct switch_info *sw_info ) {
|
|
84
|
+
int ret;
|
|
85
|
+
buffer *buf;
|
|
86
|
+
|
|
87
|
+
buf = create_set_config( generate_xid(), sw_info->config_flags,
|
|
88
|
+
sw_info->miss_send_len );
|
|
89
|
+
|
|
90
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
91
|
+
if ( ret == 0 ) {
|
|
92
|
+
debug( "Send 'set config request' to a switch %#" PRIx64 ".", sw_info->datapath_id );
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return ret;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
int
|
|
100
|
+
ofpmsg_send_error_msg( struct switch_info *sw_info, uint16_t type, uint16_t code, buffer *data ) {
|
|
101
|
+
int ret;
|
|
102
|
+
buffer *buf;
|
|
103
|
+
|
|
104
|
+
if (data->length > OFP_ERROR_MSG_MAX_DATA ) {
|
|
105
|
+
// FIXME
|
|
106
|
+
data->length = OFP_ERROR_MSG_MAX_DATA;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
buf = create_error( generate_xid(), type, code, data );
|
|
110
|
+
|
|
111
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
112
|
+
if ( ret == 0 ) {
|
|
113
|
+
debug( "Send 'error' to a switch %#" PRIx64 ".", sw_info->datapath_id );
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return ret;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
static int
|
|
121
|
+
update_flowmod_cookie( buffer *buf, char *service_name ) {
|
|
122
|
+
struct ofp_flow_mod *flow_mod = buf->data;
|
|
123
|
+
uint16_t command = ntohs( flow_mod->command );
|
|
124
|
+
uint16_t flags = ntohs( flow_mod->flags );
|
|
125
|
+
uint64_t cookie = ntohll( flow_mod->cookie );
|
|
126
|
+
|
|
127
|
+
switch ( command ) {
|
|
128
|
+
case OFPFC_ADD:
|
|
129
|
+
{
|
|
130
|
+
uint64_t *new_cookie = insert_cookie_entry( &cookie, service_name, flags );
|
|
131
|
+
if ( new_cookie == NULL ) {
|
|
132
|
+
return -1;
|
|
133
|
+
}
|
|
134
|
+
flow_mod->cookie = htonll( *new_cookie );
|
|
135
|
+
flow_mod->flags = htons( flags | OFPFF_SEND_FLOW_REM );
|
|
136
|
+
}
|
|
137
|
+
break;
|
|
138
|
+
|
|
139
|
+
case OFPFC_MODIFY:
|
|
140
|
+
case OFPFC_MODIFY_STRICT:
|
|
141
|
+
{
|
|
142
|
+
cookie_entry_t *entry = lookup_cookie_entry_by_application( &cookie, service_name );
|
|
143
|
+
if ( entry != NULL ) {
|
|
144
|
+
flow_mod->cookie = htonll( entry->cookie );
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
uint64_t *new_cookie = insert_cookie_entry( &cookie, service_name, flags );
|
|
148
|
+
if ( new_cookie == NULL ) {
|
|
149
|
+
return -1;
|
|
150
|
+
}
|
|
151
|
+
flow_mod->cookie = htonll( *new_cookie );
|
|
152
|
+
}
|
|
153
|
+
flow_mod->flags = htons( flags | OFPFF_SEND_FLOW_REM );
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
|
|
157
|
+
case OFPFC_DELETE:
|
|
158
|
+
case OFPFC_DELETE_STRICT:
|
|
159
|
+
{
|
|
160
|
+
cookie_entry_t *entry = lookup_cookie_entry_by_application( &cookie, service_name );
|
|
161
|
+
if ( entry != NULL ) {
|
|
162
|
+
flow_mod->cookie = htonll( entry->cookie );
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
flow_mod->cookie = htonll( RESERVED_COOKIE );
|
|
166
|
+
}
|
|
167
|
+
flow_mod->flags = htons( flags | OFPFF_SEND_FLOW_REM );
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
|
|
171
|
+
default:
|
|
172
|
+
return -1;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
int
|
|
180
|
+
ofpmsg_send( struct switch_info *sw_info, buffer *buf, char *service_name ) {
|
|
181
|
+
int ret;
|
|
182
|
+
struct ofp_header *ofp_header;
|
|
183
|
+
uint32_t new_xid;
|
|
184
|
+
|
|
185
|
+
ofp_header = buf->data;
|
|
186
|
+
|
|
187
|
+
new_xid = insert_xid_entry( ntohl( ofp_header->xid ), service_name );
|
|
188
|
+
ofp_header->xid = htonl( new_xid );
|
|
189
|
+
|
|
190
|
+
if ( ofp_header->type == OFPT_FLOW_MOD ) {
|
|
191
|
+
ret = update_flowmod_cookie( buf, service_name );
|
|
192
|
+
if ( ret < 0 ) {
|
|
193
|
+
error( "Failed to update cookie value ( ret = %d ).", ret );
|
|
194
|
+
free_buffer( buf );
|
|
195
|
+
return ret;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
200
|
+
if ( ret == 0 ) {
|
|
201
|
+
debug( "Send an OpenFlow message %d to a switch %#" PRIx64 ".",
|
|
202
|
+
ofp_header->type, sw_info->datapath_id );
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
return ret;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
int
|
|
210
|
+
ofpmsg_send_delete_all_flows( struct switch_info *sw_info ) {
|
|
211
|
+
int ret;
|
|
212
|
+
struct ofp_match match;
|
|
213
|
+
buffer *buf;
|
|
214
|
+
|
|
215
|
+
memset( &match, 0, sizeof( match ) );
|
|
216
|
+
match.wildcards = OFPFW_ALL;
|
|
217
|
+
|
|
218
|
+
buf = create_flow_mod( generate_xid(), match, RESERVED_COOKIE,
|
|
219
|
+
OFPFC_DELETE, 0, 0, 0, 0, OFPP_NONE, 0, NULL );
|
|
220
|
+
|
|
221
|
+
ret = send_to_secure_channel( sw_info, buf );
|
|
222
|
+
if ( ret == 0 ) {
|
|
223
|
+
debug( "Send 'flow mod (delete all)' to a switch %#" PRIx64 ".", sw_info->datapath_id );
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return ret;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
/*
|
|
231
|
+
* Local variables:
|
|
232
|
+
* c-basic-offset: 2
|
|
233
|
+
* indent-tabs-mode: nil
|
|
234
|
+
* End:
|
|
235
|
+
*/
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* OpenFlow Switch Manager
|
|
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
|
+
#ifndef OFPMSG_SEND_H
|
|
22
|
+
#define OFPMSG_SEND_H
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#include "trema.h"
|
|
26
|
+
#include "switch.h"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#define OFP_ERROR_MSG_MAX_DATA 64
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
int ofpmsg_send_hello( struct switch_info *sw_info );
|
|
33
|
+
int ofpmsg_send_echoreply( struct switch_info *sw_info, uint32_t xid, buffer *body );
|
|
34
|
+
int ofpmsg_send_featuresrequest( struct switch_info *sw_info );
|
|
35
|
+
int ofpmsg_send_setconfig( struct switch_info *sw_info );
|
|
36
|
+
int ofpmsg_send_error_msg( struct switch_info *sw_info, uint16_t type, uint16_t code, buffer *data );
|
|
37
|
+
int ofpmsg_send( struct switch_info *sw_info, buffer *buf, char *service_name );
|
|
38
|
+
int ofpmsg_send_delete_all_flows( struct switch_info *sw_info );
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
#endif // OFPMSG_SEND_H
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
* Local variables:
|
|
46
|
+
* c-basic-offset: 2
|
|
47
|
+
* indent-tabs-mode: nil
|
|
48
|
+
* End:
|
|
49
|
+
*/
|
|
50
|
+
|
|
@@ -0,0 +1,281 @@
|
|
|
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 <arpa/inet.h>
|
|
22
|
+
#include <errno.h>
|
|
23
|
+
#include <fcntl.h>
|
|
24
|
+
#include <netinet/in.h>
|
|
25
|
+
#include <netinet/tcp.h>
|
|
26
|
+
#include <stdio.h>
|
|
27
|
+
#include <stdlib.h>
|
|
28
|
+
#include <string.h>
|
|
29
|
+
#include <sys/socket.h>
|
|
30
|
+
#include <sys/types.h>
|
|
31
|
+
#include <unistd.h>
|
|
32
|
+
#include "trema.h"
|
|
33
|
+
#include "secure_channel_listener.h"
|
|
34
|
+
#include "switch_manager.h"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
const int LISTEN_SOCK_MAX = 128;
|
|
38
|
+
const int SWITCH_MANAGER_DEFAULT_ARGC = 10;
|
|
39
|
+
|
|
40
|
+
#ifdef UNIT_TESTING
|
|
41
|
+
#define static
|
|
42
|
+
|
|
43
|
+
#ifdef close
|
|
44
|
+
#undef close
|
|
45
|
+
#endif
|
|
46
|
+
#define close mock_close
|
|
47
|
+
int mock_close( int fd );
|
|
48
|
+
|
|
49
|
+
#ifdef socket
|
|
50
|
+
#undef socket
|
|
51
|
+
#endif
|
|
52
|
+
#define socket mock_socket
|
|
53
|
+
int mock_socket( int domain, int type, int protocol );
|
|
54
|
+
|
|
55
|
+
#ifdef bind
|
|
56
|
+
#undef bind
|
|
57
|
+
#endif
|
|
58
|
+
#define bind mock_bind
|
|
59
|
+
int mock_bind( int sockfd, const struct sockaddr *addr, socklen_t addrlen );
|
|
60
|
+
|
|
61
|
+
#ifdef listen
|
|
62
|
+
#undef listen
|
|
63
|
+
#endif
|
|
64
|
+
#define listen mock_listen
|
|
65
|
+
int mock_listen( int sockfd, int backlog );
|
|
66
|
+
|
|
67
|
+
#ifdef accept
|
|
68
|
+
#undef accept
|
|
69
|
+
#endif
|
|
70
|
+
#define accept mock_accept
|
|
71
|
+
int mock_accept( int sockfd, struct sockaddr *addr, socklen_t *addrlen );
|
|
72
|
+
|
|
73
|
+
#ifdef setsockopt
|
|
74
|
+
#undef setsockopt
|
|
75
|
+
#endif
|
|
76
|
+
#define setsockopt mock_setsockopt
|
|
77
|
+
int mock_setsockopt( int sockfd, int level, int optname, const void *optval,
|
|
78
|
+
socklen_t optlen );
|
|
79
|
+
|
|
80
|
+
#ifdef fork
|
|
81
|
+
#undef fork
|
|
82
|
+
#endif
|
|
83
|
+
#define fork mock_fork
|
|
84
|
+
pid_t mock_fork( void );
|
|
85
|
+
|
|
86
|
+
#ifdef dup2
|
|
87
|
+
#undef dup2
|
|
88
|
+
#endif
|
|
89
|
+
#define dup2 mock_dup2
|
|
90
|
+
int mock_dup2( int oldfd, int newfd );
|
|
91
|
+
|
|
92
|
+
#ifdef open
|
|
93
|
+
#undef open
|
|
94
|
+
#endif
|
|
95
|
+
#define open mock_open
|
|
96
|
+
int mock_open(const char *pathname, int flags);
|
|
97
|
+
|
|
98
|
+
#ifdef execvp
|
|
99
|
+
#undef execvp
|
|
100
|
+
#endif
|
|
101
|
+
#define execvp mock_execvp
|
|
102
|
+
int mock_execvp( const char *file, char *const argv[] );
|
|
103
|
+
|
|
104
|
+
#ifdef exit
|
|
105
|
+
#undef exit
|
|
106
|
+
#endif
|
|
107
|
+
#define exit mock_exit
|
|
108
|
+
void mock_exit( int status );
|
|
109
|
+
|
|
110
|
+
#endif // UNIT_TESTING
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
bool
|
|
114
|
+
secure_channel_listen_start( struct listener_info *listener_info ) {
|
|
115
|
+
struct sockaddr_in addr;
|
|
116
|
+
int listen_fd;
|
|
117
|
+
int flag;
|
|
118
|
+
int ret;
|
|
119
|
+
|
|
120
|
+
if ( listener_info->listen_fd >= 0 ) {
|
|
121
|
+
close( listener_info->listen_fd );
|
|
122
|
+
}
|
|
123
|
+
listener_info->listen_fd = -1;
|
|
124
|
+
|
|
125
|
+
memset( &addr, 0, sizeof( struct sockaddr_in ) );
|
|
126
|
+
addr.sin_family = AF_INET;
|
|
127
|
+
addr.sin_port = htons( listener_info->listen_port );
|
|
128
|
+
addr.sin_addr.s_addr = htonl( INADDR_ANY );
|
|
129
|
+
|
|
130
|
+
listen_fd = socket( PF_INET, SOCK_STREAM, 0 );
|
|
131
|
+
if ( listen_fd < 0 ) {
|
|
132
|
+
error( "Failed to create socket." );
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
flag = 1;
|
|
136
|
+
|
|
137
|
+
ret = setsockopt( listen_fd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof( flag ) );
|
|
138
|
+
if ( ret < 0 ) {
|
|
139
|
+
warn( "Failed to set socket options." );
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
ret = setsockopt( listen_fd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof( flag ) );
|
|
143
|
+
if ( ret < 0 ) {
|
|
144
|
+
warn( "Failed to set socket options." );
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
ret = bind( listen_fd, ( struct sockaddr * ) &addr, sizeof( struct sockaddr_in ) );
|
|
148
|
+
if ( ret < 0 ) {
|
|
149
|
+
error( "%s: Failed to bind socket.: %s(%d)",
|
|
150
|
+
inet_ntoa( addr.sin_addr ), strerror( errno ), errno );
|
|
151
|
+
close( listen_fd );
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
ret = listen( listen_fd, LISTEN_SOCK_MAX );
|
|
156
|
+
if ( ret < 0 ) {
|
|
157
|
+
error( "Failed to listen." );
|
|
158
|
+
close( listen_fd );
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
listener_info->listen_fd = listen_fd;
|
|
163
|
+
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
static char **
|
|
169
|
+
make_switch_daemon_args( struct listener_info *listener_info, struct sockaddr_in *addr, int accept_fd ) {
|
|
170
|
+
int argc = SWITCH_MANAGER_DEFAULT_ARGC + listener_info->switch_daemon_argc + 1;
|
|
171
|
+
char **argv = xcalloc( ( size_t ) argc, sizeof( char * ) );
|
|
172
|
+
char *command_name = xasprintf( "%s%s:%u", SWITCH_MANAGER_COMMAND_PREFIX,
|
|
173
|
+
inet_ntoa( addr->sin_addr ),
|
|
174
|
+
ntohs( addr->sin_port ) );
|
|
175
|
+
char *service_name = xasprintf( "%s%s%s:%u", SWITCH_MANAGER_NAME_OPTION,
|
|
176
|
+
SWITCH_MANAGER_PREFIX,
|
|
177
|
+
inet_ntoa( addr->sin_addr ),
|
|
178
|
+
ntohs( addr->sin_port ) );
|
|
179
|
+
char *socket_opt = xasprintf( "%s%d", SWITCH_MANAGER_SOCKET_OPTION,
|
|
180
|
+
accept_fd );
|
|
181
|
+
char *daemonize_opt = xstrdup( SWITCH_MANAGER_DAEMONIZE_OPTION );
|
|
182
|
+
char *notify_opt = xasprintf( "%s%s", SWITCH_MANAGER_STATE_PREFIX,
|
|
183
|
+
get_trema_name() );
|
|
184
|
+
|
|
185
|
+
int i = 0;
|
|
186
|
+
argv[ i++ ] = command_name;
|
|
187
|
+
argv[ i++ ] = service_name;
|
|
188
|
+
argv[ i++ ] = socket_opt;
|
|
189
|
+
argv[ i++ ] = daemonize_opt;
|
|
190
|
+
argv[ i++ ] = notify_opt;
|
|
191
|
+
int j;
|
|
192
|
+
for ( j = 0; j < listener_info->switch_daemon_argc; i++, j++ ) {
|
|
193
|
+
argv[ i ] = xstrdup( listener_info->switch_daemon_argv[ j ] );
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return argv;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
static void
|
|
201
|
+
free_switch_daemon_args( char **argv ) {
|
|
202
|
+
int i;
|
|
203
|
+
for ( i = 0; argv[ i ] != NULL; i++ ) {
|
|
204
|
+
free( argv[ i ] );
|
|
205
|
+
}
|
|
206
|
+
free( argv );
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
static const int ACCEPT_FD = 3;
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
void
|
|
214
|
+
secure_channel_accept( int fd, void *data ) {
|
|
215
|
+
struct listener_info *listener_info = data;
|
|
216
|
+
struct sockaddr_in addr;
|
|
217
|
+
socklen_t addr_len;
|
|
218
|
+
int accept_fd;
|
|
219
|
+
int pid;
|
|
220
|
+
|
|
221
|
+
addr_len = sizeof( struct sockaddr_in );
|
|
222
|
+
accept_fd = accept( fd, ( struct sockaddr * ) &addr, &addr_len );
|
|
223
|
+
if ( accept_fd < 0 ) {
|
|
224
|
+
// TODO: close listener socket
|
|
225
|
+
error( "Failed to accept from switch. :%s.", strerror( errno ) );
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
pid = fork();
|
|
229
|
+
if ( pid < 0 ) {
|
|
230
|
+
error( "Failed to fork. %s.", strerror( errno ) );
|
|
231
|
+
close( accept_fd );
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if ( pid == 0 ) {
|
|
235
|
+
close( listener_info->listen_fd );
|
|
236
|
+
if ( accept_fd < ACCEPT_FD ) {
|
|
237
|
+
dup2( accept_fd, ACCEPT_FD );
|
|
238
|
+
close( accept_fd );
|
|
239
|
+
accept_fd = ACCEPT_FD;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
char **argv = make_switch_daemon_args( listener_info, &addr, accept_fd );
|
|
243
|
+
|
|
244
|
+
int in_fd = open( "/dev/null", O_RDONLY );
|
|
245
|
+
if ( in_fd != 0 ) {
|
|
246
|
+
dup2( in_fd, 0 );
|
|
247
|
+
close( in_fd );
|
|
248
|
+
}
|
|
249
|
+
int out_fd = open( "/dev/null", O_WRONLY );
|
|
250
|
+
if ( out_fd != 1 ) {
|
|
251
|
+
dup2( out_fd, 1 );
|
|
252
|
+
close( out_fd );
|
|
253
|
+
}
|
|
254
|
+
int err_fd = open( "/dev/null", O_WRONLY );
|
|
255
|
+
if ( err_fd != 2 ) {
|
|
256
|
+
dup2( err_fd, 2 );
|
|
257
|
+
close( err_fd );
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
execvp( listener_info->switch_daemon, argv );
|
|
261
|
+
error( "Failed to execvp: %s(%s) %s %s. %s.",
|
|
262
|
+
argv[ 0 ], listener_info->switch_daemon,
|
|
263
|
+
argv[ 1 ], argv[ 2 ], strerror( errno ) );
|
|
264
|
+
|
|
265
|
+
free_switch_daemon_args( argv );
|
|
266
|
+
|
|
267
|
+
UNREACHABLE();
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
/* parent */
|
|
271
|
+
close( accept_fd );
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* Local variables:
|
|
278
|
+
* c-basic-offset: 2
|
|
279
|
+
* indent-tabs-mode: nil
|
|
280
|
+
* End:
|
|
281
|
+
*/
|