# ICMP

class `ryu.lib.packet.icmp.``TimeExceeded`(data_len=0, data=None)

  ICMP sub encoder/decoder class for Time Exceeded Message.

  This is used with ryu.lib.packet.icmp.icmp for ICMP Time Exceeded Message.

  An instance has the following attributes at least. Most of them are same to the on-wire counterparts but in host byte order. __init__ takes the corresponding args in this order.

  [RFC4884] introduced 8-bit data length attribute.

  Attribute | Description
  --- | ---
  data_len | data length
  data | Internet Header + leading octets of original datagram

class `ryu.lib.packet.icmp.``dest_unreach`(data_len=0, mtu=0, data=None)

  ICMP sub encoder/decoder class for Destination Unreachable Message.

  This is used with ryu.lib.packet.icmp.icmp for ICMP Destination Unreachable Message.

  An instance has the following attributes at least. Most of them are same to the on-wire counterparts but in host byte order. __init__ takes the corresponding args in this order.

  [RFC1191] reserves bits for the "Next-Hop MTU" field. [RFC4884] introduced 8-bit data length attribute.

  Attribute | Description
  --- | ---
  data_len | data length
  mtu | Next-Hop MTU NOTE: This field is required when icmp code is 4 code 4 = fragmentation needed and DF set
  data | Internet Header + leading octets of original datagram

class `ryu.lib.packet.icmp.``echo`(id_=0, seq=0, data=None)

  ICMP sub encoder/decoder class for Echo and Echo Reply messages.

  This is used with ryu.lib.packet.icmp.icmp for ICMP Echo and Echo Reply messages.

  An instance has the following attributes at least. Most of them are same to the on-wire counterparts but in host byte order. __init__ takes the corresponding args in this order.

  Attribute | Description
  --- | ---
  id | Identifier
  seq | Sequence Number
  data | Internet Header + 64 bits of Original Data Datagram

class `ryu.lib.packet.icmp.``icmp`(type_=8, code=0, csum=0, data=b'')

  ICMP (RFC 792) header encoder/decoder class.

  An instance has the following attributes at least. Most of them are same to the on-wire counterparts but in host byte order. __init__ takes the corresponding args in this order.

  Attribute | Description
  --- | ---
  type | Type
  code | Code
  csum | CheckSum (0 means automatically-calculate when encoding)

  data

  Payload. Either a bytearray, or ryu.lib.packet.icmp.echo or ryu.lib.packet.icmp.dest_unreach or ryu.lib.packet.icmp.TimeExceeded object NOTE for icmp.echo: This includes "unused" 16 bits and the following "Internet Header + 64 bits of Original Data Datagram" of the ICMP header. NOTE for icmp.dest_unreach and icmp.TimeExceeded: This includes "unused" 8 or 24 bits and the following "Internet Header + leading octets of original datagram" of the original packet.

  classmethod `parser`(buf)

    Decode a protocol header.

    This method is used only when decoding a packet.

    Decode a protocol header at offset 0 in bytearray buf. Returns the following three objects.

    - An object to describe the decoded header.
    - A packet_base.PacketBase subclass appropriate for the rest of the packet. None when the rest of the packet should be considered as raw payload.
    - The rest of packet.
  `serialize`(payload, prev)

    Encode a protocol header.

    This method is used only when encoding a packet.

    Encode a protocol header. Returns a bytearray which contains the header.

    payload is the rest of the packet which will immediately follow this header.

    prev is a packet_base.PacketBase subclass for the outer protocol header. prev is None if the current header is the outer-most. For example, prev is ipv4 or ipv6 for tcp.serialize.