Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1276f24e authored by Mike Rapoport's avatar Mike Rapoport Committed by David S. Miller
Browse files

packet: use common code for virtio_net_hdr and skb GSO conversion



Replace open coded conversion between virtio_net_hdr to skb GSO info with
virtio_net_hdr_from_skb

Signed-off-by: default avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e858fae2
Loading
Loading
Loading
Loading
+2 −34
Original line number Original line Diff line number Diff line
@@ -1979,41 +1979,9 @@ static int __packet_rcv_vnet(const struct sk_buff *skb,
{
{
	*vnet_hdr = (const struct virtio_net_hdr) { 0 };
	*vnet_hdr = (const struct virtio_net_hdr) { 0 };


	if (skb_is_gso(skb)) {
	if (virtio_net_hdr_from_skb(skb, vnet_hdr, vio_le()))
		struct skb_shared_info *sinfo = skb_shinfo(skb);

		/* This is a hint as to how much should be linear. */
		vnet_hdr->hdr_len =
			__cpu_to_virtio16(vio_le(), skb_headlen(skb));
		vnet_hdr->gso_size =
			__cpu_to_virtio16(vio_le(), sinfo->gso_size);

		if (sinfo->gso_type & SKB_GSO_TCPV4)
			vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
		else if (sinfo->gso_type & SKB_GSO_TCPV6)
			vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
		else if (sinfo->gso_type & SKB_GSO_UDP)
			vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_UDP;
		else if (sinfo->gso_type & SKB_GSO_FCOE)
			return -EINVAL;
		else
		BUG();
		BUG();


		if (sinfo->gso_type & SKB_GSO_TCP_ECN)
			vnet_hdr->gso_type |= VIRTIO_NET_HDR_GSO_ECN;
	} else
		vnet_hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;

	if (skb->ip_summed == CHECKSUM_PARTIAL) {
		vnet_hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
		vnet_hdr->csum_start = __cpu_to_virtio16(vio_le(),
				  skb_checksum_start_offset(skb));
		vnet_hdr->csum_offset = __cpu_to_virtio16(vio_le(),
						 skb->csum_offset);
	} else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
		vnet_hdr->flags = VIRTIO_NET_HDR_F_DATA_VALID;
	} /* else everything is zero */

	return 0;
	return 0;
}
}