Lines Matching refs:skb

47 int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev,  in can_put_echo_skb()  argument
60 (skb->protocol != htons(ETH_P_CAN) && in can_put_echo_skb()
61 skb->protocol != htons(ETH_P_CANFD) && in can_put_echo_skb()
62 skb->protocol != htons(ETH_P_CANXL))) { in can_put_echo_skb()
63 kfree_skb(skb); in can_put_echo_skb()
68 skb = can_create_echo_skb(skb); in can_put_echo_skb()
69 if (!skb) in can_put_echo_skb()
73 skb->ip_summed = CHECKSUM_UNNECESSARY; in can_put_echo_skb()
74 skb->dev = dev; in can_put_echo_skb()
77 can_skb_prv(skb)->frame_len = frame_len; in can_put_echo_skb()
79 if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) in can_put_echo_skb()
80 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; in can_put_echo_skb()
82 skb_tx_timestamp(skb); in can_put_echo_skb()
85 priv->echo_skb[idx] = skb; in can_put_echo_skb()
89 kfree_skb(skb); in can_put_echo_skb()
113 struct sk_buff *skb = priv->echo_skb[idx]; in __can_get_echo_skb() local
114 struct can_skb_priv *can_skb_priv = can_skb_prv(skb); in __can_get_echo_skb()
116 if (skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS) in __can_get_echo_skb()
117 skb_tstamp_tx(skb, skb_hwtstamps(skb)); in __can_get_echo_skb()
120 *len_ptr = can_skb_get_data_len(skb); in __can_get_echo_skb()
127 if (skb->pkt_type == PACKET_LOOPBACK) { in __can_get_echo_skb()
128 skb->pkt_type = PACKET_BROADCAST; in __can_get_echo_skb()
130 dev_consume_skb_any(skb); in __can_get_echo_skb()
134 return skb; in __can_get_echo_skb()
149 struct sk_buff *skb; in can_get_echo_skb() local
152 skb = __can_get_echo_skb(dev, idx, &len, frame_len_ptr); in can_get_echo_skb()
153 if (!skb) in can_get_echo_skb()
156 skb_get(skb); in can_get_echo_skb()
157 if (netif_rx(skb) == NET_RX_SUCCESS) in can_get_echo_skb()
158 dev_consume_skb_any(skb); in can_get_echo_skb()
160 dev_kfree_skb_any(skb); in can_get_echo_skb()
182 struct sk_buff *skb = priv->echo_skb[idx]; in can_free_echo_skb() local
183 struct can_skb_priv *can_skb_priv = can_skb_prv(skb); in can_free_echo_skb()
188 dev_kfree_skb_any(skb); in can_free_echo_skb()
195 static void init_can_skb_reserve(struct sk_buff *skb) in init_can_skb_reserve() argument
197 skb->pkt_type = PACKET_BROADCAST; in init_can_skb_reserve()
198 skb->ip_summed = CHECKSUM_UNNECESSARY; in init_can_skb_reserve()
200 skb_reset_mac_header(skb); in init_can_skb_reserve()
201 skb_reset_network_header(skb); in init_can_skb_reserve()
202 skb_reset_transport_header(skb); in init_can_skb_reserve()
204 can_skb_reserve(skb); in init_can_skb_reserve()
205 can_skb_prv(skb)->skbcnt = 0; in init_can_skb_reserve()
210 struct sk_buff *skb; in alloc_can_skb() local
212 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_can_skb()
214 if (unlikely(!skb)) { in alloc_can_skb()
220 skb->protocol = htons(ETH_P_CAN); in alloc_can_skb()
221 init_can_skb_reserve(skb); in alloc_can_skb()
222 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_can_skb()
224 *cf = skb_put_zero(skb, sizeof(struct can_frame)); in alloc_can_skb()
226 return skb; in alloc_can_skb()
233 struct sk_buff *skb; in alloc_canfd_skb() local
235 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_canfd_skb()
237 if (unlikely(!skb)) { in alloc_canfd_skb()
243 skb->protocol = htons(ETH_P_CANFD); in alloc_canfd_skb()
244 init_can_skb_reserve(skb); in alloc_canfd_skb()
245 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_canfd_skb()
247 *cfd = skb_put_zero(skb, sizeof(struct canfd_frame)); in alloc_canfd_skb()
252 return skb; in alloc_canfd_skb()
260 struct sk_buff *skb; in alloc_canxl_skb() local
265 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_canxl_skb()
267 if (unlikely(!skb)) in alloc_canxl_skb()
270 skb->protocol = htons(ETH_P_CANXL); in alloc_canxl_skb()
271 init_can_skb_reserve(skb); in alloc_canxl_skb()
272 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_canxl_skb()
274 *cxl = skb_put_zero(skb, CANXL_HDR_SIZE + data_len); in alloc_canxl_skb()
280 return skb; in alloc_canxl_skb()
291 struct sk_buff *skb; in alloc_can_err_skb() local
293 skb = alloc_can_skb(dev, cf); in alloc_can_err_skb()
294 if (unlikely(!skb)) in alloc_can_err_skb()
300 return skb; in alloc_can_err_skb()
305 static bool can_skb_headroom_valid(struct net_device *dev, struct sk_buff *skb) in can_skb_headroom_valid() argument
308 if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv))) in can_skb_headroom_valid()
312 if (skb->ip_summed == CHECKSUM_NONE) { in can_skb_headroom_valid()
314 can_skb_prv(skb)->ifindex = dev->ifindex; in can_skb_headroom_valid()
315 can_skb_prv(skb)->skbcnt = 0; in can_skb_headroom_valid()
317 skb->ip_summed = CHECKSUM_UNNECESSARY; in can_skb_headroom_valid()
321 skb->pkt_type = PACKET_LOOPBACK; in can_skb_headroom_valid()
323 skb->pkt_type = PACKET_HOST; in can_skb_headroom_valid()
325 skb_reset_mac_header(skb); in can_skb_headroom_valid()
326 skb_reset_network_header(skb); in can_skb_headroom_valid()
327 skb_reset_transport_header(skb); in can_skb_headroom_valid()
330 if (can_is_canfd_skb(skb)) { in can_skb_headroom_valid()
333 cfd = (struct canfd_frame *)skb->data; in can_skb_headroom_valid()
342 bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) in can_dropped_invalid_skb() argument
344 switch (ntohs(skb->protocol)) { in can_dropped_invalid_skb()
346 if (!can_is_can_skb(skb)) in can_dropped_invalid_skb()
351 if (!can_is_canfd_skb(skb)) in can_dropped_invalid_skb()
356 if (!can_is_canxl_skb(skb)) in can_dropped_invalid_skb()
364 if (!can_skb_headroom_valid(dev, skb)) in can_dropped_invalid_skb()
370 kfree_skb(skb); in can_dropped_invalid_skb()