Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 314491
b: refs/heads/master
c: 41052ef
h: refs/heads/master
i:
  314489: c2db8f4
  314487: de44e2a
v: v3
  • Loading branch information
Oliver Hartkopp authored and Marc Kleine-Budde committed Jun 19, 2012
1 parent 2b9a18e commit 3760f9f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1e0625facab2e871472472b7df87d8fbe6caf75a
refs/heads/master: 41052ef6dfe90e7639103a010f49d13dadc55a28
27 changes: 20 additions & 7 deletions trunk/drivers/net/can/vcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,12 @@ MODULE_PARM_DESC(echo, "Echo sent frames (for testing). Default: 0 (Off)");

static void vcan_rx(struct sk_buff *skb, struct net_device *dev)
{
struct can_frame *cf = (struct can_frame *)skb->data;
struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
struct net_device_stats *stats = &dev->stats;

stats->rx_packets++;
stats->rx_bytes += cf->can_dlc;
stats->rx_bytes += cfd->len;

skb->protocol = htons(ETH_P_CAN);
skb->pkt_type = PACKET_BROADCAST;
skb->dev = dev;
skb->ip_summed = CHECKSUM_UNNECESSARY;
Expand All @@ -86,15 +85,15 @@ static void vcan_rx(struct sk_buff *skb, struct net_device *dev)

static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev)
{
struct can_frame *cf = (struct can_frame *)skb->data;
struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
struct net_device_stats *stats = &dev->stats;
int loop;

if (can_dropped_invalid_skb(dev, skb))
return NETDEV_TX_OK;

stats->tx_packets++;
stats->tx_bytes += cf->can_dlc;
stats->tx_bytes += cfd->len;

/* set flag whether this packet has to be looped back */
loop = skb->pkt_type == PACKET_LOOPBACK;
Expand All @@ -108,7 +107,7 @@ static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev)
* CAN core already did the echo for us
*/
stats->rx_packets++;
stats->rx_bytes += cf->can_dlc;
stats->rx_bytes += cfd->len;
}
kfree_skb(skb);
return NETDEV_TX_OK;
Expand All @@ -133,14 +132,28 @@ static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK;
}

static int vcan_change_mtu(struct net_device *dev, int new_mtu)
{
/* Do not allow changing the MTU while running */
if (dev->flags & IFF_UP)
return -EBUSY;

if (new_mtu != CAN_MTU && new_mtu != CANFD_MTU)
return -EINVAL;

dev->mtu = new_mtu;
return 0;
}

static const struct net_device_ops vcan_netdev_ops = {
.ndo_start_xmit = vcan_tx,
.ndo_change_mtu = vcan_change_mtu,
};

static void vcan_setup(struct net_device *dev)
{
dev->type = ARPHRD_CAN;
dev->mtu = sizeof(struct can_frame);
dev->mtu = CAN_MTU;
dev->hard_header_len = 0;
dev->addr_len = 0;
dev->tx_queue_len = 0;
Expand Down

0 comments on commit 3760f9f

Please sign in to comment.