Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/netinet/icmp_var.h
39475 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1982, 1986, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. Neither the name of the University nor the names of its contributors
16
* may be used to endorse or promote products derived from this software
17
* without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*/
31
32
#ifndef _NETINET_ICMP_VAR_H_
33
#define _NETINET_ICMP_VAR_H_
34
35
/*
36
* Variables related to this implementation
37
* of the internet control message protocol.
38
*/
39
struct icmpstat {
40
/* statistics related to icmp packets generated */
41
u_long icps_error; /* # of calls to icmp_error */
42
u_long icps_oldshort; /* no error 'cuz old ip too short */
43
u_long icps_oldicmp; /* no error 'cuz old was icmp */
44
u_long icps_outhist[ICMP_MAXTYPE + 1];
45
/* statistics related to input messages processed */
46
u_long icps_badcode; /* icmp_code out of range */
47
u_long icps_tooshort; /* packet < ICMP_MINLEN */
48
u_long icps_checksum; /* bad checksum */
49
u_long icps_badlen; /* calculated bound mismatch */
50
u_long icps_reflect; /* number of responses */
51
u_long icps_inhist[ICMP_MAXTYPE + 1];
52
u_long icps_bmcastecho; /* b/mcast echo requests dropped */
53
u_long icps_bmcasttstamp; /* b/mcast tstamp requests dropped */
54
u_long icps_badaddr; /* bad return address */
55
u_long icps_noroute; /* no route back */
56
};
57
58
#ifdef _KERNEL
59
#include <sys/counter.h>
60
#include <netinet/in_kdtrace.h>
61
62
VNET_PCPUSTAT_DECLARE(struct icmpstat, icmpstat);
63
/*
64
* In-kernel consumers can use these accessor macros directly to update
65
* stats.
66
*/
67
#define ICMPSTAT_ADD(name, val) \
68
do { \
69
MIB_SDT_PROBE1(icmp, count, name, (val)); \
70
VNET_PCPUSTAT_ADD(struct icmpstat, icmpstat, name, (val)); \
71
} while (0)
72
73
#define ICMPSTAT_INC(name) ICMPSTAT_ADD(name, 1)
74
#define ICMPSTAT_INC2(name, type) \
75
do { \
76
MIB_SDT_PROBE2(icmp, count, name, 1, type); \
77
VNET_PCPUSTAT_ADD(struct icmpstat, icmpstat, name[type], 1); \
78
} while (0)
79
80
/*
81
* Kernel module consumers must use this accessor macro.
82
*/
83
void kmod_icmpstat_inc(int statnum);
84
#define KMOD_ICMPSTAT_INC(name) \
85
do { \
86
MIB_SDT_PROBE1(icmp, count, name, 1); \
87
kmod_icmpstat_inc( \
88
offsetof(struct icmpstat, name) / sizeof(uint64_t)); \
89
} while (0)
90
#endif
91
92
/*
93
* Identifiers for ICMP sysctl nodes
94
*/
95
#define ICMPCTL_MASKREPL 1 /* allow replies to netmask requests */
96
#define ICMPCTL_STATS 2 /* statistics (read-only) */
97
#define ICMPCTL_ICMPLIM 3
98
99
#ifdef _KERNEL
100
SYSCTL_DECL(_net_inet_icmp);
101
102
extern int badport_bandlim(int);
103
#define BANDLIM_ICMP_UNREACH 0
104
#define BANDLIM_ICMP_ECHO 1
105
#define BANDLIM_ICMP_TSTAMP 2
106
#define BANDLIM_TCP_RST 3
107
#define BANDLIM_ICMP6_UNREACH 4
108
#define BANDLIM_SCTP_OOTB 5
109
#define BANDLIM_MAX 6
110
#endif
111
112
#endif
113
114