hw/net/net_rx_pkt: Remove net_rx_pkt_has_virt_hdr
When virtio-net header is not set, net_rx_pkt_get_vhdr() returns zero-filled virtio_net_hdr, which is actually valid. In fact, tap device uses zero-filled virtio_net_hdr when virtio-net header is not provided by the peer. Therefore, we can just remove net_rx_pkt_has_virt_hdr() and always assume NetTxPkt has a valid virtio-net header. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
55daf493f7
commit
aac8f89dba
@ -1240,12 +1240,6 @@ e1000e_build_rx_metadata(E1000ECore *core,
|
||||
goto func_exit;
|
||||
}
|
||||
|
||||
if (!net_rx_pkt_has_virt_hdr(pkt)) {
|
||||
trace_e1000e_rx_metadata_no_virthdr();
|
||||
e1000e_verify_csum_in_sw(core, pkt, status_flags, istcp, isudp);
|
||||
goto func_exit;
|
||||
}
|
||||
|
||||
vhdr = net_rx_pkt_get_vhdr(pkt);
|
||||
|
||||
if (!(vhdr->flags & VIRTIO_NET_HDR_F_DATA_VALID) &&
|
||||
@ -1671,12 +1665,10 @@ e1000e_write_packet_to_guest(E1000ECore *core, struct NetRxPkt *pkt,
|
||||
static inline void
|
||||
e1000e_rx_fix_l4_csum(E1000ECore *core, struct NetRxPkt *pkt)
|
||||
{
|
||||
if (net_rx_pkt_has_virt_hdr(pkt)) {
|
||||
struct virtio_net_hdr *vhdr = net_rx_pkt_get_vhdr(pkt);
|
||||
struct virtio_net_hdr *vhdr = net_rx_pkt_get_vhdr(pkt);
|
||||
|
||||
if (vhdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
|
||||
net_rx_pkt_fix_l4_csum(pkt);
|
||||
}
|
||||
if (vhdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
|
||||
net_rx_pkt_fix_l4_csum(pkt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3379,7 +3371,7 @@ e1000e_core_pci_realize(E1000ECore *core,
|
||||
net_tx_pkt_init(&core->tx[i].tx_pkt, core->owner, E1000E_MAX_TX_FRAGS);
|
||||
}
|
||||
|
||||
net_rx_pkt_init(&core->rx_pkt, core->has_vnet);
|
||||
net_rx_pkt_init(&core->rx_pkt);
|
||||
|
||||
e1000x_core_prepare_eeprom(core->eeprom,
|
||||
eeprom_templ,
|
||||
|
@ -30,7 +30,6 @@ struct NetRxPkt {
|
||||
uint32_t tot_len;
|
||||
uint16_t tci;
|
||||
size_t ehdr_buf_len;
|
||||
bool has_virt_hdr;
|
||||
eth_pkt_types_e packet_type;
|
||||
|
||||
/* Analysis results */
|
||||
@ -48,10 +47,9 @@ struct NetRxPkt {
|
||||
eth_l4_hdr_info l4hdr_info;
|
||||
};
|
||||
|
||||
void net_rx_pkt_init(struct NetRxPkt **pkt, bool has_virt_hdr)
|
||||
void net_rx_pkt_init(struct NetRxPkt **pkt)
|
||||
{
|
||||
struct NetRxPkt *p = g_malloc0(sizeof *p);
|
||||
p->has_virt_hdr = has_virt_hdr;
|
||||
p->vec = NULL;
|
||||
p->vec_len_total = 0;
|
||||
*pkt = p;
|
||||
@ -472,13 +470,6 @@ bool net_rx_pkt_is_vlan_stripped(struct NetRxPkt *pkt)
|
||||
return pkt->ehdr_buf_len ? true : false;
|
||||
}
|
||||
|
||||
bool net_rx_pkt_has_virt_hdr(struct NetRxPkt *pkt)
|
||||
{
|
||||
assert(pkt);
|
||||
|
||||
return pkt->has_virt_hdr;
|
||||
}
|
||||
|
||||
uint16_t net_rx_pkt_get_vlan_tag(struct NetRxPkt *pkt)
|
||||
{
|
||||
assert(pkt);
|
||||
|
@ -37,10 +37,9 @@ void net_rx_pkt_uninit(struct NetRxPkt *pkt);
|
||||
* Init function for rx packet functionality
|
||||
*
|
||||
* @pkt: packet pointer
|
||||
* @has_virt_hdr: device uses virtio header
|
||||
*
|
||||
*/
|
||||
void net_rx_pkt_init(struct NetRxPkt **pkt, bool has_virt_hdr);
|
||||
void net_rx_pkt_init(struct NetRxPkt **pkt);
|
||||
|
||||
/**
|
||||
* returns total length of data attached to rx context
|
||||
@ -214,15 +213,6 @@ uint16_t net_rx_pkt_get_vlan_tag(struct NetRxPkt *pkt);
|
||||
*/
|
||||
bool net_rx_pkt_is_vlan_stripped(struct NetRxPkt *pkt);
|
||||
|
||||
/**
|
||||
* notifies caller if the packet has virtio header
|
||||
*
|
||||
* @pkt: packet
|
||||
* @ret: true if packet has virtio header, false otherwize
|
||||
*
|
||||
*/
|
||||
bool net_rx_pkt_has_virt_hdr(struct NetRxPkt *pkt);
|
||||
|
||||
/**
|
||||
* attach scatter-gather data to rx packet
|
||||
*
|
||||
|
@ -188,7 +188,6 @@ e1000e_rx_metadata_rss(uint32_t rss, uint32_t mrq) "RSS data: rss: 0x%X, mrq: 0x
|
||||
e1000e_rx_metadata_ip_id(uint16_t ip_id) "the IPv4 ID is 0x%X"
|
||||
e1000e_rx_metadata_ack(void) "the packet is TCP ACK"
|
||||
e1000e_rx_metadata_pkt_type(uint32_t pkt_type) "the packet type is %u"
|
||||
e1000e_rx_metadata_no_virthdr(void) "the packet has no virt-header"
|
||||
e1000e_rx_metadata_virthdr_no_csum_info(void) "virt-header does not contain checksum info"
|
||||
e1000e_rx_metadata_l3_cso_disabled(void) "IP4 CSO is disabled"
|
||||
e1000e_rx_metadata_l4_cso_disabled(void) "TCP/UDP CSO is disabled"
|
||||
|
@ -3718,7 +3718,7 @@ static void virtio_net_device_realize(DeviceState *dev, Error **errp)
|
||||
QTAILQ_INIT(&n->rsc_chains);
|
||||
n->qdev = dev;
|
||||
|
||||
net_rx_pkt_init(&n->rx_pkt, false);
|
||||
net_rx_pkt_init(&n->rx_pkt);
|
||||
|
||||
if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) {
|
||||
virtio_net_load_ebpf(n);
|
||||
|
@ -851,10 +851,6 @@ static void vmxnet3_rx_need_csum_calculate(struct NetRxPkt *pkt,
|
||||
uint8_t *data;
|
||||
int len;
|
||||
|
||||
if (!net_rx_pkt_has_virt_hdr(pkt)) {
|
||||
return;
|
||||
}
|
||||
|
||||
vhdr = net_rx_pkt_get_vhdr(pkt);
|
||||
if (!VMXNET_FLAG_IS_SET(vhdr->flags, VIRTIO_NET_HDR_F_NEEDS_CSUM)) {
|
||||
return;
|
||||
@ -898,10 +894,6 @@ static void vmxnet3_rx_update_descr(struct NetRxPkt *pkt,
|
||||
rxcd->tci = net_rx_pkt_get_vlan_tag(pkt);
|
||||
}
|
||||
|
||||
if (!net_rx_pkt_has_virt_hdr(pkt)) {
|
||||
goto nocsum;
|
||||
}
|
||||
|
||||
vhdr = net_rx_pkt_get_vhdr(pkt);
|
||||
/*
|
||||
* Checksum is valid when lower level tell so or when lower level
|
||||
@ -1522,7 +1514,7 @@ static void vmxnet3_activate_device(VMXNET3State *s)
|
||||
/* Preallocate TX packet wrapper */
|
||||
VMW_CFPRN("Max TX fragments is %u", s->max_tx_frags);
|
||||
net_tx_pkt_init(&s->tx_pkt, PCI_DEVICE(s), s->max_tx_frags);
|
||||
net_rx_pkt_init(&s->rx_pkt, s->peer_has_vhdr);
|
||||
net_rx_pkt_init(&s->rx_pkt);
|
||||
|
||||
/* Read rings memory locations for RX queues */
|
||||
for (i = 0; i < s->rxq_num; i++) {
|
||||
@ -2402,7 +2394,7 @@ static int vmxnet3_post_load(void *opaque, int version_id)
|
||||
VMXNET3State *s = opaque;
|
||||
|
||||
net_tx_pkt_init(&s->tx_pkt, PCI_DEVICE(s), s->max_tx_frags);
|
||||
net_rx_pkt_init(&s->rx_pkt, s->peer_has_vhdr);
|
||||
net_rx_pkt_init(&s->rx_pkt);
|
||||
|
||||
if (s->msix_used) {
|
||||
vmxnet3_use_msix_vectors(s, VMXNET3_MAX_INTRS);
|
||||
|
Loading…
Reference in New Issue
Block a user