trema 0.3.21 → 0.4.0

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.
@@ -1,3 +1,4 @@
1
+ @wip
1
2
  Feature: Ruby methods for deleting switch event forwarding entry
2
3
 
3
4
  There are three Ruby methods provided for deleting switch event forwarding entries.
@@ -1,3 +1,4 @@
1
+ @wip
1
2
  Feature: Ruby methods for dumping switch event forwarding entry
2
3
 
3
4
  There are two Ruby methods provided for dumping switch event forwarding entry.
@@ -1,3 +1,4 @@
1
+ @wip
1
2
  Feature: Ruby methods for setting switch event forwarding entry
2
3
 
3
4
  There are two Ruby methods provided for setting switch event forwarding entry.
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Copyright (C) 2008-2013 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
+ #ifndef COMPAT_H
20
+ #define COMPAT_H
21
+
22
+
23
+ #ifndef RARRAY_LEN
24
+ #define RARRAY_LEN( ary ) RARRAY( ary )->len
25
+ #endif
26
+
27
+
28
+ #endif // COMPAT_H
29
+
30
+
31
+ /*
32
+ * Local variables:
33
+ * c-basic-offset: 2
34
+ * indent-tabs-mode: nil
35
+ * End:
36
+ */
@@ -44,7 +44,7 @@ VALUE cController;
44
44
 
45
45
  static void
46
46
  handle_timer_event( void *self ) {
47
- if ( rb_respond_to( ( VALUE ) self, rb_intern( "handle_timer_event" ) ) == Qtrue ) {
47
+ if ( rb_respond_to( ( VALUE ) self, rb_intern( "handle_timer_event" ) ) ) {
48
48
  rb_funcall( ( VALUE ) self, rb_intern( "handle_timer_event" ), 0 );
49
49
  }
50
50
  }
@@ -195,8 +195,9 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
195
195
  struct ofp_match default_match;
196
196
  memset( &default_match, 0, sizeof( struct ofp_match ) );
197
197
  default_match.wildcards = OFPFW_ALL;
198
+ uint32_t transaction_id;
198
199
  struct ofp_match *match = &default_match;
199
- uint64_t cookie = get_cookie();
200
+ uint64_t cookie;
200
201
  uint16_t idle_timeout = 0;
201
202
  uint16_t hard_timeout = 0;
202
203
  uint16_t priority = UINT16_MAX;
@@ -207,6 +208,14 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
207
208
 
208
209
  // Options
209
210
  if ( options != Qnil ) {
211
+ VALUE opt_transaction_id = rb_hash_aref( options, ID2SYM( rb_intern( "transaction_id" ) ) );
212
+ if ( opt_transaction_id != Qnil ) {
213
+ transaction_id = ( uint32_t ) NUM2ULONG( opt_transaction_id );
214
+ }
215
+ else {
216
+ transaction_id = get_transaction_id();
217
+ }
218
+
210
219
  VALUE opt_match = rb_hash_aref( options, ID2SYM( rb_intern( "match" ) ) );
211
220
  if ( opt_match != Qnil ) {
212
221
  Data_Get_Struct( opt_match, struct ofp_match, match );
@@ -216,6 +225,9 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
216
225
  if ( opt_cookie != Qnil ) {
217
226
  cookie = NUM2ULL( opt_cookie );
218
227
  }
228
+ else {
229
+ cookie = get_cookie();
230
+ }
219
231
 
220
232
  VALUE opt_idle_timeout = rb_hash_aref( options, ID2SYM( rb_intern( "idle_timeout" ) ) );
221
233
  if ( opt_idle_timeout != Qnil ) {
@@ -264,7 +276,7 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
264
276
  }
265
277
 
266
278
  buffer *flow_mod = create_flow_mod(
267
- get_transaction_id(),
279
+ transaction_id,
268
280
  *match,
269
281
  cookie,
270
282
  command,
@@ -302,6 +314,10 @@ controller_send_flow_mod( uint16_t command, int argc, VALUE *argv, VALUE self )
302
314
  * the options to create a message with.
303
315
  *
304
316
  *
317
+ * @option options [Number, nil] :transaction_id (nil)
318
+ * Transaction ids, message sequence numbers matching requests to replies.
319
+ * nil means automatically generate transaction ID.
320
+ *
305
321
  * @option options [Match, nil] :match (nil)
306
322
  * A {Match} object describing the fields of the flow.
307
323
  *
@@ -536,16 +552,16 @@ controller_send_packet_out( int argc, VALUE *argv, VALUE self ) {
536
552
  */
537
553
  static VALUE
538
554
  controller_run( VALUE self ) {
539
- setenv( "TREMA_HOME", STR2CSTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
555
+ setenv( "TREMA_HOME", RSTRING_PTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
540
556
 
541
557
  VALUE name = rb_funcall( self, rb_intern( "name" ), 0 );
542
558
  rb_gv_set( "$PROGRAM_NAME", name );
543
559
 
544
560
  int argc = 3;
545
561
  char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
546
- argv[ 0 ] = STR2CSTR( name );
562
+ argv[ 0 ] = RSTRING_PTR( name );
547
563
  argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
548
- argv[ 2 ] = STR2CSTR( name );
564
+ argv[ 2 ] = RSTRING_PTR( name );
549
565
  argv[ 3 ] = NULL;
550
566
  init_trema( &argc, &argv );
551
567
  xfree( argv );
@@ -571,7 +587,7 @@ controller_run( VALUE self ) {
571
587
  interval.it_value.tv_nsec = 0;
572
588
  add_timer_event_callback( &interval, handle_timer_event, ( void * ) self );
573
589
 
574
- if ( rb_respond_to( self, rb_intern( "start" ) ) == Qtrue ) {
590
+ if ( rb_respond_to( self, rb_intern( "start" ) ) ) {
575
591
  rb_funcall( self, rb_intern( "start" ), 0 );
576
592
  }
577
593
 
@@ -28,7 +28,7 @@ VALUE mDefaultLogger;
28
28
  static VALUE
29
29
  do_log( void ( *log_function )( const char *format, ... ), int argc, VALUE *argv ) {
30
30
  VALUE message = rb_f_sprintf( argc, argv );
31
- log_function( STR2CSTR( message ) );
31
+ log_function( RSTRING_PTR( message ) );
32
32
  return message;
33
33
  }
34
34
 
@@ -245,7 +245,7 @@ Init_features_reply() {
245
245
 
246
246
  void
247
247
  handle_switch_ready( uint64_t datapath_id, void *controller ) {
248
- if ( rb_respond_to( ( VALUE ) controller, rb_intern( "switch_ready" ) ) == Qtrue ) {
248
+ if ( rb_respond_to( ( VALUE ) controller, rb_intern( "switch_ready" ) ) ) {
249
249
  rb_funcall( ( VALUE ) controller, rb_intern( "switch_ready" ), 1, ULL2NUM( datapath_id ) );
250
250
  }
251
251
  }
@@ -18,6 +18,7 @@
18
18
  #include <assert.h>
19
19
  #include "ruby.h"
20
20
  #include "switch-event.h"
21
+ #include "compat.h"
21
22
 
22
23
  #include "trema.h"
23
24
 
@@ -100,7 +101,7 @@ add_forward_entry_to_all_switches( VALUE self, VALUE type, VALUE service_name )
100
101
  return Qfalse;
101
102
  }
102
103
 
103
- const char *c_service_name = StringValuePtr( service_name );
104
+ const char *c_service_name = RSTRING_PTR( service_name );
104
105
  if ( strlen( c_service_name ) == 0 ) {
105
106
  warn( "service_name cannot be empty" );
106
107
  return Qfalse;
@@ -149,7 +150,7 @@ delete_forward_entry_from_all_switches( VALUE self, VALUE type,
149
150
  return Qfalse;
150
151
  }
151
152
 
152
- const char *c_service_name = StringValuePtr( service_name );
153
+ const char *c_service_name = RSTRING_PTR( service_name );
153
154
  if ( strlen( c_service_name ) == 0 ) {
154
155
  warn( "service_name cannot be empty" );
155
156
  return Qfalse;
@@ -225,7 +226,7 @@ add_forward_entry_to_switch( VALUE self, VALUE dpid, VALUE type,
225
226
  }
226
227
 
227
228
  const uint64_t c_dpid = NUM2ULL( dpid );
228
- const char *c_service_name = StringValuePtr( service_name );
229
+ const char *c_service_name = RSTRING_PTR( service_name );
229
230
  if ( strlen( c_service_name ) == 0 ) {
230
231
  warn( "service_name cannot be empty" );
231
232
  return Qfalse;
@@ -277,7 +278,7 @@ delete_forward_entry_from_switch( VALUE self, VALUE dpid, VALUE type,
277
278
  }
278
279
 
279
280
  const uint64_t c_dpid = NUM2ULL( dpid );
280
- const char *c_service_name = StringValuePtr( service_name );
281
+ const char *c_service_name = RSTRING_PTR( service_name );
281
282
  if ( strlen( c_service_name ) == 0 ) {
282
283
  warn( "service_name cannot be empty" );
283
284
  return Qfalse;
@@ -331,9 +332,9 @@ set_forward_entries_to_switch( VALUE self, VALUE dpid, VALUE type,
331
332
  const uint64_t c_dpid = NUM2ULL( dpid );
332
333
  list_element *service_list = NULL;
333
334
  create_list( &service_list );
334
- for ( long i = 0 ; i < RARRAY( service_names )->len ; ++i ) {
335
+ for ( long i = 0 ; i < RARRAY_LEN( service_names ) ; ++i ) {
335
336
  VALUE ruby_service_name = rb_ary_entry( service_names, i );
336
- char *c_service_name = StringValuePtr( ruby_service_name );
337
+ char *c_service_name = RSTRING_PTR( ruby_service_name );
337
338
  if ( strlen( c_service_name ) == 0 ) {
338
339
  warn( "Ignoring empty service_name" );
339
340
  continue;
@@ -433,7 +434,7 @@ add_forward_entry_to_switch_manager( VALUE self, VALUE type,
433
434
  return Qfalse;
434
435
  }
435
436
 
436
- const char *c_service_name = StringValuePtr( service_name );
437
+ const char *c_service_name = RSTRING_PTR( service_name );
437
438
  if ( strlen( c_service_name ) == 0 ) {
438
439
  warn( "service_name cannot be empty" );
439
440
  return Qfalse;
@@ -483,7 +484,7 @@ delete_forward_entry_from_switch_manager( VALUE self, VALUE type,
483
484
  return Qfalse;
484
485
  }
485
486
 
486
- const char *c_service_name = StringValuePtr( service_name );
487
+ const char *c_service_name = RSTRING_PTR( service_name );
487
488
  if ( strlen( c_service_name ) == 0 ) {
488
489
  warn( "service_name cannot be empty" );
489
490
  return Qfalse;
@@ -535,9 +536,9 @@ set_forward_entries_to_switch_manager( VALUE self, VALUE type,
535
536
 
536
537
  list_element *service_list = NULL;
537
538
  create_list( &service_list );
538
- for ( long i = 0 ; i < RARRAY( service_names )->len ; ++i ) {
539
+ for ( long i = 0 ; i < RARRAY_LEN( service_names ) ; ++i ) {
539
540
  VALUE ruby_service_name = rb_ary_entry( service_names, i );
540
- char *c_service_name = StringValuePtr( ruby_service_name );
541
+ char *c_service_name = RSTRING_PTR( ruby_service_name );
541
542
  if ( strlen( c_service_name ) == 0 ) {
542
543
  warn( "Ignoring empty service_name" );
543
544
  continue;
data/ruby/trema/switch.c CHANGED
@@ -40,7 +40,7 @@ switch_send_message( VALUE self, VALUE message ) {
40
40
 
41
41
  static void
42
42
  handle_controller_connected( void *rbswitch ) {
43
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "controller_connected" ) ) == Qtrue ) {
43
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "controller_connected" ) ) ) {
44
44
  rb_funcall( ( VALUE ) rbswitch, rb_intern( "controller_connected" ), 0 );
45
45
  }
46
46
  }
@@ -48,7 +48,7 @@ handle_controller_connected( void *rbswitch ) {
48
48
 
49
49
  static void
50
50
  handle_hello( uint32_t transaction_id, uint8_t version, void *rbswitch ) {
51
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "hello" ) ) == Qtrue ) {
51
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "hello" ) ) ) {
52
52
  rb_funcall( ( VALUE ) rbswitch, rb_intern( "hello" ), 2, UINT2NUM( transaction_id ), UINT2NUM( version ) );
53
53
  }
54
54
  }
@@ -56,7 +56,7 @@ handle_hello( uint32_t transaction_id, uint8_t version, void *rbswitch ) {
56
56
 
57
57
  static void
58
58
  handle_features_request( uint32_t transaction_id, void *rbswitch ) {
59
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "features_request" ) ) == Qtrue ) {
59
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "features_request" ) ) ) {
60
60
  rb_funcall( ( VALUE ) rbswitch, rb_intern( "features_request" ), 1, UINT2NUM( transaction_id ) );
61
61
  }
62
62
  }
@@ -64,7 +64,7 @@ handle_features_request( uint32_t transaction_id, void *rbswitch ) {
64
64
 
65
65
  static void
66
66
  handle_set_config( uint32_t transaction_id, uint16_t flags, uint16_t miss_send_len, void *rbswitch ) {
67
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "set_config" ) ) == Qtrue ) {
67
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "set_config" ) ) ) {
68
68
  rb_funcall( ( VALUE ) rbswitch, rb_intern( "set_config" ), 3, UINT2NUM( transaction_id ), UINT2NUM( flags ), UINT2NUM( miss_send_len ) );
69
69
  }
70
70
  }
@@ -92,7 +92,7 @@ handle_flow_mod(
92
92
  UNUSED( out_port );
93
93
  UNUSED( flags );
94
94
  UNUSED( actions );
95
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "flow_mod" ) ) == Qtrue ) {
95
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "flow_mod" ) ) ) {
96
96
  VALUE options = rb_hash_new();
97
97
  rb_hash_aset( options, ID2SYM( rb_intern( "transaction_id" ) ), UINT2NUM( transaction_id ) );
98
98
  rb_hash_aset( options, ID2SYM( rb_intern( "command" ) ), UINT2NUM( command ) );
@@ -106,7 +106,7 @@ handle_flow_mod(
106
106
 
107
107
  static void
108
108
  handle_echo_request( uint32_t transaction_id, const buffer *body, void *rbswitch ) {
109
- if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "echo_request" ) ) == Qtrue ) {
109
+ if ( rb_respond_to( ( VALUE ) rbswitch, rb_intern( "echo_request" ) ) ) {
110
110
  VALUE rbody = rb_str_new( body->data, ( long ) body->length );
111
111
  rb_funcall( ( VALUE ) rbswitch, rb_intern( "echo_request" ), 2, UINT2NUM( transaction_id ), rbody );
112
112
  }
@@ -115,18 +115,18 @@ handle_echo_request( uint32_t transaction_id, const buffer *body, void *rbswitch
115
115
 
116
116
  static VALUE
117
117
  switch_run( VALUE self ) {
118
- setenv( "CHIBACH_HOME", STR2CSTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
118
+ setenv( "CHIBACH_HOME", RSTRING_PTR( rb_funcall( mTrema, rb_intern( "home" ), 0 ) ), 1 );
119
119
 
120
120
  VALUE name = rb_funcall( self, rb_intern( "name" ), 0 );
121
121
  rb_gv_set( "$PROGRAM_NAME", name );
122
122
 
123
123
  int argc = 6;
124
124
  char **argv = xmalloc( sizeof( char * ) * ( uint32_t ) ( argc + 1 ) );
125
- argv[ 0 ] = STR2CSTR( name );
125
+ argv[ 0 ] = RSTRING_PTR( name );
126
126
  argv[ 1 ] = ( char * ) ( uintptr_t ) "--name";
127
- argv[ 2 ] = STR2CSTR( name );
127
+ argv[ 2 ] = RSTRING_PTR( name );
128
128
  argv[ 3 ] = ( char * ) ( uintptr_t ) "--datapath_id";
129
- argv[ 4 ] = STR2CSTR( rb_funcall( rb_iv_get( self, "@dpid" ), rb_intern( "to_hex" ), 0 ) );
129
+ argv[ 4 ] = RSTRING_PTR( rb_funcall( rb_iv_get( self, "@dpid" ), rb_intern( "to_hex" ), 0 ) );
130
130
  argv[ 5 ] = ( char * ) ( uintptr_t ) "--daemonize";
131
131
  argv[ 6 ] = NULL;
132
132
  init_chibach( &argc, &argv );
@@ -139,7 +139,7 @@ switch_run( VALUE self ) {
139
139
  set_flow_mod_handler( handle_flow_mod, ( void * ) self );
140
140
  set_echo_request_handler( handle_echo_request, ( void * ) self );
141
141
 
142
- if ( rb_respond_to( self, rb_intern( "start" ) ) == Qtrue ) {
142
+ if ( rb_respond_to( self, rb_intern( "start" ) ) ) {
143
143
  rb_funcall( self, rb_intern( "start" ), 0 );
144
144
  }
145
145
 
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
  module Trema
20
- VERSION = "0.3.21"
20
+ VERSION = "0.4.0"
21
21
  end
22
22
 
23
23
 
@@ -0,0 +1,25 @@
1
+ RSpec::Matchers.define :have_constant do | const, klass |
2
+ match do | owner |
3
+ const_defined = owner.const_defined?( const )
4
+ klass_match = owner.const_get( const ).class == klass unless klass.nil?
5
+ klass.nil? ? const_defined : ( const_defined && klass_match )
6
+ end
7
+
8
+ failure_message_for_should do | actual |
9
+ msg = "constant #{ expected[ 0 ] } not defined in #{ actual }"
10
+ msg += " as a #{ expected[ 1 ] }" unless expected[ 1 ].nil?
11
+ msg
12
+ end
13
+
14
+ failure_message_for_should_not do | actual |
15
+ msg = "constant #{ expected[ 0 ] } is defined in #{ actual }"
16
+ msg += " as a #{ expected[ 1 ] }" unless expected[ 1 ].nil?
17
+ msg
18
+ end
19
+
20
+ description do
21
+ msg = "have constant #{ const }"
22
+ msg += " defined with class #{ klass }" unless klass.nil?
23
+ msg
24
+ end
25
+ end
@@ -28,6 +28,7 @@ shared_examples_for "barrier request message" do
28
28
  vswitch( "barrier-request" ) { datapath_id 0xabc }
29
29
  }.run( BarrierRequestController ) {
30
30
  controller( "BarrierRequestController" ).send_message( 0xabc, subject )
31
+ sleep 2 # FIXME: wait to send_message
31
32
  expect( IO.read( File.join( Trema.log, "openflowd.barrier-request.log" ) ) ).to include( "OFPT_BARRIER_REQUEST" )
32
33
  }
33
34
  end
@@ -22,22 +22,20 @@ require "trema"
22
22
 
23
23
  module Trema
24
24
  describe Controller do
25
- context "when using OpenFlow constants" do
26
- subject { Controller.constants }
25
+ subject { Controller }
27
26
 
28
- it { should include "OFPP_MAX" }
29
- it { should include "OFPP_IN_PORT" }
30
- it { should include "OFPP_TABLE" }
31
- it { should include "OFPP_NORMAL" }
32
- it { should include "OFPP_FLOOD" }
33
- it { should include "OFPP_ALL" }
34
- it { should include "OFPP_CONTROLLER" }
35
- it { should include "OFPP_LOCAL" }
36
- it { should include "OFPP_NONE" }
37
- end
27
+ it { should have_constant :OFPP_MAX }
28
+ it { should have_constant :OFPP_IN_PORT }
29
+ it { should have_constant :OFPP_TABLE }
30
+ it { should have_constant :OFPP_NORMAL }
31
+ it { should have_constant :OFPP_FLOOD }
32
+ it { should have_constant :OFPP_ALL }
33
+ it { should have_constant :OFPP_CONTROLLER }
34
+ it { should have_constant :OFPP_LOCAL }
35
+ it { should have_constant :OFPP_NONE }
38
36
 
39
37
 
40
- context "when logging" do
38
+ context ".new" do
41
39
  subject { Controller.new }
42
40
 
43
41
  it { should respond_to :critical }
@@ -47,21 +45,6 @@ module Trema
47
45
  it { should respond_to :info }
48
46
  it { should respond_to :debug }
49
47
  end
50
-
51
-
52
- context "when sending flow_mod messages" do
53
- it "should send a flow_mod_add message" do
54
- class FlowModAddController < Controller; end
55
-
56
- network {
57
- vswitch { datapath_id 0xabc }
58
- }.run( FlowModAddController ) {
59
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc )
60
- sleep 20 # FIXME: wait to send_flow_mod_add
61
- expect( vswitch( "0xabc" ) ).to have( 1 ).flows
62
- }
63
- end
64
- end
65
48
  end
66
49
  end
67
50
 
@@ -21,52 +21,6 @@ require "trema"
21
21
 
22
22
 
23
23
  module Trema
24
- describe Trema, ".constants", :nosudo => true do
25
- subject { Trema.constants }
26
- it { should include "OFPET_HELLO_FAILED" }
27
- it { should include "OFPHFC_INCOMPATIBLE" }
28
- it { should include "OFPHFC_EPERM" }
29
-
30
- it { should include "OFPET_BAD_REQUEST" }
31
- it { should include "OFPBRC_BAD_VERSION" }
32
- it { should include "OFPBRC_BAD_TYPE" }
33
- it { should include "OFPBRC_BAD_STAT" }
34
- it { should include "OFPBRC_BAD_VENDOR" }
35
- it { should include "OFPBRC_BAD_SUBTYPE" }
36
- it { should include "OFPBRC_EPERM" }
37
- it { should include "OFPBRC_BAD_LEN" }
38
- it { should include "OFPBRC_BUFFER_EMPTY" }
39
- it { should include "OFPBRC_BUFFER_UNKNOWN" }
40
-
41
- it { should include "OFPET_BAD_ACTION" }
42
- it { should include "OFPBAC_BAD_TYPE" }
43
- it { should include "OFPBAC_BAD_LEN" }
44
- it { should include "OFPBAC_BAD_VENDOR" }
45
- it { should include "OFPBAC_BAD_VENDOR_TYPE" }
46
- it { should include "OFPBAC_BAD_OUT_PORT" }
47
- it { should include "OFPBAC_BAD_ARGUMENT" }
48
- it { should include "OFPBAC_EPERM" }
49
- it { should include "OFPBAC_TOO_MANY" }
50
- it { should include "OFPBAC_BAD_QUEUE" }
51
-
52
- it { should include "OFPET_FLOW_MOD_FAILED" }
53
- it { should include "OFPFMFC_ALL_TABLES_FULL" }
54
- it { should include "OFPFMFC_OVERLAP" }
55
- it { should include "OFPFMFC_BAD_EMERG_TIMEOUT" }
56
- it { should include "OFPFMFC_BAD_COMMAND" }
57
- it { should include "OFPFMFC_UNSUPPORTED" }
58
-
59
- it { should include "OFPET_PORT_MOD_FAILED" }
60
- it { should include "OFPPMFC_BAD_PORT" }
61
- it { should include "OFPPMFC_BAD_HW_ADDR" }
62
-
63
- it { should include "OFPET_QUEUE_OP_FAILED" }
64
- it { should include "OFPQOFC_BAD_PORT" }
65
- it { should include "OFPQOFC_BAD_QUEUE" }
66
- it { should include "OFPQOFC_EPERM" }
67
- end
68
-
69
-
70
24
  describe Error, ".new", :nosudo => true do
71
25
  it { expect { subject }.to raise_error( ArgumentError, "Type and code are mandatory options" ) }
72
26
  end
@@ -46,7 +46,7 @@ describe "packet-out" do
46
46
 
47
47
  context "when invoked with no datapath_id" do
48
48
  it "should raise an error" do
49
- expect { PacketOutController.new.send_packet_out }.to raise_error("wrong number of arguments (0 for 1)")
49
+ expect { PacketOutController.new.send_packet_out }.to raise_error
50
50
  end
51
51
  end
52
52
 
@@ -20,11 +20,14 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe Trema::PortStatus do
24
- subject { Trema::PortStatus }
25
- its( :constants ) { should include "OFPPR_ADD" }
26
- its( :constants ) { should include "OFPPR_DELETE" }
27
- its( :constants ) { should include "OFPPR_MODIFY" }
23
+ module Trema
24
+ describe PortStatus do
25
+ subject { PortStatus }
26
+
27
+ it { should have_constant :OFPPR_ADD }
28
+ it { should have_constant :OFPPR_DELETE }
29
+ it { should have_constant :OFPPR_MODIFY }
30
+ end
28
31
  end
29
32
 
30
33
 
data/spec/trema_spec.rb CHANGED
@@ -20,30 +20,70 @@ require File.join( File.dirname( __FILE__ ), "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe Trema, ".constants" do
24
- subject { Trema.constants }
25
-
26
- it { should include "OFPC_FLOW_STATS" }
27
- it { should include "OFPC_TABLE_STATS" }
28
- it { should include "OFPC_PORT_STATS" }
29
- it { should include "OFPC_STP" }
30
- it { should include "OFPC_RESERVED" }
31
- it { should include "OFPC_IP_REASM" }
32
- it { should include "OFPC_QUEUE_STATS" }
33
- it { should include "OFPC_ARP_MATCH_IP" }
34
-
35
- it { should include "OFPAT_OUTPUT" }
36
- it { should include "OFPAT_SET_VLAN_VID" }
37
- it { should include "OFPAT_SET_VLAN_PCP" }
38
- it { should include "OFPAT_STRIP_VLAN" }
39
- it { should include "OFPAT_SET_DL_SRC" }
40
- it { should include "OFPAT_SET_DL_DST" }
41
- it { should include "OFPAT_SET_NW_SRC" }
42
- it { should include "OFPAT_SET_NW_DST" }
43
- it { should include "OFPAT_SET_NW_TOS" }
44
- it { should include "OFPAT_SET_TP_DST" }
45
- it { should include "OFPAT_ENQUEUE" }
46
- it { should include "OFPAT_VENDOR" }
23
+ describe Trema do
24
+ it { should have_constant :OFPC_FLOW_STATS }
25
+ it { should have_constant :OFPC_TABLE_STATS }
26
+ it { should have_constant :OFPC_PORT_STATS }
27
+ it { should have_constant :OFPC_STP }
28
+ it { should have_constant :OFPC_RESERVED }
29
+ it { should have_constant :OFPC_IP_REASM }
30
+ it { should have_constant :OFPC_QUEUE_STATS }
31
+ it { should have_constant :OFPC_ARP_MATCH_IP }
32
+
33
+ it { should have_constant :OFPAT_OUTPUT }
34
+ it { should have_constant :OFPAT_SET_VLAN_VID }
35
+ it { should have_constant :OFPAT_SET_VLAN_PCP }
36
+ it { should have_constant :OFPAT_STRIP_VLAN }
37
+ it { should have_constant :OFPAT_SET_DL_SRC }
38
+ it { should have_constant :OFPAT_SET_DL_DST }
39
+ it { should have_constant :OFPAT_SET_NW_SRC }
40
+ it { should have_constant :OFPAT_SET_NW_DST }
41
+ it { should have_constant :OFPAT_SET_NW_TOS }
42
+ it { should have_constant :OFPAT_SET_TP_DST }
43
+ it { should have_constant :OFPAT_ENQUEUE }
44
+ it { should have_constant :OFPAT_VENDOR }
45
+
46
+ it { should have_constant :OFPET_HELLO_FAILED }
47
+ it { should have_constant :OFPHFC_INCOMPATIBLE }
48
+ it { should have_constant :OFPHFC_EPERM }
49
+
50
+ it { should have_constant :OFPET_BAD_REQUEST }
51
+ it { should have_constant :OFPBRC_BAD_VERSION }
52
+ it { should have_constant :OFPBRC_BAD_TYPE }
53
+ it { should have_constant :OFPBRC_BAD_STAT }
54
+ it { should have_constant :OFPBRC_BAD_VENDOR }
55
+ it { should have_constant :OFPBRC_BAD_SUBTYPE }
56
+ it { should have_constant :OFPBRC_EPERM }
57
+ it { should have_constant :OFPBRC_BAD_LEN }
58
+ it { should have_constant :OFPBRC_BUFFER_EMPTY }
59
+ it { should have_constant :OFPBRC_BUFFER_UNKNOWN }
60
+
61
+ it { should have_constant :OFPET_BAD_ACTION }
62
+ it { should have_constant :OFPBAC_BAD_TYPE }
63
+ it { should have_constant :OFPBAC_BAD_LEN }
64
+ it { should have_constant :OFPBAC_BAD_VENDOR }
65
+ it { should have_constant :OFPBAC_BAD_VENDOR_TYPE }
66
+ it { should have_constant :OFPBAC_BAD_OUT_PORT }
67
+ it { should have_constant :OFPBAC_BAD_ARGUMENT }
68
+ it { should have_constant :OFPBAC_EPERM }
69
+ it { should have_constant :OFPBAC_TOO_MANY }
70
+ it { should have_constant :OFPBAC_BAD_QUEUE }
71
+
72
+ it { should have_constant :OFPET_FLOW_MOD_FAILED }
73
+ it { should have_constant :OFPFMFC_ALL_TABLES_FULL }
74
+ it { should have_constant :OFPFMFC_OVERLAP }
75
+ it { should have_constant :OFPFMFC_BAD_EMERG_TIMEOUT }
76
+ it { should have_constant :OFPFMFC_BAD_COMMAND }
77
+ it { should have_constant :OFPFMFC_UNSUPPORTED }
78
+
79
+ it { should have_constant :OFPET_PORT_MOD_FAILED }
80
+ it { should have_constant :OFPPMFC_BAD_PORT }
81
+ it { should have_constant :OFPPMFC_BAD_HW_ADDR }
82
+
83
+ it { should have_constant :OFPET_QUEUE_OP_FAILED }
84
+ it { should have_constant :OFPQOFC_BAD_PORT }
85
+ it { should have_constant :OFPQOFC_BAD_QUEUE }
86
+ it { should have_constant :OFPQOFC_EPERM }
47
87
  end
48
88
 
49
89
 
data/src/lib/checks.h CHANGED
@@ -20,9 +20,9 @@
20
20
  #define CHECKS_H
21
21
 
22
22
 
23
- #define DEPRECATED __attribute__ ( ( deprecated ) )
23
+ #define DEPRECATED_FUNCTION __attribute__ ( ( deprecated ) )
24
24
  #define UNUSED( x ) ( void ) ( x )
25
- #define UNREACHABLE() die( "unreachable code" )
25
+ #define UNREACHABLE_CODE() die( "unreachable code" )
26
26
  #define die_if_NULL( data ) \
27
27
  if ( data == NULL ) { \
28
28
  die( "Argument of %s must not be NULL.", __func__ ); \
data/src/lib/messenger.c CHANGED
@@ -269,9 +269,9 @@ init_messenger( const char *working_directory ) {
269
269
 
270
270
  strcpy( socket_directory, working_directory );
271
271
 
272
- receive_queues = create_hash( compare_string, hash_string );
273
- send_queues = create_hash( compare_string, hash_string );
274
- context_db = create_hash( compare_uint32, hash_uint32 );
272
+ receive_queues = create_hash_with_size( compare_string, hash_string, 8 );
273
+ send_queues = create_hash_with_size( compare_string, hash_string, 8 );
274
+ context_db = create_hash_with_size( compare_uint32, hash_uint32, 128 );
275
275
 
276
276
  initialized = true;
277
277
  finalized = false;