can: add ability to allocate CANFD frame in skb data
This patch adds the ability of allocating a CANFD frame data structure in the skb data area. Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com> Acked-by: Oliver Hartkopp <socketcan@hartkopp.net> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
16f6b87ac5
commit
cb2518ca9f
|
@ -521,6 +521,30 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(alloc_can_skb);
|
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 *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
|
|
@ -124,6 +124,8 @@ unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx);
|
||||||
void can_free_echo_skb(struct net_device *dev, unsigned int idx);
|
void can_free_echo_skb(struct net_device *dev, unsigned int idx);
|
||||||
|
|
||||||
struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
|
struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf);
|
||||||
|
struct sk_buff *alloc_canfd_skb(struct net_device *dev,
|
||||||
|
struct canfd_frame **cfd);
|
||||||
struct sk_buff *alloc_can_err_skb(struct net_device *dev,
|
struct sk_buff *alloc_can_err_skb(struct net_device *dev,
|
||||||
struct can_frame **cf);
|
struct can_frame **cf);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue