title: OpenFlow - How are ICMP messages handled
body: <p>I am running a Ryu controller and a Mininet instance with 2 hosts and 1 switch like below.</p>
  
  <p>H1---S---H2</p>
  
  <p>Code in Ryu controller</p>
  
  <pre><code>from ryu.base import app_manager
  from ryu.controller import ofp_event
  from ryu.controller.handler import CONFIG_DISPATCHER, MAIN_DISPATCHER
  from ryu.controller.handler import set_ev_cls
  from ryu.ofproto import ofproto_v1_3
  from ryu.lib.packet import packet
  from ryu.lib.packet import ethernet
  from ryu.lib.packet import ether_types
  
  
  class SimpleSwitch13(app_manager.RyuApp):
  
  OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]
  
  def __init__(self, *args, **kwargs):
      super(SimpleSwitch13, self).__init__(*args, **kwargs)
      self.mac_to_port = {}
  
  @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
  def switch_features_handler(self, ev):
      datapath = ev.msg.datapath
      ofproto = datapath.ofproto
      parser = datapath.ofproto_parser
  </code></pre>
  
  <p>Basically <strong>the switch flow table is empty</strong>. In this case, when I run <code>h1 ping h2</code> from my mininet console and record the packet exchanges, this is what I get in wireshark from host h1.</p>
  
  <p><a href="https://i.stack.imgur.com/je61E.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/je61E.png" alt="enter image description here"></a></p>
  
  <p>There is no router in the mininet instance. How am I receiving an ICMP Host Destination Unreachable Message from the same host that initiated the ping?</p>