trema 0.2.2.1 → 0.2.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/.gitmodules +3 -0
- data/.travis.yml +13 -0
- data/.yardopts +4 -0
- data/Gemfile +2 -3
- data/README.md +43 -97
- data/Rakefile +60 -4
- data/Rantfile +11 -10
- data/cruise.rb +4 -6
- data/features/example.packetin_filter_config.feature +10 -10
- data/features/example.switch_monitor.feature +14 -2
- data/features/step_definitions/kill_steps.rb +2 -2
- data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
- data/features/step_definitions/misc_steps.rb +1 -1
- data/features/step_definitions/up_steps.rb +30 -0
- data/features/trema.feature +1 -0
- data/features/trema.run.feature +1 -0
- data/locale/README.ja.md +19 -0
- data/locale/ja/yard.po +3762 -0
- data/locale/yard.pot +3740 -0
- data/ruby/extconf.rb +4 -1
- data/ruby/trema/action-common.c +3 -17
- data/ruby/trema/action-common.h +3 -7
- data/ruby/trema/action.rb +33 -0
- data/ruby/trema/app.rb +1 -1
- data/ruby/trema/barrier-request.c +1 -0
- data/ruby/trema/command/run.rb +13 -9
- data/ruby/trema/command/usage.rb +1 -0
- data/ruby/trema/command/version.rb +1 -1
- data/ruby/trema/controller.c +133 -50
- data/ruby/trema/controller.rb +2 -2
- data/ruby/trema/desc-stats-reply.rb +77 -0
- data/ruby/trema/dsl/configuration.rb +3 -14
- data/ruby/trema/dsl/rswitch.rb +47 -0
- data/ruby/trema/dsl/runner.rb +4 -1
- data/ruby/trema/dsl/syntax.rb +11 -8
- data/ruby/trema/echo-reply.c +59 -45
- data/ruby/trema/echo-reply.h +1 -3
- data/ruby/trema/echo-request.c +49 -71
- data/ruby/trema/echo-request.h +0 -2
- data/ruby/trema/echo.c +99 -0
- data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
- data/ruby/trema/enqueue.rb +87 -0
- data/ruby/trema/error.c +109 -104
- data/ruby/trema/error.h +0 -2
- data/ruby/trema/features-reply.c +89 -35
- data/ruby/trema/features-reply.h +0 -6
- data/ruby/trema/features-request.c +63 -37
- data/ruby/trema/features-request.h +0 -2
- data/ruby/trema/flow-mod.c +149 -0
- data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
- data/ruby/trema/get-config-request.c +1 -0
- data/ruby/trema/hardware-switch.rb +88 -0
- data/ruby/trema/hello.c +55 -31
- data/ruby/trema/hello.h +0 -2
- data/ruby/trema/ip.rb +12 -2
- data/ruby/trema/logger.rb +29 -0
- data/ruby/trema/mac.rb +57 -36
- data/ruby/trema/match.c +7 -9
- data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
- data/ruby/trema/network-component.rb +1 -1
- data/ruby/trema/open-vswitch.rb +2 -2
- data/ruby/trema/openflow-switch.rb +3 -54
- data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
- data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
- data/ruby/trema/packet-queue.rb +4 -3
- data/ruby/trema/port-mod.c +8 -9
- data/ruby/trema/port-status-add.rb +60 -0
- data/ruby/trema/port-status-delete.rb +60 -0
- data/ruby/trema/port-status-modify.rb +60 -0
- data/ruby/trema/port-status.c +48 -15
- data/ruby/trema/port-status.h +6 -8
- data/ruby/trema/port.c +63 -8
- data/ruby/trema/queue-get-config-request.c +1 -0
- data/ruby/trema/ruby-switch.rb +62 -0
- data/ruby/trema/send-out-port.rb +97 -0
- data/ruby/trema/set-config.c +1 -0
- data/ruby/trema/set-eth-addr.rb +45 -0
- data/ruby/trema/set-eth-dst-addr.rb +54 -0
- data/ruby/trema/set-eth-src-addr.rb +54 -0
- data/ruby/trema/set-ip-addr.rb +47 -0
- data/ruby/trema/set-ip-dst-addr.rb +53 -0
- data/ruby/trema/set-ip-src-addr.rb +52 -0
- data/ruby/trema/set-ip-tos.rb +63 -0
- data/ruby/trema/set-transport-dst-port.rb +53 -0
- data/ruby/trema/set-transport-port.rb +52 -0
- data/ruby/trema/set-transport-src-port.rb +54 -0
- data/ruby/trema/set-vlan-priority.rb +65 -0
- data/ruby/trema/set-vlan-vid.rb +64 -0
- data/ruby/trema/shell/down.rb +1 -1
- data/ruby/trema/shell/link.rb +4 -4
- data/ruby/trema/shell/run.rb +8 -6
- data/ruby/trema/shell/up.rb +3 -3
- data/ruby/trema/stats-reply.c +27 -2
- data/ruby/trema/stats-request.c +64 -23
- data/ruby/trema/strip-vlan-header.rb +41 -0
- data/ruby/trema/switch.c +196 -0
- data/ruby/trema/{action-vendor.h → switch.h} +5 -7
- data/ruby/trema/switch.rb +28 -9
- data/ruby/trema/trema-ruby-utils.c +66 -0
- data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
- data/ruby/trema/trema.c +61 -61
- data/ruby/trema/vendor-action.rb +73 -0
- data/ruby/trema/vendor.c +121 -52
- data/ruby/trema/vendor.h +6 -10
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/action.rb +52 -0
- data/spec/support/mandatory-option.rb +56 -0
- data/spec/support/openflow-message.rb +91 -7
- data/spec/support/port-status.rb +38 -0
- data/spec/trema/controller_spec.rb +0 -26
- data/spec/trema/dsl/configuration_spec.rb +3 -3
- data/spec/trema/dsl/runner_spec.rb +12 -32
- data/spec/trema/dsl/syntax_spec.rb +2 -11
- data/spec/trema/echo-reply_spec.rb +49 -14
- data/spec/trema/echo-request_spec.rb +86 -34
- data/spec/trema/enqueue_spec.rb +76 -0
- data/spec/trema/error_spec.rb +43 -58
- data/spec/trema/features-reply_spec.rb +58 -24
- data/spec/trema/features-request_spec.rb +54 -28
- data/spec/trema/flow-mod_spec.rb +99 -0
- data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
- data/spec/trema/hello_spec.rb +28 -14
- data/spec/trema/ip_spec.rb +54 -0
- data/spec/trema/mac_spec.rb +49 -64
- data/spec/trema/match_spec.rb +1 -1
- data/spec/trema/open-vswitch_spec.rb +7 -7
- data/spec/trema/packet-in_spec.rb +73 -16
- data/spec/trema/port-status-add_spec.rb +32 -0
- data/spec/trema/port-status-delete_spec.rb +32 -0
- data/spec/trema/port-status-modify_spec.rb +71 -0
- data/spec/trema/port-status_spec.rb +5 -76
- data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
- data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
- data/spec/trema/set-eth-src-addr_spec.rb +72 -0
- data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
- data/spec/trema/set-ip-src-addr_spec.rb +58 -0
- data/spec/trema/set-ip-tos_spec.rb +65 -0
- data/spec/trema/set-transport-dst-port_spec.rb +65 -0
- data/spec/trema/set-transport-src-port_spec.rb +65 -0
- data/spec/trema/set-vlan-priority_spec.rb +65 -0
- data/spec/trema/set-vlan-vid_spec.rb +65 -0
- data/spec/trema/shell/vhost_spec.rb +4 -1
- data/spec/trema/shell/vswitch_spec.rb +11 -11
- data/spec/trema/stats-reply_spec.rb +59 -13
- data/spec/trema/stats-request_spec.rb +6 -0
- data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
- data/spec/trema/switch-daemon_spec.rb +39 -0
- data/spec/trema/vendor-action_spec.rb +81 -0
- data/spec/trema/vendor_spec.rb +76 -0
- data/spec/trema_spec.rb +56 -0
- data/src/examples/dumper/dumper.c +0 -8
- data/src/examples/dumper/dumper.rb +52 -52
- data/src/examples/hello_trema/hello_trema.c +0 -2
- data/src/examples/learning_switch/learning-switch.rb +3 -3
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
- data/src/examples/openflow_message/features-request.rb +3 -3
- data/src/examples/packetin_filter_config/utils.c +4 -4
- data/src/examples/repeater_hub/repeater-hub.rb +3 -3
- data/src/examples/switch_info/switch_info.rb +2 -2
- data/src/examples/switch_monitor/switch_monitor.c +1 -1
- data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
- data/src/lib/arp.h +4 -1
- data/src/lib/chibach.c +391 -0
- data/src/lib/chibach.h +71 -0
- data/src/lib/chibach_private.c +170 -0
- data/src/lib/chibach_private.h +52 -0
- data/src/lib/ether.c +2 -1
- data/src/lib/ether.h +0 -1
- data/src/lib/ipv4.h +13 -14
- data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
- data/src/lib/log.c +161 -58
- data/src/lib/log.h +11 -16
- data/src/lib/messenger.c +36 -1
- data/src/lib/messenger.h +1 -0
- data/src/lib/openflow_application_interface.c +128 -28
- data/src/lib/openflow_application_interface.h +31 -6
- data/src/lib/openflow_message.c +2 -1
- data/src/lib/openflow_service_interface.h +1 -0
- data/src/lib/openflow_switch_interface.c +1380 -0
- data/src/lib/openflow_switch_interface.h +264 -0
- data/src/lib/packet_info.c +94 -11
- data/src/lib/packet_info.h +22 -3
- data/src/lib/packet_parser.c +38 -2
- data/src/lib/secure_channel.c +498 -0
- data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
- data/src/lib/tcp.h +0 -3
- data/src/lib/trema.c +38 -5
- data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
- data/src/lib/trema_wrapper.c +5 -0
- data/src/lib/trema_wrapper.h +4 -0
- data/src/lib/utility.c +93 -4
- data/src/lib/utility.h +1 -0
- data/src/lib/wrapper.c +30 -7
- data/src/lib/wrapper.h +2 -0
- data/src/switch_manager/ofpmsg_recv.c +44 -30
- data/src/switch_manager/ofpmsg_send.c +40 -1
- data/src/switch_manager/ofpmsg_send.h +2 -0
- data/src/switch_manager/switch.c +153 -8
- data/src/switch_manager/switch.h +1 -0
- data/src/switch_manager/switchinfo.h +5 -0
- data/src/tremashark/README +2 -2
- data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
- data/trema +1 -1
- data/unittests/lib/log_test.c +158 -34
- data/unittests/lib/openflow_application_interface_test.c +252 -69
- data/unittests/lib/openflow_message_test.c +3 -1
- data/unittests/lib/packet_parser_test.c +60 -15
- data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
- data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
- data/unittests/lib/trema_test.c +2 -0
- data/unittests/lib/utility_test.c +65 -2
- data/unittests/lib/wrapper_test.c +29 -0
- data/vendor/{README → README.md} +2 -12
- data/vendor/packet-openflow.diff +13 -0
- metadata +86 -53
- data/GPL2 +0 -339
- data/ruby/trema/action-enqueue.c +0 -161
- data/ruby/trema/action-output.c +0 -169
- data/ruby/trema/action-set-dl-dst.c +0 -131
- data/ruby/trema/action-set-dl-dst.h +0 -44
- data/ruby/trema/action-set-dl-src.c +0 -131
- data/ruby/trema/action-set-nw-dst.c +0 -135
- data/ruby/trema/action-set-nw-src.c +0 -140
- data/ruby/trema/action-set-nw-tos.c +0 -124
- data/ruby/trema/action-set-nw-tos.h +0 -42
- data/ruby/trema/action-set-tp-dst.c +0 -122
- data/ruby/trema/action-set-tp-dst.h +0 -42
- data/ruby/trema/action-set-tp-src.c +0 -124
- data/ruby/trema/action-set-tp-src.h +0 -42
- data/ruby/trema/action-set-vlan-pcp.c +0 -128
- data/ruby/trema/action-set-vlan-pcp.h +0 -42
- data/ruby/trema/action-set-vlan-vid.c +0 -125
- data/ruby/trema/action-set-vlan-vid.h +0 -42
- data/ruby/trema/action-strip-vlan.c +0 -81
- data/ruby/trema/action-strip-vlan.h +0 -42
- data/ruby/trema/action-vendor.c +0 -121
- data/ruby/trema/vendor-request.c +0 -193
- data/spec/trema/action-enqueue_spec.rb +0 -100
- data/spec/trema/action-set-dl-dst_spec.rb +0 -95
- data/spec/trema/action-set-dl-src_spec.rb +0 -92
- data/spec/trema/action-set-nw-dst_spec.rb +0 -96
- data/spec/trema/action-set-nw-src_spec.rb +0 -97
- data/spec/trema/action-set-nw-tos_spec.rb +0 -88
- data/spec/trema/action-set-tp-dst_spec.rb +0 -88
- data/spec/trema/action-set-tp-src_spec.rb +0 -88
- data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
- data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
- data/spec/trema/action-vendor_spec.rb +0 -90
- data/spec/trema/vendor-request_spec.rb +0 -79
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
|
-
*
|
|
6
|
-
* This program is free software; you can redistribute it and/or modify
|
|
7
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
-
* published by the Free Software Foundation.
|
|
9
|
-
*
|
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
* GNU General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU General Public License along
|
|
16
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#ifndef ACTION_SET_VLAN_VID_H
|
|
22
|
-
#define ACTION_SET_VLAN_VID_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include "ruby.h"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
extern VALUE cActionSetVlanVid;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
void Init_action_set_vlan_vid( void );
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
#endif // ACTION_SET_VLAN_VID_H
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/*
|
|
38
|
-
* Local variables:
|
|
39
|
-
* c-basic-offset: 2
|
|
40
|
-
* indent-tabs-mode: nil
|
|
41
|
-
* End:
|
|
42
|
-
*/
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
|
-
*
|
|
6
|
-
* This program is free software; you can redistribute it and/or modify
|
|
7
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
-
* published by the Free Software Foundation.
|
|
9
|
-
*
|
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
* GNU General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU General Public License along
|
|
16
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#include "trema.h"
|
|
22
|
-
#include "ruby.h"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
extern VALUE mTrema;
|
|
26
|
-
VALUE cActionStripVlan;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/*
|
|
30
|
-
* Strips the VLAN tag of a packet.
|
|
31
|
-
*
|
|
32
|
-
* @overload initialize()
|
|
33
|
-
*
|
|
34
|
-
* @return [ActionStripVlan] an object that encapsulates this action.
|
|
35
|
-
*/
|
|
36
|
-
static VALUE
|
|
37
|
-
action_strip_vlan_init( VALUE self ) {
|
|
38
|
-
return self;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/*
|
|
43
|
-
* Appends its action(strip VLAN tag) to the list of actions.
|
|
44
|
-
*
|
|
45
|
-
* @return [ActionStripVlan] self
|
|
46
|
-
*/
|
|
47
|
-
static VALUE
|
|
48
|
-
action_strip_vlan_append( VALUE self, VALUE action_ptr ) {
|
|
49
|
-
openflow_actions *actions;
|
|
50
|
-
Data_Get_Struct( action_ptr, openflow_actions, actions );
|
|
51
|
-
append_action_strip_vlan( actions );
|
|
52
|
-
return self;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
/*
|
|
57
|
-
* (see ActionEnqueue#inspect)
|
|
58
|
-
*/
|
|
59
|
-
static VALUE
|
|
60
|
-
action_strip_vlan_inspect( VALUE self ) {
|
|
61
|
-
char str[ 64 ];
|
|
62
|
-
sprintf( str, "#<%s>", rb_obj_classname( self ) );
|
|
63
|
-
return rb_str_new2( str );
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
void
|
|
68
|
-
Init_action_strip_vlan() {
|
|
69
|
-
cActionStripVlan = rb_define_class_under( mTrema, "ActionStripVlan", rb_cObject );
|
|
70
|
-
rb_define_method( cActionStripVlan, "initialize", action_strip_vlan_init, 0 );
|
|
71
|
-
rb_define_method( cActionStripVlan, "append", action_strip_vlan_append, 1 );
|
|
72
|
-
rb_define_method( cActionStripVlan, "inspect", action_strip_vlan_inspect, 0 );
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
/*
|
|
77
|
-
* Local variables:
|
|
78
|
-
* c-basic-offset: 2
|
|
79
|
-
* indent-tabs-mode: nil
|
|
80
|
-
* End:
|
|
81
|
-
*/
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
|
-
*
|
|
6
|
-
* This program is free software; you can redistribute it and/or modify
|
|
7
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
-
* published by the Free Software Foundation.
|
|
9
|
-
*
|
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
* GNU General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU General Public License along
|
|
16
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#ifndef ACTION_STRIP_VLAN_H
|
|
22
|
-
#define ACTION_STRIP_VLAN_H
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#include "ruby.h"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
extern VALUE cActionStripVlan;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
void Init_action_strip_vlan( void );
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
#endif // ACTION_STRIP_VLAN_H
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/*
|
|
38
|
-
* Local variables:
|
|
39
|
-
* c-basic-offset: 2
|
|
40
|
-
* indent-tabs-mode: nil
|
|
41
|
-
* End:
|
|
42
|
-
*/
|
data/ruby/trema/action-vendor.c
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
|
-
*
|
|
6
|
-
* This program is free software; you can redistribute it and/or modify
|
|
7
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
-
* published by the Free Software Foundation.
|
|
9
|
-
*
|
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
* GNU General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU General Public License along
|
|
16
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#include "trema.h"
|
|
22
|
-
#include "ruby.h"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
extern VALUE mTrema;
|
|
26
|
-
VALUE cActionVendor;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/*
|
|
30
|
-
* An action to set vendor specific extensions.
|
|
31
|
-
*
|
|
32
|
-
* @overload initialize(options={})
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ActionVendor.new( :vendor => VENDOR_ID )
|
|
36
|
-
* @param [Hash] options
|
|
37
|
-
* the options hash to create this action class instance with.
|
|
38
|
-
*
|
|
39
|
-
* @option options [Number] vendor
|
|
40
|
-
* the vendor id this action refers to.
|
|
41
|
-
*
|
|
42
|
-
* @raise [ArgumentError] if vendor argument is not supplied.
|
|
43
|
-
* @raise [ArgumentError] if vendor is not an unsigned 32-bit integer.
|
|
44
|
-
* @raise [TypeError] if options is not a Hash.
|
|
45
|
-
*
|
|
46
|
-
* @return [ActionVendor]
|
|
47
|
-
* an object that encapsulates this action.
|
|
48
|
-
*/
|
|
49
|
-
static VALUE
|
|
50
|
-
action_vendor_init( int argc, VALUE *argv, VALUE self ) {
|
|
51
|
-
VALUE options;
|
|
52
|
-
|
|
53
|
-
if ( rb_scan_args( argc, argv, "10", &options ) == 1 ) {
|
|
54
|
-
Check_Type( options, T_HASH );
|
|
55
|
-
VALUE vendor;
|
|
56
|
-
if ( ( vendor = rb_hash_aref( options, ID2SYM( rb_intern( "vendor" ) ) ) ) != Qnil ) {
|
|
57
|
-
if ( rb_funcall( vendor, rb_intern( "unsigned_32bit?" ), 0 ) == Qfalse ) {
|
|
58
|
-
rb_raise( rb_eArgError, "Vendor id must be an unsigned 32-bit integer" );
|
|
59
|
-
}
|
|
60
|
-
rb_iv_set( self, "@vendor", vendor );
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return self;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/*
|
|
68
|
-
* The vendor id of this action.
|
|
69
|
-
*
|
|
70
|
-
* @return [Number] the value of vendor.
|
|
71
|
-
*/
|
|
72
|
-
static VALUE
|
|
73
|
-
action_get_vendor( VALUE self ) {
|
|
74
|
-
return rb_iv_get( self, "@vendor" );
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
/*
|
|
79
|
-
* Appends its action(vendor) to the list of actions.
|
|
80
|
-
*
|
|
81
|
-
* @return [ActionVendor] self
|
|
82
|
-
*/
|
|
83
|
-
static VALUE
|
|
84
|
-
action_vendor_append( VALUE self, VALUE action_ptr ) {
|
|
85
|
-
openflow_actions *actions;
|
|
86
|
-
uint32_t vendor = ( uint32_t ) NUM2UINT( action_get_vendor( self ) );
|
|
87
|
-
|
|
88
|
-
Data_Get_Struct( action_ptr, openflow_actions, actions );
|
|
89
|
-
append_action_vendor( actions, vendor, NULL );
|
|
90
|
-
return self;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/*
|
|
95
|
-
* (see ActionEnqueue#inspect)
|
|
96
|
-
*/
|
|
97
|
-
static VALUE
|
|
98
|
-
action_vendor_inspect( VALUE self ) {
|
|
99
|
-
uint32_t vendor = ( uint32_t ) NUM2UINT( action_get_vendor( self ) );
|
|
100
|
-
char str[ 64 ];
|
|
101
|
-
sprintf( str, "#<%s vendor=%u>", rb_obj_classname( self ), vendor );
|
|
102
|
-
return rb_str_new2( str );
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
void
|
|
107
|
-
Init_action_vendor() {
|
|
108
|
-
cActionVendor = rb_define_class_under( mTrema, "ActionVendor", rb_cObject );
|
|
109
|
-
rb_define_method( cActionVendor, "initialize", action_vendor_init, -1 );
|
|
110
|
-
rb_define_method( cActionVendor, "vendor", action_get_vendor, 0 );
|
|
111
|
-
rb_define_method( cActionVendor, "append", action_vendor_append, 1 );
|
|
112
|
-
rb_define_method( cActionVendor, "inspect", action_vendor_inspect, 0 );
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
/*
|
|
117
|
-
* Local variables:
|
|
118
|
-
* c-basic-offset: 2
|
|
119
|
-
* indent-tabs-mode: nil
|
|
120
|
-
* End:
|
|
121
|
-
*/
|
data/ruby/trema/vendor-request.c
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Author: Nick Karanatsios <nickkaranatsios@gmail.com>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (C) 2008-2012 NEC Corporation
|
|
5
|
-
*
|
|
6
|
-
* This program is free software; you can redistribute it and/or modify
|
|
7
|
-
* it under the terms of the GNU General Public License, version 2, as
|
|
8
|
-
* published by the Free Software Foundation.
|
|
9
|
-
*
|
|
10
|
-
* This program is distributed in the hope that it will be useful,
|
|
11
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
* GNU General Public License for more details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU General Public License along
|
|
16
|
-
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
17
|
-
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
#include "trema.h"
|
|
22
|
-
#include "ruby.h"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#define VENDOR_ID 0xccddeeff
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
extern VALUE mTrema;
|
|
29
|
-
VALUE cVendorRequest;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
static VALUE
|
|
33
|
-
vendor_request_alloc( VALUE klass ) {
|
|
34
|
-
buffer *data = alloc_buffer_with_length( 16 );
|
|
35
|
-
append_back_buffer( data, 16 );
|
|
36
|
-
memset( data->data, 'a', 16 );
|
|
37
|
-
buffer *vendor_request = create_vendor( get_transaction_id(), VENDOR_ID, data );
|
|
38
|
-
free_buffer( data );
|
|
39
|
-
|
|
40
|
-
return Data_Wrap_Struct( klass, NULL, free_buffer, vendor_request );
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
/*
|
|
45
|
-
* Creates a {VendorRequest} instance to facilitate sending of vendor
|
|
46
|
-
* experimental messages.
|
|
47
|
-
*
|
|
48
|
-
* @overload initialize(options={})
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* vendor_data = "test".unpack( "C*" ) => [ 116, 101, 115, 116 ]
|
|
52
|
-
* VendorRequest.new
|
|
53
|
-
* VendorRequest.new( :vendor_id => 0x3000 )
|
|
54
|
-
* VendorRequest.new( :vendor_id => 0x3000, :vendor_data => vendor_data )
|
|
55
|
-
* VendorRequest.new( :vendor_id => 0x3000, :vendor_data => vendor_data, :transaction_id => 123 )
|
|
56
|
-
*
|
|
57
|
-
* @param [Hash] options
|
|
58
|
-
* the options to create a message with.
|
|
59
|
-
*
|
|
60
|
-
* @option options [Number] :transaction_id
|
|
61
|
-
* Auto-generated transaction_id if not specified.
|
|
62
|
-
*
|
|
63
|
-
* @option options [Number] :vendor_id
|
|
64
|
-
* The assigned vendor id defaults to 0xccddeeff if not specified.
|
|
65
|
-
*
|
|
66
|
-
* @option options [Array] :vendor_data
|
|
67
|
-
* Fixed 16 bytes of data if not specified. User can set upto 16 bytes of any
|
|
68
|
-
* vendor specific data.
|
|
69
|
-
*
|
|
70
|
-
* @raise [ArgumentError] if transaction id is not an unsigned 32-bit integer.
|
|
71
|
-
* @raise [ArgumentError] if user data is not an array of bytes.
|
|
72
|
-
* @raise [TypeError] if options is not a hash.
|
|
73
|
-
*
|
|
74
|
-
* @return [VendorRequest]
|
|
75
|
-
* an object that encapsulates the +OFPT_VENDOR+ OpenFlow message.
|
|
76
|
-
*/
|
|
77
|
-
static VALUE
|
|
78
|
-
vendor_request_init( int argc, VALUE *argv, VALUE self ) {
|
|
79
|
-
buffer *vendor_request;
|
|
80
|
-
uint32_t xid = get_transaction_id();
|
|
81
|
-
uint32_t vendor = VENDOR_ID;
|
|
82
|
-
VALUE options;
|
|
83
|
-
|
|
84
|
-
Data_Get_Struct( self, buffer, vendor_request );
|
|
85
|
-
if ( rb_scan_args( argc, argv, "01", &options ) == 1 ) {
|
|
86
|
-
Check_Type( options, T_HASH );
|
|
87
|
-
VALUE xid_r;
|
|
88
|
-
if ( ( xid_r = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) ) ) != Qnil ) {
|
|
89
|
-
if ( rb_funcall( xid_r, rb_intern( "unsigned_32bit?" ), 0 ) == Qfalse ) {
|
|
90
|
-
rb_raise( rb_eArgError, "Transaction ID must be an unsigned 32-bit integer" );
|
|
91
|
-
}
|
|
92
|
-
xid = ( uint32_t ) NUM2UINT( xid_r );
|
|
93
|
-
}
|
|
94
|
-
VALUE vendor_r;
|
|
95
|
-
if ( ( vendor_r = rb_hash_aref( options, ID2SYM( rb_intern( "vendor_id" ) ) ) ) != Qnil ) {
|
|
96
|
-
vendor = ( uint32_t ) NUM2UINT( vendor_r );
|
|
97
|
-
}
|
|
98
|
-
VALUE data_r;
|
|
99
|
-
if ( ( data_r = rb_hash_aref( options, ID2SYM( rb_intern( "vendor_data" ) ) ) ) != Qnil ) {
|
|
100
|
-
if ( TYPE( data_r ) == T_ARRAY ) {
|
|
101
|
-
uint8_t *buf;
|
|
102
|
-
uint16_t data_length = ( uint16_t ) ( vendor_request->length - sizeof( struct ofp_vendor_header ) );
|
|
103
|
-
int32_t i;
|
|
104
|
-
buf = ( uint8_t * ) ( ( char * ) vendor_request->data + sizeof( struct ofp_vendor_header ) );
|
|
105
|
-
memset( buf, 0, data_length );
|
|
106
|
-
for ( i = 0; i < data_length && i < RARRAY( data_r )->len; i++ ) {
|
|
107
|
-
buf[ i ] = ( uint8_t ) FIX2INT( RARRAY_PTR( data_r )[ i ] );
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
rb_raise( rb_eTypeError, "Vendor data must be specified as an array of bytes" );
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
( ( struct ofp_header * ) ( vendor_request->data ) )->xid = htonl( xid );
|
|
116
|
-
( ( struct ofp_vendor_header * ) ( vendor_request->data ) )->vendor = htonl( vendor );
|
|
117
|
-
return self;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
/*
|
|
122
|
-
* Transaction ids, message sequence numbers matching requests to replies.
|
|
123
|
-
*
|
|
124
|
-
* @return [Number] the value of transaction id.
|
|
125
|
-
*/
|
|
126
|
-
static VALUE
|
|
127
|
-
vendor_request_transaction_id( VALUE self ) {
|
|
128
|
-
buffer *vendor_request;
|
|
129
|
-
Data_Get_Struct( self, buffer, vendor_request );
|
|
130
|
-
uint32_t xid = ntohl( ( ( struct ofp_header * ) ( vendor_request->data ) )->xid );
|
|
131
|
-
return UINT2NUM( xid );
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/*
|
|
136
|
-
* A 32-bit value that uniquely identifies the vendor.
|
|
137
|
-
*
|
|
138
|
-
* @return [Number] the value of vendor id.
|
|
139
|
-
*/
|
|
140
|
-
static VALUE
|
|
141
|
-
vendor_request_vendor( VALUE self ) {
|
|
142
|
-
buffer *vendor_request;
|
|
143
|
-
Data_Get_Struct( self, buffer, vendor_request );
|
|
144
|
-
uint32_t vendor = ntohl( ( ( struct ofp_vendor_header * ) ( vendor_request->data ) )->vendor );
|
|
145
|
-
return UINT2NUM( vendor );
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
/*
|
|
150
|
-
* Vendor specific data payload.
|
|
151
|
-
*
|
|
152
|
-
* @return [Array] an array of data payload bytes.
|
|
153
|
-
* @return [nil] vendor specific data not found.
|
|
154
|
-
*/
|
|
155
|
-
static VALUE
|
|
156
|
-
vendor_request_data( VALUE self ) {
|
|
157
|
-
VALUE data_arr;
|
|
158
|
-
buffer *vendor_request;
|
|
159
|
-
uint8_t *buf;
|
|
160
|
-
uint32_t i;
|
|
161
|
-
|
|
162
|
-
Data_Get_Struct( self, buffer, vendor_request );
|
|
163
|
-
uint16_t data_length = ( uint16_t ) ( vendor_request->length - sizeof ( struct ofp_vendor_header ) );
|
|
164
|
-
|
|
165
|
-
if ( data_length > 0 ) {
|
|
166
|
-
data_arr = rb_ary_new2( data_length );
|
|
167
|
-
buf = ( uint8_t * ) ( ( char * ) vendor_request->data + sizeof ( struct ofp_vendor_header ) );
|
|
168
|
-
for ( i = 0; i < data_length; i++ ) {
|
|
169
|
-
rb_ary_push( data_arr, INT2FIX( buf[i] ) );
|
|
170
|
-
}
|
|
171
|
-
return data_arr;
|
|
172
|
-
}
|
|
173
|
-
return Qnil;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
void
|
|
178
|
-
Init_vendor_request() {
|
|
179
|
-
cVendorRequest = rb_define_class_under( mTrema, "VendorRequest", rb_cObject );
|
|
180
|
-
rb_define_alloc_func( cVendorRequest, vendor_request_alloc );
|
|
181
|
-
rb_define_method( cVendorRequest, "initialize", vendor_request_init, -1 );
|
|
182
|
-
rb_define_method( cVendorRequest, "transaction_id", vendor_request_transaction_id, 0 );
|
|
183
|
-
rb_define_method( cVendorRequest, "vendor", vendor_request_vendor, 0 );
|
|
184
|
-
rb_define_method( cVendorRequest, "data", vendor_request_data, 0 );
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
/*
|
|
189
|
-
* Local variables:
|
|
190
|
-
* c-basic-offset: 2
|
|
191
|
-
* indent-tabs-mode: nil
|
|
192
|
-
* End:
|
|
193
|
-
*/
|