Thread (1 message) 1 message, 1 author, 2010-01-12

Re: [PATCH net-next-2.6 v3] can: Unify droping of invalid tx skbs and netdev stats

From: Wolfgang Grandegger <hidden>
Date: 2010-01-12 08:44:36

Oliver Hartkopp wrote:
David Miller wrote:
quoted
From: Oliver Hartkopp <redacted>
Date: Tue, 12 Jan 2010 00:19:21 +0100
quoted
 static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev)
 {
+	struct can_frame *cf = (struct can_frame *)skb->data;
 	struct net_device_stats *stats = &dev->stats;
 	int loop;
 
+	if (unlikely(skb->len != sizeof(*cf) || cf->can_dlc > 8)) {
+		kfree_skb(skb);
+		stats->tx_dropped++;
+		return NETDEV_TX_OK;
+	}
+
 ...
quoted
+/* Drop a given socketbuffer if it does not contain a valid CAN frame. */
+static inline int can_dropped_invalid_skb(struct net_device *dev,
+					  struct sk_buff *skb)
+{
+	const struct can_frame *cf = (struct can_frame *)skb->data;
+
+	if (unlikely(skb->len != sizeof(*cf) || cf->can_dlc > 8)) {
+		kfree_skb(skb);
+		dev->stats.tx_dropped++;
+		return 1;
+	}
+
+	return 0;
+}
+
 struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max);
Why are you not using the new helper function in vcan_tx()?
I just wanted the vcan driver keep off including "include/linux/can/dev.h"
which is intended for 'real' CAN hardware.

As the vcan software devices do not need the bitrate-setting and skb echo
handling from the driver library for real CAN devices, this inline function
would be the only reason to include ".../dev.h"

But i don't have a strong preference to do it like this. Do you think i
should change it to used the defined inline function?
Yes, for the sake of consistency.

Wolfgang.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help