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
data/src/lib/timer.h
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Timer events and callbacks.
|
|
3
|
+
*
|
|
4
|
+
* Author: Yasuhito Takamiya <yasuhito@gmail.com>
|
|
5
|
+
*
|
|
6
|
+
* Copyright (C) 2008-2012 NEC Corporation
|
|
7
|
+
*
|
|
8
|
+
* This program is free software; you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License, version 2, as
|
|
10
|
+
* published by the Free Software Foundation.
|
|
11
|
+
*
|
|
12
|
+
* This program is distributed in the hope that it will be useful,
|
|
13
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
* GNU General Public License for more details.
|
|
16
|
+
*
|
|
17
|
+
* You should have received a copy of the GNU General Public License along
|
|
18
|
+
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
+
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
#ifndef TIMER_H
|
|
24
|
+
#define TIMER_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include <stdbool.h>
|
|
28
|
+
#include <time.h>
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
typedef void ( *timer_callback )( void *user_data );
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
extern bool ( *init_timer )( void );
|
|
35
|
+
extern bool ( *finalize_timer )( void );
|
|
36
|
+
|
|
37
|
+
extern bool ( *add_timer_event_callback )( struct itimerspec *interval, timer_callback callback, void *user_data );
|
|
38
|
+
extern bool ( *add_periodic_event_callback )( const time_t seconds, timer_callback callback, void *user_data );
|
|
39
|
+
|
|
40
|
+
extern bool ( *delete_timer_event )( timer_callback callback, void *user_data );
|
|
41
|
+
|
|
42
|
+
extern void ( *execute_timer_events )( int *next_timeout_usec );
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
#endif // TIMER_H
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* Local variables:
|
|
50
|
+
* c-basic-offset: 2
|
|
51
|
+
* indent-tabs-mode: nil
|
|
52
|
+
* End:
|
|
53
|
+
*/
|
data/src/lib/trema.c
ADDED
|
@@ -0,0 +1,710 @@
|
|
|
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 <assert.h>
|
|
22
|
+
#include <errno.h>
|
|
23
|
+
#include <getopt.h>
|
|
24
|
+
#include <libgen.h>
|
|
25
|
+
#include <limits.h>
|
|
26
|
+
#include <pthread.h>
|
|
27
|
+
#include <signal.h>
|
|
28
|
+
#include <stdio.h>
|
|
29
|
+
#include <stdlib.h>
|
|
30
|
+
#include <string.h>
|
|
31
|
+
#include <sys/stat.h>
|
|
32
|
+
#include <sys/types.h>
|
|
33
|
+
#include <unistd.h>
|
|
34
|
+
#include "trema.h"
|
|
35
|
+
#include "daemon.h"
|
|
36
|
+
#include "doubly_linked_list.h"
|
|
37
|
+
#include "log.h"
|
|
38
|
+
#include "messenger.h"
|
|
39
|
+
#include "openflow_application_interface.h"
|
|
40
|
+
#include "packetin_filter_interface.h"
|
|
41
|
+
#include "timer.h"
|
|
42
|
+
#include "trema_private.h"
|
|
43
|
+
#include "utility.h"
|
|
44
|
+
#include "wrapper.h"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
#ifdef UNIT_TESTING
|
|
48
|
+
|
|
49
|
+
#ifdef init_log
|
|
50
|
+
#undef init_log
|
|
51
|
+
#endif
|
|
52
|
+
#define init_log mock_init_log
|
|
53
|
+
bool mock_init_log( const char *ident, const char *log_directory, bool run_as_daemon );
|
|
54
|
+
|
|
55
|
+
#ifdef error
|
|
56
|
+
#undef error
|
|
57
|
+
#endif
|
|
58
|
+
#define error mock_error
|
|
59
|
+
void mock_error( const char *format, ... );
|
|
60
|
+
|
|
61
|
+
#ifdef set_logging_level
|
|
62
|
+
#undef set_logging_level
|
|
63
|
+
#endif
|
|
64
|
+
#define set_logging_level mock_set_logging_level
|
|
65
|
+
bool mock_set_logging_level( const char *level );
|
|
66
|
+
|
|
67
|
+
#ifdef daemonize
|
|
68
|
+
#undef daemonize
|
|
69
|
+
#endif
|
|
70
|
+
#define daemonize mock_daemonize
|
|
71
|
+
void mock_daemonize( const char *home );
|
|
72
|
+
|
|
73
|
+
#ifdef write_pid
|
|
74
|
+
#undef write_pid
|
|
75
|
+
#endif
|
|
76
|
+
#define write_pid mock_write_pid
|
|
77
|
+
void mock_write_pid( const char *directory, const char *name );
|
|
78
|
+
|
|
79
|
+
#ifdef unlink_pid
|
|
80
|
+
#undef unlink_pid
|
|
81
|
+
#endif
|
|
82
|
+
#define unlink_pid mock_unlink_pid
|
|
83
|
+
void mock_unlink_pid( const char *directory, const char *name );
|
|
84
|
+
|
|
85
|
+
#ifdef rename_pid
|
|
86
|
+
#undef rename_pid
|
|
87
|
+
#endif
|
|
88
|
+
#define rename_pid mock_rename_pid
|
|
89
|
+
void mock_rename_pid( const char *directory, const char *old, const char *new );
|
|
90
|
+
|
|
91
|
+
#ifdef read_pid
|
|
92
|
+
#undef read_pid
|
|
93
|
+
#endif
|
|
94
|
+
#define read_pid mock_read_pid
|
|
95
|
+
pid_t mock_read_pid( const char *directory, const char *name );
|
|
96
|
+
|
|
97
|
+
#ifdef kill
|
|
98
|
+
#undef kill
|
|
99
|
+
#endif
|
|
100
|
+
#define kill mock_kill
|
|
101
|
+
int mock_kill( pid_t pid, int sig );
|
|
102
|
+
|
|
103
|
+
#ifdef sleep
|
|
104
|
+
#undef sleep
|
|
105
|
+
#endif
|
|
106
|
+
#define sleep mock_sleep
|
|
107
|
+
unsigned int mock_sleep( unsigned int seconds );
|
|
108
|
+
|
|
109
|
+
#ifdef init_event_handler
|
|
110
|
+
#undef init_event_handler
|
|
111
|
+
#endif
|
|
112
|
+
#define init_event_handler mock_init_event_handler
|
|
113
|
+
void mock_init_event_handler( void );
|
|
114
|
+
|
|
115
|
+
#ifdef start_event_handler
|
|
116
|
+
#undef start_event_handler
|
|
117
|
+
#endif
|
|
118
|
+
#define start_event_handler mock_start_event_handler
|
|
119
|
+
void mock_start_event_handler( void );
|
|
120
|
+
|
|
121
|
+
#ifdef stop_event_handler
|
|
122
|
+
#undef stop_event_handler
|
|
123
|
+
#endif
|
|
124
|
+
#define stop_event_handler mock_stop_event_handler
|
|
125
|
+
void mock_stop_event_handler( void );
|
|
126
|
+
|
|
127
|
+
#ifdef init_messenger
|
|
128
|
+
#undef init_messenger
|
|
129
|
+
#endif
|
|
130
|
+
#define init_messenger mock_init_messenger
|
|
131
|
+
void mock_init_messenger( const char *working_directory );
|
|
132
|
+
|
|
133
|
+
#ifdef start_messenger
|
|
134
|
+
#undef start_messenger
|
|
135
|
+
#endif
|
|
136
|
+
#define start_messenger mock_start_messenger
|
|
137
|
+
void mock_start_messenger( void );
|
|
138
|
+
|
|
139
|
+
#ifdef flush_messenger
|
|
140
|
+
#undef flush_messenger
|
|
141
|
+
#endif
|
|
142
|
+
#define flush_messenger mock_flush_messenger
|
|
143
|
+
void mock_flush_messenger( void );
|
|
144
|
+
|
|
145
|
+
#ifdef stop_messenger
|
|
146
|
+
#undef stop_messenger
|
|
147
|
+
#endif
|
|
148
|
+
#define stop_messenger mock_stop_messenger
|
|
149
|
+
void mock_stop_messenger( void );
|
|
150
|
+
|
|
151
|
+
#ifdef finalize_messenger
|
|
152
|
+
#undef finalize_messenger
|
|
153
|
+
#endif
|
|
154
|
+
#define finalize_messenger mock_finalize_messenger
|
|
155
|
+
void mock_finalize_messenger( void );
|
|
156
|
+
|
|
157
|
+
#ifdef start_messenger_dump
|
|
158
|
+
#undef start_messenger_dump
|
|
159
|
+
#endif
|
|
160
|
+
#define start_messenger_dump mock_start_messenger_dump
|
|
161
|
+
void mock_start_messenger_dump( const char *dump_app_name, const char *dump_service_name );
|
|
162
|
+
|
|
163
|
+
#ifdef stop_messenger_dump
|
|
164
|
+
#undef stop_messenger_dump
|
|
165
|
+
#endif
|
|
166
|
+
#define stop_messenger_dump mock_stop_messenger_dump
|
|
167
|
+
void mock_stop_messenger_dump();
|
|
168
|
+
|
|
169
|
+
#ifdef messenger_dump_enabled
|
|
170
|
+
#undef messenger_dump_enabled
|
|
171
|
+
#endif
|
|
172
|
+
#define messenger_dump_enabled mock_messenger_dump_enabled
|
|
173
|
+
bool mock_messenger_dump_enabled();
|
|
174
|
+
|
|
175
|
+
#ifdef die
|
|
176
|
+
#undef die
|
|
177
|
+
#endif
|
|
178
|
+
#define die mock_die
|
|
179
|
+
void mock_die( const char *format, ... );
|
|
180
|
+
|
|
181
|
+
#ifdef exit
|
|
182
|
+
#undef exit
|
|
183
|
+
#endif
|
|
184
|
+
#define exit mock_exit
|
|
185
|
+
void mock_exit( int status );
|
|
186
|
+
|
|
187
|
+
#ifdef openflow_application_interface_is_initialized
|
|
188
|
+
#undef openflow_application_interface_is_initialized
|
|
189
|
+
#endif
|
|
190
|
+
#define openflow_application_interface_is_initialized mock_openflow_application_interface_is_initialized
|
|
191
|
+
bool mock_openflow_application_interface_is_initialized( void );
|
|
192
|
+
|
|
193
|
+
#ifdef finalize_openflow_application_interface
|
|
194
|
+
#undef finalize_openflow_application_interface
|
|
195
|
+
#endif
|
|
196
|
+
#define finalize_openflow_application_interface mock_finalize_openflow_application_interface
|
|
197
|
+
bool mock_finalize_openflow_application_interface( void );
|
|
198
|
+
|
|
199
|
+
#ifdef printf
|
|
200
|
+
#undef printf
|
|
201
|
+
#endif
|
|
202
|
+
#define printf mock_printf
|
|
203
|
+
int mock_printf(const char *format, ...);
|
|
204
|
+
|
|
205
|
+
typedef struct stat _stat;
|
|
206
|
+
#ifdef stat
|
|
207
|
+
#undef stat
|
|
208
|
+
#endif
|
|
209
|
+
#define stat mock_stat
|
|
210
|
+
int mock_stat( const char *path, _stat *buf );
|
|
211
|
+
|
|
212
|
+
#ifdef debug
|
|
213
|
+
#undef debug
|
|
214
|
+
#endif
|
|
215
|
+
#define debug mock_debug
|
|
216
|
+
void mock_debug( const char *format, ... );
|
|
217
|
+
|
|
218
|
+
#ifdef init_stat
|
|
219
|
+
#undef init_stat
|
|
220
|
+
#endif
|
|
221
|
+
#define init_stat mock_init_stat
|
|
222
|
+
bool mock_init_stat();
|
|
223
|
+
|
|
224
|
+
#ifdef finalize_stat
|
|
225
|
+
#undef finalize_stat
|
|
226
|
+
#endif
|
|
227
|
+
#define finalize_stat mock_finalize_stat
|
|
228
|
+
bool mock_finalize_stat();
|
|
229
|
+
|
|
230
|
+
#ifdef init_timer
|
|
231
|
+
#undef init_timer
|
|
232
|
+
#endif
|
|
233
|
+
#define init_timer mock_init_timer
|
|
234
|
+
bool mock_init_timer();
|
|
235
|
+
|
|
236
|
+
#ifdef finalize_timer
|
|
237
|
+
#undef finalize_timer
|
|
238
|
+
#endif
|
|
239
|
+
#define finalize_timer mock_finalize_timer
|
|
240
|
+
bool mock_finalize_timer();
|
|
241
|
+
|
|
242
|
+
#ifdef set_external_callback
|
|
243
|
+
#undef set_external_callback
|
|
244
|
+
#endif
|
|
245
|
+
#define set_external_callback mock_set_external_callback
|
|
246
|
+
bool mock_set_external_callback( void ( *callback ) ( void ) );
|
|
247
|
+
|
|
248
|
+
#ifdef dump_stats
|
|
249
|
+
#undef dump_stats
|
|
250
|
+
#endif
|
|
251
|
+
#define dump_stats mock_dump_stats
|
|
252
|
+
void mock_dump_stats();
|
|
253
|
+
|
|
254
|
+
#ifdef finalize_packetin_filter_interface
|
|
255
|
+
#undef finalize_packetin_filter_interface
|
|
256
|
+
#endif
|
|
257
|
+
#define finalize_packetin_filter_interface mock_finalize_packetin_filter_interface
|
|
258
|
+
bool mock_finalize_packetin_filter_interface();
|
|
259
|
+
|
|
260
|
+
#define static
|
|
261
|
+
|
|
262
|
+
#endif // UNIT_TESTING
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
#ifndef UNIT_TESTING
|
|
266
|
+
#define _stat struct stat
|
|
267
|
+
#endif // not UNIT_TESTING
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
static bool initialized = false;
|
|
271
|
+
static bool trema_started = false;
|
|
272
|
+
static bool run_as_daemon = false;
|
|
273
|
+
static char *trema_name = NULL;
|
|
274
|
+
static char *executable_name = NULL;
|
|
275
|
+
static char *trema_log = NULL;
|
|
276
|
+
static char *trema_pid = NULL;
|
|
277
|
+
static char *trema_sock = NULL;
|
|
278
|
+
static pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
static struct option long_options[] = {
|
|
282
|
+
{ "name", 1, NULL, 'n' },
|
|
283
|
+
{ "daemonize", 0, NULL, 'd' },
|
|
284
|
+
{ "logging_level", 1, NULL, 'l' },
|
|
285
|
+
{ "help", 0, NULL, 'h' },
|
|
286
|
+
{ NULL, 0, NULL, 0 },
|
|
287
|
+
};
|
|
288
|
+
static char short_options[] = "n:dl:h";
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Default usage function shown on <tt>-h</tt> or <tt>--help</tt>.
|
|
293
|
+
*
|
|
294
|
+
* This can be overridden by defining your own <tt>void usage( void )</tt>
|
|
295
|
+
* in your Trema application.
|
|
296
|
+
*/
|
|
297
|
+
void
|
|
298
|
+
usage() {
|
|
299
|
+
printf(
|
|
300
|
+
"Usage: %s [OPTION]...\n"
|
|
301
|
+
"\n"
|
|
302
|
+
" -n, --name=SERVICE_NAME service name\n"
|
|
303
|
+
" -d, --daemonize run in the background\n"
|
|
304
|
+
" -l, --logging_level=LEVEL set logging level\n"
|
|
305
|
+
" -h, --help display this help and exit\n",
|
|
306
|
+
executable_name
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
static const char *
|
|
312
|
+
get_trema_log() {
|
|
313
|
+
if ( trema_log == NULL ) {
|
|
314
|
+
char path[ PATH_MAX ];
|
|
315
|
+
sprintf( path, "%s/log", get_trema_tmp() );
|
|
316
|
+
trema_log = xstrdup( path );
|
|
317
|
+
}
|
|
318
|
+
return trema_log;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
static const char *
|
|
323
|
+
get_trema_pid() {
|
|
324
|
+
if ( trema_pid == NULL ) {
|
|
325
|
+
char path[ PATH_MAX ];
|
|
326
|
+
sprintf( path, "%s/pid", get_trema_tmp() );
|
|
327
|
+
trema_pid = xstrdup( path );
|
|
328
|
+
}
|
|
329
|
+
return trema_pid;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
static const char *
|
|
334
|
+
get_trema_sock() {
|
|
335
|
+
if ( trema_sock == NULL ) {
|
|
336
|
+
char path[ PATH_MAX ];
|
|
337
|
+
sprintf( path, "%s/sock", get_trema_tmp() );
|
|
338
|
+
trema_sock = xstrdup( path );
|
|
339
|
+
}
|
|
340
|
+
return trema_sock;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
static void
|
|
345
|
+
maybe_finalize_openflow_application_interface() {
|
|
346
|
+
if ( openflow_application_interface_is_initialized() ) {
|
|
347
|
+
finalize_openflow_application_interface();
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
static void
|
|
353
|
+
die_unless_initialized() {
|
|
354
|
+
if ( !initialized ) {
|
|
355
|
+
die( "Trema is not initialized. Call init_trema() first." );
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
static void
|
|
361
|
+
finalize_trema() {
|
|
362
|
+
die_unless_initialized();
|
|
363
|
+
|
|
364
|
+
debug( "Terminating %s...", get_trema_name() );
|
|
365
|
+
|
|
366
|
+
maybe_finalize_openflow_application_interface();
|
|
367
|
+
finalize_packetin_filter_interface();
|
|
368
|
+
finalize_messenger();
|
|
369
|
+
finalize_stat();
|
|
370
|
+
finalize_timer();
|
|
371
|
+
trema_started = false;
|
|
372
|
+
unlink_pid( get_trema_pid(), get_trema_name() );
|
|
373
|
+
xfree( trema_name );
|
|
374
|
+
trema_name = NULL;
|
|
375
|
+
xfree( executable_name );
|
|
376
|
+
executable_name = NULL;
|
|
377
|
+
|
|
378
|
+
unset_trema_home();
|
|
379
|
+
unset_trema_tmp();
|
|
380
|
+
|
|
381
|
+
xfree( trema_log );
|
|
382
|
+
trema_log = NULL;
|
|
383
|
+
|
|
384
|
+
initialized = false;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
static void
|
|
389
|
+
check_trema_tmp() {
|
|
390
|
+
_stat st;
|
|
391
|
+
int ret = stat( get_trema_tmp(), &st );
|
|
392
|
+
if ( ( ret != 0 ) && ( errno == ENOENT ) ) {
|
|
393
|
+
die( "Trema temporary directory does not exist: %s", get_trema_tmp() );
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
static void
|
|
399
|
+
reset_getopt() {
|
|
400
|
+
optind = 0;
|
|
401
|
+
opterr = 1;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
static void
|
|
406
|
+
parse_argv( int *argc, char ***argv ) {
|
|
407
|
+
assert( argc != NULL );
|
|
408
|
+
assert( argv != NULL );
|
|
409
|
+
|
|
410
|
+
int argc_tmp = *argc;
|
|
411
|
+
char *new_argv[ *argc ];
|
|
412
|
+
|
|
413
|
+
run_as_daemon = false;
|
|
414
|
+
|
|
415
|
+
set_trema_name( basename( ( *argv )[ 0 ] ) );
|
|
416
|
+
executable_name = xstrdup( get_trema_name() );
|
|
417
|
+
|
|
418
|
+
for ( int i = 0; i < *argc; ++i ) {
|
|
419
|
+
new_argv[ i ] = ( *argv )[ i ];
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
for ( ;; ) {
|
|
423
|
+
opterr = 0;
|
|
424
|
+
int c = getopt_long( *argc, *argv, short_options, long_options, NULL );
|
|
425
|
+
|
|
426
|
+
if ( c == -1 ) {
|
|
427
|
+
break;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
switch ( c ) {
|
|
431
|
+
case 'n':
|
|
432
|
+
set_trema_name( optarg );
|
|
433
|
+
break;
|
|
434
|
+
case 'd':
|
|
435
|
+
run_as_daemon = true;
|
|
436
|
+
break;
|
|
437
|
+
case 'l':
|
|
438
|
+
set_logging_level( optarg );
|
|
439
|
+
break;
|
|
440
|
+
case 'h':
|
|
441
|
+
usage();
|
|
442
|
+
xfree( trema_name );
|
|
443
|
+
xfree( executable_name );
|
|
444
|
+
exit( EXIT_SUCCESS );
|
|
445
|
+
break;
|
|
446
|
+
default:
|
|
447
|
+
continue;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
if ( optarg == NULL || strchr( new_argv[ optind - 1 ], '=' ) != NULL ) {
|
|
451
|
+
argc_tmp -= 1;
|
|
452
|
+
new_argv[ optind - 1 ] = NULL;
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
argc_tmp -= 2;
|
|
456
|
+
new_argv[ optind - 1 ] = NULL;
|
|
457
|
+
new_argv[ optind - 2 ] = NULL;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
for ( int i = 0, j = 0; i < *argc; ++i ) {
|
|
462
|
+
if ( new_argv[ i ] != NULL ) {
|
|
463
|
+
( *argv )[ j ] = new_argv[ i ];
|
|
464
|
+
j++;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
if ( argc_tmp < *argc ) {
|
|
468
|
+
( *argv )[ argc_tmp ] = NULL;
|
|
469
|
+
}
|
|
470
|
+
*argc = argc_tmp;
|
|
471
|
+
|
|
472
|
+
reset_getopt();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
static void
|
|
477
|
+
ignore_sigpipe() {
|
|
478
|
+
struct sigaction sigpipe_ignore;
|
|
479
|
+
|
|
480
|
+
memset( &sigpipe_ignore, 0, sizeof( struct sigaction ) );
|
|
481
|
+
sigpipe_ignore.sa_handler = SIG_IGN;
|
|
482
|
+
sigaction( SIGPIPE, &sigpipe_ignore, NULL );
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
static void
|
|
487
|
+
set_exit_handler() {
|
|
488
|
+
struct sigaction signal_exit;
|
|
489
|
+
|
|
490
|
+
memset( &signal_exit, 0, sizeof( struct sigaction ) );
|
|
491
|
+
signal_exit.sa_handler = ( void * ) stop_trema;
|
|
492
|
+
sigaction( SIGINT, &signal_exit, NULL );
|
|
493
|
+
sigaction( SIGTERM, &signal_exit, NULL );
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
static void
|
|
498
|
+
set_dump_stats_as_external_callback() {
|
|
499
|
+
set_external_callback( dump_stats );
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
static void
|
|
504
|
+
set_usr1_handler() {
|
|
505
|
+
struct sigaction signal_usr1;
|
|
506
|
+
|
|
507
|
+
memset( &signal_usr1, 0, sizeof( struct sigaction ) );
|
|
508
|
+
signal_usr1.sa_handler = ( void * ) set_dump_stats_as_external_callback;
|
|
509
|
+
sigaction( SIGUSR1, &signal_usr1, NULL );
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
static void
|
|
514
|
+
toggle_messenger_dump() {
|
|
515
|
+
if ( messenger_dump_enabled() ) {
|
|
516
|
+
stop_messenger_dump();
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
start_messenger_dump( get_trema_name(), DEFAULT_DUMP_SERVICE_NAME );
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
static void
|
|
525
|
+
set_usr2_handler() {
|
|
526
|
+
struct sigaction signal_usr2;
|
|
527
|
+
|
|
528
|
+
memset( &signal_usr2, 0, sizeof( struct sigaction ) );
|
|
529
|
+
signal_usr2.sa_handler = ( void * ) toggle_messenger_dump;
|
|
530
|
+
sigaction( SIGUSR2, &signal_usr2, NULL );
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
static void
|
|
535
|
+
maybe_daemonize() {
|
|
536
|
+
if ( run_as_daemon ) {
|
|
537
|
+
daemonize( get_trema_home() );
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Call this function before using any other Trema functions in your
|
|
544
|
+
* applications.
|
|
545
|
+
*
|
|
546
|
+
* It will initialize everything needed to handle OpenFlow events and
|
|
547
|
+
* parses some standard command line options. <tt>argc</tt> and
|
|
548
|
+
* <tt>argv</tt> are adjusted accordingly so your own code will never
|
|
549
|
+
* see those standard arguments.
|
|
550
|
+
*/
|
|
551
|
+
void
|
|
552
|
+
init_trema( int *argc, char ***argv ) {
|
|
553
|
+
assert( argc != NULL );
|
|
554
|
+
assert( argv != NULL );
|
|
555
|
+
|
|
556
|
+
pthread_mutex_lock( &mutex );
|
|
557
|
+
|
|
558
|
+
trema_name = NULL;
|
|
559
|
+
trema_log = NULL;
|
|
560
|
+
executable_name = NULL;
|
|
561
|
+
initialized = false;
|
|
562
|
+
trema_started = false;
|
|
563
|
+
run_as_daemon = false;
|
|
564
|
+
|
|
565
|
+
parse_argv( argc, argv );
|
|
566
|
+
set_trema_home();
|
|
567
|
+
set_trema_tmp();
|
|
568
|
+
check_trema_tmp();
|
|
569
|
+
init_log( get_trema_name(), get_trema_log(), run_as_daemon );
|
|
570
|
+
ignore_sigpipe();
|
|
571
|
+
set_exit_handler();
|
|
572
|
+
set_usr1_handler();
|
|
573
|
+
set_usr2_handler();
|
|
574
|
+
init_messenger( get_trema_sock() );
|
|
575
|
+
init_stat();
|
|
576
|
+
init_timer();
|
|
577
|
+
|
|
578
|
+
initialized = true;
|
|
579
|
+
|
|
580
|
+
pthread_mutex_unlock( &mutex );
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Runs the main loop.
|
|
586
|
+
*/
|
|
587
|
+
void
|
|
588
|
+
start_trema() {
|
|
589
|
+
start_trema_up();
|
|
590
|
+
start_event_handler();
|
|
591
|
+
start_trema_down();
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
void
|
|
596
|
+
start_trema_up() {
|
|
597
|
+
pthread_mutex_lock( &mutex );
|
|
598
|
+
|
|
599
|
+
die_unless_initialized();
|
|
600
|
+
|
|
601
|
+
debug( "Starting %s ... (TREMA_HOME = %s)", get_trema_name(), get_trema_home() );
|
|
602
|
+
|
|
603
|
+
maybe_daemonize();
|
|
604
|
+
write_pid( get_trema_pid(), get_trema_name() );
|
|
605
|
+
trema_started = true;
|
|
606
|
+
|
|
607
|
+
start_messenger();
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
void
|
|
612
|
+
start_trema_down() {
|
|
613
|
+
finalize_trema();
|
|
614
|
+
|
|
615
|
+
pthread_mutex_unlock( &mutex );
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
void
|
|
620
|
+
flush() {
|
|
621
|
+
flush_messenger();
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Exits from the main loop.
|
|
627
|
+
*/
|
|
628
|
+
void
|
|
629
|
+
stop_trema() {
|
|
630
|
+
stop_event_handler();
|
|
631
|
+
stop_messenger();
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
void
|
|
636
|
+
set_trema_name( const char *name ) {
|
|
637
|
+
assert( name != NULL );
|
|
638
|
+
if ( trema_name != NULL ) {
|
|
639
|
+
if ( trema_started ) {
|
|
640
|
+
rename_pid( get_trema_pid(), trema_name, name );
|
|
641
|
+
rename_log( trema_name, name, get_trema_log() );
|
|
642
|
+
}
|
|
643
|
+
xfree( trema_name );
|
|
644
|
+
}
|
|
645
|
+
trema_name = xstrdup( name );
|
|
646
|
+
|
|
647
|
+
if ( initialized ) {
|
|
648
|
+
restart_log( trema_name, get_trema_log() );
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
/**
|
|
654
|
+
* Returns the ID of your Trema application.
|
|
655
|
+
*/
|
|
656
|
+
const char *
|
|
657
|
+
get_trema_name() {
|
|
658
|
+
assert( trema_name != NULL );
|
|
659
|
+
return trema_name;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Returns the basename of <tt>argv[ 0 ]</tt>. This function is useful
|
|
665
|
+
* for your application's <tt>usage()</tt> function.
|
|
666
|
+
*/
|
|
667
|
+
const char *
|
|
668
|
+
get_executable_name() {
|
|
669
|
+
assert( executable_name != NULL );
|
|
670
|
+
return executable_name;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
pid_t
|
|
675
|
+
get_trema_process_from_name( const char *name ) {
|
|
676
|
+
return read_pid( get_trema_pid(), name );
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
bool
|
|
681
|
+
terminate_trema_process( pid_t pid ) {
|
|
682
|
+
assert( pid > 0 );
|
|
683
|
+
int res = kill( pid, SIGTERM );
|
|
684
|
+
if ( res < 0 ) {
|
|
685
|
+
if ( errno == ESRCH ) {
|
|
686
|
+
return true;
|
|
687
|
+
}
|
|
688
|
+
error( "Failed to kill %d ( %s [%d] ).", pid, strerror( errno ), errno );
|
|
689
|
+
return false;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
int try = 0;
|
|
693
|
+
const int max_try = 10;
|
|
694
|
+
while ( kill( pid, 0 ) == 0 && ++try <= max_try ) {
|
|
695
|
+
sleep( 1 );
|
|
696
|
+
}
|
|
697
|
+
if ( try > max_try ) {
|
|
698
|
+
error( "Failed to terminate %d.", pid );
|
|
699
|
+
return false;
|
|
700
|
+
}
|
|
701
|
+
return true;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
/*
|
|
706
|
+
* Local variables:
|
|
707
|
+
* c-basic-offset: 2
|
|
708
|
+
* indent-tabs-mode: nil
|
|
709
|
+
* End:
|
|
710
|
+
*/
|