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/byteorder.h
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Utility functions for converting byteorder.
|
|
3
|
+
*
|
|
4
|
+
* Author: Yasunobu Chiba
|
|
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 BYTEORDER_H
|
|
24
|
+
#define BYTEORDER_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include <endian.h>
|
|
28
|
+
#include <byteswap.h>
|
|
29
|
+
#include <openflow.h>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
33
|
+
#define ntohll( _x ) ( _x )
|
|
34
|
+
#define htonll( _x ) ( _x )
|
|
35
|
+
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
|
36
|
+
#define ntohll( _x ) bswap_64( _x )
|
|
37
|
+
#define htonll( _x ) bswap_64( _x )
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
void ntoh_match( struct ofp_match *dst, const struct ofp_match *src );
|
|
42
|
+
#define hton_match ntoh_match
|
|
43
|
+
|
|
44
|
+
void ntoh_phy_port( struct ofp_phy_port *dst, const struct ofp_phy_port *src );
|
|
45
|
+
#define hton_phy_port ntoh_phy_port
|
|
46
|
+
|
|
47
|
+
void ntoh_action_output( struct ofp_action_output *dst, const struct ofp_action_output *src );
|
|
48
|
+
#define hton_action_output ntoh_action_output
|
|
49
|
+
|
|
50
|
+
void ntoh_action_vlan_vid( struct ofp_action_vlan_vid *dst, const struct ofp_action_vlan_vid *src );
|
|
51
|
+
#define hton_action_vlan_vid ntoh_action_vlan_vid
|
|
52
|
+
|
|
53
|
+
void ntoh_action_vlan_pcp( struct ofp_action_vlan_pcp *dst, const struct ofp_action_vlan_pcp *src );
|
|
54
|
+
#define hton_action_vlan_pcp ntoh_action_vlan_pcp
|
|
55
|
+
|
|
56
|
+
void ntoh_action_strip_vlan( struct ofp_action_header *dst, const struct ofp_action_header *src );
|
|
57
|
+
#define hton_action_strip_vlan ntoh_action_strip_vlan
|
|
58
|
+
|
|
59
|
+
void ntoh_action_dl_addr( struct ofp_action_dl_addr *dst, const struct ofp_action_dl_addr *src );
|
|
60
|
+
#define hton_action_dl_addr ntoh_action_dl_addr
|
|
61
|
+
|
|
62
|
+
void ntoh_action_nw_addr( struct ofp_action_nw_addr *dst, const struct ofp_action_nw_addr *src );
|
|
63
|
+
#define hton_action_nw_addr ntoh_action_nw_addr
|
|
64
|
+
|
|
65
|
+
void ntoh_action_nw_tos( struct ofp_action_nw_tos *dst, const struct ofp_action_nw_tos *src );
|
|
66
|
+
#define hton_action_nw_tos ntoh_action_nw_tos
|
|
67
|
+
|
|
68
|
+
void ntoh_action_tp_port( struct ofp_action_tp_port *dst, const struct ofp_action_tp_port *src );
|
|
69
|
+
#define hton_action_tp_port ntoh_action_tp_port
|
|
70
|
+
|
|
71
|
+
void ntoh_action_enqueue( struct ofp_action_enqueue *dst, const struct ofp_action_enqueue *src );
|
|
72
|
+
#define hton_action_enqueue ntoh_action_enqueue
|
|
73
|
+
|
|
74
|
+
void ntoh_action_vendor( struct ofp_action_vendor_header *dst, const struct ofp_action_vendor_header *src );
|
|
75
|
+
#define hton_action_vendor ntoh_action_vendor
|
|
76
|
+
|
|
77
|
+
void ntoh_action( struct ofp_action_header *dst, const struct ofp_action_header *src );
|
|
78
|
+
void hton_action( struct ofp_action_header *dst, const struct ofp_action_header *src );
|
|
79
|
+
|
|
80
|
+
void ntoh_flow_stats( struct ofp_flow_stats *dst, const struct ofp_flow_stats *src );
|
|
81
|
+
void hton_flow_stats( struct ofp_flow_stats *dst, const struct ofp_flow_stats *src );
|
|
82
|
+
|
|
83
|
+
void ntoh_aggregate_stats( struct ofp_aggregate_stats_reply *dst, const struct ofp_aggregate_stats_reply *src );
|
|
84
|
+
#define hton_aggregate_stats ntoh_aggregate_stats
|
|
85
|
+
|
|
86
|
+
void ntoh_table_stats( struct ofp_table_stats *dst, const struct ofp_table_stats *src );
|
|
87
|
+
#define hton_table_stats ntoh_table_stats
|
|
88
|
+
|
|
89
|
+
void ntoh_port_stats( struct ofp_port_stats *dst, const struct ofp_port_stats *src );
|
|
90
|
+
#define hton_port_stats ntoh_port_stats
|
|
91
|
+
|
|
92
|
+
void ntoh_queue_stats( struct ofp_queue_stats *dst, const struct ofp_queue_stats *src );
|
|
93
|
+
#define hton_queue_stats ntoh_queue_stats
|
|
94
|
+
|
|
95
|
+
void ntoh_queue_property( struct ofp_queue_prop_header *dst, const struct ofp_queue_prop_header *src );
|
|
96
|
+
void hton_queue_property( struct ofp_queue_prop_header *dst, const struct ofp_queue_prop_header *src );
|
|
97
|
+
|
|
98
|
+
void ntoh_packet_queue( struct ofp_packet_queue *dst, const struct ofp_packet_queue *src );
|
|
99
|
+
void hton_packet_queue( struct ofp_packet_queue *dst, const struct ofp_packet_queue *src );
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
#endif // BYTEORDER_H
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* Local variables:
|
|
107
|
+
* c-basic-offset: 2
|
|
108
|
+
* indent-tabs-mode: nil
|
|
109
|
+
* End:
|
|
110
|
+
*/
|
data/src/lib/checks.h
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
#ifndef CHECKS_H
|
|
22
|
+
#define CHECKS_H
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#define DEPRECATED __attribute__ ( ( deprecated ) )
|
|
26
|
+
#define UNUSED( x ) ( void ) ( x )
|
|
27
|
+
#define UNREACHABLE() die( "unreachable code" )
|
|
28
|
+
#define die_if_NULL( data ) \
|
|
29
|
+
if ( data == NULL ) { \
|
|
30
|
+
die( "Argument of %s must not be NULL.", __func__ ); \
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
#endif // CHECKS_H
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Local variables:
|
|
39
|
+
* c-basic-offset: 2
|
|
40
|
+
* indent-tabs-mode: nil
|
|
41
|
+
* End:
|
|
42
|
+
*/
|
data/src/lib/daemon.c
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
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 <fcntl.h>
|
|
24
|
+
#include <limits.h>
|
|
25
|
+
#include <signal.h>
|
|
26
|
+
#include <stdio.h>
|
|
27
|
+
#include <stdlib.h>
|
|
28
|
+
#include <string.h>
|
|
29
|
+
#include <sys/stat.h>
|
|
30
|
+
#include <unistd.h>
|
|
31
|
+
#include "checks.h"
|
|
32
|
+
#include "log.h"
|
|
33
|
+
#include "wrapper.h"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
#ifdef UNIT_TESTING
|
|
37
|
+
|
|
38
|
+
#ifdef die
|
|
39
|
+
#undef die
|
|
40
|
+
#endif
|
|
41
|
+
#define die mock_die
|
|
42
|
+
void mock_die( const char *format, ... );
|
|
43
|
+
|
|
44
|
+
#ifdef chdir
|
|
45
|
+
#undef chdir
|
|
46
|
+
#endif // chdir
|
|
47
|
+
#define chdir mock_chdir
|
|
48
|
+
extern int mock_chdir( const char *path );
|
|
49
|
+
|
|
50
|
+
#ifdef fork
|
|
51
|
+
#undef fork
|
|
52
|
+
#endif // fork
|
|
53
|
+
#define fork mock_fork
|
|
54
|
+
extern pid_t mock_fork( void );
|
|
55
|
+
|
|
56
|
+
#ifdef exit
|
|
57
|
+
#undef exit
|
|
58
|
+
#endif // exit
|
|
59
|
+
#define exit mock_exit
|
|
60
|
+
extern void mock_exit( int status );
|
|
61
|
+
|
|
62
|
+
#ifdef setsid
|
|
63
|
+
#undef setsid
|
|
64
|
+
#endif // setsid
|
|
65
|
+
#define setsid mock_setsid
|
|
66
|
+
extern pid_t mock_setsid( void );
|
|
67
|
+
|
|
68
|
+
#ifdef umask
|
|
69
|
+
#undef umask
|
|
70
|
+
#endif // umask
|
|
71
|
+
#define umask mock_umask
|
|
72
|
+
extern mode_t mock_umask( mode_t mask );
|
|
73
|
+
|
|
74
|
+
#ifdef open
|
|
75
|
+
#undef open
|
|
76
|
+
#endif // open
|
|
77
|
+
#define open mock_open
|
|
78
|
+
extern int mock_open( const char *pathname, int flags, mode_t mode );
|
|
79
|
+
|
|
80
|
+
#ifdef close
|
|
81
|
+
#undef close
|
|
82
|
+
#endif // close
|
|
83
|
+
#define close mock_close
|
|
84
|
+
extern int mock_close( int fd );
|
|
85
|
+
|
|
86
|
+
#ifdef lockf
|
|
87
|
+
#undef lockf
|
|
88
|
+
#endif // lockf
|
|
89
|
+
#define lockf mock_lockf
|
|
90
|
+
extern int mock_lockf( int fd, int cmd, off_t len );
|
|
91
|
+
|
|
92
|
+
#ifdef getpid
|
|
93
|
+
#undef getpid
|
|
94
|
+
#endif // getpid
|
|
95
|
+
#define getpid mock_getpid
|
|
96
|
+
extern pid_t mock_getpid( void );
|
|
97
|
+
|
|
98
|
+
#ifdef write
|
|
99
|
+
#undef write
|
|
100
|
+
#endif // write
|
|
101
|
+
#define write mock_write
|
|
102
|
+
extern ssize_t mock_write( int fd, const void *buf, size_t count );
|
|
103
|
+
|
|
104
|
+
#ifdef unlink
|
|
105
|
+
#undef unlink
|
|
106
|
+
#endif // unlink
|
|
107
|
+
#define unlink mock_unlink
|
|
108
|
+
extern int mock_unlink( const char *pathname );
|
|
109
|
+
|
|
110
|
+
#ifdef access
|
|
111
|
+
#undef access
|
|
112
|
+
#endif // access
|
|
113
|
+
#define access mock_access
|
|
114
|
+
extern int mock_access( const char *pathname, int mode );
|
|
115
|
+
|
|
116
|
+
#ifdef read
|
|
117
|
+
#undef read
|
|
118
|
+
#endif // read
|
|
119
|
+
#define read mock_read
|
|
120
|
+
extern ssize_t mock_read( int fd, void *buf, size_t count );
|
|
121
|
+
|
|
122
|
+
#ifdef kill
|
|
123
|
+
#undef kill
|
|
124
|
+
#endif // kill
|
|
125
|
+
#define kill mock_kill
|
|
126
|
+
extern int mock_kill( pid_t pid, int sig );
|
|
127
|
+
|
|
128
|
+
#ifdef rename
|
|
129
|
+
#undef rename
|
|
130
|
+
#endif // rename
|
|
131
|
+
#define rename mock_rename
|
|
132
|
+
extern int mock_rename( const char *oldpath, const char *newpath );
|
|
133
|
+
|
|
134
|
+
#ifdef warn
|
|
135
|
+
#undef warn
|
|
136
|
+
#endif // warn
|
|
137
|
+
#define warn mock_warn
|
|
138
|
+
extern void mock_warn( const char *format, ... );
|
|
139
|
+
|
|
140
|
+
#endif // UNIT_TESTING
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
void
|
|
144
|
+
daemonize( const char *home ) {
|
|
145
|
+
assert( home != NULL );
|
|
146
|
+
|
|
147
|
+
char buf[ 256 ];
|
|
148
|
+
|
|
149
|
+
if ( chdir( home ) < 0 ) {
|
|
150
|
+
die( "Could not cd to %s: %s.", home, strerror_r( errno, buf, sizeof( buf ) ) );
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
pid_t pid = fork();
|
|
154
|
+
if ( pid < 0 ) {
|
|
155
|
+
die( "fork() failed: %s.", strerror_r( errno, buf, sizeof( buf ) ) );
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if ( pid > 0 ) {
|
|
159
|
+
exit( EXIT_SUCCESS );
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
pid_t sid = setsid();
|
|
163
|
+
if ( sid < 0 ) {
|
|
164
|
+
die( "setsid() failed: %s.", strerror_r( errno, buf, sizeof( buf ) ) );
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
umask( 0 );
|
|
168
|
+
|
|
169
|
+
close( STDIN_FILENO );
|
|
170
|
+
close( STDOUT_FILENO );
|
|
171
|
+
close( STDERR_FILENO );
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
static const int PID_STRING_LENGTH = 10;
|
|
176
|
+
|
|
177
|
+
void
|
|
178
|
+
write_pid( const char *directory, const char *name ) {
|
|
179
|
+
assert( directory != NULL );
|
|
180
|
+
assert( name != NULL );
|
|
181
|
+
|
|
182
|
+
char path[ PATH_MAX ];
|
|
183
|
+
snprintf( path, PATH_MAX, "%s/%s.pid", directory, name );
|
|
184
|
+
path[ PATH_MAX - 1 ] = '\0';
|
|
185
|
+
|
|
186
|
+
int fd = open( path, O_RDWR | O_CREAT, 0600 );
|
|
187
|
+
if ( fd == -1 ) {
|
|
188
|
+
die( "Could not create a PID file: %s", path );
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if ( lockf( fd, F_TLOCK, 0 ) == -1 ) {
|
|
192
|
+
die( "Could not acquire a lock on a PID file: %s", path );
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
char str[ PID_STRING_LENGTH ];
|
|
196
|
+
snprintf( str, sizeof( str ),"%d\n", getpid() );
|
|
197
|
+
str[ sizeof( str ) - 1 ] = '\0';
|
|
198
|
+
ssize_t ret = write( fd, str, strlen( str ) );
|
|
199
|
+
if ( ret == -1 ) {
|
|
200
|
+
die( "Could not write a PID file: %s", path );
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
void
|
|
206
|
+
unlink_pid( const char *directory, const char *name ) {
|
|
207
|
+
assert( directory != NULL );
|
|
208
|
+
assert( name != NULL );
|
|
209
|
+
|
|
210
|
+
char path[ PATH_MAX ];
|
|
211
|
+
snprintf( path, PATH_MAX, "%s/%s.pid", directory, name );
|
|
212
|
+
path[ PATH_MAX - 1 ] = '\0';
|
|
213
|
+
|
|
214
|
+
int ret = unlink( path );
|
|
215
|
+
if ( ret < 0 ) {
|
|
216
|
+
die( "Could not remove a PID file: %s", path );
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
pid_t
|
|
222
|
+
read_pid( const char *directory, const char *name ) {
|
|
223
|
+
assert( directory != NULL );
|
|
224
|
+
assert( name != NULL );
|
|
225
|
+
|
|
226
|
+
char path[ PATH_MAX ];
|
|
227
|
+
snprintf( path, PATH_MAX, "%s/%s.pid", directory, name );
|
|
228
|
+
path[ PATH_MAX - 1 ] = '\0';
|
|
229
|
+
|
|
230
|
+
if ( access( path, R_OK ) < 0 ) {
|
|
231
|
+
return -1;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
int fd = open( path, O_RDONLY, 0 );
|
|
235
|
+
if ( fd < 0 ) {
|
|
236
|
+
warn( "Failed to open %s ( %s [%d] ).", path, strerror( errno ), errno );
|
|
237
|
+
return -1;
|
|
238
|
+
}
|
|
239
|
+
char str[ PID_STRING_LENGTH ];
|
|
240
|
+
ssize_t length = read( fd, str, sizeof( str ) - 1 );
|
|
241
|
+
if ( length < 0 ) {
|
|
242
|
+
warn( "Failed to read pid from %s ( %s [%d] ).", path, strerror( errno ), errno );
|
|
243
|
+
close( fd );
|
|
244
|
+
return -1;
|
|
245
|
+
}
|
|
246
|
+
str[ length ] = '\0';
|
|
247
|
+
if ( str[ length - 1 ] == '\n' ) {
|
|
248
|
+
str[ length - 1 ] = '\0';
|
|
249
|
+
}
|
|
250
|
+
close( fd );
|
|
251
|
+
|
|
252
|
+
char *endp = NULL;
|
|
253
|
+
pid_t pid = ( pid_t ) strtol( str, &endp, 0 );
|
|
254
|
+
if ( *endp != '\0' ) {
|
|
255
|
+
warn( "Invalid pid `%s'.", str );
|
|
256
|
+
return -1;
|
|
257
|
+
}
|
|
258
|
+
if ( pid <= 0 ) {
|
|
259
|
+
warn( "Invalid pid %d.", pid );
|
|
260
|
+
return -1;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
int ret = kill( pid, 0 );
|
|
264
|
+
if ( ret < 0 ) {
|
|
265
|
+
warn( "Failed to check process id %d ( %s [%d] ).", pid, strerror( errno ), errno );
|
|
266
|
+
if ( errno == ESRCH ) {
|
|
267
|
+
unlink( path );
|
|
268
|
+
}
|
|
269
|
+
return -1;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return pid;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
void
|
|
277
|
+
rename_pid( const char *directory, const char *old, const char *new ) {
|
|
278
|
+
assert( directory != NULL );
|
|
279
|
+
assert( old != NULL );
|
|
280
|
+
assert( new != NULL );
|
|
281
|
+
|
|
282
|
+
char old_path[ PATH_MAX ];
|
|
283
|
+
snprintf( old_path, PATH_MAX, "%s/%s.pid", directory, old );
|
|
284
|
+
old_path[ PATH_MAX - 1 ] = '\0';
|
|
285
|
+
char new_path[ PATH_MAX ];
|
|
286
|
+
snprintf( new_path, PATH_MAX, "%s/%s.pid", directory, new );
|
|
287
|
+
new_path[ PATH_MAX - 1 ] = '\0';
|
|
288
|
+
|
|
289
|
+
unlink( new_path );
|
|
290
|
+
int ret = rename( old_path, new_path );
|
|
291
|
+
if ( ret < 0 ) {
|
|
292
|
+
die( "Could not rename a PID file from %s to %s.", old_path, new_path );
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* Local variables:
|
|
299
|
+
* c-basic-offset: 2
|
|
300
|
+
* indent-tabs-mode: nil
|
|
301
|
+
* End:
|
|
302
|
+
*/
|