trema 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.mono.rant +4107 -0
- data/.rspec +1 -0
- data/.yardopts +4 -0
- data/Doxyfile +1679 -0
- data/GPL2 +339 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +71 -0
- data/README.md +135 -0
- data/Rakefile +140 -0
- data/Rantfile +834 -0
- data/VERSION +1 -0
- data/build.rb +32 -0
- data/cruise.rb +389 -0
- data/features/example.dumper.feature +87 -0
- data/features/example.learning_switch.feature +39 -0
- data/features/example.list_switches.feature +38 -0
- data/features/example.message.echo_reply.feature +26 -0
- data/features/example.message.echo_request.feature +25 -0
- data/features/example.message.features_request.feature +84 -0
- data/features/example.message.hello.feature +25 -0
- data/features/example.message.set_config.feature +27 -0
- data/features/example.multi_learning_switch.feature +135 -0
- data/features/example.packetin_filter_config.feature +91 -0
- data/features/example.repeater_hub.feature +49 -0
- data/features/example.switch_monitor.feature +39 -0
- data/features/packetin_filter.feature +49 -0
- data/features/step_definitions/kill_steps.rb +30 -0
- data/features/step_definitions/log_steps.rb +90 -0
- data/features/step_definitions/misc_steps.rb +64 -0
- data/features/step_definitions/off_steps.rb +30 -0
- data/features/step_definitions/run_steps.rb +91 -0
- data/features/step_definitions/send_packets_steps.rb +42 -0
- data/features/step_definitions/show_stats_steps.rb +43 -0
- data/features/step_definitions/stats_steps.rb +39 -0
- data/features/support/env.rb +75 -0
- data/features/support/hooks.rb +8 -0
- data/features/switch_manager.feature +35 -0
- data/features/trema-config.feature +68 -0
- data/features/trema.dump_flows.feature +25 -0
- data/features/trema.feature +25 -0
- data/features/trema.kill.feature +53 -0
- data/features/trema.killall.feature +30 -0
- data/features/trema.reset_stats.feature +14 -0
- data/features/trema.run.feature +46 -0
- data/features/trema.send_packets.feature +56 -0
- data/features/trema.show_stats.feature +67 -0
- data/features/tutorial.hello_trema.feature +27 -0
- data/features/tutorial.packet_in.feature +47 -0
- data/features/tutorial.switch_info.feature +55 -0
- data/ruby/.gitignore +4 -0
- data/ruby/blocker.rb +78 -0
- data/ruby/extconf.rb +71 -0
- data/ruby/sub-process.rb +291 -0
- data/ruby/trema/action-common.c +60 -0
- data/ruby/trema/action-common.h +42 -0
- data/ruby/trema/action-enqueue.c +161 -0
- data/ruby/trema/action-enqueue.h +40 -0
- data/ruby/trema/action-output.c +169 -0
- data/ruby/trema/action-output.h +42 -0
- data/ruby/trema/action-set-dl-dst.c +131 -0
- data/ruby/trema/action-set-dl-dst.h +44 -0
- data/ruby/trema/action-set-dl-src.c +131 -0
- data/ruby/trema/action-set-dl-src.h +44 -0
- data/ruby/trema/action-set-nw-dst.c +135 -0
- data/ruby/trema/action-set-nw-dst.h +42 -0
- data/ruby/trema/action-set-nw-src.c +140 -0
- data/ruby/trema/action-set-nw-src.h +42 -0
- data/ruby/trema/action-set-nw-tos.c +124 -0
- data/ruby/trema/action-set-nw-tos.h +42 -0
- data/ruby/trema/action-set-tp-dst.c +122 -0
- data/ruby/trema/action-set-tp-dst.h +42 -0
- data/ruby/trema/action-set-tp-src.c +124 -0
- data/ruby/trema/action-set-tp-src.h +42 -0
- data/ruby/trema/action-set-vlan-pcp.c +128 -0
- data/ruby/trema/action-set-vlan-pcp.h +42 -0
- data/ruby/trema/action-set-vlan-vid.c +125 -0
- data/ruby/trema/action-set-vlan-vid.h +42 -0
- data/ruby/trema/action-strip-vlan.c +81 -0
- data/ruby/trema/action-strip-vlan.h +42 -0
- data/ruby/trema/action-vendor.c +121 -0
- data/ruby/trema/action-vendor.h +42 -0
- data/ruby/trema/aggregate-stats-reply.rb +70 -0
- data/ruby/trema/app.rb +112 -0
- data/ruby/trema/barrier-reply.c +99 -0
- data/ruby/trema/barrier-reply.h +46 -0
- data/ruby/trema/barrier-request.c +108 -0
- data/ruby/trema/barrier-request.h +44 -0
- data/ruby/trema/cli.rb +269 -0
- data/ruby/trema/command.rb +40 -0
- data/ruby/trema/command/dump_flows.rb +62 -0
- data/ruby/trema/command/kill.rb +71 -0
- data/ruby/trema/command/killall.rb +56 -0
- data/ruby/trema/command/reset_stats.rb +61 -0
- data/ruby/trema/command/ruby.rb +55 -0
- data/ruby/trema/command/run.rb +120 -0
- data/ruby/trema/command/send_packets.rb +130 -0
- data/ruby/trema/command/shell.rb +61 -0
- data/ruby/trema/command/show_stats.rb +84 -0
- data/ruby/trema/command/usage.rb +61 -0
- data/ruby/trema/command/version.rb +39 -0
- data/ruby/trema/controller.c +595 -0
- data/ruby/trema/controller.h +44 -0
- data/ruby/trema/controller.rb +81 -0
- data/ruby/trema/daemon.rb +167 -0
- data/ruby/trema/dsl.rb +34 -0
- data/ruby/trema/dsl/configuration.rb +153 -0
- data/ruby/trema/dsl/context.rb +71 -0
- data/ruby/trema/dsl/link.rb +41 -0
- data/ruby/trema/dsl/parser.rb +70 -0
- data/ruby/trema/dsl/run.rb +49 -0
- data/ruby/trema/dsl/runner.rb +165 -0
- data/ruby/trema/dsl/stanza.rb +53 -0
- data/ruby/trema/dsl/switch.rb +78 -0
- data/ruby/trema/dsl/syntax-error.rb +33 -0
- data/ruby/trema/dsl/syntax.rb +109 -0
- data/ruby/trema/dsl/vhost.rb +108 -0
- data/ruby/trema/dsl/vswitch.rb +47 -0
- data/ruby/trema/echo-reply.c +107 -0
- data/ruby/trema/echo-reply.h +42 -0
- data/ruby/trema/echo-request.c +140 -0
- data/ruby/trema/echo-request.h +42 -0
- data/ruby/trema/error.c +253 -0
- data/ruby/trema/error.h +44 -0
- data/ruby/trema/exact-match.rb +36 -0
- data/ruby/trema/executables.rb +95 -0
- data/ruby/trema/features-reply.c +238 -0
- data/ruby/trema/features-reply.h +60 -0
- data/ruby/trema/features-request.c +109 -0
- data/ruby/trema/features-request.h +44 -0
- data/ruby/trema/flow-removed.c +275 -0
- data/ruby/trema/flow-removed.h +46 -0
- data/ruby/trema/flow-stats-reply.rb +109 -0
- data/ruby/trema/flow.rb +56 -0
- data/ruby/trema/get-config-reply.c +159 -0
- data/ruby/trema/get-config-reply.h +52 -0
- data/ruby/trema/get-config-request.c +107 -0
- data/ruby/trema/get-config-request.h +44 -0
- data/ruby/trema/hello.c +110 -0
- data/ruby/trema/hello.h +44 -0
- data/ruby/trema/host.rb +257 -0
- data/ruby/trema/ip.rb +101 -0
- data/ruby/trema/link.rb +176 -0
- data/ruby/trema/list-switches-reply.c +46 -0
- data/ruby/trema/list-switches-reply.h +40 -0
- data/ruby/trema/logger.c +162 -0
- data/ruby/trema/logger.h +44 -0
- data/ruby/trema/mac.rb +151 -0
- data/ruby/trema/match.c +594 -0
- data/ruby/trema/match.h +36 -0
- data/ruby/trema/monkey-patch/integer.rb +35 -0
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +36 -0
- data/ruby/trema/monkey-patch/integer/ranges.rb +51 -0
- data/ruby/trema/monkey-patch/module.rb +33 -0
- data/ruby/trema/monkey-patch/module/deprecation.rb +41 -0
- data/ruby/trema/monkey-patch/string.rb +33 -0
- data/ruby/trema/monkey-patch/string/inflectors.rb +54 -0
- data/ruby/trema/network-component.rb +153 -0
- data/ruby/trema/ofctl.rb +62 -0
- data/ruby/trema/open-vswitch.rb +154 -0
- data/ruby/trema/openflow-error.c +191 -0
- data/ruby/trema/openflow-error.h +53 -0
- data/ruby/trema/openflow-switch.rb +88 -0
- data/ruby/trema/ordered-hash.rb +74 -0
- data/ruby/trema/packet-queue.rb +178 -0
- data/ruby/trema/packet_in.c +736 -0
- data/ruby/trema/packet_in.h +46 -0
- data/ruby/trema/packetin-filter.rb +126 -0
- data/ruby/trema/path.rb +135 -0
- data/ruby/trema/phost.rb +69 -0
- data/ruby/trema/port-mod.c +226 -0
- data/ruby/trema/port-mod.h +36 -0
- data/ruby/trema/port-stats-reply.rb +111 -0
- data/ruby/trema/port-status.c +156 -0
- data/ruby/trema/port-status.h +45 -0
- data/ruby/trema/port.c +295 -0
- data/ruby/trema/port.h +47 -0
- data/ruby/trema/process.rb +76 -0
- data/ruby/trema/queue-get-config-reply.c +200 -0
- data/ruby/trema/queue-get-config-reply.h +47 -0
- data/ruby/trema/queue-get-config-request.c +141 -0
- data/ruby/trema/queue-get-config-request.h +44 -0
- data/ruby/trema/queue-stats-reply.rb +78 -0
- data/ruby/trema/set-config.c +171 -0
- data/ruby/trema/set-config.h +44 -0
- data/ruby/trema/shell.rb +39 -0
- data/ruby/trema/shell/down.rb +39 -0
- data/ruby/trema/shell/killall.rb +40 -0
- data/ruby/trema/shell/link.rb +61 -0
- data/ruby/trema/shell/reset_stats.rb +50 -0
- data/ruby/trema/shell/run.rb +67 -0
- data/ruby/trema/shell/send_packets.rb +42 -0
- data/ruby/trema/shell/show_stats.rb +49 -0
- data/ruby/trema/shell/up.rb +43 -0
- data/ruby/trema/shell/vhost.rb +44 -0
- data/ruby/trema/shell/vswitch.rb +49 -0
- data/ruby/trema/stats-helper.rb +65 -0
- data/ruby/trema/stats-reply.c +483 -0
- data/ruby/trema/stats-reply.h +53 -0
- data/ruby/trema/stats-request.c +634 -0
- data/ruby/trema/stats-request.h +42 -0
- data/ruby/trema/switch-daemon.rb +74 -0
- data/ruby/trema/switch-disconnected.c +40 -0
- data/ruby/trema/switch-disconnected.h +38 -0
- data/ruby/trema/switch-manager.rb +121 -0
- data/ruby/trema/switch.rb +37 -0
- data/ruby/trema/table-stats-reply.rb +87 -0
- data/ruby/trema/timers.rb +97 -0
- data/ruby/trema/trema.c +122 -0
- data/ruby/trema/tremashark.rb +39 -0
- data/ruby/trema/util.rb +84 -0
- data/ruby/trema/vendor-request.c +193 -0
- data/ruby/trema/vendor-request.h +44 -0
- data/ruby/trema/vendor-stats-reply.rb +62 -0
- data/ruby/trema/vendor.c +152 -0
- data/ruby/trema/vendor.h +52 -0
- data/ruby/trema/version.rb +30 -0
- data/spec/spec_helper.rb +153 -0
- data/spec/support/openflow-message.rb +94 -0
- data/spec/trema/action-enqueue_spec.rb +100 -0
- data/spec/trema/action-output_spec.rb +116 -0
- data/spec/trema/action-set-dl-dst_spec.rb +95 -0
- data/spec/trema/action-set-dl-src_spec.rb +92 -0
- data/spec/trema/action-set-nw-dst_spec.rb +96 -0
- data/spec/trema/action-set-nw-src_spec.rb +97 -0
- data/spec/trema/action-set-nw-tos_spec.rb +88 -0
- data/spec/trema/action-set-tp-dst_spec.rb +88 -0
- data/spec/trema/action-set-tp-src_spec.rb +88 -0
- data/spec/trema/action-set-vlan-pcp_spec.rb +91 -0
- data/spec/trema/action-set-vlan-vid_spec.rb +91 -0
- data/spec/trema/action-strip-vlan_spec.rb +57 -0
- data/spec/trema/action-vendor_spec.rb +90 -0
- data/spec/trema/app_spec.rb +90 -0
- data/spec/trema/barrier-reply_spec.rb +45 -0
- data/spec/trema/barrier-request_spec.rb +83 -0
- data/spec/trema/cli_spec.rb +160 -0
- data/spec/trema/controller_spec.rb +100 -0
- data/spec/trema/dsl/configuration_spec.rb +122 -0
- data/spec/trema/dsl/link_spec.rb +54 -0
- data/spec/trema/dsl/run_spec.rb +78 -0
- data/spec/trema/dsl/runner_spec.rb +239 -0
- data/spec/trema/dsl/switch_spec.rb +77 -0
- data/spec/trema/dsl/syntax_spec.rb +121 -0
- data/spec/trema/dsl/vhost_spec.rb +148 -0
- data/spec/trema/dsl/vswitch_spec.rb +90 -0
- data/spec/trema/echo-reply_spec.rb +49 -0
- data/spec/trema/echo-request_spec.rb +75 -0
- data/spec/trema/error_spec.rb +142 -0
- data/spec/trema/executables_spec.rb +75 -0
- data/spec/trema/features-reply_spec.rb +57 -0
- data/spec/trema/features-request_spec.rb +66 -0
- data/spec/trema/flow-removed_spec.rb +146 -0
- data/spec/trema/get-config-reply_spec.rb +43 -0
- data/spec/trema/get-config-request_spec.rb +82 -0
- data/spec/trema/hello_spec.rb +49 -0
- data/spec/trema/host_spec.rb +193 -0
- data/spec/trema/link_spec.rb +64 -0
- data/spec/trema/list-switches-reply_spec.rb +48 -0
- data/spec/trema/logger_spec.rb +48 -0
- data/spec/trema/mac_spec.rb +115 -0
- data/spec/trema/match_spec.rb +113 -0
- data/spec/trema/open-vswitch_spec.rb +123 -0
- data/spec/trema/openflow-error_spec.rb +141 -0
- data/spec/trema/openflow-switch_spec.rb +56 -0
- data/spec/trema/packet-in_spec.rb +168 -0
- data/spec/trema/packet-out_spec.rb +128 -0
- data/spec/trema/packetin-filter_spec.rb +41 -0
- data/spec/trema/port-mod_spec.rb +101 -0
- data/spec/trema/port-status_spec.rb +108 -0
- data/spec/trema/port_spec.rb +61 -0
- data/spec/trema/process_spec.rb +71 -0
- data/spec/trema/queue-get-config-reply_spec.rb +66 -0
- data/spec/trema/queue-get-config-request_spec.rb +69 -0
- data/spec/trema/set-config_spec.rb +80 -0
- data/spec/trema/shell/vhost_spec.rb +57 -0
- data/spec/trema/shell/vswitch_spec.rb +89 -0
- data/spec/trema/stats-reply_spec.rb +306 -0
- data/spec/trema/stats-request_spec.rb +151 -0
- data/spec/trema/switch-disconnected_spec.rb +58 -0
- data/spec/trema/switch-manager_spec.rb +43 -0
- data/spec/trema/tremashark_spec.rb +41 -0
- data/spec/trema/util_spec.rb +93 -0
- data/spec/trema/vendor-request_spec.rb +79 -0
- data/src/examples/cbench_switch/README +21 -0
- data/src/examples/cbench_switch/cbench-switch.rb +39 -0
- data/src/examples/cbench_switch/cbench_switch.c +68 -0
- data/src/examples/dumper/dumper.c +370 -0
- data/src/examples/dumper/dumper.conf +7 -0
- data/src/examples/dumper/dumper.rb +196 -0
- data/src/examples/hello_trema/README +13 -0
- data/src/examples/hello_trema/hello_trema.c +51 -0
- data/src/examples/hello_trema/hello_trema.conf +3 -0
- data/src/examples/hello_trema/hello_trema.rb +35 -0
- data/src/examples/learning_switch/README +15 -0
- data/src/examples/learning_switch/fdb.rb +112 -0
- data/src/examples/learning_switch/learning-switch.rb +88 -0
- data/src/examples/learning_switch/learning_switch.c +236 -0
- data/src/examples/learning_switch/learning_switch.conf +18 -0
- data/src/examples/list_switches/README +19 -0
- data/src/examples/list_switches/list-switches.rb +45 -0
- data/src/examples/list_switches/list_switches.c +81 -0
- data/src/examples/list_switches/list_switches.conf +15 -0
- data/src/examples/match_compare/match-compare.conf +30 -0
- data/src/examples/match_compare/match-compare.rb +99 -0
- data/src/examples/multi_learning_switch/README +14 -0
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +96 -0
- data/src/examples/multi_learning_switch/multi_learning_switch.c +296 -0
- data/src/examples/multi_learning_switch/multi_learning_switch.conf +17 -0
- data/src/examples/openflow_message/README +11 -0
- data/src/examples/openflow_message/echo-reply.rb +59 -0
- data/src/examples/openflow_message/echo-request.rb +58 -0
- data/src/examples/openflow_message/echo_reply.c +70 -0
- data/src/examples/openflow_message/echo_request.c +70 -0
- data/src/examples/openflow_message/example.rb +63 -0
- data/src/examples/openflow_message/features-request.rb +97 -0
- data/src/examples/openflow_message/features_request.c +168 -0
- data/src/examples/openflow_message/hello.c +70 -0
- data/src/examples/openflow_message/hello.rb +58 -0
- data/src/examples/openflow_message/set-config.rb +59 -0
- data/src/examples/openflow_message/set_config.c +70 -0
- data/src/examples/packet_in/README +15 -0
- data/src/examples/packet_in/packet_in.c +55 -0
- data/src/examples/packet_in/packet_in.conf +15 -0
- data/src/examples/packet_in/packet_in.rb +34 -0
- data/src/examples/packetin_filter_config/README +12 -0
- data/src/examples/packetin_filter_config/add_filter.c +73 -0
- data/src/examples/packetin_filter_config/delete_filter.c +65 -0
- data/src/examples/packetin_filter_config/delete_filter_strict.c +75 -0
- data/src/examples/packetin_filter_config/dump_filter.c +65 -0
- data/src/examples/packetin_filter_config/dump_filter_strict.c +75 -0
- data/src/examples/packetin_filter_config/packetin_filter_config.c +134 -0
- data/src/examples/packetin_filter_config/packetin_filter_config.conf +7 -0
- data/src/examples/packetin_filter_config/utils.c +102 -0
- data/src/examples/packetin_filter_config/utils.h +42 -0
- data/src/examples/repeater_hub/README +8 -0
- data/src/examples/repeater_hub/repeater-hub.rb +43 -0
- data/src/examples/repeater_hub/repeater-hub_spec.rb +156 -0
- data/src/examples/repeater_hub/repeater_hub.c +83 -0
- data/src/examples/repeater_hub/repeater_hub.conf +28 -0
- data/src/examples/switch_info/README +13 -0
- data/src/examples/switch_info/switch_info.c +80 -0
- data/src/examples/switch_info/switch_info.conf +3 -0
- data/src/examples/switch_info/switch_info.rb +46 -0
- data/src/examples/switch_monitor/switch-monitor.conf +3 -0
- data/src/examples/switch_monitor/switch-monitor.rb +58 -0
- data/src/examples/switch_monitor/switch_monitor.c +154 -0
- data/src/examples/traffic_monitor/counter.c +74 -0
- data/src/examples/traffic_monitor/counter.h +48 -0
- data/src/examples/traffic_monitor/counter.rb +46 -0
- data/src/examples/traffic_monitor/fdb.c +76 -0
- data/src/examples/traffic_monitor/fdb.h +50 -0
- data/src/examples/traffic_monitor/fdb.rb +44 -0
- data/src/examples/traffic_monitor/traffic-monitor.rb +100 -0
- data/src/examples/traffic_monitor/traffic_monitor.c +163 -0
- data/src/examples/traffic_monitor/traffic_monitor.conf +16 -0
- data/src/lib/arp.h +61 -0
- data/src/lib/bool.h +49 -0
- data/src/lib/buffer.c +305 -0
- data/src/lib/buffer.h +56 -0
- data/src/lib/byteorder.c +547 -0
- data/src/lib/byteorder.h +110 -0
- data/src/lib/checks.h +42 -0
- data/src/lib/daemon.c +302 -0
- data/src/lib/daemon.h +42 -0
- data/src/lib/doubly_linked_list.c +281 -0
- data/src/lib/doubly_linked_list.h +88 -0
- data/src/lib/ether.c +48 -0
- data/src/lib/ether.h +94 -0
- data/src/lib/etherip.h +46 -0
- data/src/lib/event_handler.c +389 -0
- data/src/lib/event_handler.h +64 -0
- data/src/lib/hash_table.c +417 -0
- data/src/lib/hash_table.h +138 -0
- data/src/lib/icmp.h +74 -0
- data/src/lib/igmp.h +50 -0
- data/src/lib/ipv4.h +50 -0
- data/src/lib/linked_list.c +199 -0
- data/src/lib/linked_list.h +84 -0
- data/src/lib/log.c +402 -0
- data/src/lib/log.h +78 -0
- data/src/lib/match.h +84 -0
- data/src/lib/match_table.c +608 -0
- data/src/lib/match_table.h +51 -0
- data/src/lib/message_queue.c +143 -0
- data/src/lib/message_queue.h +61 -0
- data/src/lib/messenger.c +1714 -0
- data/src/lib/messenger.h +145 -0
- data/src/lib/openflow_application_interface.c +1673 -0
- data/src/lib/openflow_application_interface.h +329 -0
- data/src/lib/openflow_message.c +4051 -0
- data/src/lib/openflow_message.h +288 -0
- data/src/lib/openflow_service_interface.h +59 -0
- data/src/lib/packet_info.c +230 -0
- data/src/lib/packet_info.h +209 -0
- data/src/lib/packet_parser.c +502 -0
- data/src/lib/packetin_filter_interface.c +294 -0
- data/src/lib/packetin_filter_interface.h +127 -0
- data/src/lib/persistent_storage.c +480 -0
- data/src/lib/persistent_storage.h +46 -0
- data/src/lib/stat.c +213 -0
- data/src/lib/stat.h +44 -0
- data/src/lib/tcp.h +67 -0
- data/src/lib/timer.c +350 -0
- data/src/lib/timer.h +53 -0
- data/src/lib/trema.c +710 -0
- data/src/lib/trema.h +79 -0
- data/src/lib/trema_private.c +177 -0
- data/src/lib/trema_private.h +60 -0
- data/src/lib/trema_wrapper.c +56 -0
- data/src/lib/trema_wrapper.h +64 -0
- data/src/lib/udp.h +43 -0
- data/src/lib/utility.c +515 -0
- data/src/lib/utility.h +67 -0
- data/src/lib/wrapper.c +100 -0
- data/src/lib/wrapper.h +76 -0
- data/src/packetin_filter/README +17 -0
- data/src/packetin_filter/packetin_filter.c +575 -0
- data/src/switch_manager/README +20 -0
- data/src/switch_manager/cookie_table.c +292 -0
- data/src/switch_manager/cookie_table.h +72 -0
- data/src/switch_manager/dpid_table.c +110 -0
- data/src/switch_manager/dpid_table.h +46 -0
- data/src/switch_manager/management_interface.h +44 -0
- data/src/switch_manager/ofpmsg_recv.c +482 -0
- data/src/switch_manager/ofpmsg_recv.h +42 -0
- data/src/switch_manager/ofpmsg_send.c +235 -0
- data/src/switch_manager/ofpmsg_send.h +50 -0
- data/src/switch_manager/secure_channel_listener.c +281 -0
- data/src/switch_manager/secure_channel_listener.h +42 -0
- data/src/switch_manager/secure_channel_receiver.c +126 -0
- data/src/switch_manager/secure_channel_receiver.h +43 -0
- data/src/switch_manager/secure_channel_sender.c +126 -0
- data/src/switch_manager/secure_channel_sender.h +43 -0
- data/src/switch_manager/service_interface.c +181 -0
- data/src/switch_manager/service_interface.h +46 -0
- data/src/switch_manager/switch.c +538 -0
- data/src/switch_manager/switch.h +51 -0
- data/src/switch_manager/switch_manager.c +448 -0
- data/src/switch_manager/switch_manager.h +63 -0
- data/src/switch_manager/switchinfo.h +72 -0
- data/src/switch_manager/xid_table.c +184 -0
- data/src/switch_manager/xid_table.h +56 -0
- data/src/tremashark/README +78 -0
- data/src/tremashark/packet_capture.c +357 -0
- data/src/tremashark/pcap_private.h +47 -0
- data/src/tremashark/pcap_queue.c +197 -0
- data/src/tremashark/pcap_queue.h +58 -0
- data/src/tremashark/plugin/.gitignore +6 -0
- data/src/tremashark/plugin/packet-trema/.gitignore +5 -0
- data/src/tremashark/plugin/packet-trema/Makefile +77 -0
- data/src/tremashark/plugin/packet-trema/Makefile.am +110 -0
- data/src/tremashark/plugin/packet-trema/Makefile.common +31 -0
- data/src/tremashark/plugin/packet-trema/moduleinfo.h +41 -0
- data/src/tremashark/plugin/packet-trema/packet-trema.c +1659 -0
- data/src/tremashark/plugin/packet-trema/plugin.c +31 -0
- data/src/tremashark/plugin/user_dlts +2 -0
- data/src/tremashark/queue.c +168 -0
- data/src/tremashark/queue.h +60 -0
- data/src/tremashark/stdin_relay.c +257 -0
- data/src/tremashark/syslog_relay.c +247 -0
- data/src/tremashark/tremashark.c +556 -0
- data/trema +93 -0
- data/trema-config +61 -0
- data/unittests/buffer_stubs.c +74 -0
- data/unittests/cmockery_trema.c +123 -0
- data/unittests/cmockery_trema.h +96 -0
- data/unittests/lib/buffer_test.c +370 -0
- data/unittests/lib/byteorder_test.c +1717 -0
- data/unittests/lib/daemon_test.c +664 -0
- data/unittests/lib/doubly_linked_list_test.c +346 -0
- data/unittests/lib/ether_test.c +127 -0
- data/unittests/lib/hash_table_test.c +278 -0
- data/unittests/lib/linked_list_test.c +343 -0
- data/unittests/lib/log_test.c +459 -0
- data/unittests/lib/match_table_test.c +1509 -0
- data/unittests/lib/message_queue_test.c +379 -0
- data/unittests/lib/messenger_test.c +438 -0
- data/unittests/lib/openflow_application_interface_test.c +3488 -0
- data/unittests/lib/openflow_message_test.c +7337 -0
- data/unittests/lib/packet_info_test.c +544 -0
- data/unittests/lib/packet_parser_test.c +703 -0
- data/unittests/lib/packetin_filter_interface_test.c +723 -0
- data/unittests/lib/persistent_storage_test.c +802 -0
- data/unittests/lib/stat_test.c +291 -0
- data/unittests/lib/test_packets/arp_rep.cap +0 -0
- data/unittests/lib/test_packets/arp_req.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp_echo_req.cap +0 -0
- data/unittests/lib/test_packets/igmp_query_v2.cap +0 -0
- data/unittests/lib/test_packets/ipx.cap +0 -0
- data/unittests/lib/test_packets/lldp.cap +0 -0
- data/unittests/lib/test_packets/lldp_over_ip.cap +0 -0
- data/unittests/lib/test_packets/tcp.cap +0 -0
- data/unittests/lib/test_packets/tcp_syn.cap +0 -0
- data/unittests/lib/test_packets/udp.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_head.cap +0 -0
- data/unittests/lib/test_packets/udp_frag_next.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/vtag_icmp_echo_req.cap +0 -0
- data/unittests/lib/timer_test.c +248 -0
- data/unittests/lib/trema_private_test.c +323 -0
- data/unittests/lib/trema_test.c +985 -0
- data/unittests/lib/utility_test.c +628 -0
- data/unittests/lib/wrapper_test.c +201 -0
- data/unittests/packetin_filter/packetin_filter_test.c +477 -0
- data/unittests/switch_manager/switch_manager_test.c +1178 -0
- data/unittests/wrapper_stubs.c +39 -0
- data/vendor/.gitignore +6 -0
- data/vendor/README +30 -0
- data/vendor/cmockery-20110428.tar.gz +0 -0
- data/vendor/oflops-0.03.tar.gz +0 -0
- data/vendor/oflops_no_snmp+1.0.0.patch +340 -0
- data/vendor/openflow-1.0.0.tar.gz +0 -0
- data/vendor/openflow.git.tar.gz +0 -0
- data/vendor/openvswitch-1.2.2.tar.gz +0 -0
- data/vendor/ruby-ifconfig-1.2/COPYING +340 -0
- data/vendor/ruby-ifconfig-1.2/Changelog +16 -0
- data/vendor/ruby-ifconfig-1.2/INSTALL +239 -0
- data/vendor/ruby-ifconfig-1.2/README +38 -0
- data/vendor/ruby-ifconfig-1.2/Rakefile +14 -0
- data/vendor/ruby-ifconfig-1.2/TODO +8 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/darwin.txt +17 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/dragonflybsd_netstat.txt +14 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd.txt +17 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/freebsd_netstat.txt +24 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux.txt +60 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/linux_ethernet.txt +20 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/netbsd.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/openbsd.txt +36 -0
- data/vendor/ruby-ifconfig-1.2/ifconfig_examples/sunos.txt +10 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig.rb +71 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/ifconfig.rb +72 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/interface_types.rb +69 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/bsd/network_types.rb +3 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/ifconfig.rb +84 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/interface_types.rb +130 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/common/network_types.rb +49 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/ifconfig.rb +43 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/interface_types.rb +112 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/linux/network_types.rb +55 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/ifconfig.rb +38 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/interface_types.rb +77 -0
- data/vendor/ruby-ifconfig-1.2/lib/ifconfig/sunos/network_types.rb +4 -0
- data/vendor/ruby-ifconfig-1.2/setup.rb +1306 -0
- data/vendor/ruby-ifconfig-1.2/test/test_bsd.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/test_darwin.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_dragonflybsd.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/test_helper.rb +4 -0
- data/vendor/ruby-ifconfig-1.2/test/test_linux.rb +31 -0
- data/vendor/ruby-ifconfig-1.2/test/test_netbsd.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_openbsd.rb +33 -0
- data/vendor/ruby-ifconfig-1.2/test/test_sunos.rb +35 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_darwin.rb +40 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_dragonflybsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_freebsd.rb +40 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_linux.rb +49 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_netbsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_openbsd.rb +39 -0
- data/vendor/ruby-ifconfig-1.2/test/unit/tc_sunos.rb +44 -0
- metadata +856 -0
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
/**
|
|
22
|
+
* @file
|
|
23
|
+
*
|
|
24
|
+
* @brief Linked lists containing pointers to data, limited to
|
|
25
|
+
* iterating over the list in one direction.
|
|
26
|
+
*
|
|
27
|
+
* Each element in the list contains a piece of data, together with a
|
|
28
|
+
* pointer which links to the next element in the list. Using this
|
|
29
|
+
* pointer it is possible to move through the list in one direction
|
|
30
|
+
* only (unlike the Doubly-Linked Lists which allow movement in both
|
|
31
|
+
* directions).
|
|
32
|
+
*
|
|
33
|
+
* @code
|
|
34
|
+
* // Create a linked list ("alpha" => "bravo" => "charlie")
|
|
35
|
+
* list_element *list;
|
|
36
|
+
* create_list( &list );
|
|
37
|
+
* append_to_tail( &list, "alpha" );
|
|
38
|
+
* append_to_tail( &list, "bravo" );
|
|
39
|
+
* append_to_tail( &list, "charlie" );
|
|
40
|
+
*
|
|
41
|
+
* // Delete element "bravo" from the list
|
|
42
|
+
* delete_element( &list, "bravo" ); // => true
|
|
43
|
+
*
|
|
44
|
+
* // Delete entire list
|
|
45
|
+
* delete_list( list );
|
|
46
|
+
* @endcode
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
#ifndef LINKED_LIST_H
|
|
51
|
+
#define LINKED_LIST_H
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
#include "bool.h"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The list_element struct is used for each element in the linked
|
|
59
|
+
* list.
|
|
60
|
+
*/
|
|
61
|
+
typedef struct list_element {
|
|
62
|
+
struct list_element *next; /**< Contains the link to the next element in the list. */
|
|
63
|
+
void *data; /**< Holds the element's data, which can be a pointer to any kind of data. */
|
|
64
|
+
} list_element;
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
bool create_list( list_element **list );
|
|
68
|
+
bool insert_in_front( list_element **head, void *data );
|
|
69
|
+
bool insert_before( list_element **head, const void *sibling, void *data );
|
|
70
|
+
bool append_to_tail( list_element **head, void *data );
|
|
71
|
+
unsigned int list_length_of( const list_element *head );
|
|
72
|
+
bool delete_element( list_element **head, const void *data );
|
|
73
|
+
bool delete_list( list_element *head );
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
#endif // LINKED_LIST_H
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/*
|
|
80
|
+
* Local variables:
|
|
81
|
+
* c-basic-offset: 2
|
|
82
|
+
* indent-tabs-mode: nil
|
|
83
|
+
* End:
|
|
84
|
+
*/
|
data/src/lib/log.c
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
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 <ctype.h>
|
|
23
|
+
#include <linux/limits.h>
|
|
24
|
+
#include <pthread.h>
|
|
25
|
+
#include <stdarg.h>
|
|
26
|
+
#include <stdlib.h>
|
|
27
|
+
#include <string.h>
|
|
28
|
+
#include <time.h>
|
|
29
|
+
#include "bool.h"
|
|
30
|
+
#include "log.h"
|
|
31
|
+
#include "trema_wrapper.h"
|
|
32
|
+
#include "wrapper.h"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
typedef struct {
|
|
36
|
+
const char *name;
|
|
37
|
+
const logging_level value;
|
|
38
|
+
} priority;
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
static FILE *fd = NULL;
|
|
42
|
+
static logging_level level = -1;
|
|
43
|
+
static bool daemonized = false;
|
|
44
|
+
static pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
static priority priorities[][ 3 ] = {
|
|
48
|
+
{
|
|
49
|
+
{ .name = "critical", .value = LOG_CRITICAL },
|
|
50
|
+
{ .name = "crit", .value = LOG_CRITICAL },
|
|
51
|
+
{ .name = NULL },
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
{
|
|
55
|
+
{ .name = "error", .value = LOG_ERROR },
|
|
56
|
+
{ .name = "err", .value = LOG_ERROR },
|
|
57
|
+
{ .name = NULL },
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
{
|
|
61
|
+
{ .name = "warn", .value = LOG_WARN },
|
|
62
|
+
{ .name = "warning", .value = LOG_WARN },
|
|
63
|
+
{ .name = NULL },
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
{
|
|
67
|
+
{ .name = "notice", .value = LOG_NOTICE },
|
|
68
|
+
{ .name = NULL },
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
{
|
|
72
|
+
{ .name = "info", .value = LOG_INFO },
|
|
73
|
+
{ .name = "information", .value = LOG_INFO },
|
|
74
|
+
{ .name = NULL },
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
{
|
|
78
|
+
{ .name = "debug", .value = LOG_DEBUG },
|
|
79
|
+
{ .name = "dbg", .value = LOG_DEBUG },
|
|
80
|
+
{ .name = NULL },
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
static const char *
|
|
86
|
+
priority_name_from( logging_level level ) {
|
|
87
|
+
const char *name = priorities[ level ][ 0 ].name;
|
|
88
|
+
assert( name != NULL );
|
|
89
|
+
return name;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
static const size_t max_message_length = 1024;
|
|
94
|
+
|
|
95
|
+
static void
|
|
96
|
+
log_file( logging_level priority, const char *format, va_list ap ) {
|
|
97
|
+
time_t tm = time( NULL );
|
|
98
|
+
char now[ 26 ];
|
|
99
|
+
asctime_r( localtime( &tm ), now );
|
|
100
|
+
now[ 24 ] = '\0'; // chomp
|
|
101
|
+
|
|
102
|
+
const char *priority_name = priority_name_from( priority );
|
|
103
|
+
|
|
104
|
+
char message[ max_message_length ];
|
|
105
|
+
va_list new_ap;
|
|
106
|
+
va_copy( new_ap, ap );
|
|
107
|
+
vsnprintf( message, max_message_length, format, new_ap );
|
|
108
|
+
|
|
109
|
+
trema_fprintf( fd, "%s [%s] %s\n", now, priority_name, message );
|
|
110
|
+
fflush( fd );
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
static void
|
|
115
|
+
log_stdout( const char *format, va_list ap ) {
|
|
116
|
+
char format_newline[ strlen( format ) + 2 ];
|
|
117
|
+
sprintf( format_newline, "%s\n", format );
|
|
118
|
+
va_list new_ap;
|
|
119
|
+
va_copy( new_ap, ap );
|
|
120
|
+
trema_vprintf( format_newline, new_ap );
|
|
121
|
+
fflush( stdout );
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
static FILE*
|
|
126
|
+
open_log( const char *ident, const char *log_directory, bool append ) {
|
|
127
|
+
assert( ident != NULL );
|
|
128
|
+
assert( log_directory != NULL );
|
|
129
|
+
|
|
130
|
+
char pathname[ PATH_MAX ];
|
|
131
|
+
sprintf( pathname, "%s/%s.log", log_directory, ident );
|
|
132
|
+
FILE *log = fopen( pathname, append ? "a" : "w" );
|
|
133
|
+
|
|
134
|
+
if ( log == NULL ) {
|
|
135
|
+
char error_msg[ PATH_MAX + 32 ];
|
|
136
|
+
snprintf( error_msg, PATH_MAX + 32, "open_log: fopen( \"%s\", \"w\" )", pathname );
|
|
137
|
+
perror( error_msg );
|
|
138
|
+
trema_abort();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return log;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Initializes the Logger. This creates a log file to which messages
|
|
147
|
+
* are written.
|
|
148
|
+
*
|
|
149
|
+
* @param ident name of the log file, used as an identifier.
|
|
150
|
+
* @param log_directory the directory in which log file is created.
|
|
151
|
+
* @param run_as_daemon determines if messages should be reported to terminal as well.
|
|
152
|
+
* @return true on success; false otherwise.
|
|
153
|
+
*/
|
|
154
|
+
bool
|
|
155
|
+
init_log( const char *ident, const char *log_directory, bool run_as_daemon ) {
|
|
156
|
+
pthread_mutex_lock( &mutex );
|
|
157
|
+
|
|
158
|
+
level = LOG_INFO;
|
|
159
|
+
char *level_string = getenv( "LOGGING_LEVEL" );
|
|
160
|
+
if ( level_string != NULL ) {
|
|
161
|
+
set_logging_level( level_string );
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
daemonized = run_as_daemon;
|
|
165
|
+
fd = open_log( ident, log_directory, false );
|
|
166
|
+
|
|
167
|
+
pthread_mutex_unlock( &mutex );
|
|
168
|
+
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
void
|
|
174
|
+
restart_log( const char *ident, const char *log_directory ) {
|
|
175
|
+
pthread_mutex_lock( &mutex );
|
|
176
|
+
|
|
177
|
+
if ( fd != NULL ) {
|
|
178
|
+
fclose( fd );
|
|
179
|
+
}
|
|
180
|
+
fd = open_log( ident, log_directory, true );
|
|
181
|
+
|
|
182
|
+
pthread_mutex_unlock( &mutex );
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
void
|
|
187
|
+
rename_log( const char *old_ident, const char *new_ident, const char *directory ) {
|
|
188
|
+
assert( directory != NULL );
|
|
189
|
+
assert( old_ident != NULL );
|
|
190
|
+
assert( new_ident != NULL );
|
|
191
|
+
|
|
192
|
+
char old_path[ PATH_MAX ];
|
|
193
|
+
snprintf( old_path, PATH_MAX, "%s/%s.log", directory, old_ident );
|
|
194
|
+
old_path[ PATH_MAX - 1 ] = '\0';
|
|
195
|
+
char new_path[ PATH_MAX ];
|
|
196
|
+
snprintf( new_path, PATH_MAX, "%s/%s.log", directory, new_ident );
|
|
197
|
+
new_path[ PATH_MAX - 1 ] = '\0';
|
|
198
|
+
|
|
199
|
+
unlink( new_path );
|
|
200
|
+
int ret = rename( old_path, new_path );
|
|
201
|
+
if ( ret < 0 ) {
|
|
202
|
+
die( "Could not rename a log file from %s to %s.", old_path, new_path );
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Closes the log file.
|
|
209
|
+
*
|
|
210
|
+
* @return true on success; false otherwise.
|
|
211
|
+
*/
|
|
212
|
+
bool
|
|
213
|
+
finalize_log() {
|
|
214
|
+
pthread_mutex_lock( &mutex );
|
|
215
|
+
|
|
216
|
+
level = -1;
|
|
217
|
+
if ( fd != NULL ) {
|
|
218
|
+
fclose( fd );
|
|
219
|
+
fd = NULL;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
pthread_mutex_unlock( &mutex );
|
|
223
|
+
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
static char *
|
|
229
|
+
lower( const char *string ) {
|
|
230
|
+
char *new_string = xstrdup( string );
|
|
231
|
+
for ( int i = 0; new_string[ i ] != '\0'; ++i ) {
|
|
232
|
+
new_string[ i ] = ( char ) tolower( new_string[ i ] );
|
|
233
|
+
}
|
|
234
|
+
return new_string;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
static int
|
|
239
|
+
priority_value_from( const char *name ) {
|
|
240
|
+
assert( name != NULL );
|
|
241
|
+
|
|
242
|
+
int level_value = -1;
|
|
243
|
+
char *name_lower = lower( name );
|
|
244
|
+
|
|
245
|
+
for ( int i = 0; i <= LOG_DEBUG; i++ ) {
|
|
246
|
+
for ( priority *p = priorities[ i ]; p->name != NULL; p++ ) {
|
|
247
|
+
if ( strncmp( p->name, name_lower, 20 ) == 0 ) {
|
|
248
|
+
level_value = p->value;
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
xfree( name_lower );
|
|
254
|
+
return level_value;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
static bool
|
|
259
|
+
started() {
|
|
260
|
+
if ( fd == NULL ) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Sets a new logging level. This overrides the value which has been
|
|
271
|
+
* previously set.
|
|
272
|
+
*
|
|
273
|
+
* @param name name of the logging level to be set.
|
|
274
|
+
* @return true on success; false otherwise.
|
|
275
|
+
*/
|
|
276
|
+
bool
|
|
277
|
+
set_logging_level( const char *name ) {
|
|
278
|
+
int new_level = priority_value_from( name );
|
|
279
|
+
if ( new_level == -1 ) {
|
|
280
|
+
fprintf( stderr, "Invalid logging level: %s\n", name );
|
|
281
|
+
trema_abort();
|
|
282
|
+
}
|
|
283
|
+
pthread_mutex_lock( &mutex );
|
|
284
|
+
level = new_level;
|
|
285
|
+
pthread_mutex_unlock( &mutex );
|
|
286
|
+
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
static logging_level
|
|
292
|
+
_get_logging_level() {
|
|
293
|
+
return level;
|
|
294
|
+
}
|
|
295
|
+
logging_level ( *get_logging_level )( void ) = _get_logging_level;
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
static void
|
|
299
|
+
do_log( logging_level priority, const char *format, va_list ap ) {
|
|
300
|
+
assert( started() );
|
|
301
|
+
|
|
302
|
+
log_file( priority, format, ap );
|
|
303
|
+
if ( !daemonized ) {
|
|
304
|
+
log_stdout( format, ap );
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
#define DO_LOG( _priority, _format ) \
|
|
310
|
+
do { \
|
|
311
|
+
if ( _format == NULL ) { \
|
|
312
|
+
trema_abort(); \
|
|
313
|
+
} \
|
|
314
|
+
if ( ( int ) get_logging_level() >= _priority ) { \
|
|
315
|
+
pthread_mutex_lock( &mutex ); \
|
|
316
|
+
va_list _args; \
|
|
317
|
+
va_start( _args, _format ); \
|
|
318
|
+
do_log( _priority, _format, _args ); \
|
|
319
|
+
va_end( _args ); \
|
|
320
|
+
pthread_mutex_unlock( &mutex ); \
|
|
321
|
+
} \
|
|
322
|
+
} while ( 0 )
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
static void
|
|
326
|
+
_critical( const char *format, ... ) {
|
|
327
|
+
DO_LOG( LOG_CRITICAL, format );
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Logs an critical message.
|
|
331
|
+
*
|
|
332
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
333
|
+
*/
|
|
334
|
+
void ( *critical )( const char *format, ... ) = _critical;
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
static void
|
|
338
|
+
_error( const char *format, ... ) {
|
|
339
|
+
DO_LOG( LOG_ERROR, format );
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Logs an error message.
|
|
343
|
+
*
|
|
344
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
345
|
+
*/
|
|
346
|
+
void ( *error )( const char *format, ... ) = _error;
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
static void
|
|
350
|
+
_warn( const char *format, ... ) {
|
|
351
|
+
DO_LOG( LOG_WARN, format );
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Logs a warning message.
|
|
355
|
+
*
|
|
356
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
357
|
+
*/
|
|
358
|
+
void ( *warn )( const char *format, ... ) = _warn;
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
static void
|
|
362
|
+
_notice( const char *format, ... ) {
|
|
363
|
+
DO_LOG( LOG_NOTICE, format );
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Logs a notice message.
|
|
367
|
+
*
|
|
368
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
369
|
+
*/
|
|
370
|
+
void ( *notice )( const char *format, ... ) = _notice;
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
static void
|
|
374
|
+
_info( const char *format, ... ) {
|
|
375
|
+
DO_LOG( LOG_INFO, format );
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Logs an info message.
|
|
379
|
+
*
|
|
380
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
381
|
+
*/
|
|
382
|
+
void ( *info )( const char *format, ... ) = _info;
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
static void
|
|
386
|
+
_debug( const char *format, ... ) {
|
|
387
|
+
DO_LOG( LOG_DEBUG, format );
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Logs a debug message.
|
|
391
|
+
*
|
|
392
|
+
* @param format format string, followed by parameters to insert into the format string (as with printf())
|
|
393
|
+
*/
|
|
394
|
+
void ( *debug )( const char *format, ... ) = _debug;
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
/*
|
|
398
|
+
* Local variables:
|
|
399
|
+
* c-basic-offset: 2
|
|
400
|
+
* indent-tabs-mode: nil
|
|
401
|
+
* End:
|
|
402
|
+
*/
|