]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/dtrace/mbuf.d
login(1): when exporting variables check the result of setenv(3)
[FreeBSD/FreeBSD.git] / share / dtrace / mbuf.d
1 /*
2  * Copyright (c) 2016 George V. Neville-Neil
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * 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 distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  *
28  * Translators and flags for the mbuf structure.  FreeBSD specific code.
29  */
30
31 #pragma D depends_on module kernel
32
33 /*
34  * mbuf flags of global significance and layer crossing.
35  * Those of only protocol/layer specific significance are to be mapped
36  * to M_PROTO[1-12] and cleared at layer handoff boundaries.
37  * NB: Limited to the lower 24 bits.
38  */
39
40 #pragma D binding "1.6.3" M_EXT
41 inline int M_EXT =      0x00000001; /* has associated external storage */
42 #pragma D binding "1.6.3" M_PKTHDR
43 inline int M_PKTHDR =   0x00000002; /* start of record */
44 #pragma D binding "1.6.3" M_EOR
45 inline int M_EOR =      0x00000004; /* end of record */
46 #pragma D binding "1.6.3" M_RDONLY
47 inline int M_RDONLY =   0x00000008; /* associated data is marked read-only */
48 #pragma D binding "1.6.3" M_BCAST
49 inline int M_BCAST =    0x00000010; /* send/received as link-level broadcast */
50 #pragma D binding "1.6.3" M_MCAST
51 inline int M_MCAST =    0x00000020; /* send/received as link-level multicast */
52 #pragma D binding "1.6.3" M_PROMISC
53 inline int M_PROMISC =  0x00000040; /* packet was not for us */
54 #pragma D binding "1.6.3" M_VLANTAG
55 inline int M_VLANTAG =  0x00000080; /* ether_vtag is valid */
56 #pragma D binding "1.13" M_EXTPG
57 inline int M_EXTPG =    0x00000100; /* has array of unmapped pages and TLS */
58 #pragma D binding "1.6.3" M_NOFREE
59 inline int M_NOFREE =   0x00000200; /* do not free mbuf, embedded in cluster */
60 #pragma D binding "1.13" M_TSTMP
61 inline int M_TSTMP =    0x00000400; /* rcv_tstmp field is valid */
62 #pragma D binding "1.13" M_TSTMP_HPREC
63 inline int M_TSTMP_HPREC = 0x00000800; /* rcv_tstmp is high-prec */
64 #pragma D binding "1.13" M_TSTMP_LRO
65 inline int M_TSTMP_LRO = 0x00001000; /* Time LRO pushed in pkt is valid */
66  
67 #pragma D binding "1.13" M_PROTO1
68 inline int M_PROTO1 =   0x00002000; /* protocol-specific */
69 #pragma D binding "1.13" M_PROTO2
70 inline int M_PROTO2 =   0x00004000; /* protocol-specific */
71 #pragma D binding "1.13" M_PROTO3
72 inline int M_PROTO3 =   0x00008000; /* protocol-specific */
73 #pragma D binding "1.13" M_PROTO4
74 inline int M_PROTO4 =   0x00010000; /* protocol-specific */
75 #pragma D binding "1.13" M_PROTO5
76 inline int M_PROTO5 =   0x00020000; /* protocol-specific */
77 #pragma D binding "1.13" M_PROTO6
78 inline int M_PROTO6 =   0x00040000; /* protocol-specific */
79 #pragma D binding "1.13" M_PROTO7
80 inline int M_PROTO7 =   0x00080000; /* protocol-specific */
81 #pragma D binding "1.13" M_PROTO8
82 inline int M_PROTO8 =   0x00100000; /* protocol-specific */
83 #pragma D binding "1.13" M_PROTO9
84 inline int M_PROTO9 =   0x00200000; /* protocol-specific */
85 #pragma D binding "1.13" M_PROTO10
86 inline int M_PROTO10 =  0x00400000; /* protocol-specific */
87 #pragma D binding "1.13" M_PROTO11
88 inline int M_PROTO11 =  0x00800000; /* protocol-specific */
89
90 #pragma D binding "1.13" mbufflags_string
91 inline string mbufflags_string[uint32_t flags] =
92     flags & M_EXT ? "M_EXT" :
93     flags & M_PKTHDR ? "M_PKTHDR" :
94     flags & M_EOR  ? "M_EOR" :
95     flags & M_RDONLY  ? "M_RDONLY" :
96     flags & M_BCAST  ? "M_BCAST" :
97     flags & M_MCAST     ? "M_MCAST" :
98     flags & M_PROMISC   ? "M_PROMISC" :
99     flags & M_VLANTAG   ? "M_VLANTAG" :
100     flags & M_EXTPG     ? "M_EXTPG" :
101     flags & M_NOFREE    ? "M_NOFREE" :
102     flags & M_TSTMP     ? "M_TSTMP" :
103     flags & M_TSTMP_HPREC ? "M_TSTMP_HPREC" :
104     flags & M_TSTMP_LRO ? "M_TSTMP_LRO" :
105     flags & M_PROTO1  ? "M_PROTO1" :
106     flags & M_PROTO2 ? "M_PROTO2" :
107     flags & M_PROTO3 ? "M_PROTO3" :
108     flags & M_PROTO4 ? "M_PROTO4" :
109     flags & M_PROTO5 ? "M_PROTO5" :
110     flags & M_PROTO6 ? "M_PROTO6" :
111     flags & M_PROTO7 ? "M_PROTO7" :
112     flags & M_PROTO8 ? "M_PROTO8" :
113     flags & M_PROTO9 ? "M_PROTO9" :
114     flags & M_PROTO10 ? "M_PROTO10" :
115     flags & M_PROTO11 ? "M_PROTO11" :
116     "none" ;
117
118 typedef struct mbufinfo {
119         uintptr_t mbuf_addr;
120         caddr_t m_data;
121         int32_t m_len;
122         uint8_t m_type;
123         uint32_t m_flags;
124 } mbufinfo_t;
125
126 translator mbufinfo_t < struct mbuf *p > {
127         mbuf_addr = (uintptr_t)p;
128         m_data = p->m_data;
129         m_len = p->m_len;
130         m_type = p->m_type & 0xff000000;
131         m_flags = p->m_type & 0x00ffffff;
132 };