1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2013 Mark Johnston <markj@FreeBSD.org> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30 #ifndef _SYS_IN_KDTRACE_H_ 31 #define _SYS_IN_KDTRACE_H_ 32 33 #define IP_PROBE(probe, arg0, arg1, arg2, arg3, arg4, arg5) \ 34 SDT_PROBE6(ip, , , probe, arg0, arg1, arg2, arg3, arg4, arg5) 35 #define UDP_PROBE(probe, arg0, arg1, arg2, arg3, arg4) \ 36 SDT_PROBE5(udp, , , probe, arg0, arg1, arg2, arg3, arg4) 37 #define UDPLITE_PROBE(probe, arg0, arg1, arg2, arg3, arg4) \ 38 SDT_PROBE5(udplite, , , probe, arg0, arg1, arg2, arg3, arg4) 39 #define TCP_PROBE1(probe, arg0) \ 40 SDT_PROBE1(tcp, , , probe, arg0) 41 #define TCP_PROBE2(probe, arg0, arg1) \ 42 SDT_PROBE2(tcp, , , probe, arg0, arg1) 43 #define TCP_PROBE3(probe, arg0, arg1, arg2) \ 44 SDT_PROBE3(tcp, , , probe, arg0, arg1, arg2) 45 #define TCP_PROBE4(probe, arg0, arg1, arg2, arg3) \ 46 SDT_PROBE4(tcp, , , probe, arg0, arg1, arg2, arg3) 47 #define TCP_PROBE5(probe, arg0, arg1, arg2, arg3, arg4) \ 48 SDT_PROBE5(tcp, , , probe, arg0, arg1, arg2, arg3, arg4) 49 #define TCP_PROBE6(probe, arg0, arg1, arg2, arg3, arg4, arg5) \ 50 SDT_PROBE6(tcp, , , probe, arg0, arg1, arg2, arg3, arg4, arg5) 51 52 SDT_PROVIDER_DECLARE(ip); 53 SDT_PROVIDER_DECLARE(tcp); 54 SDT_PROVIDER_DECLARE(udp); 55 SDT_PROVIDER_DECLARE(udplite); 56 57 SDT_PROBE_DECLARE(ip, , , receive); 58 SDT_PROBE_DECLARE(ip, , , send); 59 60 SDT_PROBE_DECLARE(tcp, , , accept__established); 61 SDT_PROBE_DECLARE(tcp, , , accept__refused); 62 SDT_PROBE_DECLARE(tcp, , , connect__established); 63 SDT_PROBE_DECLARE(tcp, , , connect__refused); 64 SDT_PROBE_DECLARE(tcp, , , connect__request); 65 SDT_PROBE_DECLARE(tcp, , , receive); 66 SDT_PROBE_DECLARE(tcp, , , send); 67 SDT_PROBE_DECLARE(tcp, , , siftr); 68 SDT_PROBE_DECLARE(tcp, , , state__change); 69 SDT_PROBE_DECLARE(tcp, , , debug__input); 70 SDT_PROBE_DECLARE(tcp, , , debug__output); 71 SDT_PROBE_DECLARE(tcp, , , debug__user); 72 SDT_PROBE_DECLARE(tcp, , , debug__drop); 73 SDT_PROBE_DECLARE(tcp, , , receive__autoresize); 74 75 SDT_PROBE_DECLARE(udp, , , receive); 76 SDT_PROBE_DECLARE(udp, , , send); 77 78 SDT_PROBE_DECLARE(udplite, , , receive); 79 SDT_PROBE_DECLARE(udplite, , , send); 80 81 /* 82 * These constants originate from the 4.4BSD sys/protosw.h. They lost 83 * their initial purpose in 2c37256e5a59, when single pr_usrreq method 84 * was split into multiple methods. However, they were used by TCPDEBUG, 85 * a feature barely used, but it kept them in the tree for many years. 86 * In 5d06879adb95 DTrace probes started to use them. Note that they 87 * are not documented in dtrace_tcp(4), so they are likely to be 88 * eventually renamed to something better and extended/trimmed. 89 */ 90 #define PRU_ATTACH 0 /* attach protocol to up */ 91 #define PRU_DETACH 1 /* detach protocol from up */ 92 #define PRU_BIND 2 /* bind socket to address */ 93 #define PRU_LISTEN 3 /* listen for connection */ 94 #define PRU_CONNECT 4 /* establish connection to peer */ 95 #define PRU_ACCEPT 5 /* accept connection from peer */ 96 #define PRU_DISCONNECT 6 /* disconnect from peer */ 97 #define PRU_SHUTDOWN 7 /* won't send any more data */ 98 #define PRU_RCVD 8 /* have taken data; more room now */ 99 #define PRU_SEND 9 /* send this data */ 100 #define PRU_ABORT 10 /* abort (fast DISCONNECT, DETATCH) */ 101 #define PRU_CONTROL 11 /* control operations on protocol */ 102 #define PRU_SENSE 12 /* return status into m */ 103 #define PRU_RCVOOB 13 /* retrieve out of band data */ 104 #define PRU_SENDOOB 14 /* send out of band data */ 105 #define PRU_SOCKADDR 15 /* fetch socket's address */ 106 #define PRU_PEERADDR 16 /* fetch peer's address */ 107 #define PRU_CONNECT2 17 /* connect two sockets */ 108 /* begin for protocols internal use */ 109 #define PRU_FASTTIMO 18 /* 200ms timeout */ 110 #define PRU_SLOWTIMO 19 /* 500ms timeout */ 111 #define PRU_PROTORCV 20 /* receive from below */ 112 #define PRU_PROTOSEND 21 /* send to below */ 113 /* end for protocol's internal use */ 114 #define PRU_SEND_EOF 22 /* send and close */ 115 #define PRU_SOSETLABEL 23 /* MAC label change */ 116 #define PRU_CLOSE 24 /* socket close */ 117 #define PRU_FLUSH 25 /* flush the socket */ 118 #define PRU_NREQ 25 119 120 #ifdef PRUREQUESTS 121 const char *prurequests[] = { 122 "ATTACH", "DETACH", "BIND", "LISTEN", 123 "CONNECT", "ACCEPT", "DISCONNECT", "SHUTDOWN", 124 "RCVD", "SEND", "ABORT", "CONTROL", 125 "SENSE", "RCVOOB", "SENDOOB", "SOCKADDR", 126 "PEERADDR", "CONNECT2", "FASTTIMO", "SLOWTIMO", 127 "PROTORCV", "PROTOSEND", "SEND_EOF", "SOSETLABEL", 128 "CLOSE", "FLUSH", 129 }; 130 #endif 131 132 #endif 133