Hi,

I have been trying to use the 'ryu.app.ofctl_rest
<https://ryu.readthedocs.io/en/latest/app/ofctl_rest.html#id10>' interface.
Using cURL is fine. Take the following drop rule for example, works fine.

curl -X POST -d "{'dpid': '69133577248', 'cookie': 1, 'cookie_mask': 1,
'table_id': 0, 'idle_timeout': 0, 'hard_timeout': 0, 'priority': 0,
'flags': 1, 'match': {'in_port': 3}, 'actions': []}"
http://198.8.8.235:8080/stats/flowentry/add

Now taking the exact same dictionary and URL I try to apply the rul via
python3 urllib. Here is the code snippet. I print out the encoded data to
check it. It fails with a 400 error:

*flow = {'dpid': '69133577248', 'cookie': 1, 'cookie_mask': 1, 'table_id':
0, 'idle_timeout': 0, 'hard_timeout': 0, 'priority': 0, 'flags': 1,
'match': {'in_port': 3}, 'actions': []}*
*url = http://198.8.8.235:8080/stats/flowentry/add
<http://198.8.8.235:8080/stats/flowentry/add>*

*data = urllib.parse.urlencode(flow).encode('utf-8')*
*print('ENCODED DATA -->', data)*
*with urllib.request.urlopen(url, data) as response:*
*    print (response.read().decode('utf-8'))*

ENCODED DATA -->
b'dpid=69133577248&cookie=1&cookie_mask=1&table_id=0&idle_timeout=0&hard_timeout=0&priority=0&flags=1&match=%7B%27in_port%27%3A+3%7D&actions=%5B%5D'
Traceback (most recent call last):
  File "/usr/local/bin/diddly", line 177, in <module>
    main()
  File "/usr/local/bin/diddly", line 125, in main
    diddly_switch.diddly_switch(diddly_args)
  File "/usr/local/lib/python3.6/dist-packages/diddly.py", line 4481, in
diddly_switch
    diddlySdn._add_flow(self, dict3_['switch_number'], {'match': {
"in_port": p}, 'actions': []})  #>>> [diddly_switch] >>>
  File "/usr/local/lib/python3.6/dist-packages/diddly.py", line 6834, in
_add_flow
    with urllib.request.urlopen(url_, data) as response:
  File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/lib/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/usr/lib/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/usr/lib/python3.6/urllib/request.py", line 650, in
http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request

--

*Irish by birth, located in Uganda but Munster by the grace of God.*
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to