You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I got an error upon adding a new flow entry via ofctl_rest, using different docker images for ryu (latarc/ryu and osrg/ryu):
Error traceback
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/eventlet/wsgi.py", line 573, in handle_one_response
result = self.application(self.environ, start_response)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 236, in __call__
return super(wsgify_hack, self).__call__(environ, start_response)
File "/usr/local/lib/python3.8/site-packages/webob/dec.py", line 129, in __call__
resp = self.call_func(req, *args, **kw)
File "/usr/local/lib/python3.8/site-packages/webob/dec.py", line 193, in call_func
return self.func(req, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 290, in __call__
return controller(req)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 160, in __call__
return getattr(self, action)(req, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/ofctl_rest.py", line 276, in wrapper
method(self, req, dp, ofctl, body, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/ofctl_rest.py", line 436, in mod_flow_entry
ofctl.mod_flow_entry(dp, flow, mod_cmd)
File "/usr/local/lib/python3.8/site-packages/ryu/lib/ofctl_v1_4.py", line 847, in mod_flow_entry
ofctl_utils.send_msg(dp, flow_mod, LOG)
File "/usr/local/lib/python3.8/site-packages/ryu/lib/ofctl_utils.py", line 242, in send_msg
dp.send_msg(msg)
File "/usr/local/lib/python3.8/site-packages/ryu/controller/controller.py", line 438, in send_msg
msg.serialize()
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_parser.py", line 270, in serialize
self._serialize_body()
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4433, in _serialize_body
inst.serialize(self.buf, offset)
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4600, in serialize
a.serialize(buf, action_offset)
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4709, in serialize
msg_pack_into(ofproto.OFP_ACTION_OUTPUT_PACK_STR, buf,
File "/usr/local/lib/python3.8/site-packages/ryu/lib/pack_utils.py", line 25, in msg_pack_into
struct.pack_into(fmt, buf, offset, *args)
struct.error: required argument is not an integer
When debugging with curl, I found out that the problem was in the port field of the actions of the flow entry, as shown below:
No zero padding on osrg/ryu gives me a HTTP 200. With zero padding on osrg/ryu gives me a HTTP 200. No zero padding on latarc/ryu gives me a HTTP 200. With zero padding on latarc/ryu gives me a HTTP 400 and an error.
I'm running Ryu using docker containers, and the docker host OS is Ubuntu 20.04.1 LTS.
Ryu Manager command (on both containers): ryu-manager --observe-links ryu.app.ofctl_rest ryu.app.rest_topology
The Python version on the latarc/ryu container is 3.8.5, while osrg/ryu uses Python 2.7.12 so it could also be related to the python version.
The curl commands and respective output are as follow:
Not zero padded port value on v4.31
curl -v -d '{ "dpid": "1", "idle_timeout": 30, "hard_timeout": 30, "instructions": [ { "type": "APPLY_ACTIONS", "actions": [ { "max_len": 65535, "port": "3", "type": "OUTPUT" } ] } ] }' http://172.17.0.4:8080/stats/flowentry/add
* Trying 172.17.0.4:8080...
* TCP_NODELAY set
* Connected to 172.17.0.4 (172.17.0.4) port 8080 (#0)
> POST /stats/flowentry/add HTTP/1.1
> Host: 172.17.0.4:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 174
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 174 out of 174 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Content-Length: 0
< Date: Sat, 22 Aug 2020 04:49:14 GMT
<
* Connection #0 to host 172.17.0.4 left intact
Zero padded port value on v4.31
curl -v -d '{ "dpid": "1", "idle_timeout": 30, "hard_timeout": 30, "instructions": [ { "type": "APPLY_ACTIONS", "actions": [ { "max_len": 65535, "port": "000003", "type": "OUTPUT" } ] } ] }' http://172.17.0.4:8080/stats/flowentry/add
* Trying 172.17.0.4:8080...
* TCP_NODELAY set
* Connected to 172.17.0.4 (172.17.0.4) port 8080 (#0)
> POST /stats/flowentry/add HTTP/1.1
> Host: 172.17.0.4:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 179
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 179 out of 179 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Content-Length: 0
< Date: Sat, 22 Aug 2020 04:49:19 GMT
<
* Connection #0 to host 172.17.0.4 left intact
Not zero padded port value on v4.34
curl -v -d '{ "dpid": "1", "idle_timeout": 30, "hard_timeout": 30, "instructions": [ { "type": "APPLY_ACTIONS", "actions": [ { "max_len": 65535, "port": "3", "type": "OUTPUT" } ] } ] }' http://172.17.0.3:8080/stats/flowentry/add
* Trying 172.17.0.3:8080...
* TCP_NODELAY set
* Connected to 172.17.0.3 (172.17.0.3) port 8080 (#0)
> POST /stats/flowentry/add HTTP/1.1
> Host: 172.17.0.3:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 174
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 174 out of 174 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=UTF-8
< Content-Length: 0
< Date: Sat, 22 Aug 2020 04:53:59 GMT
<
* Connection #0 to host 172.17.0.3 left intact
Zero padded port value on v4.34 with traceback
curl -v -d '{ "dpid": "1", "idle_timeout": 30, "hard_timeout": 30, "instructions": [ { "type": "APPLY_ACTIONS", "actions": [ { "max_len": 65535, "port": "000003", "type": "OUTPUT" } ] } ] }' http://172.17.0.3:8080/stats/flowentry/add
* Trying 172.17.0.3:8080...
* TCP_NODELAY set
* Connected to 172.17.0.3 (172.17.0.3) port 8080 (#0)
> POST /stats/flowentry/add HTTP/1.1
> Host: 172.17.0.3:8080
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 179
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 179 out of 179 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Internal Server Error
< Content-Type: text/plain
< Content-Length: 2309
< Date: Sat, 22 Aug 2020 04:53:38 GMT
< Connection: close
<
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/eventlet/wsgi.py", line 573, in handle_one_response
result = self.application(self.environ, start_response)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 236, in __call__
return super(wsgify_hack, self).__call__(environ, start_response)
File "/usr/local/lib/python3.8/site-packages/webob/dec.py", line 129, in __call__
resp = self.call_func(req, *args, **kw)
File "/usr/local/lib/python3.8/site-packages/webob/dec.py", line 193, in call_func
return self.func(req, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 290, in __call__
return controller(req)
File "/usr/local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 160, in __call__
return getattr(self, action)(req, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/ofctl_rest.py", line 276, in wrapper
method(self, req, dp, ofctl, body, *args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/ryu/app/ofctl_rest.py", line 436, in mod_flow_entry
ofctl.mod_flow_entry(dp, flow, mod_cmd)
File "/usr/local/lib/python3.8/site-packages/ryu/lib/ofctl_v1_4.py", line 847, in mod_flow_entry
ofctl_utils.send_msg(dp, flow_mod, LOG)
File "/usr/local/lib/python3.8/site-packages/ryu/lib/ofctl_utils.py", line 242, in send_msg
dp.send_msg(msg)
File "/usr/local/lib/python3.8/site-packages/ryu/controller/controller.py", line 438, in send_msg
msg.serialize()
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_parser.py", line 270, in serialize
self._serialize_body()
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4433, in _serialize_body
inst.serialize(self.buf, offset)
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4600, in serialize
a.serialize(buf, action_offset)
File "/usr/local/lib/python3.8/site-packages/ryu/ofproto/ofproto_v1_4_parser.py", line 4709, in serialize
msg_pack_into(ofproto.OFP_ACTION_OUTPUT_PACK_STR, buf,
File "/usr/local/lib/python3.8/site-packages/ryu/lib/pack_utils.py", line 25, in msg_pack_into
struct.pack_into(fmt, buf, offset, *args)
struct.error: required argument is not an integer
* Closing connection 0
I am not certain if this is intended behavior, but I'm still reporting this as an issue, mainly because legacy code using this format may break upon updating Ryu to a newer version and maybe it is preferred to maximize compatibility.
Regards,
Lucas Schneider
The text was updated successfully, but these errors were encountered:
Hello,
I got an error upon adding a new flow entry via
ofctl_rest
, using different docker images for ryu (latarc/ryu
andosrg/ryu
):Error traceback
When debugging with
curl
, I found out that the problem was in the port field of the actions of the flow entry, as shown below:No zero padding on
osrg/ryu
gives me a HTTP 200.With zero padding on
osrg/ryu
gives me a HTTP 200.No zero padding on
latarc/ryu
gives me a HTTP 200.With zero padding on
latarc/ryu
gives me a HTTP 400 and an error.ryu-manager --observe-links ryu.app.ofctl_rest ryu.app.rest_topology
latarc/ryu
container is 3.8.5, whileosrg/ryu
uses Python 2.7.12 so it could also be related to the python version.The
curl
commands and respective output are as follow:Not zero padded port value on v4.31
Zero padded port value on v4.31
Not zero padded port value on v4.34
Zero padded port value on v4.34 with traceback
I am not certain if this is intended behavior, but I'm still reporting this as an issue, mainly because legacy code using this format may break upon updating Ryu to a newer version and maybe it is preferred to maximize compatibility.
Regards,
Lucas Schneider
The text was updated successfully, but these errors were encountered: