|
|
@@ -521,6 +521,30 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(alloc_can_skb);
|
|
|
|
|
|
+struct sk_buff *alloc_canfd_skb(struct net_device *dev,
|
|
|
+ struct canfd_frame **cfd)
|
|
|
+{
|
|
|
+ struct sk_buff *skb;
|
|
|
+
|
|
|
+ skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) +
|
|
|
+ sizeof(struct canfd_frame));
|
|
|
+ if (unlikely(!skb))
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ skb->protocol = htons(ETH_P_CANFD);
|
|
|
+ skb->pkt_type = PACKET_BROADCAST;
|
|
|
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
|
|
|
+
|
|
|
+ can_skb_reserve(skb);
|
|
|
+ can_skb_prv(skb)->ifindex = dev->ifindex;
|
|
|
+
|
|
|
+ *cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame));
|
|
|
+ memset(*cfd, 0, sizeof(struct canfd_frame));
|
|
|
+
|
|
|
+ return skb;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(alloc_canfd_skb);
|
|
|
+
|
|
|
struct sk_buff *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf)
|
|
|
{
|
|
|
struct sk_buff *skb;
|