12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #ifndef _IPXE_ICMP_H
- #define _IPXE_ICMP_H
-
- /** @file
- *
- * ICMP protocol
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #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 */
|