File: | netinet/tcp_debug.c |
Warning: | line 162, column 4 Value stored to 'th' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* $OpenBSD: tcp_debug.c,v 1.30 2022/02/22 01:15:02 guenther Exp $ */ |
2 | /* $NetBSD: tcp_debug.c,v 1.10 1996/02/13 23:43:36 christos Exp $ */ |
3 | |
4 | /* |
5 | * Copyright (c) 1982, 1986, 1993 |
6 | * The Regents of the University of California. All rights reserved. |
7 | * |
8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions |
10 | * are met: |
11 | * 1. Redistributions of source code must retain the above copyright |
12 | * notice, this list of conditions and the following disclaimer. |
13 | * 2. Redistributions in binary form must reproduce the above copyright |
14 | * notice, this list of conditions and the following disclaimer in the |
15 | * documentation and/or other materials provided with the distribution. |
16 | * 3. Neither the name of the University nor the names of its contributors |
17 | * may be used to endorse or promote products derived from this software |
18 | * without specific prior written permission. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
23 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
26 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
28 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
29 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
30 | * SUCH DAMAGE. |
31 | * |
32 | * @(#)COPYRIGHT 1.1 (NRL) 17 January 1995 |
33 | * |
34 | * NRL grants permission for redistribution and use in source and binary |
35 | * forms, with or without modification, of the software and documentation |
36 | * created at NRL provided that the following conditions are met: |
37 | * |
38 | * 1. Redistributions of source code must retain the above copyright |
39 | * notice, this list of conditions and the following disclaimer. |
40 | * 2. Redistributions in binary form must reproduce the above copyright |
41 | * notice, this list of conditions and the following disclaimer in the |
42 | * documentation and/or other materials provided with the distribution. |
43 | * 3. All advertising materials mentioning features or use of this software |
44 | * must display the following acknowledgements: |
45 | * This product includes software developed by the University of |
46 | * California, Berkeley and its contributors. |
47 | * This product includes software developed at the Information |
48 | * Technology Division, US Naval Research Laboratory. |
49 | * 4. Neither the name of the NRL nor the names of its contributors |
50 | * may be used to endorse or promote products derived from this software |
51 | * without specific prior written permission. |
52 | * |
53 | * THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS |
54 | * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
55 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
56 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR |
57 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
58 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
59 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
60 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
61 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
62 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
63 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
64 | * |
65 | * The views and conclusions contained in the software and documentation |
66 | * are those of the authors and should not be interpreted as representing |
67 | * official policies, either expressed or implied, of the US Naval |
68 | * Research Laboratory (NRL). |
69 | */ |
70 | |
71 | #ifdef TCPDEBUG |
72 | /* load symbolic names */ |
73 | #define PRUREQUESTS |
74 | #define TCPSTATES |
75 | #define TCPTIMERS |
76 | #define TANAMES |
77 | #endif |
78 | |
79 | #include <sys/param.h> |
80 | #include <sys/systm.h> |
81 | #include <sys/mbuf.h> |
82 | #include <sys/socket.h> |
83 | |
84 | #include <net/route.h> |
85 | |
86 | #include <netinet/in.h> |
87 | #include <netinet/in_systm.h> |
88 | #include <netinet/ip.h> |
89 | #include <netinet/in_pcb.h> |
90 | #include <netinet/ip_var.h> |
91 | #include <netinet/tcp.h> |
92 | #include <netinet/tcp_timer.h> |
93 | #include <netinet/tcp_var.h> |
94 | #include <netinet/tcp_debug.h> |
95 | #include <netinet/tcp_fsm.h> |
96 | |
97 | #ifdef INET61 |
98 | #include <netinet/ip6.h> |
99 | #endif /* INET6 */ |
100 | |
101 | #ifdef TCPDEBUG |
102 | int tcpconsdebug = 0; |
103 | #endif |
104 | |
105 | struct tcp_debug tcp_debug[TCP_NDEBUG100]; |
106 | int tcp_debx; |
107 | |
108 | /* |
109 | * Tcp debug routines |
110 | */ |
111 | void |
112 | tcp_trace(short act, short ostate, struct tcpcb *tp, struct tcpcb *otp, |
113 | caddr_t headers, int req, int len) |
114 | { |
115 | #ifdef TCPDEBUG |
116 | tcp_seq seq, ack; |
117 | int flags; |
118 | #endif |
119 | int pf = PF_UNSPEC0; |
120 | struct tcp_debug *td = &tcp_debug[tcp_debx++]; |
121 | struct tcpiphdr *ti = (struct tcpiphdr *)headers; |
122 | struct tcpipv6hdr *ti6 = (struct tcpipv6hdr *)headers; |
123 | struct tcphdr *th; |
124 | |
125 | if (tcp_debx == TCP_NDEBUG100) |
126 | tcp_debx = 0; |
127 | td->td_time = iptime(); |
128 | td->td_act = act; |
129 | td->td_ostate = ostate; |
130 | td->td_tcb = (caddr_t)otp; |
131 | if (tp) { |
132 | pf = tp->pf; |
133 | td->td_cb = *tp; |
134 | } else |
135 | bzero((caddr_t)&td->td_cb, sizeof (*tp))__builtin_bzero(((caddr_t)&td->td_cb), (sizeof (*tp))); |
136 | |
137 | bzero(&td->td_ti6, sizeof(struct tcpipv6hdr))__builtin_bzero((&td->td_ti6), (sizeof(struct tcpipv6hdr ))); |
138 | bzero(&td->td_ti, sizeof(struct tcpiphdr))__builtin_bzero((&td->td_ti), (sizeof(struct tcpiphdr) )); |
139 | if (headers) { |
140 | /* The address family may be in tcpcb or ip header. */ |
141 | if (pf == PF_UNSPEC0) { |
142 | switch (ti6->ti6_i.ip6_vfcip6_ctlun.ip6_un2_vfc & IPV6_VERSION_MASK0xf0) { |
143 | #ifdef INET61 |
144 | case IPV6_VERSION0x60: |
145 | pf = PF_INET624; |
146 | break; |
147 | #endif /* INET6 */ |
148 | case IPVERSION4: |
149 | pf = PF_INET2; |
150 | break; |
151 | } |
152 | } |
153 | switch (pf) { |
154 | #ifdef INET61 |
155 | case PF_INET624: |
156 | th = &ti6->ti6_t; |
157 | td->td_ti6 = *ti6; |
158 | td->td_ti6.ti6_plenti6_i.ip6_ctlun.ip6_un1.ip6_un1_plen = len; |
159 | break; |
160 | #endif /* INET6 */ |
161 | case PF_INET2: |
162 | th = &ti->ti_t; |
Value stored to 'th' is never read | |
163 | td->td_ti = *ti; |
164 | td->td_ti.ti_lenti_i.ih_len = len; |
165 | break; |
166 | default: |
167 | headers = NULL((void *)0); |
168 | break; |
169 | } |
170 | } |
171 | |
172 | td->td_req = req; |
173 | #ifdef TCPDEBUG |
174 | if (tcpconsdebug == 0) |
175 | return; |
176 | if (otp) |
177 | printf("%p %s:", otp, tcpstates[ostate]); |
178 | else |
179 | printf("???????? "); |
180 | printf("%s ", tanames[act]); |
181 | switch (act) { |
182 | |
183 | case TA_INPUT0: |
184 | case TA_OUTPUT1: |
185 | case TA_DROP4: |
186 | if (headers == NULL((void *)0)) |
187 | break; |
188 | seq = th->th_seq; |
189 | ack = th->th_ack; |
190 | if (act == TA_OUTPUT1) { |
191 | seq = ntohl(seq)(__uint32_t)(__builtin_constant_p(seq) ? (__uint32_t)(((__uint32_t )(seq) & 0xff) << 24 | ((__uint32_t)(seq) & 0xff00 ) << 8 | ((__uint32_t)(seq) & 0xff0000) >> 8 | ((__uint32_t)(seq) & 0xff000000) >> 24) : __swap32md (seq)); |
192 | ack = ntohl(ack)(__uint32_t)(__builtin_constant_p(ack) ? (__uint32_t)(((__uint32_t )(ack) & 0xff) << 24 | ((__uint32_t)(ack) & 0xff00 ) << 8 | ((__uint32_t)(ack) & 0xff0000) >> 8 | ((__uint32_t)(ack) & 0xff000000) >> 24) : __swap32md (ack)); |
193 | } |
194 | if (len) |
195 | printf("[%x..%x)", seq, seq+len); |
196 | else |
197 | printf("%x", seq); |
198 | printf("@%x, urp=%x", ack, th->th_urp); |
199 | flags = th->th_flags; |
200 | if (flags) { |
201 | char *cp = "<"; |
202 | #define pf(f) { if (th->th_flags&TH_##f) { printf("%s%s", cp, #f); cp = ","; } } |
203 | pf(SYN); pf(ACK); pf(FIN); pf(RST); pf(PUSH); pf(URG); |
204 | printf(">"); |
205 | } |
206 | break; |
207 | |
208 | case TA_USER2: |
209 | printf("%s", prurequests[req]); |
210 | break; |
211 | |
212 | case TA_TIMER5: |
213 | printf("%s", tcptimers[req]); |
214 | break; |
215 | } |
216 | if (tp) |
217 | printf(" -> %s", tcpstates[tp->t_state]); |
218 | /* print out internal state of tp !?! */ |
219 | printf("\n"); |
220 | if (tp == NULL((void *)0)) |
221 | return; |
222 | printf("\trcv_(nxt,wnd,up) (%x,%lx,%x) snd_(una,nxt,max) (%x,%x,%x)\n", |
223 | tp->rcv_nxt, tp->rcv_wnd, tp->rcv_up, tp->snd_una, tp->snd_nxt, |
224 | tp->snd_max); |
225 | printf("\tsnd_(wl1,wl2,wnd) (%x,%x,%lx)\n", |
226 | tp->snd_wl1, tp->snd_wl2, tp->snd_wnd); |
227 | #endif /* TCPDEBUG */ |
228 | } |