mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2025-08-11 08:54:38 +08:00
icmp: add a dedicated struct for the standard ICMP header
This is just to keep the code clean and prevent using the "echo" header where any ICMP header is meant. Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
This commit is contained in:
parent
75b2db4438
commit
695c323164
@ -341,8 +341,7 @@ icmp_send_response(struct pbuf *p, u8_t type, u8_t code)
|
|||||||
{
|
{
|
||||||
struct pbuf *q;
|
struct pbuf *q;
|
||||||
struct ip_hdr *iphdr;
|
struct ip_hdr *iphdr;
|
||||||
/* we can use the echo header here */
|
struct icmp_hdr *icmphdr;
|
||||||
struct icmp_echo_hdr *icmphdr;
|
|
||||||
ip4_addr_t iphdr_src;
|
ip4_addr_t iphdr_src;
|
||||||
struct netif *netif;
|
struct netif *netif;
|
||||||
|
|
||||||
@ -350,7 +349,7 @@ icmp_send_response(struct pbuf *p, u8_t type, u8_t code)
|
|||||||
MIB2_STATS_INC(mib2.icmpoutmsgs);
|
MIB2_STATS_INC(mib2.icmpoutmsgs);
|
||||||
|
|
||||||
/* ICMP header + IP header + 8 bytes of data */
|
/* ICMP header + IP header + 8 bytes of data */
|
||||||
q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE,
|
q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE,
|
||||||
PBUF_RAM);
|
PBUF_RAM);
|
||||||
if (q == NULL) {
|
if (q == NULL) {
|
||||||
LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n"));
|
LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n"));
|
||||||
@ -367,11 +366,10 @@ icmp_send_response(struct pbuf *p, u8_t type, u8_t code)
|
|||||||
ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->dest);
|
ip4_addr_debug_print_val(ICMP_DEBUG, iphdr->dest);
|
||||||
LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
|
LWIP_DEBUGF(ICMP_DEBUG, ("\n"));
|
||||||
|
|
||||||
icmphdr = (struct icmp_echo_hdr *)q->payload;
|
icmphdr = (struct icmp_hdr *)q->payload;
|
||||||
icmphdr->type = type;
|
icmphdr->type = type;
|
||||||
icmphdr->code = code;
|
icmphdr->code = code;
|
||||||
icmphdr->id = 0;
|
icmphdr->data = 0;
|
||||||
icmphdr->seqno = 0;
|
|
||||||
|
|
||||||
/* copy fields from original packet */
|
/* copy fields from original packet */
|
||||||
SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload,
|
SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload,
|
||||||
|
@ -57,13 +57,33 @@ extern "C" {
|
|||||||
#define ICMP_AM 17 /* address mask request */
|
#define ICMP_AM 17 /* address mask request */
|
||||||
#define ICMP_AMR 18 /* address mask reply */
|
#define ICMP_AMR 18 /* address mask reply */
|
||||||
|
|
||||||
|
#ifdef PACK_STRUCT_USE_INCLUDES
|
||||||
|
# include "arch/bpstruct.h"
|
||||||
|
#endif
|
||||||
|
/** The standard ICMP header (unspecified 32 bit data) */
|
||||||
|
PACK_STRUCT_BEGIN
|
||||||
|
struct icmp_hdr {
|
||||||
|
PACK_STRUCT_FLD_8(u8_t type);
|
||||||
|
PACK_STRUCT_FLD_8(u8_t code);
|
||||||
|
PACK_STRUCT_FIELD(u16_t chksum);
|
||||||
|
PACK_STRUCT_FIELD(u32_t data);
|
||||||
|
} PACK_STRUCT_STRUCT;
|
||||||
|
PACK_STRUCT_END
|
||||||
|
#ifdef PACK_STRUCT_USE_INCLUDES
|
||||||
|
# include "arch/epstruct.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Compatibility defines, old versions used to combine type and code to an u16_t */
|
||||||
|
#define ICMPH_TYPE(hdr) ((hdr)->type)
|
||||||
|
#define ICMPH_CODE(hdr) ((hdr)->code)
|
||||||
|
#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t))
|
||||||
|
#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c))
|
||||||
|
|
||||||
#ifdef PACK_STRUCT_USE_INCLUDES
|
#ifdef PACK_STRUCT_USE_INCLUDES
|
||||||
# include "arch/bpstruct.h"
|
# include "arch/bpstruct.h"
|
||||||
#endif
|
#endif
|
||||||
/** This is the standard ICMP header only that the u32_t data
|
/** This is the standard ICMP header only that the u32_t data
|
||||||
* is split to two u16_t like ICMP echo needs it.
|
* is split to two u16_t like ICMP echo needs it.
|
||||||
* This header is also used for other ICMP types that do not
|
|
||||||
* use the data part.
|
|
||||||
*/
|
*/
|
||||||
PACK_STRUCT_BEGIN
|
PACK_STRUCT_BEGIN
|
||||||
struct icmp_echo_hdr {
|
struct icmp_echo_hdr {
|
||||||
@ -78,12 +98,6 @@ PACK_STRUCT_END
|
|||||||
# include "arch/epstruct.h"
|
# include "arch/epstruct.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compatibility defines, old versions used to combine type and code to an u16_t */
|
|
||||||
#define ICMPH_TYPE(hdr) ((hdr)->type)
|
|
||||||
#define ICMPH_CODE(hdr) ((hdr)->code)
|
|
||||||
#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t))
|
|
||||||
#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c))
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user