Hi, thank you for reporting this.
Please use [email protected]. 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel