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
					
				
			
		
					 2 changed files with 26 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
 | 
			
		||||
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 can_frame **cf);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue