diff options
Diffstat (limited to 'include/linux/virtio_net.h')
| -rw-r--r-- | include/linux/virtio_net.h | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index 9397628a1967..cb462f9ab7dd 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h @@ -5,6 +5,24 @@  #include <linux/if_vlan.h>  #include <uapi/linux/virtio_net.h> +static inline int virtio_net_hdr_set_proto(struct sk_buff *skb, +					   const struct virtio_net_hdr *hdr) +{ +	switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { +	case VIRTIO_NET_HDR_GSO_TCPV4: +	case VIRTIO_NET_HDR_GSO_UDP: +		skb->protocol = cpu_to_be16(ETH_P_IP); +		break; +	case VIRTIO_NET_HDR_GSO_TCPV6: +		skb->protocol = cpu_to_be16(ETH_P_IPV6); +		break; +	default: +		return -EINVAL; +	} + +	return 0; +} +  static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,  					const struct virtio_net_hdr *hdr,  					bool little_endian)  | 
