#ifndef _CAN_SKB_H
#define _CAN_SKB_H
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/can.h>
#include <net/sock.h>
void can_flush_echo_skb(struct net_device *dev);
int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,
unsigned int idx, unsigned int frame_len);
struct sk_buff *__can_get_echo_skb(struct net_device *dev, unsigned int idx,
unsigned int *len_ptr,
unsigned int *frame_len_ptr);
unsigned int __must_check can_get_echo_skb(struct net_device *dev,
unsigned int idx,
unsigned int *frame_len_ptr);
void can_free_echo_skb(struct net_device *dev, unsigned int idx,
unsigned int *frame_len_ptr);
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_canxl_skb(struct net_device *dev,
struct canxl_frame **cxl,
unsigned int data_len);
struct sk_buff *alloc_can_err_skb(struct net_device *dev,
struct can_frame **cf);
bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb);
struct can_skb_priv { … };
static inline struct can_skb_priv *can_skb_prv(struct sk_buff *skb)
{ … }
static inline void can_skb_reserve(struct sk_buff *skb)
{ … }
static inline void can_skb_set_owner(struct sk_buff *skb, struct sock *sk)
{ … }
static inline struct sk_buff *can_create_echo_skb(struct sk_buff *skb)
{ … }
static inline bool can_is_can_skb(const struct sk_buff *skb)
{ … }
static inline bool can_is_canfd_skb(const struct sk_buff *skb)
{ … }
static inline bool can_is_canxl_skb(const struct sk_buff *skb)
{ … }
static inline unsigned int can_skb_get_len_val(struct sk_buff *skb)
{ … }
static inline unsigned int can_skb_get_data_len(struct sk_buff *skb)
{ … }
#endif