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.
Files changed (250) hide show
  1. data/.gitmodules +3 -0
  2. data/.travis.yml +13 -0
  3. data/.yardopts +4 -0
  4. data/Gemfile +2 -3
  5. data/README.md +43 -97
  6. data/Rakefile +60 -4
  7. data/Rantfile +11 -10
  8. data/cruise.rb +4 -6
  9. data/features/example.packetin_filter_config.feature +10 -10
  10. data/features/example.switch_monitor.feature +14 -2
  11. data/features/step_definitions/kill_steps.rb +2 -2
  12. data/features/step_definitions/{off_steps.rb → killall_steps.rb} +2 -2
  13. data/features/step_definitions/misc_steps.rb +1 -1
  14. data/features/step_definitions/up_steps.rb +30 -0
  15. data/features/trema.feature +1 -0
  16. data/features/trema.run.feature +1 -0
  17. data/locale/README.ja.md +19 -0
  18. data/locale/ja/yard.po +3762 -0
  19. data/locale/yard.pot +3740 -0
  20. data/ruby/extconf.rb +4 -1
  21. data/ruby/trema/action-common.c +3 -17
  22. data/ruby/trema/action-common.h +3 -7
  23. data/ruby/trema/action.rb +33 -0
  24. data/ruby/trema/app.rb +1 -1
  25. data/ruby/trema/barrier-request.c +1 -0
  26. data/ruby/trema/command/run.rb +13 -9
  27. data/ruby/trema/command/usage.rb +1 -0
  28. data/ruby/trema/command/version.rb +1 -1
  29. data/ruby/trema/controller.c +133 -50
  30. data/ruby/trema/controller.rb +2 -2
  31. data/ruby/trema/desc-stats-reply.rb +77 -0
  32. data/ruby/trema/dsl/configuration.rb +3 -14
  33. data/ruby/trema/dsl/rswitch.rb +47 -0
  34. data/ruby/trema/dsl/runner.rb +4 -1
  35. data/ruby/trema/dsl/syntax.rb +11 -8
  36. data/ruby/trema/echo-reply.c +59 -45
  37. data/ruby/trema/echo-reply.h +1 -3
  38. data/ruby/trema/echo-request.c +49 -71
  39. data/ruby/trema/echo-request.h +0 -2
  40. data/ruby/trema/echo.c +99 -0
  41. data/ruby/trema/{action-enqueue.h → echo.h} +6 -7
  42. data/ruby/trema/enqueue.rb +87 -0
  43. data/ruby/trema/error.c +109 -104
  44. data/ruby/trema/error.h +0 -2
  45. data/ruby/trema/features-reply.c +89 -35
  46. data/ruby/trema/features-reply.h +0 -6
  47. data/ruby/trema/features-request.c +63 -37
  48. data/ruby/trema/features-request.h +0 -2
  49. data/ruby/trema/flow-mod.c +149 -0
  50. data/ruby/trema/{action-output.h → flow-mod.h} +6 -6
  51. data/ruby/trema/get-config-request.c +1 -0
  52. data/ruby/trema/hardware-switch.rb +88 -0
  53. data/ruby/trema/hello.c +55 -31
  54. data/ruby/trema/hello.h +0 -2
  55. data/ruby/trema/ip.rb +12 -2
  56. data/ruby/trema/logger.rb +29 -0
  57. data/ruby/trema/mac.rb +57 -36
  58. data/ruby/trema/match.c +7 -9
  59. data/ruby/trema/monkey-patch/integer/ranges.rb +0 -2
  60. data/ruby/trema/network-component.rb +1 -1
  61. data/ruby/trema/open-vswitch.rb +2 -2
  62. data/ruby/trema/openflow-switch.rb +3 -54
  63. data/ruby/trema/{packet_in.c → packet-in.c} +262 -175
  64. data/ruby/trema/{packet_in.h → packet-in.h} +0 -2
  65. data/ruby/trema/packet-queue.rb +4 -3
  66. data/ruby/trema/port-mod.c +8 -9
  67. data/ruby/trema/port-status-add.rb +60 -0
  68. data/ruby/trema/port-status-delete.rb +60 -0
  69. data/ruby/trema/port-status-modify.rb +60 -0
  70. data/ruby/trema/port-status.c +48 -15
  71. data/ruby/trema/port-status.h +6 -8
  72. data/ruby/trema/port.c +63 -8
  73. data/ruby/trema/queue-get-config-request.c +1 -0
  74. data/ruby/trema/ruby-switch.rb +62 -0
  75. data/ruby/trema/send-out-port.rb +97 -0
  76. data/ruby/trema/set-config.c +1 -0
  77. data/ruby/trema/set-eth-addr.rb +45 -0
  78. data/ruby/trema/set-eth-dst-addr.rb +54 -0
  79. data/ruby/trema/set-eth-src-addr.rb +54 -0
  80. data/ruby/trema/set-ip-addr.rb +47 -0
  81. data/ruby/trema/set-ip-dst-addr.rb +53 -0
  82. data/ruby/trema/set-ip-src-addr.rb +52 -0
  83. data/ruby/trema/set-ip-tos.rb +63 -0
  84. data/ruby/trema/set-transport-dst-port.rb +53 -0
  85. data/ruby/trema/set-transport-port.rb +52 -0
  86. data/ruby/trema/set-transport-src-port.rb +54 -0
  87. data/ruby/trema/set-vlan-priority.rb +65 -0
  88. data/ruby/trema/set-vlan-vid.rb +64 -0
  89. data/ruby/trema/shell/down.rb +1 -1
  90. data/ruby/trema/shell/link.rb +4 -4
  91. data/ruby/trema/shell/run.rb +8 -6
  92. data/ruby/trema/shell/up.rb +3 -3
  93. data/ruby/trema/stats-reply.c +27 -2
  94. data/ruby/trema/stats-request.c +64 -23
  95. data/ruby/trema/strip-vlan-header.rb +41 -0
  96. data/ruby/trema/switch.c +196 -0
  97. data/ruby/trema/{action-vendor.h → switch.h} +5 -7
  98. data/ruby/trema/switch.rb +28 -9
  99. data/ruby/trema/trema-ruby-utils.c +66 -0
  100. data/ruby/trema/{action-set-dl-src.h → trema-ruby-utils.h} +9 -11
  101. data/ruby/trema/trema.c +61 -61
  102. data/ruby/trema/vendor-action.rb +73 -0
  103. data/ruby/trema/vendor.c +121 -52
  104. data/ruby/trema/vendor.h +6 -10
  105. data/ruby/trema/version.rb +1 -1
  106. data/spec/spec_helper.rb +1 -1
  107. data/spec/support/action.rb +52 -0
  108. data/spec/support/mandatory-option.rb +56 -0
  109. data/spec/support/openflow-message.rb +91 -7
  110. data/spec/support/port-status.rb +38 -0
  111. data/spec/trema/controller_spec.rb +0 -26
  112. data/spec/trema/dsl/configuration_spec.rb +3 -3
  113. data/spec/trema/dsl/runner_spec.rb +12 -32
  114. data/spec/trema/dsl/syntax_spec.rb +2 -11
  115. data/spec/trema/echo-reply_spec.rb +49 -14
  116. data/spec/trema/echo-request_spec.rb +86 -34
  117. data/spec/trema/enqueue_spec.rb +76 -0
  118. data/spec/trema/error_spec.rb +43 -58
  119. data/spec/trema/features-reply_spec.rb +58 -24
  120. data/spec/trema/features-request_spec.rb +54 -28
  121. data/spec/trema/flow-mod_spec.rb +99 -0
  122. data/spec/trema/{openflow-switch_spec.rb → hardware-switch_spec.rb} +3 -3
  123. data/spec/trema/hello_spec.rb +28 -14
  124. data/spec/trema/ip_spec.rb +54 -0
  125. data/spec/trema/mac_spec.rb +49 -64
  126. data/spec/trema/match_spec.rb +1 -1
  127. data/spec/trema/open-vswitch_spec.rb +7 -7
  128. data/spec/trema/packet-in_spec.rb +73 -16
  129. data/spec/trema/port-status-add_spec.rb +32 -0
  130. data/spec/trema/port-status-delete_spec.rb +32 -0
  131. data/spec/trema/port-status-modify_spec.rb +71 -0
  132. data/spec/trema/port-status_spec.rb +5 -76
  133. data/spec/trema/{action-output_spec.rb → send-out-port_spec.rb} +20 -47
  134. data/spec/trema/set-eth-dst-addr_spec.rb +75 -0
  135. data/spec/trema/set-eth-src-addr_spec.rb +72 -0
  136. data/spec/trema/set-ip-dst-addr_spec.rb +58 -0
  137. data/spec/trema/set-ip-src-addr_spec.rb +58 -0
  138. data/spec/trema/set-ip-tos_spec.rb +65 -0
  139. data/spec/trema/set-transport-dst-port_spec.rb +65 -0
  140. data/spec/trema/set-transport-src-port_spec.rb +65 -0
  141. data/spec/trema/set-vlan-priority_spec.rb +65 -0
  142. data/spec/trema/set-vlan-vid_spec.rb +65 -0
  143. data/spec/trema/shell/vhost_spec.rb +4 -1
  144. data/spec/trema/shell/vswitch_spec.rb +11 -11
  145. data/spec/trema/stats-reply_spec.rb +59 -13
  146. data/spec/trema/stats-request_spec.rb +6 -0
  147. data/spec/trema/{action-strip-vlan_spec.rb → strip-vlan-header_spec.rb} +3 -17
  148. data/spec/trema/switch-daemon_spec.rb +39 -0
  149. data/spec/trema/vendor-action_spec.rb +81 -0
  150. data/spec/trema/vendor_spec.rb +76 -0
  151. data/spec/trema_spec.rb +56 -0
  152. data/src/examples/dumper/dumper.c +0 -8
  153. data/src/examples/dumper/dumper.rb +52 -52
  154. data/src/examples/hello_trema/hello_trema.c +0 -2
  155. data/src/examples/learning_switch/learning-switch.rb +3 -3
  156. data/src/examples/multi_learning_switch/multi-learning-switch.rb +3 -3
  157. data/src/examples/openflow_message/features-request.rb +3 -3
  158. data/src/examples/packetin_filter_config/utils.c +4 -4
  159. data/src/examples/repeater_hub/repeater-hub.rb +3 -3
  160. data/src/examples/switch_info/switch_info.rb +2 -2
  161. data/src/examples/switch_monitor/switch_monitor.c +1 -1
  162. data/src/examples/traffic_monitor/traffic-monitor.rb +3 -3
  163. data/src/lib/arp.h +4 -1
  164. data/src/lib/chibach.c +391 -0
  165. data/src/lib/chibach.h +71 -0
  166. data/src/lib/chibach_private.c +170 -0
  167. data/src/lib/chibach_private.h +52 -0
  168. data/src/lib/ether.c +2 -1
  169. data/src/lib/ether.h +0 -1
  170. data/src/lib/ipv4.h +13 -14
  171. data/{ruby/trema/action-set-nw-src.h → src/lib/ipv6.h} +13 -9
  172. data/src/lib/log.c +161 -58
  173. data/src/lib/log.h +11 -16
  174. data/src/lib/messenger.c +36 -1
  175. data/src/lib/messenger.h +1 -0
  176. data/src/lib/openflow_application_interface.c +128 -28
  177. data/src/lib/openflow_application_interface.h +31 -6
  178. data/src/lib/openflow_message.c +2 -1
  179. data/src/lib/openflow_service_interface.h +1 -0
  180. data/src/lib/openflow_switch_interface.c +1380 -0
  181. data/src/lib/openflow_switch_interface.h +264 -0
  182. data/src/lib/packet_info.c +94 -11
  183. data/src/lib/packet_info.h +22 -3
  184. data/src/lib/packet_parser.c +38 -2
  185. data/src/lib/secure_channel.c +498 -0
  186. data/{ruby/trema/vendor-request.h → src/lib/secure_channel.h} +11 -10
  187. data/src/lib/tcp.h +0 -3
  188. data/src/lib/trema.c +38 -5
  189. data/{ruby/trema/action-set-nw-dst.h → src/lib/trema.hpp} +17 -8
  190. data/src/lib/trema_wrapper.c +5 -0
  191. data/src/lib/trema_wrapper.h +4 -0
  192. data/src/lib/utility.c +93 -4
  193. data/src/lib/utility.h +1 -0
  194. data/src/lib/wrapper.c +30 -7
  195. data/src/lib/wrapper.h +2 -0
  196. data/src/switch_manager/ofpmsg_recv.c +44 -30
  197. data/src/switch_manager/ofpmsg_send.c +40 -1
  198. data/src/switch_manager/ofpmsg_send.h +2 -0
  199. data/src/switch_manager/switch.c +153 -8
  200. data/src/switch_manager/switch.h +1 -0
  201. data/src/switch_manager/switchinfo.h +5 -0
  202. data/src/tremashark/README +2 -2
  203. data/src/tremashark/plugin/packet-trema/packet-trema.c +1 -0
  204. data/trema +1 -1
  205. data/unittests/lib/log_test.c +158 -34
  206. data/unittests/lib/openflow_application_interface_test.c +252 -69
  207. data/unittests/lib/openflow_message_test.c +3 -1
  208. data/unittests/lib/packet_parser_test.c +60 -15
  209. data/unittests/lib/test_packets/icmp6_echo_rep.cap +0 -0
  210. data/unittests/lib/test_packets/icmp6_echo_req.cap +0 -0
  211. data/unittests/lib/trema_test.c +2 -0
  212. data/unittests/lib/utility_test.c +65 -2
  213. data/unittests/lib/wrapper_test.c +29 -0
  214. data/vendor/{README → README.md} +2 -12
  215. data/vendor/packet-openflow.diff +13 -0
  216. metadata +86 -53
  217. data/GPL2 +0 -339
  218. data/ruby/trema/action-enqueue.c +0 -161
  219. data/ruby/trema/action-output.c +0 -169
  220. data/ruby/trema/action-set-dl-dst.c +0 -131
  221. data/ruby/trema/action-set-dl-dst.h +0 -44
  222. data/ruby/trema/action-set-dl-src.c +0 -131
  223. data/ruby/trema/action-set-nw-dst.c +0 -135
  224. data/ruby/trema/action-set-nw-src.c +0 -140
  225. data/ruby/trema/action-set-nw-tos.c +0 -124
  226. data/ruby/trema/action-set-nw-tos.h +0 -42
  227. data/ruby/trema/action-set-tp-dst.c +0 -122
  228. data/ruby/trema/action-set-tp-dst.h +0 -42
  229. data/ruby/trema/action-set-tp-src.c +0 -124
  230. data/ruby/trema/action-set-tp-src.h +0 -42
  231. data/ruby/trema/action-set-vlan-pcp.c +0 -128
  232. data/ruby/trema/action-set-vlan-pcp.h +0 -42
  233. data/ruby/trema/action-set-vlan-vid.c +0 -125
  234. data/ruby/trema/action-set-vlan-vid.h +0 -42
  235. data/ruby/trema/action-strip-vlan.c +0 -81
  236. data/ruby/trema/action-strip-vlan.h +0 -42
  237. data/ruby/trema/action-vendor.c +0 -121
  238. data/ruby/trema/vendor-request.c +0 -193
  239. data/spec/trema/action-enqueue_spec.rb +0 -100
  240. data/spec/trema/action-set-dl-dst_spec.rb +0 -95
  241. data/spec/trema/action-set-dl-src_spec.rb +0 -92
  242. data/spec/trema/action-set-nw-dst_spec.rb +0 -96
  243. data/spec/trema/action-set-nw-src_spec.rb +0 -97
  244. data/spec/trema/action-set-nw-tos_spec.rb +0 -88
  245. data/spec/trema/action-set-tp-dst_spec.rb +0 -88
  246. data/spec/trema/action-set-tp-src_spec.rb +0 -88
  247. data/spec/trema/action-set-vlan-pcp_spec.rb +0 -91
  248. data/spec/trema/action-set-vlan-vid_spec.rb +0 -91
  249. data/spec/trema/action-vendor_spec.rb +0 -90
  250. 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_TP_DST_H
22
- #define ACTION_SET_TP_DST_H
23
-
24
-
25
- #include "ruby.h"
26
-
27
-
28
- extern VALUE cActionSetTpDst;
29
-
30
-
31
- void Init_action_set_tp_dst( void );
32
-
33
-
34
- #endif // ACTION_SET_TP_DST_H
35
-
36
-
37
- /*
38
- * Local variables:
39
- * c-basic-offset: 2
40
- * indent-tabs-mode: nil
41
- * End:
42
- */
@@ -1,124 +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 cActionSetTpSrc;
27
-
28
-
29
- /*
30
- * An action to modify the source TCP or UDP port of a packet.
31
- *
32
- * @overload initialize(options={})
33
- *
34
- * @example
35
- * ActionSetTpSrc.new( :tp_src => 5555 )
36
- *
37
- * @param [Hash] options
38
- * the options to create this action class instance with.
39
- *
40
- * @option options [Number] :tp_src
41
- * the source TCP or UDP port number. Any numeric 16-bit value.
42
- *
43
- * @raise [ArgumentError] if tp_src argument is not supplied.
44
- * @raise [ArgumentError] if tp_src is not an unsigned 16-bit integer.
45
- * @raise [TypeError] if options is not a Hash.
46
- *
47
- * @return [ActionSetTpSrc]
48
- * an object that encapsulates this action.
49
- */
50
- static VALUE
51
- action_set_tp_src_init( int argc, VALUE *argv, VALUE self ) {
52
- VALUE options;
53
-
54
- if ( rb_scan_args( argc, argv, "10", &options ) == 1 ) {
55
- Check_Type( options, T_HASH );
56
- VALUE tp_src;
57
- if ( ( tp_src = rb_hash_aref( options, ID2SYM( rb_intern( "tp_src" ) ) ) ) != Qnil ) {
58
- if ( rb_funcall( tp_src, rb_intern( "unsigned_16bit?" ), 0 ) == Qfalse ) {
59
- rb_raise( rb_eArgError, "Source TCP or UDP port must be an unsigned 16-bit integer" );
60
- }
61
- rb_iv_set( self, "@tp_src", tp_src );
62
- }
63
- else {
64
- rb_raise( rb_eArgError, "Source TCP or UDP port is a mandatory option" );
65
- }
66
- }
67
- return self;
68
- }
69
-
70
-
71
- /*
72
- * The source TCP or UDP port number.
73
- *
74
- * @return [Number] the value of tp_src.
75
- */
76
- static VALUE
77
- action_get_tp_src( VALUE self ) {
78
- return rb_iv_get( self, "@tp_src" );
79
- }
80
-
81
-
82
- /*
83
- * Appends its action(tp_src) to the list of actions.
84
- *
85
- * @return [ActionSetTpSrc] self
86
- */
87
- static VALUE
88
- action_set_tp_src_append( VALUE self, VALUE action_ptr ) {
89
- openflow_actions *actions;
90
- Data_Get_Struct( action_ptr, openflow_actions, actions );
91
- uint16_t tp_src = ( uint16_t ) NUM2UINT( action_get_tp_src( self ) );
92
- append_action_set_tp_src( actions, tp_src );
93
- return self;
94
- }
95
-
96
-
97
- /*
98
- * (see ActionEnqueue#inspect)
99
- */
100
- static VALUE
101
- action_set_tp_src_inspect( VALUE self ) {
102
- char str[ 64 ];
103
- uint16_t tp_src = ( uint16_t ) NUM2UINT( action_get_tp_src( self ) );
104
- sprintf( str, "#<%s tp_port=%u>", rb_obj_classname( self ), tp_src );
105
- return rb_str_new2( str );
106
- }
107
-
108
-
109
- void
110
- Init_action_set_tp_src() {
111
- cActionSetTpSrc = rb_define_class_under( mTrema, "ActionSetTpSrc", rb_cObject );
112
- rb_define_method( cActionSetTpSrc, "initialize", action_set_tp_src_init, -1 );
113
- rb_define_method( cActionSetTpSrc, "tp_src", action_get_tp_src, 0 );
114
- rb_define_method( cActionSetTpSrc, "append", action_set_tp_src_append, 1 );
115
- rb_define_method( cActionSetTpSrc, "inspect", action_set_tp_src_inspect, 0 );
116
- }
117
-
118
-
119
- /*
120
- * Local variables:
121
- * c-basic-offset: 2
122
- * indent-tabs-mode: nil
123
- * End:
124
- */
@@ -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_TP_SRC_H
22
- #define ACTION_SET_TP_SRC_H
23
-
24
-
25
- #include "ruby.h"
26
-
27
-
28
- extern VALUE cActionSetTpSrc;
29
-
30
-
31
- void Init_action_set_tp_src( void );
32
-
33
-
34
- #endif // ACTION_SET_TP_SRC_H
35
-
36
-
37
- /*
38
- * Local variables:
39
- * c-basic-offset: 2
40
- * indent-tabs-mode: nil
41
- * End:
42
- */
@@ -1,128 +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 cActionSetVlanPcp;
27
-
28
-
29
-
30
- /*
31
- * An action to modify the VLAN priority of a packet. Valid values are between
32
- * (0) lowest and (7) highest. Priority bits can be used to prioritize different
33
- * classes of traffic.
34
- *
35
- * @overload initialize(options={})
36
- *
37
- * @example
38
- * ActionSetVlanPcp.new( :vlan_pcp => 7 )
39
- *
40
- * @param [Hash] options
41
- * the options to create this action class instance with.
42
- *
43
- * @option options [Number] :vlan_pcp
44
- * the VLAN priority to set to.
45
- *
46
- * @raise [ArgumentError] if vlan_pcp argument is not supplied.
47
- * @raise [RangeError] if vlan_pcp is not within 0 and 7 inclusive.
48
- * @raise [TypeError] if options is not a Hash.
49
- *
50
- * @return [ActionSetVlanPcp]
51
- * an object that encapsulates this action.
52
- */
53
- static VALUE
54
- action_set_vlan_pcp_init( int argc, VALUE *argv, VALUE self ) {
55
- VALUE options;
56
-
57
- if ( rb_scan_args( argc, argv, "10", &options ) == 1 ) {
58
- Check_Type( options, T_HASH );
59
- VALUE vlan_pcp;
60
- if ( ( vlan_pcp = rb_hash_aref( options, ID2SYM( rb_intern( "vlan_pcp" ) ) ) ) != Qnil ) {
61
- uint8_t vpcp = ( uint8_t ) NUM2UINT( vlan_pcp );
62
- if ( vpcp & ~7 ) {
63
- rb_raise( rb_eRangeError, "Valid VLAN priority values are 0 to 7 inclusive" );
64
- }
65
- rb_iv_set( self, "@vlan_pcp", vlan_pcp );
66
- }
67
- else {
68
- rb_raise( rb_eArgError, "VLAN priority is a mandatory option" );
69
- }
70
- }
71
- return self;
72
- }
73
-
74
-
75
- /*
76
- * The VLAN priority value.
77
- *
78
- * @return [Number] the value of vlan_pcp.
79
- */
80
- static VALUE
81
- action_get_vlan_pcp( VALUE self ) {
82
- return rb_iv_get( self, "@vlan_pcp" );
83
- }
84
-
85
-
86
- /*
87
- * Appends its action(vlan_pcp) to the list of actions.
88
- *
89
- * @return [ActionSetVlanPcp] self
90
- */
91
- static VALUE
92
- action_set_vlan_pcp_append( VALUE self, VALUE action_ptr ) {
93
- openflow_actions *actions;
94
- Data_Get_Struct( action_ptr, openflow_actions, actions );
95
- uint8_t vlan_pcp = ( uint8_t ) NUM2UINT( action_get_vlan_pcp( self ) );
96
- append_action_set_vlan_pcp( actions, vlan_pcp );
97
- return self;
98
- }
99
-
100
-
101
- /*
102
- * (see ActionEnqueue#inspect)
103
- */
104
- static VALUE
105
- action_set_vlan_pcp_inspect( VALUE self ) {
106
- char str[ 64 ];
107
- uint8_t vlan_pcp = ( uint8_t ) NUM2UINT( action_get_vlan_pcp( self ) );
108
- sprintf(str, "#<%s vlan_pcp=%u>", rb_obj_classname( self ), vlan_pcp );
109
- return rb_str_new2( str );
110
- }
111
-
112
-
113
- void
114
- Init_action_set_vlan_pcp() {
115
- cActionSetVlanPcp = rb_define_class_under( mTrema, "ActionSetVlanPcp", rb_cObject );
116
- rb_define_method( cActionSetVlanPcp, "initialize", action_set_vlan_pcp_init, -1 );
117
- rb_define_method( cActionSetVlanPcp, "vlan_pcp", action_get_vlan_pcp, 0 );
118
- rb_define_method( cActionSetVlanPcp, "append", action_set_vlan_pcp_append, 1 );
119
- rb_define_method( cActionSetVlanPcp, "inspect", action_set_vlan_pcp_inspect, 0 );
120
- }
121
-
122
-
123
- /*
124
- * Local variables:
125
- * c-basic-offset: 2
126
- * indent-tabs-mode: nil
127
- * End:
128
- */
@@ -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_PCP_H
22
- #define ACTION_SET_VLAN_PCP_H
23
-
24
-
25
- #include "ruby.h"
26
-
27
-
28
- extern VALUE cActionSetVlanPcp;
29
-
30
-
31
- void Init_action_set_vlan_pcp( void );
32
-
33
-
34
- #endif // ACTION_SET_VLAN_PCP_H
35
-
36
-
37
- /*
38
- * Local variables:
39
- * c-basic-offset: 2
40
- * indent-tabs-mode: nil
41
- * End:
42
- */
@@ -1,125 +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 cActionSetVlanVid;
27
-
28
-
29
- /*
30
- * An action to modify the VLAN id of a packet. The VLAN id is 16-bits long but
31
- * the actual VID(VLAN Identifier) of the IEEE 802.1Q frame is 12-bits.
32
- *
33
- * @overload initialize(options={})
34
- *
35
- * @example
36
- * ActionSetVlanVid.new( :vlan_vid => 4096 )
37
- *
38
- * @param [Hash] options
39
- * the options to create this action class instance with.
40
- *
41
- * @option options [Number] :vlan_vid
42
- * the VLAN id to set to. Only the lower 12-bits are used.
43
- *
44
- * @raise [ArgumentError] if vlan_vid argument is not supplied.
45
- * @raise [RangeError] if vlan_vid not within 1 and 4096 inclusive.
46
- * @raise [TypeError] if options is not a Hash.
47
- *
48
- * @return [ActionSetVlanVid]
49
- * an object that encapsulates this action.
50
- */
51
- static VALUE
52
- action_set_vlan_vid_init( int argc, VALUE *argv, VALUE self ) {
53
- VALUE options;
54
-
55
- if ( rb_scan_args( argc, argv, "10", &options ) == 1 ) {
56
- Check_Type( options, T_HASH );
57
- VALUE vlan_vid;
58
- if ( ( vlan_vid = rb_hash_aref( options, ID2SYM( rb_intern( "vlan_vid" ) ) ) ) != Qnil ) {
59
- uint16_t vvid = ( uint16_t ) NUM2UINT( vlan_vid );
60
- if ( !vvid || vvid & ~4095 ) {
61
- rb_raise( rb_eRangeError, "Valid VLAN id values between 1 to 4096 inclusive" );
62
- }
63
- rb_iv_set( self, "@vlan_vid", vlan_vid );
64
- }
65
- else {
66
- rb_raise( rb_eArgError, "VLAN id is a mandatory option" );
67
- }
68
- }
69
- return self;
70
- }
71
-
72
-
73
- /*
74
- * The VLAN id value.
75
- *
76
- * @return [Number] the value of vlan_vid.
77
- */
78
- static VALUE
79
- action_get_vlan_vid( VALUE self ) {
80
- return rb_iv_get( self, "@vlan_vid" );
81
- }
82
-
83
-
84
- /*
85
- * Appends its action(vlan_vid) to the list of actions.
86
- *
87
- * @return [ActionSetVlanVid] self
88
- */
89
- static VALUE
90
- action_set_vlan_vid_append( VALUE self, VALUE action_ptr ) {
91
- openflow_actions *actions;
92
- Data_Get_Struct( action_ptr, openflow_actions, actions );
93
- append_action_set_vlan_vid( actions, ( uint16_t ) NUM2UINT( action_get_vlan_vid( self ) ) );
94
- return self;
95
- }
96
-
97
-
98
- /*
99
- * (see ActionEnqueue#inspect)
100
- */
101
- static VALUE
102
- action_set_vlan_vid_inspect( VALUE self ) {
103
- char str[ 64 ];
104
- uint16_t vlan_vid = ( uint16_t ) NUM2UINT( action_get_vlan_vid( self ) );
105
- sprintf( str, "#<%s vlan_vid=%u>", rb_obj_classname( self ), vlan_vid );
106
- return rb_str_new2( str );
107
- }
108
-
109
-
110
- void
111
- Init_action_set_vlan_vid() {
112
- cActionSetVlanVid = rb_define_class_under( mTrema, "ActionSetVlanVid", rb_cObject );
113
- rb_define_method( cActionSetVlanVid, "initialize", action_set_vlan_vid_init, -1 );
114
- rb_define_method( cActionSetVlanVid, "vlan_vid", action_get_vlan_vid, 0 );
115
- rb_define_method( cActionSetVlanVid, "append", action_set_vlan_vid_append, 1 );
116
- rb_define_method( cActionSetVlanVid, "inspect", action_set_vlan_vid_inspect, 0 );
117
- }
118
-
119
-
120
- /*
121
- * Local variables:
122
- * c-basic-offset: 2
123
- * indent-tabs-mode: nil
124
- * End:
125
- */