ofp = datapath.ofproto
port = msg.match['in_port']
metadata = msg.match.get('metadata')
- pkt = packet.Packet(msg.data)
+ # NOTE(yamamoto): Ryu packet library can raise various exceptions
+ # on a corrupted packet.
+ try:
+ pkt = packet.Packet(msg.data)
+ except Exception as e:
+ LOG.info(_LI("Unparsable packet: got exception %s"), e)
+ return
LOG.info(_LI("packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s"),
{'dpid': dpid_lib.dpid_to_str(datapath.id),
'port': port, 'pkt': pkt})
self._fake_get_protocol_arp = False
self._test_packet_in_handler_drop()
+ def test_packet_in_handler_corrupted(self):
+ mock.patch('ryu.lib.packet.packet.Packet',
+ side_effect=ValueError).start()
+ self._test_packet_in_handler_drop()
+
def test_packet_in_handler_unknown_network(self):
self.arplib._arp_tbl = {
self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}