Hi, thank you for reporting this.
Please use ryu-devel@lists.sourceforge.net. Added it to CC:

ipv6 value is supported.
> match.set_ipv6_src(ipsrc)
This line caught my eyes.

What type is ipsrc? The serializer expects the value to be '!8H'.
Not bytearray/str of 16byte length. Nor single integer.
I guess that ipsrc is different from what the serializer expects.
So conversion is needed before passing set_ipv6_src().
(Clean up is going on right now.)


from ofproto_v1_3_parser.py,
> class MTIPv6Src(MTIPv6, OFPMatchField):
>    pack_str = '!8H'

thanks,

On Thu, Jul 11, 2013 at 09:41:37PM +0000, Claiborne, Matt wrote:
> I am seeing the following error when trying to send a flow mod with a match
> rule for ipv6 source or destination addresses.  IPv4 flow mods work 
> correctly. 
> Are there any other options needed in RYU to send a flow mod with ipv6 rules? 
> Any help/suggestions would be greatly appreciated.
> 
>  
> 
> [0x1000082e5f694c00] ('143.0.1.211', 60641): ADD FLOW:
> 
> hub: uncaught exception: Traceback (most recent call last):
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/lib/
> hub.py", line 48, in _launch
> 
>     func(*args, **kwargs)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/base/
> app_manager.py", line 110, in _event_loop
> 
>     handler(ev)
> 
>   File "/root/app/3base.py", line 602, in packet_in_handler
> 
>     self.send_flow_mod(msg.datapath, match, actions, inst, 10, 0, cookie)
> 
>   File "/root/app/3base.py", line 971, in send_flow_mod
> 
>     datapath.send_msg(req)
> 
>   File 
> "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/controller
> /controller.py", line 220, in send_msg
> 
>     msg.serialize()
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_parser.py", line 145, in serialize
> 
>     self._serialize_body()
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_v1_3_parser.py", line 1488, in _serialize_body
> 
>     match_len = self.match.serialize(self.buf, offset)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_v1_3_parser.py", line 570, in serialize
> 
>     f.serialize(buf, field_offset)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_v1_3_parser.py", line 1198, in serialize
> 
>     self.putv6(buf, offset, self.value, self.mask)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_v1_3_parser.py", line 913, in putv6
> 
>     self._putv6(buf, offset + self.length, value)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_v1_3_parser.py", line 908, in _putv6
> 
>     *value)
> 
>   File "/usr/local/lib/python2.6/dist-packages/ryu-2.1-py2.6.egg/ryu/ofproto/
> ofproto_parser.py", line 154, in msg_pack_into
> 
>     buf += struct.pack(fmt, *args)
> 
> error: pack requires exactly 8 arguments
> 
>  
> 
>  
> 
> Code:
> 
> ?
> 
>                 @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
> 
>                 def packet_in_handler(self, ev):
> 
>                                 ?
> 
>                                                 if (protocol_name ==
> "ipv6"):    
> 
>                                                                 print 
> (vars(p))
> 
>                                                                 ipsrc = p.src
> 
>                                                                 ipdst = p.dst
> 
> ?
> 
>  
> 
>                                 if (v_ethertype == 0x86DD):
> 
>                                                 if dst in 
> self.mac_to_port[dp]:
> 
>                                                                 out_port =
> self.mac_to_port[dp][dst]
> 
>                                                 else:
> 
>                                                                 out_port =
> ofp.OFPP_FLOOD
> 
>  
> 
>                                                 self.send_packet_out
> (msg.datapath, 0xffffffff, in_port, ev.msg.data, out_port)
> 
>  
> 
>                                                 match = ofp_parser.OFPMatch()
> 
>                                                 match.set_dl_type(v_ethertype)
> 
>                                                 match.set_ipv6_src(ipsrc)
> 
>                                                 match.set_in_port(in_port)
> 
>                                                 match.set_vlan_vid(vid)
> 
>  
> 
>                                                 actions =
> [ofp_parser.OFPActionOutput(out_port, 0)]
> 
>                                                 inst =
> [ofp_parser.OFPInstructionActions(ofp.OFPIT_APPLY_ACTIONS, actions)]
> 
>  
> 
>                                                 cookie = in_port ^ dp.id ^
> out_port
> 
>                                                 self.send_flow_mod
> (msg.datapath, match, actions, inst, 10, 0, cookie)
> 
>  
> 
> ?
> 
>                 def send_flow_mod(self, datapath, match, actions, inst,
> hardtime, idletime, cookie):
> 
>                                 self.printme("ADD FLOW:", datapath)
> 
>                                
> 
>                                 if self.ipControlTableMode:
> 
>                                                 tableID = 50
> 
>                                 else:
> 
>                                                 tableID = 100
> 
>                                                
> 
>                                 ofp = datapath.ofproto
> 
>                                 ofp_parser = datapath.ofproto_parser
> 
>                                 req = ofp_parser.OFPFlowMod(datapath=datapath,
> 
>                                                 cookie=cookie, cookie_mask=0,
> 
>                                                 table_id=tableID, command=
> ofp.OFPFC_ADD,
> 
>                                                 idle_timeout=idletime,
> hard_timeout=hardtime,
> 
>                                                 priority=32768,
> 
>                                                 buffer_id=0xffffffff,
> 
>                                                 out_port=ofp.OFPP_ANY,
> 
>                                                 out_group=ofp.OFPG_ANY,
> 
>                                                 flags=0,
> 
>                                                 match=match, 
> instructions=inst)
> 
>                                 datapath.send_msg(req)
> 
>  
> 
>  
> 
>  
> 
> Thanks,
> 
> --Matt
> 
>  
> 

-- 
yamahata

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to