Dear Murphy:

Hello! 
These days I've been doing some work using POX's REST API to add some flow 
entries, but I have encountered some problems when I tried to add a flow entry 
like:
curl -i  -X POST -d 
'{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions":[{"type":"OFPAT_SET_DL_SRC","dl_addr":"11:22:33:aa:bb:cc"}],"match":{}}]}}'
 http://localhost:8000/OF/ 


The Error information is:
"pox/openflow/of_json.py" 331L, 8393C written                 
  File "/home/mininet/pox/pox/lib/recoco/recoco.py", line 774, in run
    e[0](*e[1], **e[2])
  File "/home/mininet/pox/pox/openflow/webservice.py", line 78, in _do_init
    self._init(*args, **kw)
  File "/home/mininet/pox/pox/openflow/webservice.py", line 169, in _init
    self._con.send(fm)
  File "/home/mininet/pox/pox/openflow/of_01.py", line 692, in send
    data = data.pack()
  File "/home/mininet/pox/pox/openflow/libopenflow_01.py", line 2325, in pack
    packed += i.pack()
  File "/home/mininet/pox/pox/openflow/libopenflow_01.py", line 1942, in pack
    packed += struct.pack("!HHH", self.type, len(self), self.tp_port)
error: cannot convert argument to integer


The problem happens when the "type" field of "actions" in the JSON string is:

OFPAT_SET_DL_DST

OFPAT_SET_DL_SRC

OFPAT_SET_NW_DST

OFPAT_SET_NW_SRC

OFPAT_SET_TP_DST

OFPAT_SET_TP_SRC



These problems bothered me a lot so I try to read the source code of POX, 
finally I found this is a bug of POX and I have solved it.


In pox/pox/openflow/of_json.py, in the definition of function dict_to_action 
there is one line(around line 147):
del d['type']


However, in pox/openflow/libopenflow_01.py the __init__ of the functions:

ofp_action_dl_addr

ofp_action_nw_addr

ofp_action_tp_port

needs the "type" field. As a result of that, an error occurs.


I solve the problem by modifying the pox/pox/openflow/of_json.py, in the 
definition of function dict_to_action I add two lines of code(around line 150):
t = of.ofp_action_type_rev_map[t]
cls = of._action_type_to_class[t]
if t in [4,5,6,7,9,10]:
  d['type'] = t
return a


I wish you could fix the bug latter. Thx for your excellent work. Looking 
forward to your reply. :)


                                                             -- Alex LU
                         
                         ‍

Reply via email to