trema 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/ruby/trema/barrier-reply.c +1 -0
- data/ruby/trema/barrier-request.c +1 -0
- data/ruby/trema/controller.c +1 -0
- data/ruby/trema/echo-reply.c +1 -0
- data/ruby/trema/echo-request.c +1 -0
- data/ruby/trema/error.c +1 -0
- data/ruby/trema/features-reply.c +1 -0
- data/ruby/trema/features-request.c +1 -0
- data/ruby/trema/flow-mod.c +1 -0
- data/ruby/trema/flow-removed.c +1 -0
- data/ruby/trema/get-config-reply.c +1 -0
- data/ruby/trema/get-config-request.c +1 -0
- data/ruby/trema/hello.c +1 -0
- data/ruby/trema/logger.c +1 -0
- data/ruby/trema/match.c +1 -0
- data/ruby/trema/openflow-error.c +1 -0
- data/ruby/trema/packet-in.c +1 -0
- data/ruby/trema/port-mod.c +1 -0
- data/ruby/trema/port-status.c +1 -0
- data/ruby/trema/port.c +1 -0
- data/ruby/trema/queue-get-config-reply.c +1 -0
- data/ruby/trema/queue-get-config-request.c +1 -0
- data/ruby/trema/send-out-port.rb +1 -1
- data/ruby/trema/set-config.c +1 -0
- data/ruby/trema/set-eth-addr.rb +5 -0
- data/ruby/trema/set-eth-dst-addr.rb +2 -8
- data/ruby/trema/set-eth-src-addr.rb +2 -8
- data/ruby/trema/stats-reply.c +1 -0
- data/ruby/trema/stats-request.c +1 -0
- data/ruby/trema/switch.c +1 -0
- data/ruby/trema/vendor.c +1 -0
- data/ruby/trema/version.rb +1 -1
- data/spec/trema/send-out-port_spec.rb +9 -3
- data/spec/trema/set-eth-addr_spec.rb +100 -0
- data/trema.gemspec +1 -0
- metadata +25 -11
- data/spec/trema/set-eth-dst-addr_spec.rb +0 -78
- data/spec/trema/set-eth-src-addr_spec.rb +0 -78
data/ruby/trema/barrier-reply.c
CHANGED
@@ -70,6 +70,7 @@ barrier_reply_transaction_id( VALUE self ) {
|
|
70
70
|
|
71
71
|
void
|
72
72
|
Init_barrier_reply() {
|
73
|
+
mTrema = rb_define_module( "Trema" );
|
73
74
|
cBarrierReply = rb_define_class_under( mTrema, "BarrierReply", rb_cObject );
|
74
75
|
rb_define_method( cBarrierReply, "initialize", barrier_reply_init, 2 );
|
75
76
|
rb_define_method( cBarrierReply, "datapath_id", barrier_reply_datapath_id, 0 );
|
@@ -118,6 +118,7 @@ barrier_request_transaction_id( VALUE self ) {
|
|
118
118
|
|
119
119
|
void
|
120
120
|
Init_barrier_request() {
|
121
|
+
mTrema = rb_define_module( "Trema" );
|
121
122
|
cBarrierRequest = rb_define_class_under( mTrema, "BarrierRequest", rb_cObject );
|
122
123
|
rb_define_alloc_func( cBarrierRequest, barrier_request_alloc );
|
123
124
|
rb_define_method( cBarrierRequest, "initialize", barrier_request_init, -1 );
|
data/ruby/trema/controller.c
CHANGED
@@ -641,6 +641,7 @@ Init_controller() {
|
|
641
641
|
rb_require( "trema/app" );
|
642
642
|
|
643
643
|
VALUE cApp = rb_eval_string( "Trema::App" );
|
644
|
+
mTrema = rb_define_module( "Trema" );
|
644
645
|
cController = rb_define_class_under( mTrema, "Controller", cApp );
|
645
646
|
|
646
647
|
rb_define_const( cController, "OFPP_MAX", INT2NUM( OFPP_MAX ) );
|
data/ruby/trema/echo-reply.c
CHANGED
@@ -104,6 +104,7 @@ echo_user_data( VALUE self ) {}
|
|
104
104
|
|
105
105
|
void
|
106
106
|
Init_echo_reply() {
|
107
|
+
mTrema = rb_define_module( "Trema" );
|
107
108
|
cEchoReply = rb_define_class_under( mTrema, "EchoReply", rb_cObject );
|
108
109
|
rb_define_alloc_func( cEchoReply, echo_reply_alloc );
|
109
110
|
rb_define_method( cEchoReply, "initialize", echo_init, -1 );
|
data/ruby/trema/echo-request.c
CHANGED
@@ -99,6 +99,7 @@ echo_user_data( VALUE self ) {}
|
|
99
99
|
|
100
100
|
void
|
101
101
|
Init_echo_request() {
|
102
|
+
mTrema = rb_define_module( "Trema" );
|
102
103
|
cEchoRequest = rb_define_class_under( mTrema, "EchoRequest", rb_cObject );
|
103
104
|
rb_define_alloc_func( cEchoRequest, echo_request_alloc );
|
104
105
|
rb_define_method( cEchoRequest, "initialize", echo_init, -1 );
|
data/ruby/trema/error.c
CHANGED
@@ -195,6 +195,7 @@ error_code( VALUE self ) {
|
|
195
195
|
|
196
196
|
void
|
197
197
|
Init_error() {
|
198
|
+
mTrema = rb_define_module( "Trema" );
|
198
199
|
rb_define_const( mTrema, "OFPET_HELLO_FAILED", INT2NUM( OFPET_HELLO_FAILED ) );
|
199
200
|
rb_define_const( mTrema, "OFPHFC_INCOMPATIBLE", INT2NUM( OFPHFC_INCOMPATIBLE ) );
|
200
201
|
rb_define_const( mTrema, "OFPHFC_EPERM", INT2NUM( OFPHFC_EPERM ) );
|
data/ruby/trema/features-reply.c
CHANGED
@@ -215,6 +215,7 @@ features_reply_ports( VALUE self ) {
|
|
215
215
|
|
216
216
|
void
|
217
217
|
Init_features_reply() {
|
218
|
+
mTrema = rb_define_module( "Trema" );
|
218
219
|
cFeaturesReply = rb_define_class_under( mTrema, "FeaturesReply", rb_cObject );
|
219
220
|
rb_define_alloc_func( cFeaturesReply, features_reply_alloc );
|
220
221
|
rb_define_method( cFeaturesReply, "initialize", features_reply_init, 1 );
|
@@ -117,6 +117,7 @@ features_request_transaction_id( VALUE self ) {
|
|
117
117
|
|
118
118
|
void
|
119
119
|
Init_features_request() {
|
120
|
+
mTrema = rb_define_module( "Trema" );
|
120
121
|
cFeaturesRequest = rb_define_class_under( mTrema, "FeaturesRequest", rb_cObject );
|
121
122
|
rb_define_alloc_func( cFeaturesRequest, features_request_alloc );
|
122
123
|
rb_define_method( cFeaturesRequest, "initialize", features_request_init, -1 );
|
data/ruby/trema/flow-mod.c
CHANGED
@@ -130,6 +130,7 @@ flow_mod_hard_timeout( VALUE self ) {
|
|
130
130
|
|
131
131
|
void
|
132
132
|
Init_flow_mod() {
|
133
|
+
mTrema = rb_define_module( "Trema" );
|
133
134
|
cFlowMod = rb_define_class_under( mTrema, "FlowMod", rb_cObject );
|
134
135
|
rb_define_alloc_func( cFlowMod, flow_mod_alloc );
|
135
136
|
rb_define_method( cFlowMod, "initialize", flow_mod_init, -1 );
|
data/ruby/trema/flow-removed.c
CHANGED
@@ -222,6 +222,7 @@ flow_removed_byte_count( VALUE self ) {
|
|
222
222
|
|
223
223
|
void
|
224
224
|
Init_flow_removed() {
|
225
|
+
mTrema = rb_define_module( "Trema" );
|
225
226
|
cFlowRemoved = rb_define_class_under( mTrema, "FlowRemoved", rb_cObject );
|
226
227
|
rb_define_const( cFlowRemoved, "OFPRR_IDLE_TIMEOUT", INT2NUM( OFPRR_IDLE_TIMEOUT ) );
|
227
228
|
rb_define_const( cFlowRemoved, "OFPRR_HARD_TIMEOUT", INT2NUM( OFPRR_HARD_TIMEOUT ) );
|
@@ -113,6 +113,7 @@ get_config_reply_miss_send_len( VALUE self ) {
|
|
113
113
|
|
114
114
|
void
|
115
115
|
Init_get_config_reply() {
|
116
|
+
mTrema = rb_define_module( "Trema" );
|
116
117
|
cGetConfigReply = rb_define_class_under( mTrema, "GetConfigReply", rb_cObject );
|
117
118
|
rb_define_method( cGetConfigReply, "initialize", get_config_reply_init, 1 );
|
118
119
|
rb_define_method( cGetConfigReply, "datapath_id", get_config_reply_datapath_id, 0 );
|
@@ -119,6 +119,7 @@ get_config_request_transaction_id( VALUE self ) {
|
|
119
119
|
|
120
120
|
void
|
121
121
|
Init_get_config_request() {
|
122
|
+
mTrema = rb_define_module( "Trema" );
|
122
123
|
cGetConfigRequest = rb_define_class_under( mTrema, "GetConfigRequest", rb_cObject );
|
123
124
|
rb_define_alloc_func( cGetConfigRequest, get_config_request_alloc );
|
124
125
|
rb_define_method( cGetConfigRequest, "initialize", get_config_request_init, -1 );
|
data/ruby/trema/hello.c
CHANGED
@@ -116,6 +116,7 @@ hello_transaction_id( VALUE self ) {
|
|
116
116
|
|
117
117
|
void
|
118
118
|
Init_hello() {
|
119
|
+
mTrema = rb_define_module( "Trema" );
|
119
120
|
cHello = rb_define_class_under( mTrema, "Hello", rb_cObject );
|
120
121
|
rb_define_alloc_func( cHello, hello_alloc );
|
121
122
|
rb_define_method( cHello, "initialize", hello_init, -1 );
|
data/ruby/trema/logger.c
CHANGED
@@ -143,6 +143,7 @@ logger_debug( int argc, VALUE *argv, VALUE self ) {
|
|
143
143
|
|
144
144
|
void
|
145
145
|
Init_logger() {
|
146
|
+
mTrema = rb_define_module( "Trema" );
|
146
147
|
mLogger = rb_define_module_under( mTrema, "Logger" );
|
147
148
|
|
148
149
|
rb_define_method( mLogger, "critical", logger_critical, -1 );
|
data/ruby/trema/match.c
CHANGED
@@ -562,6 +562,7 @@ match_init( int argc, VALUE *argv, VALUE self ) {
|
|
562
562
|
|
563
563
|
void
|
564
564
|
Init_match() {
|
565
|
+
mTrema = rb_define_module( "Trema" );
|
565
566
|
cMatch = rb_define_class_under( mTrema, "Match", rb_cObject );
|
566
567
|
rb_define_alloc_func( cMatch, match_alloc );
|
567
568
|
rb_define_const( cMatch, "OFPFW_IN_PORT", INT2NUM( OFPFW_IN_PORT ) );
|
data/ruby/trema/openflow-error.c
CHANGED
@@ -127,6 +127,7 @@ openflow_error_data( VALUE self ) {
|
|
127
127
|
|
128
128
|
void
|
129
129
|
Init_openflow_error() {
|
130
|
+
mTrema = rb_define_module( "Trema" );
|
130
131
|
cOpenflowError = rb_define_class_under( mTrema, "OpenflowError", rb_cObject );
|
131
132
|
rb_define_method( cOpenflowError, "initialize", openflow_error_init, 1 );
|
132
133
|
rb_define_method( cOpenflowError, "datapath_id", openflow_error_datapath_id, 0 );
|
data/ruby/trema/packet-in.c
CHANGED
@@ -1080,6 +1080,7 @@ void
|
|
1080
1080
|
Init_packet_in() {
|
1081
1081
|
rb_require( "trema/ip" );
|
1082
1082
|
rb_require( "trema/mac" );
|
1083
|
+
mTrema = rb_define_module( "Trema" );
|
1083
1084
|
cPacketIn = rb_define_class_under( mTrema, "PacketIn", rb_cObject );
|
1084
1085
|
rb_define_alloc_func( cPacketIn, packet_in_alloc );
|
1085
1086
|
|
data/ruby/trema/port-mod.c
CHANGED
@@ -205,6 +205,7 @@ port_mod_advertise( VALUE self ) {
|
|
205
205
|
|
206
206
|
void
|
207
207
|
Init_port_mod() {
|
208
|
+
mTrema = rb_define_module( "Trema" );
|
208
209
|
cPortMod = rb_define_class_under( mTrema, "PortMod", rb_cObject );
|
209
210
|
rb_define_alloc_func( cPortMod, port_mod_alloc );
|
210
211
|
rb_define_method( cPortMod, "initialize", port_mod_init, -1 );
|
data/ruby/trema/port-status.c
CHANGED
@@ -122,6 +122,7 @@ port_status_phy_port( VALUE self ) {
|
|
122
122
|
|
123
123
|
void
|
124
124
|
Init_port_status() {
|
125
|
+
mTrema = rb_define_module( "Trema" );
|
125
126
|
cPortStatus = rb_define_class_under( mTrema, "PortStatus", rb_cObject );
|
126
127
|
|
127
128
|
rb_define_const( cPortStatus, "OFPPR_ADD", INT2NUM( OFPPR_ADD ) );
|
data/ruby/trema/port.c
CHANGED
@@ -300,6 +300,7 @@ port_compare( VALUE self, VALUE other ) {
|
|
300
300
|
|
301
301
|
void
|
302
302
|
Init_port() {
|
303
|
+
mTrema = rb_define_module( "Trema" );
|
303
304
|
cPort = rb_define_class_under( mTrema, "Port", rb_cObject );
|
304
305
|
|
305
306
|
rb_define_const( cPort, "OFPPC_PORT_DOWN", INT2NUM( OFPPC_PORT_DOWN ) );
|
@@ -112,6 +112,7 @@ queue_get_config_reply_queues( VALUE self ) {
|
|
112
112
|
void
|
113
113
|
Init_queue_get_config_reply() {
|
114
114
|
rb_require( "trema/packet-queue" );
|
115
|
+
mTrema = rb_define_module( "Trema" );
|
115
116
|
cQueueGetConfigReply = rb_define_class_under( mTrema, "QueueGetConfigReply", rb_cObject );
|
116
117
|
rb_define_method( cQueueGetConfigReply, "initialize", queue_get_config_reply_init, 1 );
|
117
118
|
rb_define_method( cQueueGetConfigReply, "datapath_id", queue_get_config_reply_datapath_id, 0 );
|
@@ -125,6 +125,7 @@ queue_get_config_request_port( VALUE self ) {
|
|
125
125
|
|
126
126
|
void
|
127
127
|
Init_queue_get_config_request() {
|
128
|
+
mTrema = rb_define_module( "Trema" );
|
128
129
|
cQueueGetConfigRequest = rb_define_class_under( mTrema, "QueueGetConfigRequest", rb_cObject );
|
129
130
|
rb_define_alloc_func( cQueueGetConfigRequest, queue_get_config_request_alloc );
|
130
131
|
rb_define_method( cQueueGetConfigRequest, "initialize", queue_get_config_request_init, -1 );
|
data/ruby/trema/send-out-port.rb
CHANGED
data/ruby/trema/set-config.c
CHANGED
@@ -147,6 +147,7 @@ set_config_miss_send_len( VALUE self ) {
|
|
147
147
|
|
148
148
|
void
|
149
149
|
Init_set_config() {
|
150
|
+
mTrema = rb_define_module( "Trema" );
|
150
151
|
cSetConfig = rb_define_class_under( mTrema, "SetConfig", rb_cObject );
|
151
152
|
rb_define_alloc_func( cSetConfig, set_config_alloc );
|
152
153
|
rb_define_const( cSetConfig, "OFPC_FRAG_NORMAL", INT2NUM( OFPC_FRAG_NORMAL ) );
|
data/ruby/trema/set-eth-addr.rb
CHANGED
@@ -27,6 +27,8 @@ module Trema
|
|
27
27
|
#
|
28
28
|
# Creates an action to modify the destination Ethernet address of a packet.
|
29
29
|
#
|
30
|
+
# @overload initialize(mac_address)
|
31
|
+
#
|
30
32
|
# @example
|
31
33
|
# SetEthDstAddr.new("11:22:33:44:55:66")
|
32
34
|
# SetEthDstAddr.new(0x112233445566)
|
@@ -38,14 +40,6 @@ module Trema
|
|
38
40
|
# @raise [ArgumentError] if invalid format is detected.
|
39
41
|
# @raise [TypeError] if supplied argument is not a String or Integer or Mac.
|
40
42
|
#
|
41
|
-
def initialize mac_address
|
42
|
-
super mac_address
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
def to_s
|
47
|
-
"SetEthDstAddr: mac_address=#{ @mac_address }"
|
48
|
-
end
|
49
43
|
end
|
50
44
|
|
51
45
|
|
@@ -27,6 +27,8 @@ module Trema
|
|
27
27
|
#
|
28
28
|
# Creates an action to modify the source Ethernet address of a packet.
|
29
29
|
#
|
30
|
+
# @overload initialize(mac_address)
|
31
|
+
#
|
30
32
|
# @example
|
31
33
|
# SetEthSrcAddr.new("11:22:33:44:55:66")
|
32
34
|
# SetEthSrcAddr.new(0x112233445566)
|
@@ -38,14 +40,6 @@ module Trema
|
|
38
40
|
# @raise [ArgumentError] if invalid format is detected.
|
39
41
|
# @raise [TypeError] if supplied argument is not a String or Integer or Mac.
|
40
42
|
#
|
41
|
-
def initialize mac_address
|
42
|
-
super mac_address
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
def to_s
|
47
|
-
"SetEthSrcAddr: mac_address=#{ @mac_address }"
|
48
|
-
end
|
49
43
|
end
|
50
44
|
|
51
45
|
|
data/ruby/trema/stats-reply.c
CHANGED
@@ -148,6 +148,7 @@ Init_stats_reply() {
|
|
148
148
|
rb_require( "trema/port-stats-reply" );
|
149
149
|
rb_require( "trema/queue-stats-reply" );
|
150
150
|
rb_require( "trema/vendor-stats-reply" );
|
151
|
+
mTrema = rb_define_module( "Trema" );
|
151
152
|
cStatsReply = rb_define_class_under( mTrema, "StatsReply", rb_cObject );
|
152
153
|
rb_define_const( cStatsReply, "OFPST_DESC", INT2NUM( OFPST_DESC ) );
|
153
154
|
rb_define_const( cStatsReply, "OFPST_FLOW", INT2NUM( OFPST_FLOW ) );
|
data/ruby/trema/stats-request.c
CHANGED
@@ -618,6 +618,7 @@ vendor_stats_request_init( int argc, VALUE *argv, VALUE self ) {
|
|
618
618
|
|
619
619
|
void
|
620
620
|
Init_stats_request() {
|
621
|
+
mTrema = rb_define_module( "Trema" );
|
621
622
|
cStatsRequest = rb_define_class_under( mTrema, "StatsRequest", rb_cObject );
|
622
623
|
|
623
624
|
cDescStatsRequest = rb_define_class_under( mTrema, "DescStatsRequest", cStatsRequest );
|
data/ruby/trema/switch.c
CHANGED
data/ruby/trema/vendor.c
CHANGED
@@ -177,6 +177,7 @@ vendor_data( VALUE self ) {
|
|
177
177
|
|
178
178
|
void
|
179
179
|
Init_vendor() {
|
180
|
+
mTrema = rb_define_module( "Trema" );
|
180
181
|
cVendor = rb_define_class_under( mTrema, "Vendor", rb_cObject );
|
181
182
|
rb_define_alloc_func( cVendor, vendor_alloc );
|
182
183
|
rb_define_method( cVendor, "initialize", vendor_init, -1 );
|
data/ruby/trema/version.rb
CHANGED
@@ -30,7 +30,7 @@ describe SendOutPort, :type => "actions" do
|
|
30
30
|
|
31
31
|
its( :port_number ) { should eq( 1 ) }
|
32
32
|
its( :max_len ) { should eq( 2 ** 16 - 1 ) }
|
33
|
-
its( :to_s ) { should eq( "SendOutPort: port_number=1, max_len=65535" ) }
|
33
|
+
its( :to_s ) { should eq( "Trema::SendOutPort: port_number=1, max_len=65535" ) }
|
34
34
|
end
|
35
35
|
|
36
36
|
|
@@ -47,6 +47,12 @@ describe SendOutPort, :type => "actions" do
|
|
47
47
|
sleep 2
|
48
48
|
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
49
49
|
expect( vswitch( "0xabc" ).flows[ 0 ].actions ).to eq( "output:10" )
|
50
|
+
pending( "Test actions as an object using Trema::Switch" ) do
|
51
|
+
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
52
|
+
expect( vswitch( "0xabc" ).flows[ 0 ] ).to have( 1 ).actions
|
53
|
+
expect( vswitch( "0xabc" ).flows[ 0 ].actions[ 0 ] ).to be_a( SendOutPort )
|
54
|
+
expect( vswitch( "0xabc" ).flows[ 0 ].actions[ 0 ].port_number ).to eq( 10 )
|
55
|
+
end
|
50
56
|
}
|
51
57
|
end
|
52
58
|
end
|
@@ -66,7 +72,7 @@ describe SendOutPort, :type => "actions" do
|
|
66
72
|
|
67
73
|
its( :port_number ) { should eq( 1 ) }
|
68
74
|
its( :max_len ) { should eq( 2 ** 16 - 1 ) }
|
69
|
-
its( :to_s ) { should eq( "SendOutPort: port_number=1, max_len=65535" ) }
|
75
|
+
its( :to_s ) { should eq( "Trema::SendOutPort: port_number=1, max_len=65535" ) }
|
70
76
|
end
|
71
77
|
end
|
72
78
|
|
@@ -80,7 +86,7 @@ describe SendOutPort, :type => "actions" do
|
|
80
86
|
|
81
87
|
its( :port_number ) { should eq( 1 ) }
|
82
88
|
its( :max_len ) { should eq( 256 ) }
|
83
|
-
its( :to_s ) { should eq( "SendOutPort: port_number=1, max_len=256" ) }
|
89
|
+
its( :to_s ) { should eq( "Trema::SendOutPort: port_number=1, max_len=256" ) }
|
84
90
|
end
|
85
91
|
|
86
92
|
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2008-2012 NEC Corporation
|
3
|
+
#
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License, version 2, as
|
6
|
+
# published by the Free Software Foundation.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
+
#
|
17
|
+
|
18
|
+
|
19
|
+
require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
+
require "trema"
|
21
|
+
|
22
|
+
|
23
|
+
[ SetEthSrcAddr, SetEthDstAddr ].each do | klass |
|
24
|
+
describe klass, "#new(mac_address)", :type => "actions" do
|
25
|
+
subject { klass.new( mac_address ) }
|
26
|
+
|
27
|
+
|
28
|
+
context "with mac_address (52:54:00:a8:ad:8c)" do
|
29
|
+
let( :mac_address ) { "52:54:00:a8:ad:8c" }
|
30
|
+
|
31
|
+
its( "mac_address.to_s" ) { should eq( "52:54:00:a8:ad:8c" ) }
|
32
|
+
its( :to_s ) { should eq( "#{ klass.to_s }: mac_address=52:54:00:a8:ad:8c" ) }
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
context "with mac_address (11:22:33:44:55:66)" do
|
37
|
+
let( :mac_address ) { "11:22:33:44:55:66" }
|
38
|
+
|
39
|
+
context "when set as FlowMod's action", :sudo => true do
|
40
|
+
it "should insert a new flow with action (mod_dl_{src,dst}:11:22:33:44:55:66)" do
|
41
|
+
class TestController < Controller; end
|
42
|
+
network {
|
43
|
+
vswitch { datapath_id 0xabc }
|
44
|
+
}.run( TestController ) {
|
45
|
+
controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => subject )
|
46
|
+
sleep 2
|
47
|
+
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
48
|
+
expect( vswitch( "0xabc" ).flows[ 0 ].actions ).to match( /mod_dl_(src|dst):11:22:33:44:55:66/ )
|
49
|
+
pending( "Test actions as an object using Trema::Switch" ) do
|
50
|
+
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
51
|
+
expect( vswitch( "0xabc" ).flows[ 0 ] ).to have( 1 ).actions
|
52
|
+
expect( vswitch( "0xabc" ).flows[ 0 ].actions[ 0 ] ).to be_a( klass )
|
53
|
+
expect( vswitch( "0xabc" ).flows[ 0 ].actions[ 0 ].mac_address.to_s ).to eq( "11:22:33:44:55:66" )
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
context %q{with mac_address (Mac.new("52:54:00:a8:ad:8c"))} do
|
62
|
+
let( :mac_address ) { Mac.new("52:54:00:a8:ad:8c") }
|
63
|
+
|
64
|
+
its( "mac_address.to_s" ) { should eq( "52:54:00:a8:ad:8c" ) }
|
65
|
+
its( :to_s ) { should eq( "#{ klass.to_s }: mac_address=52:54:00:a8:ad:8c" ) }
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
context "with mac_address (0x525400a8ad8c)" do
|
70
|
+
let( :mac_address ) { 0x525400a8ad8c }
|
71
|
+
|
72
|
+
its( "mac_address.to_s" ) { should eq( "52:54:00:a8:ad:8c" ) }
|
73
|
+
its( :to_s ) { should eq( "#{ klass.to_s }: mac_address=52:54:00:a8:ad:8c" ) }
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
context %q{with invalid mac_address ("INVALID MAC STRING")} do
|
78
|
+
let( :mac_address ) { "INVALID MAC STRING" }
|
79
|
+
|
80
|
+
it { expect { subject }.to raise_error( ArgumentError ) }
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
context "with invalid mac_address ([1, 2, 3])" do
|
85
|
+
let( :mac_address ) { [ 1, 2, 3 ] }
|
86
|
+
|
87
|
+
it { expect { subject }.to raise_error( TypeError ) }
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
it_validates "option is within range", :mac_address, 0..0xffffffffffff
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
### Local variables:
|
97
|
+
### mode: Ruby
|
98
|
+
### coding: utf-8-unix
|
99
|
+
### indent-tabs-mode: nil
|
100
|
+
### End:
|
data/trema.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do | s |
|
|
23
23
|
# s.add_development_dependency "rspec"
|
24
24
|
s.add_runtime_dependency "rake"
|
25
25
|
s.add_runtime_dependency "gli", "~> 2.5.2"
|
26
|
+
s.add_runtime_dependency "rdoc", "~> 3.12"
|
26
27
|
|
27
28
|
s.add_development_dependency "rake"
|
28
29
|
s.add_development_dependency "rdoc"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 5
|
10
|
+
version: 0.3.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yasuhito Takamiya
|
@@ -49,8 +49,23 @@ dependencies:
|
|
49
49
|
type: :runtime
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
prerelease: false
|
52
|
-
name:
|
52
|
+
name: rdoc
|
53
53
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 31
|
59
|
+
segments:
|
60
|
+
- 3
|
61
|
+
- 12
|
62
|
+
version: "3.12"
|
63
|
+
requirement: *id003
|
64
|
+
type: :runtime
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
prerelease: false
|
67
|
+
name: rake
|
68
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
54
69
|
none: false
|
55
70
|
requirements:
|
56
71
|
- - ">="
|
@@ -59,12 +74,12 @@ dependencies:
|
|
59
74
|
segments:
|
60
75
|
- 0
|
61
76
|
version: "0"
|
62
|
-
requirement: *
|
77
|
+
requirement: *id004
|
63
78
|
type: :development
|
64
79
|
- !ruby/object:Gem::Dependency
|
65
80
|
prerelease: false
|
66
81
|
name: rdoc
|
67
|
-
version_requirements: &
|
82
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
68
83
|
none: false
|
69
84
|
requirements:
|
70
85
|
- - ">="
|
@@ -73,12 +88,12 @@ dependencies:
|
|
73
88
|
segments:
|
74
89
|
- 0
|
75
90
|
version: "0"
|
76
|
-
requirement: *
|
91
|
+
requirement: *id005
|
77
92
|
type: :development
|
78
93
|
- !ruby/object:Gem::Dependency
|
79
94
|
prerelease: false
|
80
95
|
name: aruba
|
81
|
-
version_requirements: &
|
96
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
82
97
|
none: false
|
83
98
|
requirements:
|
84
99
|
- - ">="
|
@@ -87,7 +102,7 @@ dependencies:
|
|
87
102
|
segments:
|
88
103
|
- 0
|
89
104
|
version: "0"
|
90
|
-
requirement: *
|
105
|
+
requirement: *id006
|
91
106
|
type: :development
|
92
107
|
description: Trema is a full-stack, easy-to-use framework for developing OpenFlow controllers in Ruby and C
|
93
108
|
email:
|
@@ -380,8 +395,7 @@ files:
|
|
380
395
|
- spec/trema/queue-get-config-request_spec.rb
|
381
396
|
- spec/trema/send-out-port_spec.rb
|
382
397
|
- spec/trema/set-config_spec.rb
|
383
|
-
- spec/trema/set-eth-
|
384
|
-
- spec/trema/set-eth-src-addr_spec.rb
|
398
|
+
- spec/trema/set-eth-addr_spec.rb
|
385
399
|
- spec/trema/set-ip-dst-addr_spec.rb
|
386
400
|
- spec/trema/set-ip-src-addr_spec.rb
|
387
401
|
- spec/trema/set-ip-tos_spec.rb
|
@@ -1,78 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2012 NEC Corporation
|
3
|
-
#
|
4
|
-
# This program is free software; you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License, version 2, as
|
6
|
-
# published by the Free Software Foundation.
|
7
|
-
#
|
8
|
-
# This program is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
-
# GNU General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU General Public License along
|
14
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
-
require "trema"
|
21
|
-
|
22
|
-
|
23
|
-
describe SetEthDstAddr, ".new( mac_address )", :type => "actions" do
|
24
|
-
subject { SetEthDstAddr.new( mac_address ) }
|
25
|
-
|
26
|
-
context "with mac_address (52:54:00:a8:ad:8c)" do
|
27
|
-
let( :mac_address ) { "52:54:00:a8:ad:8c" }
|
28
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
29
|
-
its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
|
30
|
-
end
|
31
|
-
|
32
|
-
context %q{with mac_address (Mac.new("52:54:00:a8:ad:8c"))} do
|
33
|
-
let( :mac_address ) { Mac.new("52:54:00:a8:ad:8c") }
|
34
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
35
|
-
its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with mac_address (0x525400a8ad8c)" do
|
39
|
-
let( :mac_address ) { 0x525400a8ad8c }
|
40
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
41
|
-
its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
|
42
|
-
end
|
43
|
-
|
44
|
-
context %q{with invalid mac_address ("INVALID MAC STRING")} do
|
45
|
-
let( :mac_address ) { "INVALID MAC STRING" }
|
46
|
-
it { expect { subject }.to raise_error( ArgumentError ) }
|
47
|
-
end
|
48
|
-
|
49
|
-
context "with invalid mac_address ([1, 2, 3])" do
|
50
|
-
let( :mac_address ) { [ 1, 2, 3 ] }
|
51
|
-
it { expect { subject }.to raise_error( TypeError ) }
|
52
|
-
end
|
53
|
-
|
54
|
-
it_validates "option is within range", :mac_address, 0..0xffffffffffff
|
55
|
-
|
56
|
-
context "when sending a Flow Mod with action set to SetEthDstAddr" do
|
57
|
-
let( :mac_address ) { "52:54:00:a8:ad:8c" }
|
58
|
-
|
59
|
-
it "should insert a new flow with action set to mod_dl_dst" do
|
60
|
-
class TestController < Controller; end
|
61
|
-
network {
|
62
|
-
vswitch { datapath_id 0xabc }
|
63
|
-
}.run( TestController ) {
|
64
|
-
controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => subject )
|
65
|
-
sleep 2
|
66
|
-
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
67
|
-
expect( vswitch( "0xabc" ).flows[ 0 ].actions ).to eq( "mod_dl_dst:52:54:00:a8:ad:8c" )
|
68
|
-
}
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
### Local variables:
|
75
|
-
### mode: Ruby
|
76
|
-
### coding: utf-8-unix
|
77
|
-
### indent-tabs-mode: nil
|
78
|
-
### End:
|
@@ -1,78 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (C) 2008-2012 NEC Corporation
|
3
|
-
#
|
4
|
-
# This program is free software; you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License, version 2, as
|
6
|
-
# published by the Free Software Foundation.
|
7
|
-
#
|
8
|
-
# This program is distributed in the hope that it will be useful,
|
9
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
-
# GNU General Public License for more details.
|
12
|
-
#
|
13
|
-
# You should have received a copy of the GNU General Public License along
|
14
|
-
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
-
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
|
20
|
-
require "trema"
|
21
|
-
|
22
|
-
|
23
|
-
describe SetEthSrcAddr, ".new( mac_address )", :type => "actions" do
|
24
|
-
subject { SetEthSrcAddr.new( mac_address ) }
|
25
|
-
|
26
|
-
context "with mac_address (52:54:00:a8:ad:8c)" do
|
27
|
-
let( :mac_address ) { "52:54:00:a8:ad:8c" }
|
28
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
29
|
-
its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
|
30
|
-
end
|
31
|
-
|
32
|
-
context %q{with mac_address (Mac.new("52:54:00:a8:ad:8c"))} do
|
33
|
-
let( :mac_address ) { Mac.new("52:54:00:a8:ad:8c") }
|
34
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
35
|
-
its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with mac_address (0x525400a8ad8c)" do
|
39
|
-
let( :mac_address ) { 0x525400a8ad8c }
|
40
|
-
its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
|
41
|
-
its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
|
42
|
-
end
|
43
|
-
|
44
|
-
context %q{with invalid mac_address ("INVALID MAC STRING")} do
|
45
|
-
let( :mac_address ) { "INVALID MAC STRING" }
|
46
|
-
it { expect { subject }.to raise_error( ArgumentError ) }
|
47
|
-
end
|
48
|
-
|
49
|
-
context "with invalid mac_address ([1, 2, 3])" do
|
50
|
-
let( :mac_address ) { [ 1, 2, 3 ] }
|
51
|
-
it { expect { subject }.to raise_error( TypeError ) }
|
52
|
-
end
|
53
|
-
|
54
|
-
it_validates "option is within range", :mac_address, 0..0xffffffffffff
|
55
|
-
|
56
|
-
context "when sending a Flow Mod with action set to SetEthSrcAddr" do
|
57
|
-
let( :mac_address ) { "52:54:00:a8:ad:8c" }
|
58
|
-
|
59
|
-
it "should insert a new flow with action set to mod_dl_src" do
|
60
|
-
class TestController < Controller; end
|
61
|
-
network {
|
62
|
-
vswitch { datapath_id 0xabc }
|
63
|
-
}.run( TestController ) {
|
64
|
-
controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => subject )
|
65
|
-
sleep 2
|
66
|
-
expect( vswitch( "0xabc" ) ).to have( 1 ).flows
|
67
|
-
expect( vswitch( "0xabc" ).flows[ 0 ].actions ).to eq( "mod_dl_src:52:54:00:a8:ad:8c" )
|
68
|
-
}
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
### Local variables:
|
75
|
-
### mode: Ruby
|
76
|
-
### coding: utf-8-unix
|
77
|
-
### indent-tabs-mode: nil
|
78
|
-
### End:
|