On Fri, Jul 12, 2013 at 10:20:33AM +0900, Isaku Yamahata wrote:
> 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.)
Example is
ryu/tests/unit/packet/test_parser_v12.py
class TestOFPMatch(unittest.TestCase):
def _test_set_ipv6_src(self, ipv6, mask=None):
thanks,
>
>
> 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
>
--
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