Lines Matching refs:skb
47 int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, in can_put_echo_skb() argument
56 (skb->protocol != htons(ETH_P_CAN) && in can_put_echo_skb()
57 skb->protocol != htons(ETH_P_CANFD))) { in can_put_echo_skb()
58 kfree_skb(skb); in can_put_echo_skb()
63 skb = can_create_echo_skb(skb); in can_put_echo_skb()
64 if (!skb) in can_put_echo_skb()
68 skb->ip_summed = CHECKSUM_UNNECESSARY; in can_put_echo_skb()
69 skb->dev = dev; in can_put_echo_skb()
72 can_skb_prv(skb)->frame_len = frame_len; in can_put_echo_skb()
74 if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) in can_put_echo_skb()
75 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; in can_put_echo_skb()
77 skb_tx_timestamp(skb); in can_put_echo_skb()
80 priv->echo_skb[idx] = skb; in can_put_echo_skb()
84 kfree_skb(skb); in can_put_echo_skb()
108 struct sk_buff *skb = priv->echo_skb[idx]; in __can_get_echo_skb() local
109 struct can_skb_priv *can_skb_priv = can_skb_prv(skb); in __can_get_echo_skb()
111 if (skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS) in __can_get_echo_skb()
112 skb_tstamp_tx(skb, skb_hwtstamps(skb)); in __can_get_echo_skb()
115 *len_ptr = can_skb_get_data_len(skb); in __can_get_echo_skb()
122 if (skb->pkt_type == PACKET_LOOPBACK) { in __can_get_echo_skb()
123 skb->pkt_type = PACKET_BROADCAST; in __can_get_echo_skb()
125 dev_consume_skb_any(skb); in __can_get_echo_skb()
129 return skb; in __can_get_echo_skb()
144 struct sk_buff *skb; in can_get_echo_skb() local
147 skb = __can_get_echo_skb(dev, idx, &len, frame_len_ptr); in can_get_echo_skb()
148 if (!skb) in can_get_echo_skb()
151 skb_get(skb); in can_get_echo_skb()
152 if (netif_rx(skb) == NET_RX_SUCCESS) in can_get_echo_skb()
153 dev_consume_skb_any(skb); in can_get_echo_skb()
155 dev_kfree_skb_any(skb); in can_get_echo_skb()
177 struct sk_buff *skb = priv->echo_skb[idx]; in can_free_echo_skb() local
178 struct can_skb_priv *can_skb_priv = can_skb_prv(skb); in can_free_echo_skb()
183 dev_kfree_skb_any(skb); in can_free_echo_skb()
190 static void init_can_skb_reserve(struct sk_buff *skb) in init_can_skb_reserve() argument
192 skb->pkt_type = PACKET_BROADCAST; in init_can_skb_reserve()
193 skb->ip_summed = CHECKSUM_UNNECESSARY; in init_can_skb_reserve()
195 skb_reset_mac_header(skb); in init_can_skb_reserve()
196 skb_reset_network_header(skb); in init_can_skb_reserve()
197 skb_reset_transport_header(skb); in init_can_skb_reserve()
199 can_skb_reserve(skb); in init_can_skb_reserve()
200 can_skb_prv(skb)->skbcnt = 0; in init_can_skb_reserve()
205 struct sk_buff *skb; in alloc_can_skb() local
207 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_can_skb()
209 if (unlikely(!skb)) { in alloc_can_skb()
215 skb->protocol = htons(ETH_P_CAN); in alloc_can_skb()
216 init_can_skb_reserve(skb); in alloc_can_skb()
217 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_can_skb()
219 *cf = skb_put_zero(skb, sizeof(struct can_frame)); in alloc_can_skb()
221 return skb; in alloc_can_skb()
228 struct sk_buff *skb; in alloc_canfd_skb() local
230 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_canfd_skb()
232 if (unlikely(!skb)) { in alloc_canfd_skb()
238 skb->protocol = htons(ETH_P_CANFD); in alloc_canfd_skb()
239 init_can_skb_reserve(skb); in alloc_canfd_skb()
240 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_canfd_skb()
242 *cfd = skb_put_zero(skb, sizeof(struct canfd_frame)); in alloc_canfd_skb()
247 return skb; in alloc_canfd_skb()
255 struct sk_buff *skb; in alloc_canxl_skb() local
260 skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + in alloc_canxl_skb()
262 if (unlikely(!skb)) in alloc_canxl_skb()
265 skb->protocol = htons(ETH_P_CANXL); in alloc_canxl_skb()
266 init_can_skb_reserve(skb); in alloc_canxl_skb()
267 can_skb_prv(skb)->ifindex = dev->ifindex; in alloc_canxl_skb()
269 *cxl = skb_put_zero(skb, CANXL_HDR_SIZE + data_len); in alloc_canxl_skb()
275 return skb; in alloc_canxl_skb()
286 struct sk_buff *skb; in alloc_can_err_skb() local
288 skb = alloc_can_skb(dev, cf); in alloc_can_err_skb()
289 if (unlikely(!skb)) in alloc_can_err_skb()
295 return skb; in alloc_can_err_skb()
300 static bool can_skb_headroom_valid(struct net_device *dev, struct sk_buff *skb) in can_skb_headroom_valid() argument
303 if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv))) in can_skb_headroom_valid()
307 if (skb->ip_summed == CHECKSUM_NONE) { in can_skb_headroom_valid()
309 can_skb_prv(skb)->ifindex = dev->ifindex; in can_skb_headroom_valid()
310 can_skb_prv(skb)->skbcnt = 0; in can_skb_headroom_valid()
312 skb->ip_summed = CHECKSUM_UNNECESSARY; in can_skb_headroom_valid()
316 skb->pkt_type = PACKET_LOOPBACK; in can_skb_headroom_valid()
318 skb->pkt_type = PACKET_HOST; in can_skb_headroom_valid()
320 skb_reset_mac_header(skb); in can_skb_headroom_valid()
321 skb_reset_network_header(skb); in can_skb_headroom_valid()
322 skb_reset_transport_header(skb); in can_skb_headroom_valid()
325 if (can_is_canfd_skb(skb)) { in can_skb_headroom_valid()
328 cfd = (struct canfd_frame *)skb->data; in can_skb_headroom_valid()
337 bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) in can_dropped_invalid_skb() argument
339 switch (ntohs(skb->protocol)) { in can_dropped_invalid_skb()
341 if (!can_is_can_skb(skb)) in can_dropped_invalid_skb()
346 if (!can_is_canfd_skb(skb)) in can_dropped_invalid_skb()
351 if (!can_is_canxl_skb(skb)) in can_dropped_invalid_skb()
359 if (!can_skb_headroom_valid(dev, skb)) in can_dropped_invalid_skb()
365 kfree_skb(skb); in can_dropped_invalid_skb()