Module Name:    src
Committed By:   bouyer
Date:           Sun Feb  5 11:45:11 UTC 2017

Modified Files:
        src/sys/netcan [bouyer-socketcan]: can.c can_var.h if_canloop.c

Log Message:
Centralize mbuf tag cleanup, it will be used by real interface drivers too.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/netcan/can.c
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 src/sys/netcan/can_var.h \
    src/sys/netcan/if_canloop.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netcan/can.c
diff -u src/sys/netcan/can.c:1.1.2.3 src/sys/netcan/can.c:1.1.2.4
--- src/sys/netcan/can.c:1.1.2.3	Sun Feb  5 10:56:12 2017
+++ src/sys/netcan/can.c	Sun Feb  5 11:45:11 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: can.c,v 1.1.2.3 2017/02/05 10:56:12 bouyer Exp $	*/
+/*	$NetBSD: can.c,v 1.1.2.4 2017/02/05 11:45:11 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.1.2.3 2017/02/05 10:56:12 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: can.c,v 1.1.2.4 2017/02/05 11:45:11 bouyer Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -153,6 +153,20 @@ bad:
 }
 
 /*
+ * cleanup mbuf tag, keeping the PACKET_TAG_SO tag
+ */
+void
+can_mbuf_tag_clean(struct mbuf *m)
+{
+	struct m_tag *sotag;
+
+	sotag = m_tag_find(m, PACKET_TAG_SO, NULL);
+	m_tag_delete_nonpersistent(m);
+	if (sotag)
+		m_tag_prepend(m, sotag);
+}
+
+/*
  * Process a received CAN frame
  * the packet is in the mbuf chain m with
  * the CAN header.

Index: src/sys/netcan/can_var.h
diff -u src/sys/netcan/can_var.h:1.1.2.2 src/sys/netcan/can_var.h:1.1.2.3
--- src/sys/netcan/can_var.h:1.1.2.2	Mon Jan 16 18:03:38 2017
+++ src/sys/netcan/can_var.h	Sun Feb  5 11:45:11 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: can_var.h,v 1.1.2.2 2017/01/16 18:03:38 bouyer Exp $	*/
+/*	$NetBSD: can_var.h,v 1.1.2.3 2017/02/05 11:45:11 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2017 The NetBSD Foundation, Inc.
@@ -45,6 +45,7 @@ extern struct domain candomain;
 
 extern const struct pr_usrreqs can_usrreqs;
 
+void can_mbuf_tag_clean(struct mbuf *);
 void can_input(struct ifnet *, struct mbuf *);
 void *can_ctlinput(int, struct sockaddr *, void *);
 int can_ctloutput(int, struct socket *, struct sockopt *);
Index: src/sys/netcan/if_canloop.c
diff -u src/sys/netcan/if_canloop.c:1.1.2.2 src/sys/netcan/if_canloop.c:1.1.2.3
--- src/sys/netcan/if_canloop.c:1.1.2.2	Mon Jan 16 18:03:38 2017
+++ src/sys/netcan/if_canloop.c	Sun Feb  5 11:45:11 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_canloop.c,v 1.1.2.2 2017/01/16 18:03:38 bouyer Exp $	*/
+/*	$NetBSD: if_canloop.c,v 1.1.2.3 2017/02/05 11:45:11 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_canloop.c,v 1.1.2.2 2017/01/16 18:03:38 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_canloop.c,v 1.1.2.3 2017/02/05 11:45:11 bouyer Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_can.h"
@@ -83,7 +83,7 @@ canloopattach(int n)
 
 	/*
 	 * Nothing to do here, initialization is handled by the
-	 * module initialization code in canloopnit() below).
+	 * module initialization code in canloopinit() below).
 	 */
 }
 
@@ -162,7 +162,6 @@ canloop_output(struct ifnet *ifp, struct
 {
 	int error = 0;
 	size_t pktlen;
-	struct m_tag *sotag;
 
 	MCLAIM(m, ifp->if_mowner);
 
@@ -178,12 +177,8 @@ canloop_output(struct ifnet *ifp, struct
 	ifp->if_opackets++;
 	ifp->if_obytes += pktlen;
 
-	/* we have to preserve the socket tag */
-	sotag = m_tag_find(m, PACKET_TAG_SO, NULL);
-	m_tag_delete_nonpersistent(m);
-	if (sotag)
-		m_tag_prepend(m, sotag);
 #ifdef CAN
+	can_mbuf_tag_clean(m);
 	can_input(ifp, m);
 #else
 	printf("%s: can't handle CAN packet\n", ifp->if_xname);

Reply via email to