tests/qtest/e1000e-test: Fabricate ethernet header
e1000e understands ethernet header so fabricate something convincing. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
3a977deebe
commit
00dc9a5911
@ -27,6 +27,7 @@
|
|||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "libqtest-single.h"
|
#include "libqtest-single.h"
|
||||||
#include "libqos/pci-pc.h"
|
#include "libqos/pci-pc.h"
|
||||||
|
#include "net/eth.h"
|
||||||
#include "qemu/sockets.h"
|
#include "qemu/sockets.h"
|
||||||
#include "qemu/iov.h"
|
#include "qemu/iov.h"
|
||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
@ -35,9 +36,13 @@
|
|||||||
#include "libqos/e1000e.h"
|
#include "libqos/e1000e.h"
|
||||||
#include "hw/net/e1000_regs.h"
|
#include "hw/net/e1000_regs.h"
|
||||||
|
|
||||||
|
static const struct eth_header packet = {
|
||||||
|
.h_dest = E1000E_ADDRESS,
|
||||||
|
.h_source = E1000E_ADDRESS,
|
||||||
|
};
|
||||||
|
|
||||||
static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *alloc)
|
static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *alloc)
|
||||||
{
|
{
|
||||||
static const char test[] = "TEST";
|
|
||||||
struct e1000_tx_desc descr;
|
struct e1000_tx_desc descr;
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
int ret;
|
int ret;
|
||||||
@ -45,7 +50,7 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a
|
|||||||
|
|
||||||
/* Prepare test data buffer */
|
/* Prepare test data buffer */
|
||||||
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
||||||
memwrite(data, test, sizeof(test));
|
memwrite(data, &packet, sizeof(packet));
|
||||||
|
|
||||||
/* Prepare TX descriptor */
|
/* Prepare TX descriptor */
|
||||||
memset(&descr, 0, sizeof(descr));
|
memset(&descr, 0, sizeof(descr));
|
||||||
@ -71,7 +76,7 @@ static void e1000e_send_verify(QE1000E *d, int *test_sockets, QGuestAllocator *a
|
|||||||
g_assert_cmpint(ret, == , sizeof(recv_len));
|
g_assert_cmpint(ret, == , sizeof(recv_len));
|
||||||
ret = recv(test_sockets[0], buffer, sizeof(buffer), 0);
|
ret = recv(test_sockets[0], buffer, sizeof(buffer), 0);
|
||||||
g_assert_cmpint(ret, ==, sizeof(buffer));
|
g_assert_cmpint(ret, ==, sizeof(buffer));
|
||||||
g_assert_cmpstr(buffer, == , test);
|
g_assert_false(memcmp(buffer, &packet, sizeof(packet)));
|
||||||
|
|
||||||
/* Free test data buffer */
|
/* Free test data buffer */
|
||||||
guest_free(alloc, data);
|
guest_free(alloc, data);
|
||||||
@ -81,15 +86,15 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
{
|
{
|
||||||
union e1000_rx_desc_extended descr;
|
union e1000_rx_desc_extended descr;
|
||||||
|
|
||||||
char test[] = "TEST";
|
struct eth_header test_iov = packet;
|
||||||
int len = htonl(sizeof(test));
|
int len = htonl(sizeof(packet));
|
||||||
struct iovec iov[] = {
|
struct iovec iov[] = {
|
||||||
{
|
{
|
||||||
.iov_base = &len,
|
.iov_base = &len,
|
||||||
.iov_len = sizeof(len),
|
.iov_len = sizeof(len),
|
||||||
},{
|
},{
|
||||||
.iov_base = test,
|
.iov_base = &test_iov,
|
||||||
.iov_len = sizeof(test),
|
.iov_len = sizeof(packet),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,8 +102,8 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Send a dummy packet to device's socket*/
|
/* Send a dummy packet to device's socket*/
|
||||||
ret = iov_send(test_sockets[0], iov, 2, 0, sizeof(len) + sizeof(test));
|
ret = iov_send(test_sockets[0], iov, 2, 0, sizeof(len) + sizeof(packet));
|
||||||
g_assert_cmpint(ret, == , sizeof(test) + sizeof(len));
|
g_assert_cmpint(ret, == , sizeof(packet) + sizeof(len));
|
||||||
|
|
||||||
/* Prepare test data buffer */
|
/* Prepare test data buffer */
|
||||||
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
uint64_t data = guest_alloc(alloc, sizeof(buffer));
|
||||||
@ -119,7 +124,7 @@ static void e1000e_receive_verify(QE1000E *d, int *test_sockets, QGuestAllocator
|
|||||||
|
|
||||||
/* Check data sent to the backend */
|
/* Check data sent to the backend */
|
||||||
memread(data, buffer, sizeof(buffer));
|
memread(data, buffer, sizeof(buffer));
|
||||||
g_assert_cmpstr(buffer, == , test);
|
g_assert_false(memcmp(buffer, &packet, sizeof(packet)));
|
||||||
|
|
||||||
/* Free test data buffer */
|
/* Free test data buffer */
|
||||||
guest_free(alloc, data);
|
guest_free(alloc, data);
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
#define E1000E_RX0_MSG_ID (0)
|
#define E1000E_RX0_MSG_ID (0)
|
||||||
#define E1000E_TX0_MSG_ID (1)
|
#define E1000E_TX0_MSG_ID (1)
|
||||||
|
|
||||||
|
#define E1000E_ADDRESS { 0x52, 0x54, 0x00, 0x12, 0x34, 0x56 }
|
||||||
|
|
||||||
typedef struct QE1000E QE1000E;
|
typedef struct QE1000E QE1000E;
|
||||||
typedef struct QE1000E_PCI QE1000E_PCI;
|
typedef struct QE1000E_PCI QE1000E_PCI;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user