diff options
| author | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-21 21:03:37 -0400 |
|---|---|---|
| committer | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-23 01:49:54 -0400 |
| commit | 296f96fcfc160e29c01819c0c7b20c2dc8320edd (patch) | |
| tree | ad9c11fe2f60ca37c4bf736f919c3332cffebd9f /include/linux | |
| parent | ec3d41c4db4c21164332826ea8d812f94f2f6886 (diff) | |
Net driver using virtio
The network driver uses two virtqueues: one for input packets and one
for output packets. This has nice locking properties (ie. we don't do
any for recv vs send).
TODO:
1) Big packets.
2) Multi-client devices (maybe separate driver?).
3) Resolve freeing of old xmit skbs (Christian Borntraeger)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: netdev@vger.kernel.org
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/linux/virtio_net.h | 36 |
2 files changed, 37 insertions, 0 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index e5208f283a67..b101588a4b5a 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -344,6 +344,7 @@ unifdef-y += utsname.h | |||
| 344 | unifdef-y += videodev2.h | 344 | unifdef-y += videodev2.h |
| 345 | unifdef-y += videodev.h | 345 | unifdef-y += videodev.h |
| 346 | unifdef-y += virtio_config.h | 346 | unifdef-y += virtio_config.h |
| 347 | unifdef-y += virtio_net.h | ||
| 347 | unifdef-y += wait.h | 348 | unifdef-y += wait.h |
| 348 | unifdef-y += wanrouter.h | 349 | unifdef-y += wanrouter.h |
| 349 | unifdef-y += watchdog.h | 350 | unifdef-y += watchdog.h |
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h new file mode 100644 index 000000000000..ae469ae55d36 --- /dev/null +++ b/include/linux/virtio_net.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_NET_H | ||
| 2 | #define _LINUX_VIRTIO_NET_H | ||
| 3 | #include <linux/virtio_config.h> | ||
| 4 | |||
| 5 | /* The ID for virtio_net */ | ||
| 6 | #define VIRTIO_ID_NET 1 | ||
| 7 | |||
| 8 | /* The bitmap of config for virtio net */ | ||
| 9 | #define VIRTIO_CONFIG_NET_F 0x40 | ||
| 10 | #define VIRTIO_NET_F_NO_CSUM 0 | ||
| 11 | #define VIRTIO_NET_F_TSO4 1 | ||
| 12 | #define VIRTIO_NET_F_UFO 2 | ||
| 13 | #define VIRTIO_NET_F_TSO4_ECN 3 | ||
| 14 | #define VIRTIO_NET_F_TSO6 4 | ||
| 15 | |||
| 16 | /* The config defining mac address. */ | ||
| 17 | #define VIRTIO_CONFIG_NET_MAC_F 0x41 | ||
| 18 | |||
| 19 | /* This is the first element of the scatter-gather list. If you don't | ||
| 20 | * specify GSO or CSUM features, you can simply ignore the header. */ | ||
| 21 | struct virtio_net_hdr | ||
| 22 | { | ||
| 23 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset | ||
| 24 | __u8 flags; | ||
| 25 | #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame | ||
| 26 | #define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) | ||
| 27 | /* FIXME: Do we need this? If they said they can handle ECN, do they care? */ | ||
| 28 | #define VIRTIO_NET_HDR_GSO_TCPV4_ECN 2 // GSO frame, IPv4 TCP w/ ECN | ||
| 29 | #define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) | ||
| 30 | #define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP | ||
| 31 | __u8 gso_type; | ||
| 32 | __u16 gso_size; | ||
| 33 | __u16 csum_start; | ||
| 34 | __u16 csum_offset; | ||
| 35 | }; | ||
| 36 | #endif /* _LINUX_VIRTIO_NET_H */ | ||
