mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![Matteo Croce](/assets/img/avatar_default.png)
Add two helper functions, one for IPv4 and one for IPv6, to recognize the ICMP packets which are error responses. This packets are special because they have as payload the original header of the packet which generated it (RFC 792 says at least 8 bytes, but Linux actually includes much more than that). Signed-off-by: Matteo Croce <mcroce@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
38 lines
874 B
C
38 lines
874 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
|
* operating system. INET is implemented using the BSD Socket
|
|
* interface as the means of communication with the user level.
|
|
*
|
|
* Definitions for the ICMP protocol.
|
|
*
|
|
* Version: @(#)icmp.h 1.0.3 04/28/93
|
|
*
|
|
* Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
|
|
*/
|
|
#ifndef _LINUX_ICMP_H
|
|
#define _LINUX_ICMP_H
|
|
|
|
#include <linux/skbuff.h>
|
|
#include <uapi/linux/icmp.h>
|
|
|
|
static inline struct icmphdr *icmp_hdr(const struct sk_buff *skb)
|
|
{
|
|
return (struct icmphdr *)skb_transport_header(skb);
|
|
}
|
|
|
|
static inline bool icmp_is_err(int type)
|
|
{
|
|
switch (type) {
|
|
case ICMP_DEST_UNREACH:
|
|
case ICMP_SOURCE_QUENCH:
|
|
case ICMP_REDIRECT:
|
|
case ICMP_TIME_EXCEEDED:
|
|
case ICMP_PARAMETERPROB:
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
#endif /* _LINUX_ICMP_H */
|