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,20 @@
|
|
|
1
|
+
eth0 Link encap:Ethernet HWaddr 00:50:DA:C1:C3:45
|
|
2
|
+
inet addr:216.87.223.240 Bcast:216.87.223.255 Mask:255.255.255.0
|
|
3
|
+
inet6 addr: fe80::250:daff:fec1:c345/10 Scope:Link
|
|
4
|
+
inet6 addr: 3ffe:b00:c18:1fff::2bd/0 Scope:Global
|
|
5
|
+
IPX/Ethernet II addr:CA008137:00204808C79B
|
|
6
|
+
IPX/Ethernet SNAP addr:00204808C79B
|
|
7
|
+
IPX/Ethernet 802.2 addr:00204808C79B
|
|
8
|
+
IPX/Ethernet 802.3 addr:00204808C79B
|
|
9
|
+
EtherTalk Phase 2 addr:7349/195
|
|
10
|
+
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
|
11
|
+
RX packets:90170 errors:0 dropped:0 overruns:0 frame:0
|
|
12
|
+
TX packets:2854 errors:0 dropped:0 overruns:0 carrier:0
|
|
13
|
+
collisions:0 txqueuelen:100
|
|
14
|
+
RX bytes:1037052545 (989.0 MiB) TX bytes:32859376 (31.3 MiB)
|
|
15
|
+
Interrupt:10 Base address:0xe400
|
|
16
|
+
|
|
17
|
+
eth0:0 Link encap:Ethernet HWaddr 00:50:DA:C1:C3:45
|
|
18
|
+
inet addr:172.16.0.93 Bcast:172.16.0.255 Mask:255.255.255.0
|
|
19
|
+
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
|
20
|
+
Interrupt:10 Base address:0xe400
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
cs0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
2
|
+
address: 08:00:2b:81:62:ca
|
|
3
|
+
media: Ethernet 10baseT
|
|
4
|
+
status: active
|
|
5
|
+
inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
|
|
6
|
+
inet6 fe80::a00:2bff:fe81:62ca%cs0 prefixlen 64 scopeid 0x1
|
|
7
|
+
lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 33220
|
|
8
|
+
inet 127.0.0.1 netmask 0xff000000
|
|
9
|
+
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
|
|
10
|
+
inet6 ::1 prefixlen 128
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33224
|
|
2
|
+
inet 127.0.0.1 netmask 0xff000000
|
|
3
|
+
inet6 ::1 prefixlen 128
|
|
4
|
+
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
|
|
5
|
+
lo1: flags=8008<LOOPBACK,MULTICAST> mtu 33224
|
|
6
|
+
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
7
|
+
address: 00:01:02:c6:4b:3d
|
|
8
|
+
media: Ethernet autoselect (100baseTX full-duplex)
|
|
9
|
+
status: active
|
|
10
|
+
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
|
|
11
|
+
inet6 fe80::201:2ff:fec6:4b3d%xl0 prefixlen 64 scopeid 0x1
|
|
12
|
+
ep0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
13
|
+
address: 00:20:af:31:99:43
|
|
14
|
+
media: Ethernet 10baseT
|
|
15
|
+
inet6 fe80::220:afff:fe31:9943%ep0 prefixlen 64 scopeid 0x2
|
|
16
|
+
inet 24.6.50.88 netmask 0xfffff800 broadcast 255.255.255.255
|
|
17
|
+
pflog0: flags=41<UP,RUNNING> mtu 33224
|
|
18
|
+
pfsync0: flags=0<> mtu 1896
|
|
19
|
+
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
|
|
20
|
+
sl1: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
|
|
21
|
+
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
|
|
22
|
+
ppp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
|
|
23
|
+
tun0: flags=10<POINTOPOINT> mtu 3000
|
|
24
|
+
tun1: flags=10<POINTOPOINT> mtu 3000
|
|
25
|
+
enc0: flags=0<> mtu 1536
|
|
26
|
+
bridge0: flags=0<> mtu 1500
|
|
27
|
+
bridge1: flags=0<> mtu 1500
|
|
28
|
+
vlan0: flags=0<> mtu 1500
|
|
29
|
+
address: 00:00:00:00:00:00
|
|
30
|
+
vlan1: flags=0<> mtu 1500
|
|
31
|
+
address: 00:00:00:00:00:00
|
|
32
|
+
gre0: flags=9010<POINTOPOINT,LINK0,MULTICAST> mtu 1450
|
|
33
|
+
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
|
|
34
|
+
gif1: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
|
|
35
|
+
gif2: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
|
|
36
|
+
gif3: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
|
|
2
|
+
inet 127.0.0.1 netmask ff000000
|
|
3
|
+
inet6 ::1/128
|
|
4
|
+
bge0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
|
|
5
|
+
inet 10.32.4.138 netmask ffffff00 broadcast 10.32.4.255
|
|
6
|
+
ether 0:3:ba:42:9d:ef
|
|
7
|
+
inet6 fe80::a00:20ff:fe72:9724/10
|
|
8
|
+
le1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
|
|
9
|
+
inet 172.16.254.99 netmask ffff0000 broadcast 172.16.255.255
|
|
10
|
+
ether 8:0:20:1d:71:eb
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# $Revision: 1.1.1.1 $
|
|
2
|
+
# $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:57 hobe Exp $
|
|
3
|
+
|
|
4
|
+
# = Ruby/Ifconfig - ruby interface to the information presented by ifconfig
|
|
5
|
+
#
|
|
6
|
+
# == Prerequisites
|
|
7
|
+
#
|
|
8
|
+
# You must have a working ifconfig binary in your path.
|
|
9
|
+
# The output format of you particular version of ifconfig must be supported.
|
|
10
|
+
# Currently this has only been tested with net-tool 1.6 on Linux
|
|
11
|
+
#
|
|
12
|
+
# == Example
|
|
13
|
+
# require 'ifconfig'
|
|
14
|
+
#
|
|
15
|
+
# cfg = IfconfigWrapper.new.parse # parses the output of ifconfig
|
|
16
|
+
#
|
|
17
|
+
# cfg.interfaces() # returns list of interfaces
|
|
18
|
+
#
|
|
19
|
+
# cfg[eth0].addresses('inet') # returns ipv4 address of eth0
|
|
20
|
+
#
|
|
21
|
+
# cfg.addrresses('inet') # returns list of all ipv4 addresses
|
|
22
|
+
#
|
|
23
|
+
# cfg[eth0].status # returns true if interface is up
|
|
24
|
+
#
|
|
25
|
+
# cfg.each { block } # run a block on each interface object
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# inspired by Net::Ifconfig::Wrapper perl module
|
|
30
|
+
# by Daniel Podolsky, <tpaba@cpan.org>
|
|
31
|
+
#
|
|
32
|
+
# Ruby version by Daniel Hobe <daniel@packetspike.net>
|
|
33
|
+
# Licence:: GPL[http://www.gnu.org/copyleft/gpl.html]
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
require 'ipaddr'
|
|
37
|
+
|
|
38
|
+
class IfconfigWrapper
|
|
39
|
+
NAME = 'Ruby/Ifconfig'
|
|
40
|
+
include Enumerable
|
|
41
|
+
|
|
42
|
+
#
|
|
43
|
+
# Can manually specify the platform (should be output of the 'uname' command)
|
|
44
|
+
# and the ifconfig input
|
|
45
|
+
#
|
|
46
|
+
def initialize(platform=nil,input=nil,netstat=nil)
|
|
47
|
+
platform = self.get_os unless !platform.nil?
|
|
48
|
+
require "ifconfig/"+platform.downcase+"/ifconfig"
|
|
49
|
+
@cfg = Ifconfig.new(input,netstat)
|
|
50
|
+
end
|
|
51
|
+
def parse
|
|
52
|
+
return @cfg
|
|
53
|
+
end
|
|
54
|
+
# Find out what os we are on
|
|
55
|
+
#
|
|
56
|
+
def get_os
|
|
57
|
+
plat = IO.popen('uname'){ |f| f.gets.strip }
|
|
58
|
+
case plat
|
|
59
|
+
when 'Windows'
|
|
60
|
+
return plat
|
|
61
|
+
when 'Linux'
|
|
62
|
+
return plat
|
|
63
|
+
when 'SunOS'
|
|
64
|
+
return plat
|
|
65
|
+
when 'FreeBSD','OpenBSD','NetBSD','DragonFly','Darwin'
|
|
66
|
+
return 'BSD'
|
|
67
|
+
else
|
|
68
|
+
return 'Linux'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
|
2
|
+
#
|
|
3
|
+
require 'ifconfig/common/ifconfig'
|
|
4
|
+
require 'ifconfig/bsd/network_types'
|
|
5
|
+
require 'ifconfig/bsd/interface_types'
|
|
6
|
+
|
|
7
|
+
class Ifconfig
|
|
8
|
+
#
|
|
9
|
+
# ifconfig = user provided ifconifg output
|
|
10
|
+
# netstat = same, but for netstat -in
|
|
11
|
+
#
|
|
12
|
+
@@ifcfg_cmd = "/usr/bin/env ifconfig -a"
|
|
13
|
+
@@netstat_cmd = "/usr/bin/env netstat -in"
|
|
14
|
+
def initialize(ifconfig=nil,netstat=nil,verbose=nil)
|
|
15
|
+
@ifconfig = ifconfig
|
|
16
|
+
@ifconfig ||= IO.popen(@@ifcfg_cmd){ |f| f.readlines.join }
|
|
17
|
+
|
|
18
|
+
@netstat = netstat
|
|
19
|
+
@netstat ||= IO.popen(@@netstat_cmd){ |f| f.readlines.join }
|
|
20
|
+
|
|
21
|
+
@verbose = verbose
|
|
22
|
+
|
|
23
|
+
@ifaces = {}
|
|
24
|
+
split_interfaces(@ifconfig).each do |iface|
|
|
25
|
+
iface_name = get_iface_name(iface)
|
|
26
|
+
case iface
|
|
27
|
+
when /^lo\d\:/im
|
|
28
|
+
@ifaces[iface_name] = LoopbackInterface.new(iface_name,iface)
|
|
29
|
+
parse_activity(iface_name)
|
|
30
|
+
when /\s+media\:\s+Ethernet\s+/im
|
|
31
|
+
@ifaces[iface_name] = EthernetAdapter.new(iface_name,iface)
|
|
32
|
+
parse_activity(iface_name)
|
|
33
|
+
when /\s+supported\smedia\:\s+none\s+autoselect\s+/im
|
|
34
|
+
# This clause is only matched on Darwin. This pattern will only be
|
|
35
|
+
# matched on ethernet devices (won't match on fw0 or any other
|
|
36
|
+
# interface I can see).
|
|
37
|
+
@ifaces[iface_name] = EthernetAdapter.new(iface_name,iface)
|
|
38
|
+
parse_activity(iface_name)
|
|
39
|
+
else
|
|
40
|
+
puts "Unknown Adapter Type: #{iface}" if @verbose
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Parse activity on interface
|
|
46
|
+
#
|
|
47
|
+
# Not doing it in each interface class so we can pass in
|
|
48
|
+
# fake input
|
|
49
|
+
#
|
|
50
|
+
def parse_activity(iface)
|
|
51
|
+
mtu = rxpackets = rxerrors = txpackets = txerrors = 0
|
|
52
|
+
@netstat.split("\n").each { |line|
|
|
53
|
+
line.strip!
|
|
54
|
+
if line =~ /^#{iface}/
|
|
55
|
+
next if line.split[2] =~ /\<Link\#\d\>/
|
|
56
|
+
puts "matched line for "+iface
|
|
57
|
+
toks = line.split
|
|
58
|
+
mtu = toks[1]
|
|
59
|
+
rxpackets += toks[4].to_i
|
|
60
|
+
rxerrors += toks[5].to_i
|
|
61
|
+
txpackets += toks[6].to_i
|
|
62
|
+
txerrors += toks[7].to_i
|
|
63
|
+
@ifaces[iface].mtu = mtu.to_i
|
|
64
|
+
@ifaces[iface].rx = { 'packets' => rxpackets,
|
|
65
|
+
'errors' => rxerrors }
|
|
66
|
+
@ifaces[iface].tx = { 'packets' => txpackets,
|
|
67
|
+
'errors' => txerrors }
|
|
68
|
+
end
|
|
69
|
+
}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
|
2
|
+
#
|
|
3
|
+
require 'ifconfig/common/interface_types'
|
|
4
|
+
|
|
5
|
+
class NetworkAdapter
|
|
6
|
+
# becuase on *BSD we get activity from netstat
|
|
7
|
+
# we need to have a way to set this:
|
|
8
|
+
attr_writer :mtu
|
|
9
|
+
|
|
10
|
+
# iterate line by line and dispatch to helper functions
|
|
11
|
+
# for lines that match a pattern
|
|
12
|
+
#
|
|
13
|
+
def parse_ifconfig
|
|
14
|
+
@ifconfig.split("\n").each { |line|
|
|
15
|
+
case line
|
|
16
|
+
when /^\s+#{@protos}/
|
|
17
|
+
add_network(line)
|
|
18
|
+
when /flags\=/i
|
|
19
|
+
parse_flags(line)
|
|
20
|
+
end
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# parses the "UP LOOPBACK RUNNING MTU:3924 Metric:1" line
|
|
25
|
+
#
|
|
26
|
+
def parse_flags(line)
|
|
27
|
+
flags = line.match(/\<(\S+)\>/i)[1]
|
|
28
|
+
@flags = flags.strip.split(',')
|
|
29
|
+
@status = true if @flags.include?('UP')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Parses networks on an interface based on the first token in the line.
|
|
33
|
+
# eg: inet or inet6
|
|
34
|
+
#
|
|
35
|
+
def add_network(line)
|
|
36
|
+
case line
|
|
37
|
+
when /^\s+inet\s/
|
|
38
|
+
addr,mask = line.match(/\s+([\d\d?\d?\.]{4,})\s+netmask\s+(\S+)/i)[1..2]
|
|
39
|
+
bcast = line.match(/\s+broadcast\s([\d\d?\d?\.]{4,})/i)
|
|
40
|
+
bcast = bcast[1] unless bcast.nil?
|
|
41
|
+
@networks['inet'] = Ipv4Network.new(addr, mask, bcast)
|
|
42
|
+
when /^\s+inet6\s/
|
|
43
|
+
# there can be multiple inet6 entries
|
|
44
|
+
begin
|
|
45
|
+
addr,scope = line.match(/inet6\s+(\S+)%/i)[1]
|
|
46
|
+
rescue NoMethodError
|
|
47
|
+
addr,scope = line.match(/inet6\s+(\S+)/i)[1]
|
|
48
|
+
end
|
|
49
|
+
@networks["inet6:#{addr}"] = Ipv6Network.new(addr)
|
|
50
|
+
else
|
|
51
|
+
puts "unknown network type: #{line}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class EthernetAdapter
|
|
58
|
+
def set_mac
|
|
59
|
+
begin
|
|
60
|
+
match=@ifconfig.match(/\s+ether\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
|
|
61
|
+
return match[1] unless match.nil?
|
|
62
|
+
# Openbsd
|
|
63
|
+
match = @ifconfig.match(/\s+address\:\s+([a-f\d]{1,2}(?:\:[a-f\d]{1,2}){5})/im)
|
|
64
|
+
return match[1] unless match.nil?
|
|
65
|
+
rescue NoMethodError
|
|
66
|
+
puts "Couldn't Parse MAC Address for: "+@name
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# $Id: ifconfig.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
|
2
|
+
#
|
|
3
|
+
class Ifconfig
|
|
4
|
+
include Enumerable
|
|
5
|
+
|
|
6
|
+
#
|
|
7
|
+
# Give hash like access to the interfaces
|
|
8
|
+
#
|
|
9
|
+
def [](iface)
|
|
10
|
+
return @ifaces[iface]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def each( &block )
|
|
14
|
+
return @ifaces.each_value( &block )
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# return list of interface names
|
|
18
|
+
#
|
|
19
|
+
def interfaces
|
|
20
|
+
return @ifaces.keys
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# returns array of interface text blocks
|
|
24
|
+
#
|
|
25
|
+
def split_interfaces(text)
|
|
26
|
+
ifaces = []
|
|
27
|
+
text.split("\n").each { |line|
|
|
28
|
+
ifaces[ifaces.length] = "" if line =~ /^\S/
|
|
29
|
+
ifaces[ifaces.length-1] += line.rstrip+"\n"
|
|
30
|
+
}
|
|
31
|
+
return ifaces
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Given an interface block
|
|
35
|
+
# returns the name of an interface (eth0, eth0:1 ppp0, etc.)
|
|
36
|
+
#
|
|
37
|
+
def get_iface_name(text)
|
|
38
|
+
name = Regexp.compile(/^(\S+)/).match(text)[1]
|
|
39
|
+
# strip trailing :, for bsd, sun
|
|
40
|
+
name.sub!(/:$/,'')
|
|
41
|
+
return name
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def to_s
|
|
45
|
+
s=""
|
|
46
|
+
self.interfaces.sort.each { |k|
|
|
47
|
+
s += @ifaces[k].to_s
|
|
48
|
+
s += "\n-------------------------\n"
|
|
49
|
+
}
|
|
50
|
+
return s
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# return list of all addresses on all interfaces reported by ifconfig
|
|
54
|
+
#
|
|
55
|
+
def addresses(type=nil)
|
|
56
|
+
addr = []
|
|
57
|
+
@ifaces.each_value { |iface|
|
|
58
|
+
addr += iface.addresses
|
|
59
|
+
}
|
|
60
|
+
return addr
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# returns array of arrays
|
|
64
|
+
# [ [address , type ] ]
|
|
65
|
+
#
|
|
66
|
+
def addrs_with_type
|
|
67
|
+
addr = []
|
|
68
|
+
@ifaces.each_value { |iface|
|
|
69
|
+
addr += iface.addrs_with_type
|
|
70
|
+
}
|
|
71
|
+
return addr
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def valid_addr?(addr,type='inet')
|
|
75
|
+
case type
|
|
76
|
+
when /(inet|v4)/
|
|
77
|
+
return addr.ipv4?
|
|
78
|
+
when /(inet6|v6)/
|
|
79
|
+
return addr.ipv6?
|
|
80
|
+
else
|
|
81
|
+
raise "Unknown address type `#{type}' for address `#{addr}'"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# $Id: interface_types.rb,v 1.1.1.1 2005/07/02 19:10:58 hobe Exp $
|
|
2
|
+
#
|
|
3
|
+
class NetworkAdapter
|
|
4
|
+
def initialize(name, ifacetxt)
|
|
5
|
+
@name = name
|
|
6
|
+
@ifconfig = ifacetxt
|
|
7
|
+
@status = false
|
|
8
|
+
@protos = ['inet','inet6','IPX/Ethernet II',
|
|
9
|
+
'IPX/Ethernet SNAP',
|
|
10
|
+
'IPX/Ethernet 802.2',
|
|
11
|
+
'IPX/Ethernet 802.3',
|
|
12
|
+
'EtherTalk Phase 2'].join("|")
|
|
13
|
+
@networks = {}
|
|
14
|
+
@flags = []
|
|
15
|
+
@mtu = nil
|
|
16
|
+
@metric = nil
|
|
17
|
+
@rx = @tx = {}
|
|
18
|
+
parse_ifconfig
|
|
19
|
+
end
|
|
20
|
+
attr_reader :status, :name, :flags, :mtu, :networks
|
|
21
|
+
attr_accessor :tx, :rx
|
|
22
|
+
|
|
23
|
+
# take array and turn each two entries into
|
|
24
|
+
# hash key and value, also converts each value to an integer
|
|
25
|
+
#
|
|
26
|
+
# [1,2,3,4] => { 1 => 2, 3 => 4}
|
|
27
|
+
#
|
|
28
|
+
# Internal utility function used to populate rx and tx hashes
|
|
29
|
+
def array_to_hash_elem(array)
|
|
30
|
+
h = {}
|
|
31
|
+
if array.length.modulo(2) != 0
|
|
32
|
+
puts "Array mus have even number of elements to turn into a hash"
|
|
33
|
+
return nil
|
|
34
|
+
end
|
|
35
|
+
while array.length > 0
|
|
36
|
+
h[array.shift] = array.shift.to_i
|
|
37
|
+
end
|
|
38
|
+
return h
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Return all addresses bound to this interface or
|
|
42
|
+
# optionally only the specified type of network address
|
|
43
|
+
#
|
|
44
|
+
def addresses(type=nil)
|
|
45
|
+
a = []
|
|
46
|
+
@networks.each_value { |network|
|
|
47
|
+
a << (network.addr) if network.nettype == type or type.nil?
|
|
48
|
+
}
|
|
49
|
+
return a
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def ifacetype
|
|
53
|
+
return self.class
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def up?
|
|
57
|
+
return status
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# returns array of arrays
|
|
61
|
+
# [ [address , type ] ]
|
|
62
|
+
#
|
|
63
|
+
def addrs_with_type
|
|
64
|
+
addrs = []
|
|
65
|
+
@networks.each_value { |network|
|
|
66
|
+
addrs.push([network.addr,network.nettype])
|
|
67
|
+
}
|
|
68
|
+
return addrs
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def addr_types
|
|
72
|
+
types = []
|
|
73
|
+
@networks.each_value { |network|
|
|
74
|
+
types.push(network.nettype) unless types.include?(network.nettype)
|
|
75
|
+
}
|
|
76
|
+
return types
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def has_addr?(addr)
|
|
80
|
+
return self.addresses.include?(addr)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def to_s
|
|
84
|
+
s = @name+":"+self.ifacetype.to_s+"\n"
|
|
85
|
+
@networks.keys.sort.each { |network|
|
|
86
|
+
s += @networks[network].to_s+"\n"
|
|
87
|
+
}
|
|
88
|
+
if self.rx['bytes'] && self.tx['bytes']
|
|
89
|
+
s += " RX bytes: #{self.rx['bytes']}, TX bytes: #{self.tx['bytes']}\n"
|
|
90
|
+
elsif self.rx['packets'] && self.tx['packets']
|
|
91
|
+
s += " RX packets: #{self.rx['packets']}, TX packets: #{self.tx['packets']}\n"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
s += " MTU: #{@mtu}\n"
|
|
95
|
+
s += " Metric: #{@metric}\n"
|
|
96
|
+
s += " Flags: #{@flags.join(',')}\n"
|
|
97
|
+
s += " Status: UP" if self.status
|
|
98
|
+
return s
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# each platform defines it's own set_mac
|
|
103
|
+
# function to get the mac address
|
|
104
|
+
#
|
|
105
|
+
class EthernetAdapter < NetworkAdapter
|
|
106
|
+
def initialize(name,ifconfigtxt)
|
|
107
|
+
super(name,ifconfigtxt)
|
|
108
|
+
@mac = set_mac
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
attr_reader :mac, :interrupt, :rxbytes, :txbytes, :rxpackets,
|
|
112
|
+
:txpackets
|
|
113
|
+
|
|
114
|
+
def to_s
|
|
115
|
+
super + "\n MAC: #{@mac}"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
class PPP < NetworkAdapter
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
class LoopbackInterface < NetworkAdapter
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
class IPv6_in_IPv4 < NetworkAdapter
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
class SerialLineIP < NetworkAdapter
|
|
130
|
+
end
|