Wed Jan 29 05:20:27 2020 UTC ()
Adopt <net/if_stats.h>.


(thorpej)
diff -r1.8 -r1.9 src/sys/netcan/can.c
diff -r1.8 -r1.9 src/sys/netcan/if_canloop.c

cvs diff -r1.8 -r1.9 src/sys/netcan/can.c (expand / switch to unified diff)

--- src/sys/netcan/can.c 2019/08/19 03:24:38 1.8
+++ src/sys/netcan/can.c 2020/01/29 05:20:26 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: can.c,v 1.8 2019/08/19 03:24:38 ozaki-r Exp $ */ 1/* $NetBSD: can.c,v 1.9 2020/01/29 05:20:26 thorpej Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc. 4 * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Robert Swindells and Manuel Bouyer 8 * by Robert Swindells and Manuel Bouyer
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -20,27 +20,27 @@ @@ -20,27 +20,27 @@
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.8 2019/08/19 03:24:38 ozaki-r Exp $"); 33__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.9 2020/01/29 05:20:26 thorpej Exp $");
34 34
35#include <sys/param.h> 35#include <sys/param.h>
36#include <sys/systm.h> 36#include <sys/systm.h>
37#include <sys/mbuf.h> 37#include <sys/mbuf.h>
38#include <sys/ioctl.h> 38#include <sys/ioctl.h>
39#include <sys/domain.h> 39#include <sys/domain.h>
40#include <sys/protosw.h> 40#include <sys/protosw.h>
41#include <sys/errno.h> 41#include <sys/errno.h>
42#include <sys/socket.h> 42#include <sys/socket.h>
43#include <sys/socketvar.h> 43#include <sys/socketvar.h>
44#include <sys/proc.h> 44#include <sys/proc.h>
45#include <sys/kauth.h> 45#include <sys/kauth.h>
46 46
@@ -239,27 +239,27 @@ can_output(struct mbuf *m, struct canpcb @@ -239,27 +239,27 @@ can_output(struct mbuf *m, struct canpcb
239 return EINVAL; 239 return EINVAL;
240 } 240 }
241 ifp = canp->canp_ifp; 241 ifp = canp->canp_ifp;
242 if (ifp == 0) { 242 if (ifp == 0) {
243 return EDESTADDRREQ; 243 return EDESTADDRREQ;
244 } 244 }
245 csc = ifp->if_softc; 245 csc = ifp->if_softc;
246 if (csc && (csc->csc_linkmodes & CAN_LINKMODE_LISTENONLY)) { 246 if (csc && (csc->csc_linkmodes & CAN_LINKMODE_LISTENONLY)) {
247 return ENETUNREACH; 247 return ENETUNREACH;
248 } 248 }
249  249
250 sotag = m_tag_get(PACKET_TAG_SO, sizeof(struct socket *), PR_NOWAIT); 250 sotag = m_tag_get(PACKET_TAG_SO, sizeof(struct socket *), PR_NOWAIT);
251 if (sotag == NULL) { 251 if (sotag == NULL) {
252 ifp->if_oerrors++; 252 if_statinc(ifp, if_oerrors);
253 return ENOMEM; 253 return ENOMEM;
254 } 254 }
255 mutex_enter(&canp->canp_mtx); 255 mutex_enter(&canp->canp_mtx);
256 canp_ref(canp); 256 canp_ref(canp);
257 mutex_exit(&canp->canp_mtx); 257 mutex_exit(&canp->canp_mtx);
258 *(struct canpcb **)(sotag + 1) = canp; 258 *(struct canpcb **)(sotag + 1) = canp;
259 m_tag_prepend(m, sotag); 259 m_tag_prepend(m, sotag);
260 260
261 if (m->m_len <= ifp->if_mtu) { 261 if (m->m_len <= ifp->if_mtu) {
262 can_output_cnt++; 262 can_output_cnt++;
263 return ifq_enqueue(ifp, m); 263 return ifq_enqueue(ifp, m);
264 } else 264 } else
265 return EMSGSIZE; 265 return EMSGSIZE;
@@ -297,28 +297,27 @@ can_input(struct ifnet *ifp, struct mbuf @@ -297,28 +297,27 @@ can_input(struct ifnet *ifp, struct mbuf
297 return; 297 return;
298 } 298 }
299 299
300 inq = &canintrq; 300 inq = &canintrq;
301  301
302 IFQ_LOCK(inq); 302 IFQ_LOCK(inq);
303 if (IF_QFULL(inq)) { 303 if (IF_QFULL(inq)) {
304 IF_DROP(inq); 304 IF_DROP(inq);
305 IFQ_UNLOCK(inq); 305 IFQ_UNLOCK(inq);
306 m_freem(m); 306 m_freem(m);
307 } else { 307 } else {
308 IF_ENQUEUE(inq, m); 308 IF_ENQUEUE(inq, m);
309 IFQ_UNLOCK(inq); 309 IFQ_UNLOCK(inq);
310 ifp->if_ipackets++; 310 if_statadd2(ifp, if_ipackets, 1, if_ibytes, m->m_pkthdr.len);
311 ifp->if_ibytes += m->m_pkthdr.len; 
312 schednetisr(NETISR_CAN); 311 schednetisr(NETISR_CAN);
313 } 312 }
314} 313}
315 314
316void 315void
317canintr(void) 316canintr(void)
318{ 317{
319 int rcv_ifindex; 318 int rcv_ifindex;
320 struct mbuf *m; 319 struct mbuf *m;
321 320
322 struct sockaddr_can from; 321 struct sockaddr_can from;
323 struct canpcb *canp; 322 struct canpcb *canp;
324 struct m_tag *sotag; 323 struct m_tag *sotag;

cvs diff -r1.8 -r1.9 src/sys/netcan/if_canloop.c (expand / switch to unified diff)

--- src/sys/netcan/if_canloop.c 2019/04/27 08:49:19 1.8
+++ src/sys/netcan/if_canloop.c 2020/01/29 05:20:26 1.9
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: if_canloop.c,v 1.8 2019/04/27 08:49:19 pgoyette Exp $ */ 1/* $NetBSD: if_canloop.c,v 1.9 2020/01/29 05:20:26 thorpej Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2017 The NetBSD Foundation, Inc. 4 * Copyright (c) 2017 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Manuel Bouyer. 8 * by Manuel Bouyer.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -25,27 +25,27 @@ @@ -25,27 +25,27 @@
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32 32
33/* 33/*
34 * Loopback interface driver for the CAN protocol 34 * Loopback interface driver for the CAN protocol
35 */ 35 */
36 36
37#include <sys/cdefs.h> 37#include <sys/cdefs.h>
38__KERNEL_RCSID(0, "$NetBSD: if_canloop.c,v 1.8 2019/04/27 08:49:19 pgoyette Exp $"); 38__KERNEL_RCSID(0, "$NetBSD: if_canloop.c,v 1.9 2020/01/29 05:20:26 thorpej Exp $");
39 39
40#ifdef _KERNEL_OPT 40#ifdef _KERNEL_OPT
41#include "opt_can.h" 41#include "opt_can.h"
42#include "opt_net_mpsafe.h" 42#include "opt_net_mpsafe.h"
43#endif 43#endif
44 44
45#include <sys/param.h> 45#include <sys/param.h>
46#include <sys/systm.h> 46#include <sys/systm.h>
47#include <sys/kernel.h> 47#include <sys/kernel.h>
48#include <sys/mbuf.h> 48#include <sys/mbuf.h>
49#include <sys/socket.h> 49#include <sys/socket.h>
50#include <sys/errno.h> 50#include <sys/errno.h>
51#include <sys/ioctl.h> 51#include <sys/ioctl.h>
@@ -160,28 +160,27 @@ canloop_ifstart(struct ifnet *ifp) @@ -160,28 +160,27 @@ canloop_ifstart(struct ifnet *ifp)
160 while (true) { 160 while (true) {
161 IF_DEQUEUE(&ifp->if_snd, m); 161 IF_DEQUEUE(&ifp->if_snd, m);
162 if (m == NULL) 162 if (m == NULL)
163 break; 163 break;
164 MCLAIM(m, ifp->if_mowner); 164 MCLAIM(m, ifp->if_mowner);
165 165
166 if ((m->m_flags & M_PKTHDR) == 0) 166 if ((m->m_flags & M_PKTHDR) == 0)
167 panic("canloop_output: no header mbuf"); 167 panic("canloop_output: no header mbuf");
168 m_set_rcvif(m, ifp); 168 m_set_rcvif(m, ifp);
169 if (ifp->if_flags & IFF_LOOPBACK) 169 if (ifp->if_flags & IFF_LOOPBACK)
170 can_bpf_mtap(ifp, m, 0); 170 can_bpf_mtap(ifp, m, 0);
171 171
172 pktlen = m->m_pkthdr.len; 172 pktlen = m->m_pkthdr.len;
173 ifp->if_opackets++; 173 if_statadd2(ifp, if_opackets, 1, if_obytes, pktlen);
174 ifp->if_obytes += pktlen; 
175 174
176#ifdef CAN 175#ifdef CAN
177 can_mbuf_tag_clean(m); 176 can_mbuf_tag_clean(m);
178 can_input(ifp, m); 177 can_input(ifp, m);
179#else 178#else
180 printf("%s: can't handle CAN packet\n", ifp->if_xname); 179 printf("%s: can't handle CAN packet\n", ifp->if_xname);
181 m_freem(m); 180 m_freem(m);
182#endif 181#endif
183 } 182 }
184 183
185 KERNEL_UNLOCK_ONE(NULL); 184 KERNEL_UNLOCK_ONE(NULL);
186} 185}
187 186