From 643f6c0857d92b38e8f40092d45e4102243aa253 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Fri, 3 May 2013 16:29:10 -0400 Subject: [PATCH] kvm tools: pass virtio header size to uip_init We want to make the size of the virtio net header opaque to uip. Signed-off-by: Sasha Levin Signed-off-by: Pekka Enberg --- include/kvm/uip.h | 1 + net/uip/core.c | 8 ++++---- net/uip/tcp.c | 2 +- net/uip/udp.c | 2 +- virtio/net.c | 1 + 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/kvm/uip.h b/include/kvm/uip.h index ac248d2..338582d 100644 --- a/include/kvm/uip.h +++ b/include/kvm/uip.h @@ -205,6 +205,7 @@ struct uip_info { u32 dns_ip[UIP_DHCP_MAX_DNS_SERVER_NR]; char *domain_name; u32 buf_nr; + u32 vnet_hdr_len; }; struct uip_buf { diff --git a/net/uip/core.c b/net/uip/core.c index 4e5bb82..7a74261 100644 --- a/net/uip/core.c +++ b/net/uip/core.c @@ -172,10 +172,10 @@ int uip_init(struct uip_info *info) } list_for_each_entry(buf, buf_head, list) { - buf->vnet = malloc(sizeof(struct virtio_net_hdr)); - buf->vnet_len = sizeof(struct virtio_net_hdr); - buf->eth = malloc(1024*64 + sizeof(struct uip_pseudo_hdr)); - buf->eth_len = 1024*64 + sizeof(struct uip_pseudo_hdr); + buf->vnet_len = info->vnet_hdr_len; + buf->vnet = malloc(buf->vnet_len); + buf->eth_len = 1024*64 + sizeof(struct uip_pseudo_hdr); + buf->eth = malloc(buf->eth_len); memset(buf->vnet, 0, buf->vnet_len); memset(buf->eth, 0, buf->eth_len); diff --git a/net/uip/tcp.c b/net/uip/tcp.c index 9044f40..3c30ade 100644 --- a/net/uip/tcp.c +++ b/net/uip/tcp.c @@ -153,7 +153,7 @@ static int uip_tcp_payload_send(struct uip_tcp_socket *sk, u8 flag, u16 payload_ /* * virtio_net_hdr */ - buf->vnet_len = sizeof(struct virtio_net_hdr); + buf->vnet_len = info->vnet_hdr_len; memset(buf->vnet, 0, buf->vnet_len); buf->eth_len = ntohs(ip2->len) + uip_eth_hdrlen(&ip2->eth); diff --git a/net/uip/udp.c b/net/uip/udp.c index 31c417c..dd288c5 100644 --- a/net/uip/udp.c +++ b/net/uip/udp.c @@ -142,7 +142,7 @@ int uip_udp_make_pkg(struct uip_info *info, struct uip_udp_socket *sk, struct ui /* * virtio_net_hdr */ - buf->vnet_len = sizeof(struct virtio_net_hdr); + buf->vnet_len = info->vnet_hdr_len; memset(buf->vnet, 0, buf->vnet_len); buf->eth_len = ntohs(ip2->len) + uip_eth_hdrlen(&ip2->eth); diff --git a/virtio/net.c b/virtio/net.c index c0a8f12..2de9222 100644 --- a/virtio/net.c +++ b/virtio/net.c @@ -668,6 +668,7 @@ static int virtio_net__init_one(struct virtio_net_params *params) ndev->info.guest_ip = ntohl(inet_addr(params->guest_ip)); ndev->info.guest_netmask = ntohl(inet_addr("255.255.255.0")); ndev->info.buf_nr = 20, + ndev->info.vnet_hdr_len = sizeof(struct virtio_net_hdr); uip_init(&ndev->info); ndev->ops = &uip_ops; }