Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / icmp.h
diff --git a/qemu/roms/ipxe/src/include/ipxe/icmp.h b/qemu/roms/ipxe/src/include/ipxe/icmp.h
new file mode 100644 (file)
index 0000000..0480ddf
--- /dev/null
@@ -0,0 +1,73 @@
+#ifndef _IPXE_ICMP_H
+#define _IPXE_ICMP_H
+
+/** @file
+ *
+ * ICMP protocol
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <stdint.h>
+#include <ipxe/iobuf.h>
+#include <ipxe/socket.h>
+#include <ipxe/tcpip.h>
+#include <ipxe/tables.h>
+
+/** An ICMP header */
+struct icmp_header {
+       /** Type */
+       uint8_t type;
+       /** Code */
+       uint8_t code;
+       /** Checksum */
+       uint16_t chksum;
+} __attribute__ (( packed ));
+
+/** An ICMP echo request/reply */
+struct icmp_echo {
+       /** ICMPv6 header */
+       struct icmp_header icmp;
+       /** Identifier */
+       uint16_t ident;
+       /** Sequence number */
+       uint16_t sequence;
+       /** Data */
+       uint8_t data[0];
+} __attribute__ (( packed ));
+
+/** An ICMP echo protocol */
+struct icmp_echo_protocol {
+       /** Address family */
+       sa_family_t family;
+       /** Request type */
+       uint8_t request;
+       /** Reply type */
+       uint8_t reply;
+       /** TCP/IP protocol */
+       struct tcpip_protocol *tcpip_protocol;
+       /** Include network-layer checksum within packet */
+       int net_checksum;
+};
+
+/** ICMP echo protocol table */
+#define ICMP_ECHO_PROTOCOLS \
+       __table ( struct icmp_echo_protocol, "icmp_echo_protocols" )
+
+/** Declare an ICMP echo protocol */
+#define __icmp_echo_protocol __table_entry ( ICMP_ECHO_PROTOCOLS, 01 )
+
+#define ICMP_ECHO_REPLY 0
+#define ICMP_ECHO_REQUEST 8
+
+extern int icmp_tx_echo_request ( struct io_buffer *iobuf,
+                                 struct sockaddr_tcpip *st_dest );
+
+extern int icmp_rx_echo_request ( struct io_buffer *iobuf,
+                                 struct sockaddr_tcpip *st_src,
+                                 struct icmp_echo_protocol *echo_protocol );
+extern int icmp_rx_echo_reply ( struct io_buffer *iobuf,
+                               struct sockaddr_tcpip *st_src );
+
+#endif /* _IPXE_ICMP_H */