diff mbox series

[v2,2/6] hw/net/net_tx_pkt: helper function to get l2 hdr

Message ID 20221229190817.25500-3-sriram.yagnaraman@est.tech (mailing list archive)
State New, archived
Headers show
Series hw/net/igb: emulated network device with SR-IOV | expand

Commit Message

Sriram Yagnaraman Dec. 29, 2022, 7:08 p.m. UTC
Also add return value for to send functions

Signed-off-by: Sriram Yagnaraman <sriram.yagnaraman@est.tech>
---
 hw/net/net_tx_pkt.c | 17 +++++++++++------
 hw/net/net_tx_pkt.h |  8 ++++++++
 2 files changed, 19 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/hw/net/net_tx_pkt.c b/hw/net/net_tx_pkt.c
index 1cb1125d9f..f2e14008b6 100644
--- a/hw/net/net_tx_pkt.c
+++ b/hw/net/net_tx_pkt.c
@@ -284,6 +284,12 @@  struct virtio_net_hdr *net_tx_pkt_get_vhdr(struct NetTxPkt *pkt)
     return &pkt->virt_hdr;
 }
 
+struct eth_header *net_tx_pkt_get_l2hdr(struct NetTxPkt *pkt)
+{
+    assert(pkt);
+    return PKT_GET_ETH_HDR(&pkt->l2_hdr);
+}
+
 static uint8_t net_tx_pkt_get_gso_type(struct NetTxPkt *pkt,
                                           bool tso_enable)
 {
@@ -551,13 +557,13 @@  static size_t net_tx_pkt_fetch_fragment(struct NetTxPkt *pkt,
     return fetched;
 }
 
-static inline void net_tx_pkt_sendv(struct NetTxPkt *pkt,
+static inline ssize_t net_tx_pkt_sendv(struct NetTxPkt *pkt,
     NetClientState *nc, const struct iovec *iov, int iov_cnt)
 {
     if (pkt->is_loopback) {
-        qemu_receive_packet_iov(nc, iov, iov_cnt);
+        return qemu_receive_packet_iov(nc, iov, iov_cnt);
     } else {
-        qemu_sendv_packet(nc, iov, iov_cnt);
+        return qemu_sendv_packet(nc, iov, iov_cnt);
     }
 }
 
@@ -632,9 +638,8 @@  bool net_tx_pkt_send(struct NetTxPkt *pkt, NetClientState *nc)
     if (pkt->has_virt_hdr ||
         pkt->virt_hdr.gso_type == VIRTIO_NET_HDR_GSO_NONE) {
         net_tx_pkt_fix_ip6_payload_len(pkt);
-        net_tx_pkt_sendv(pkt, nc, pkt->vec,
-            pkt->payload_frags + NET_TX_PKT_PL_START_FRAG);
-        return true;
+        return (net_tx_pkt_sendv(pkt, nc, pkt->vec,
+            pkt->payload_frags + NET_TX_PKT_PL_START_FRAG) >= 0);
     }
 
     return net_tx_pkt_do_sw_fragmentation(pkt, nc);
diff --git a/hw/net/net_tx_pkt.h b/hw/net/net_tx_pkt.h
index 4ec8bbe9bd..64fae67c58 100644
--- a/hw/net/net_tx_pkt.h
+++ b/hw/net/net_tx_pkt.h
@@ -52,6 +52,14 @@  void net_tx_pkt_uninit(struct NetTxPkt *pkt);
  */
 struct virtio_net_hdr *net_tx_pkt_get_vhdr(struct NetTxPkt *pkt);
 
+/**
+ * get L2 header
+ *
+ * @pkt:            packet
+ * @ret:            L2 header
+ */
+struct eth_header *net_tx_pkt_get_l2hdr(struct NetTxPkt *pkt);
+
 /**
  * build virtio header (will be stored in module context)
  *