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,288 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* An OpenFlow message library.
|
|
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 OPENFLOW_MESSAGE_H
|
|
24
|
+
#define OPENFLOW_MESSAGE_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include <openflow.h>
|
|
28
|
+
#include "bool.h"
|
|
29
|
+
#include "buffer.h"
|
|
30
|
+
#include "byteorder.h"
|
|
31
|
+
#include "linked_list.h"
|
|
32
|
+
#include "packet_info.h"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
// A structure for storing OpenFlow actions
|
|
36
|
+
typedef struct openflow_actions {
|
|
37
|
+
int n_actions;
|
|
38
|
+
list_element *list;
|
|
39
|
+
} openflow_actions;
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
// Initialization
|
|
43
|
+
bool init_openflow_message( void );
|
|
44
|
+
|
|
45
|
+
// Functions for creating OpenFlow messages
|
|
46
|
+
buffer *create_hello( const uint32_t transaction_id );
|
|
47
|
+
buffer *create_error( const uint32_t transaction_id, const uint16_t type,
|
|
48
|
+
const uint16_t code, const buffer *data );
|
|
49
|
+
buffer *create_echo_request( const uint32_t transaction_id, const buffer *body );
|
|
50
|
+
buffer *create_echo_reply( const uint32_t transaction_id, const buffer *body );
|
|
51
|
+
buffer *create_vendor( const uint32_t transaction_id, const uint32_t vendor,
|
|
52
|
+
const buffer *body );
|
|
53
|
+
buffer *create_features_request( const uint32_t transaction_id );
|
|
54
|
+
buffer *create_features_reply( const uint32_t transaction_id, const uint64_t datapath_id,
|
|
55
|
+
const uint32_t n_buffers, const uint8_t n_tables,
|
|
56
|
+
const uint32_t capabilities, const uint32_t actions,
|
|
57
|
+
const list_element *ports );
|
|
58
|
+
buffer *create_get_config_request( const uint32_t transaction_id );
|
|
59
|
+
buffer *create_get_config_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
60
|
+
const uint16_t miss_send_len );
|
|
61
|
+
buffer *create_set_config( const uint32_t transaction_id, const uint16_t flags,
|
|
62
|
+
const uint16_t miss_send_len );
|
|
63
|
+
buffer *create_packet_in( const uint32_t transaction_id, const uint32_t buffer_id,
|
|
64
|
+
const uint16_t total_len, uint16_t in_port,
|
|
65
|
+
const uint8_t reason, const buffer *data );
|
|
66
|
+
buffer *create_flow_removed( const uint32_t transaction_id, const struct ofp_match match,
|
|
67
|
+
const uint64_t cookie, const uint16_t priority,
|
|
68
|
+
const uint8_t reason, const uint32_t duration_sec,
|
|
69
|
+
const uint32_t duration_nsec, const uint16_t idle_timeout,
|
|
70
|
+
const uint64_t packet_count, const uint64_t byte_count );
|
|
71
|
+
buffer *create_port_status( const uint32_t transaction_id, const uint8_t reason,
|
|
72
|
+
const struct ofp_phy_port desc);
|
|
73
|
+
buffer *create_packet_out( const uint32_t transaction_id, const uint32_t buffer_id,
|
|
74
|
+
const uint16_t in_port, const openflow_actions *actions,
|
|
75
|
+
const buffer *data );
|
|
76
|
+
buffer *create_flow_mod(
|
|
77
|
+
const uint32_t transaction_id,
|
|
78
|
+
const struct ofp_match match,
|
|
79
|
+
const uint64_t cookie,
|
|
80
|
+
const uint16_t command,
|
|
81
|
+
const uint16_t idle_timeout,
|
|
82
|
+
const uint16_t hard_timeout,
|
|
83
|
+
const uint16_t priority,
|
|
84
|
+
const uint32_t buffer_id,
|
|
85
|
+
const uint16_t out_port,
|
|
86
|
+
const uint16_t flags,
|
|
87
|
+
const openflow_actions *actions
|
|
88
|
+
);
|
|
89
|
+
buffer *create_port_mod( const uint32_t transaction_id, const uint16_t port_no,
|
|
90
|
+
const uint8_t hw_addr[ OFP_ETH_ALEN ], const uint32_t config,
|
|
91
|
+
const uint32_t mask, const uint32_t advertise );
|
|
92
|
+
buffer *create_desc_stats_request( const uint32_t transaction_id, const uint16_t flags );
|
|
93
|
+
buffer *create_flow_stats_request( const uint32_t transaction_id, const uint16_t flags,
|
|
94
|
+
const struct ofp_match match, const uint8_t table_id,
|
|
95
|
+
const uint16_t out_port );
|
|
96
|
+
buffer *create_aggregate_stats_request( const uint32_t transaction_id,
|
|
97
|
+
const uint16_t flags, const struct ofp_match match,
|
|
98
|
+
const uint8_t table_id, const uint16_t out_port );
|
|
99
|
+
buffer *create_table_stats_request( const uint32_t transaction_id, const uint16_t flags );
|
|
100
|
+
buffer *create_port_stats_request( const uint32_t transaction_id, const uint16_t flags,
|
|
101
|
+
const uint16_t port_no );
|
|
102
|
+
buffer *create_queue_stats_request( const uint32_t transaction_id, const uint16_t flags,
|
|
103
|
+
const uint16_t port_no, const uint32_t queue_id );
|
|
104
|
+
buffer *create_vendor_stats_request( const uint32_t transaction_id, const uint16_t flags,
|
|
105
|
+
const uint32_t vendor, const buffer *body );
|
|
106
|
+
buffer *create_desc_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
107
|
+
const char mfr_desc[ DESC_STR_LEN ],
|
|
108
|
+
const char hw_desc[ DESC_STR_LEN ],
|
|
109
|
+
const char sw_desc[ DESC_STR_LEN ],
|
|
110
|
+
const char serial_num[ SERIAL_NUM_LEN ],
|
|
111
|
+
const char dp_desc[ DESC_STR_LEN ] );
|
|
112
|
+
buffer *create_flow_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
113
|
+
const list_element *flows_stats_head );
|
|
114
|
+
buffer *create_aggregate_stats_reply( const uint32_t transaction_id,
|
|
115
|
+
const uint16_t flags,
|
|
116
|
+
const uint64_t packet_count, const uint64_t byte_count,
|
|
117
|
+
const uint32_t flow_count );
|
|
118
|
+
buffer *create_table_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
119
|
+
const list_element *table_stats_head );
|
|
120
|
+
buffer *create_port_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
121
|
+
const list_element *port_stats_head );
|
|
122
|
+
buffer *create_queue_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
123
|
+
const list_element *queue_stats_head );
|
|
124
|
+
buffer *create_vendor_stats_reply( const uint32_t transaction_id, const uint16_t flags,
|
|
125
|
+
const uint32_t vendor, const buffer *body );
|
|
126
|
+
buffer *create_barrier_request( const uint32_t transaction_id );
|
|
127
|
+
buffer *create_barrier_reply( const uint32_t transaction_id );
|
|
128
|
+
buffer *create_queue_get_config_request( const uint32_t transaction_id, const uint16_t port );
|
|
129
|
+
buffer *create_queue_get_config_reply( const uint32_t transaction_id, const uint16_t port,
|
|
130
|
+
const list_element *queues );
|
|
131
|
+
uint32_t get_transaction_id( void );
|
|
132
|
+
uint64_t get_cookie( void );
|
|
133
|
+
openflow_actions *create_actions( void );
|
|
134
|
+
bool delete_actions( openflow_actions *actions );
|
|
135
|
+
bool append_action_output( openflow_actions *actions, const uint16_t port, const uint16_t max_len );
|
|
136
|
+
bool append_action_set_vlan_vid( openflow_actions *actions, const uint16_t vlan_vid );
|
|
137
|
+
bool append_action_set_vlan_pcp( openflow_actions *actions, const uint8_t vlan_pcp );
|
|
138
|
+
bool append_action_strip_vlan( openflow_actions *actions );
|
|
139
|
+
bool append_action_set_dl_src( openflow_actions *actions, const uint8_t hw_addr[ OFP_ETH_ALEN ] );
|
|
140
|
+
bool append_action_set_dl_dst( openflow_actions *actions, const uint8_t hw_addr[ OFP_ETH_ALEN ] );
|
|
141
|
+
bool append_action_set_nw_src( openflow_actions *actions, const uint32_t nw_addr );
|
|
142
|
+
bool append_action_set_nw_dst( openflow_actions *actions, const uint32_t nw_addr );
|
|
143
|
+
bool append_action_set_nw_tos( openflow_actions *actions, const uint8_t nw_tos );
|
|
144
|
+
bool append_action_set_tp_src( openflow_actions *actions, const uint16_t tp_port );
|
|
145
|
+
bool append_action_set_tp_dst( openflow_actions *actions, const uint16_t tp_port );
|
|
146
|
+
bool append_action_enqueue( openflow_actions *actions, const uint16_t port,
|
|
147
|
+
const uint32_t queue_id );
|
|
148
|
+
bool append_action_vendor( openflow_actions *actions, const uint32_t vendor,
|
|
149
|
+
const buffer *data );
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
// Return code definitions indicating the result of OpenFlow message validation.
|
|
153
|
+
enum {
|
|
154
|
+
SUCCESS = 0,
|
|
155
|
+
ERROR_UNSUPPORTED_VERSION = -60,
|
|
156
|
+
ERROR_INVALID_LENGTH,
|
|
157
|
+
ERROR_TOO_SHORT_MESSAGE,
|
|
158
|
+
ERROR_TOO_LONG_MESSAGE,
|
|
159
|
+
ERROR_INVALID_TYPE,
|
|
160
|
+
ERROR_UNDEFINED_TYPE,
|
|
161
|
+
ERROR_UNSUPPORTED_TYPE,
|
|
162
|
+
ERROR_NO_TABLE_AVAILABLE,
|
|
163
|
+
ERROR_INVALID_PORT_NO,
|
|
164
|
+
ERROR_INVALID_PORT_CONFIG,
|
|
165
|
+
ERROR_INVALID_PORT_STATE,
|
|
166
|
+
ERROR_INVALID_PORT_FEATURES,
|
|
167
|
+
ERROR_INVALID_SWITCH_CONFIG,
|
|
168
|
+
ERROR_INVALID_PACKET_IN_REASON,
|
|
169
|
+
ERROR_INVALID_FLOW_REMOVED_REASON,
|
|
170
|
+
ERROR_INVALID_WILDCARDS,
|
|
171
|
+
ERROR_INVALID_VLAN_VID,
|
|
172
|
+
ERROR_INVALID_VLAN_PCP,
|
|
173
|
+
ERROR_INVALID_NW_TOS,
|
|
174
|
+
ERROR_INVALID_PORT_STATUS_REASON,
|
|
175
|
+
ERROR_TOO_SHORT_QUEUE_DESCRIPTION,
|
|
176
|
+
ERROR_TOO_SHORT_QUEUE_PROPERTY,
|
|
177
|
+
ERROR_TOO_LONG_QUEUE_PROPERTY,
|
|
178
|
+
ERROR_UNDEFINED_QUEUE_PROPERTY,
|
|
179
|
+
ERROR_TOO_SHORT_ACTION,
|
|
180
|
+
ERROR_UNDEFINED_ACTION_TYPE,
|
|
181
|
+
ERROR_INVALID_ACTION_TYPE,
|
|
182
|
+
ERROR_TOO_SHORT_ACTION_OUTPUT,
|
|
183
|
+
ERROR_TOO_LONG_ACTION_OUTPUT,
|
|
184
|
+
ERROR_TOO_SHORT_ACTION_VLAN_VID,
|
|
185
|
+
ERROR_TOO_LONG_ACTION_VLAN_VID,
|
|
186
|
+
ERROR_TOO_SHORT_ACTION_VLAN_PCP,
|
|
187
|
+
ERROR_TOO_LONG_ACTION_VLAN_PCP,
|
|
188
|
+
ERROR_TOO_SHORT_ACTION_STRIP_VLAN,
|
|
189
|
+
ERROR_TOO_LONG_ACTION_STRIP_VLAN,
|
|
190
|
+
ERROR_TOO_SHORT_ACTION_DL_SRC,
|
|
191
|
+
ERROR_TOO_LONG_ACTION_DL_SRC,
|
|
192
|
+
ERROR_TOO_SHORT_ACTION_DL_DST,
|
|
193
|
+
ERROR_TOO_LONG_ACTION_DL_DST,
|
|
194
|
+
ERROR_TOO_SHORT_ACTION_NW_SRC,
|
|
195
|
+
ERROR_TOO_LONG_ACTION_NW_SRC,
|
|
196
|
+
ERROR_TOO_SHORT_ACTION_NW_DST,
|
|
197
|
+
ERROR_TOO_LONG_ACTION_NW_DST,
|
|
198
|
+
ERROR_TOO_SHORT_ACTION_NW_TOS,
|
|
199
|
+
ERROR_TOO_LONG_ACTION_NW_TOS,
|
|
200
|
+
ERROR_TOO_SHORT_ACTION_TP_SRC,
|
|
201
|
+
ERROR_TOO_LONG_ACTION_TP_SRC,
|
|
202
|
+
ERROR_TOO_SHORT_ACTION_TP_DST,
|
|
203
|
+
ERROR_TOO_LONG_ACTION_TP_DST,
|
|
204
|
+
ERROR_TOO_SHORT_ACTION_ENQUEUE,
|
|
205
|
+
ERROR_TOO_LONG_ACTION_ENQUEUE,
|
|
206
|
+
ERROR_TOO_SHORT_ACTION_VENDOR,
|
|
207
|
+
ERROR_UNSUPPORTED_STATS_TYPE,
|
|
208
|
+
ERROR_INVALID_STATS_REPLY_FLAGS,
|
|
209
|
+
ERROR_INVALID_FLOW_PRIORITY,
|
|
210
|
+
ERROR_INVALID_FLOW_MOD_FLAGS,
|
|
211
|
+
ERROR_INVALID_PORT_MASK,
|
|
212
|
+
ERROR_INVALID_STATS_TYPE,
|
|
213
|
+
ERROR_INVALID_STATS_REQUEST_FLAGS,
|
|
214
|
+
ERROR_UNDEFINED_FLOW_MOD_COMMAND,
|
|
215
|
+
ERROR_UNEXPECTED_ERROR = -255
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
// Functions for validating OpenFlow messages
|
|
220
|
+
int validate_hello( const buffer *message );
|
|
221
|
+
int validate_error( const buffer *message );
|
|
222
|
+
int validate_echo_request( const buffer *message );
|
|
223
|
+
int validate_echo_reply( const buffer *message );
|
|
224
|
+
int validate_vendor( const buffer *message );
|
|
225
|
+
int validate_features_request( const buffer *message );
|
|
226
|
+
int validate_features_reply( const buffer *message );
|
|
227
|
+
int validate_get_config_request( const buffer *message );
|
|
228
|
+
int validate_get_config_reply( const buffer *message );
|
|
229
|
+
int validate_set_config( const buffer *message );
|
|
230
|
+
int validate_packet_in( const buffer *message );
|
|
231
|
+
int validate_flow_removed( const buffer *message );
|
|
232
|
+
int validate_port_status( const buffer *message );
|
|
233
|
+
int validate_packet_out( const buffer *message );
|
|
234
|
+
int validate_flow_mod( const buffer *message );
|
|
235
|
+
int validate_port_mod( const buffer *message );
|
|
236
|
+
int validate_desc_stats_request( const buffer *message );
|
|
237
|
+
int validate_flow_stats_request( const buffer *message );
|
|
238
|
+
int validate_aggregate_stats_request( const buffer *message );
|
|
239
|
+
int validate_table_stats_request( const buffer *message );
|
|
240
|
+
int validate_port_stats_request( const buffer *message );
|
|
241
|
+
int validate_queue_stats_request( const buffer *message );
|
|
242
|
+
int validate_vendor_stats_request( const buffer *message );
|
|
243
|
+
int validate_stats_request( const buffer *message );
|
|
244
|
+
int validate_desc_stats_reply( const buffer *message );
|
|
245
|
+
int validate_flow_stats_reply( const buffer *message );
|
|
246
|
+
int validate_aggregate_stats_reply( const buffer *message );
|
|
247
|
+
int validate_table_stats_reply( const buffer *message );
|
|
248
|
+
int validate_port_stats_reply( const buffer *message );
|
|
249
|
+
int validate_queue_stats_reply( const buffer *message );
|
|
250
|
+
int validate_vendor_stats_reply( const buffer *message );
|
|
251
|
+
int validate_stats_reply( const buffer *message );
|
|
252
|
+
int validate_barrier_request( const buffer *message );
|
|
253
|
+
int validate_barrier_reply( const buffer *message );
|
|
254
|
+
int validate_queue_get_config_request( const buffer *message );
|
|
255
|
+
int validate_queue_get_config_reply( const buffer *message );
|
|
256
|
+
int validate_actions( struct ofp_action_header *actions_head, const uint16_t length );
|
|
257
|
+
int validate_action_output( const struct ofp_action_output *action );
|
|
258
|
+
int validate_action_set_vlan_vid( const struct ofp_action_vlan_vid *action );
|
|
259
|
+
int validate_action_set_vlan_pcp( const struct ofp_action_vlan_pcp *action );
|
|
260
|
+
int validate_action_strip_vlan( const struct ofp_action_header *action );
|
|
261
|
+
int validate_action_set_dl_src( const struct ofp_action_dl_addr *action );
|
|
262
|
+
int validate_action_set_dl_dst( const struct ofp_action_dl_addr *action );
|
|
263
|
+
int validate_action_set_nw_src( const struct ofp_action_nw_addr *action );
|
|
264
|
+
int validate_action_set_nw_dst( const struct ofp_action_nw_addr *action );
|
|
265
|
+
int validate_action_set_nw_tos( const struct ofp_action_nw_tos *action );
|
|
266
|
+
int validate_action_set_tp_src( const struct ofp_action_tp_port *action );
|
|
267
|
+
int validate_action_set_tp_dst( const struct ofp_action_tp_port *action );
|
|
268
|
+
int validate_action_enqueue( const struct ofp_action_enqueue *action );
|
|
269
|
+
int validate_action_vendor( const struct ofp_action_vendor_header *action );
|
|
270
|
+
int validate_openflow_message( const buffer *message );
|
|
271
|
+
bool valid_openflow_message( const buffer *message );
|
|
272
|
+
|
|
273
|
+
// Utility functions
|
|
274
|
+
bool get_error_type_and_code( const uint8_t type, const int error_no,
|
|
275
|
+
uint16_t *error_type, uint16_t *error_code );
|
|
276
|
+
void set_match_from_packet( struct ofp_match *match, const uint16_t in_port,
|
|
277
|
+
const uint32_t wildcards, const buffer *packet );
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
#endif // OPENFLOW_MESSAGE_H
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
/*
|
|
284
|
+
* Local variables:
|
|
285
|
+
* c-basic-offset: 2
|
|
286
|
+
* indent-tabs-mode: nil
|
|
287
|
+
* End:
|
|
288
|
+
*/
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* OpenFlow service interface.
|
|
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 OPENFLOW_SERVICE_INTERFACE_H
|
|
24
|
+
#define OPENFLOW_SERVICE_INTERFACE_H
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Message type definitions for sending/receiving OpenFlow messages or
|
|
29
|
+
* related events via messenger.
|
|
30
|
+
*/
|
|
31
|
+
#define MESSENGER_OPENFLOW_MESSAGE 1
|
|
32
|
+
#define MESSENGER_OPENFLOW_CONNECTED 2
|
|
33
|
+
#define MESSENGER_OPENFLOW_READY 3
|
|
34
|
+
#define MESSENGER_OPENFLOW_DISCONNECTED 4
|
|
35
|
+
#define MESSENGER_OPENFLOW_DISCONNECT_REQUEST 5
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Header for sending/receiving OpenFlow messages or events via messenger.
|
|
40
|
+
* A null-terminated service name can be provided after service_name_len
|
|
41
|
+
* and an OpenFlow message must be included in the rest of part in case of
|
|
42
|
+
* MESSENGER_OPENFLOW_MESSAGE. service_name_length can be zero if service
|
|
43
|
+
* name notification is not necessary.
|
|
44
|
+
*/
|
|
45
|
+
typedef struct openflow_service_header {
|
|
46
|
+
uint64_t datapath_id;
|
|
47
|
+
uint16_t service_name_length;
|
|
48
|
+
} __attribute__( ( packed ) ) openflow_service_header_t;
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
#endif // OPENFLOW_SERVICE_INTERFACE_H
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* Local variables:
|
|
56
|
+
* c-basic-offset: 2
|
|
57
|
+
* indent-tabs-mode: nil
|
|
58
|
+
* End:
|
|
59
|
+
*/
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Author: Kazuya Suzuki
|
|
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 "checks.h"
|
|
23
|
+
#include "packet_info.h"
|
|
24
|
+
#include "wrapper.h"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
void
|
|
28
|
+
free_packet_info( buffer *buf ) {
|
|
29
|
+
die_if_NULL( buf );
|
|
30
|
+
die_if_NULL( buf->user_data );
|
|
31
|
+
|
|
32
|
+
xfree( buf->user_data );
|
|
33
|
+
buf->user_data = NULL;
|
|
34
|
+
buf->user_data_free_function = NULL;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
void
|
|
39
|
+
calloc_packet_info( buffer *buf ) {
|
|
40
|
+
die_if_NULL( buf );
|
|
41
|
+
|
|
42
|
+
void *user_data = xcalloc( 1, sizeof( packet_info ) );
|
|
43
|
+
assert( user_data != NULL );
|
|
44
|
+
|
|
45
|
+
memset( user_data, 0, sizeof( packet_info ) );
|
|
46
|
+
|
|
47
|
+
buf->user_data = user_data;
|
|
48
|
+
buf->user_data_free_function = free_packet_info;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
packet_info
|
|
53
|
+
get_packet_info( const buffer *frame ) {
|
|
54
|
+
die_if_NULL( frame );
|
|
55
|
+
|
|
56
|
+
packet_info info;
|
|
57
|
+
|
|
58
|
+
if ( frame->user_data != NULL ) {
|
|
59
|
+
info = *( packet_info * ) frame->user_data;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
memset( &info, 0, sizeof( info ) );
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return info;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
static bool
|
|
70
|
+
if_packet_type( const buffer *frame, const uint32_t type ) {
|
|
71
|
+
die_if_NULL( frame );
|
|
72
|
+
packet_info packet_info = get_packet_info( frame );
|
|
73
|
+
return ( ( packet_info.format & type ) == type );
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
bool
|
|
78
|
+
packet_type_eth_dix( const buffer *frame ) {
|
|
79
|
+
die_if_NULL( frame );
|
|
80
|
+
return if_packet_type( frame, ETH_DIX );
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
bool
|
|
85
|
+
packet_type_eth_vtag( const buffer *frame ) {
|
|
86
|
+
die_if_NULL( frame );
|
|
87
|
+
return if_packet_type( frame, ETH_8021Q );
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
bool
|
|
92
|
+
packet_type_eth_raw( const buffer *frame ) {
|
|
93
|
+
die_if_NULL( frame );
|
|
94
|
+
return if_packet_type( frame, ETH_8023_RAW );
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
bool
|
|
99
|
+
packet_type_eth_llc( const buffer *frame ) {
|
|
100
|
+
die_if_NULL( frame );
|
|
101
|
+
return if_packet_type( frame, ETH_8023_LLC );
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
bool
|
|
106
|
+
packet_type_ether( const buffer *frame ) {
|
|
107
|
+
die_if_NULL( frame );
|
|
108
|
+
return ( if_packet_type( frame, ETH_DIX ) |
|
|
109
|
+
if_packet_type( frame, ETH_8023_RAW ) |
|
|
110
|
+
if_packet_type( frame, ETH_8023_LLC ) |
|
|
111
|
+
if_packet_type( frame, ETH_8023_SNAP ) );
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
bool
|
|
116
|
+
packet_type_eth_snap( const buffer *frame ) {
|
|
117
|
+
die_if_NULL( frame );
|
|
118
|
+
return if_packet_type( frame, ETH_8023_SNAP );
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
bool
|
|
123
|
+
packet_type_arp( const buffer *frame ) {
|
|
124
|
+
die_if_NULL( frame );
|
|
125
|
+
return if_packet_type( frame, NW_ARP );
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
bool
|
|
130
|
+
packet_type_ipv4( const buffer *frame ) {
|
|
131
|
+
die_if_NULL( frame );
|
|
132
|
+
return if_packet_type( frame, NW_IPV4 );
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
bool
|
|
137
|
+
packet_type_lldp( const buffer *frame ) {
|
|
138
|
+
die_if_NULL( frame );
|
|
139
|
+
return if_packet_type( frame, NW_LLDP );
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
bool
|
|
144
|
+
packet_type_icmpv4( const buffer *frame ) {
|
|
145
|
+
die_if_NULL( frame );
|
|
146
|
+
return if_packet_type( frame, NW_ICMPV4 );
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
bool
|
|
151
|
+
packet_type_igmp( const buffer *frame ) {
|
|
152
|
+
die_if_NULL( frame );
|
|
153
|
+
return if_packet_type( frame, NW_IGMP );
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
bool
|
|
158
|
+
packet_type_ipv4_tcp( const buffer *frame ) {
|
|
159
|
+
die_if_NULL( frame );
|
|
160
|
+
return if_packet_type( frame, NW_IPV4 | TP_TCP );
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
bool
|
|
165
|
+
packet_type_ipv4_udp( const buffer *frame ) {
|
|
166
|
+
die_if_NULL( frame );
|
|
167
|
+
return if_packet_type( frame, NW_IPV4 | TP_UDP );
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
bool
|
|
172
|
+
packet_type_ipv4_etherip( const buffer *frame ) {
|
|
173
|
+
die_if_NULL( frame );
|
|
174
|
+
return if_packet_type( frame, NW_IPV4 | TP_ETHERIP );
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
static bool
|
|
179
|
+
if_igmp_type( const buffer *frame, const uint32_t type ) {
|
|
180
|
+
die_if_NULL( frame );
|
|
181
|
+
packet_info packet_info = get_packet_info( frame );
|
|
182
|
+
return ( packet_info.igmp_type == type );
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
bool
|
|
187
|
+
packet_type_igmp_membership_query( const buffer *frame ) {
|
|
188
|
+
die_if_NULL( frame );
|
|
189
|
+
return ( if_packet_type( frame, NW_IGMP ) &
|
|
190
|
+
if_igmp_type( frame, IGMP_TYPE_MEMBERSHIP_QUERY ) );
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
bool
|
|
195
|
+
packet_type_igmp_v1_membership_report( const buffer *frame ) {
|
|
196
|
+
die_if_NULL( frame );
|
|
197
|
+
return ( if_packet_type( frame, NW_IGMP ) &
|
|
198
|
+
if_igmp_type( frame, IGMP_TYPE_V1_MEMBERSHIP_REPORT ) );
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
bool
|
|
202
|
+
packet_type_igmp_v2_membership_report( const buffer *frame ) {
|
|
203
|
+
die_if_NULL( frame );
|
|
204
|
+
return ( if_packet_type( frame, NW_IGMP ) &
|
|
205
|
+
if_igmp_type( frame, IGMP_TYPE_V2_MEMBERSHIP_REPORT ) );
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
bool
|
|
210
|
+
packet_type_igmp_v2_leave_group( const buffer *frame ) {
|
|
211
|
+
die_if_NULL( frame );
|
|
212
|
+
return ( if_packet_type( frame, NW_IGMP ) &
|
|
213
|
+
if_igmp_type( frame, IGMP_TYPE_V2_LEAVE_GROUP ) );
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
bool
|
|
218
|
+
packet_type_igmp_v3_membership_report( const buffer *frame ) {
|
|
219
|
+
die_if_NULL( frame );
|
|
220
|
+
return ( if_packet_type( frame, NW_IGMP ) &
|
|
221
|
+
if_igmp_type( frame, IGMP_TYPE_V3_MEMBERSHIP_REPORT ) );
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* Local variables:
|
|
227
|
+
* c-basic-offset: 2
|
|
228
|
+
* indent-tabs-mode: nil
|
|
229
|
+
* End:
|
|
230
|
+
*/
|