From 49ab390b609dbe74861b333dc05eccbfbc7974b3 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <bottoms@debian.org>
Date: Mon, 31 Aug 2020 18:04:35 -0400
Subject: [PATCH 01/11] use debian dpdk version

Follow change in dpdk API made in version 19.08. "The network structures, definitions and functions have been prefixed by rte_ to resolve conflicts with libc headers."
---
 host/lib/CMakeLists.txt                       |  2 +-
 .../lib/include/uhdlib/transport/dpdk/arp.hpp |  4 +-
 .../include/uhdlib/transport/dpdk/common.hpp  |  8 +--
 .../lib/include/uhdlib/transport/dpdk/udp.hpp | 34 +++++------
 .../uhdlib/transport/dpdk_io_service.hpp      |  6 +-
 .../uhdlib/transport/udp_dpdk_link.hpp        | 10 ++--
 host/lib/transport/dpdk_simple.cpp            |  6 +-
 host/lib/transport/udp_dpdk_link.cpp          | 18 +++---
 host/lib/transport/uhd-dpdk/dpdk_common.cpp   | 37 ++++++------
 .../transport/uhd-dpdk/dpdk_io_service.cpp    | 58 +++++++++----------
 host/tests/dpdk_port_test.cpp                 |  4 +-
 11 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/host/lib/CMakeLists.txt b/host/lib/CMakeLists.txt
index 910fe3c70..5c711bd39 100644
--- a/host/lib/CMakeLists.txt
+++ b/host/lib/CMakeLists.txt
@@ -60,7 +60,7 @@ endmacro(INCLUDE_SUBDIRECTORY)
 message(STATUS "")
 # Dependencies
 find_package(LIBUSB)
-find_package(DPDK 18.11 EXACT)
+find_package(DPDK 19.08)
 LIBUHD_REGISTER_COMPONENT("USB" ENABLE_USB ON "ENABLE_LIBUHD;LIBUSB_FOUND" OFF OFF)
 # Devices
 LIBUHD_REGISTER_COMPONENT("B100" ENABLE_B100 ON "ENABLE_LIBUHD;ENABLE_USB" OFF OFF)
diff --git a/host/lib/include/uhdlib/transport/dpdk/arp.hpp b/host/lib/include/uhdlib/transport/dpdk/arp.hpp
index 684c3c370..684d918f7 100644
--- a/host/lib/include/uhdlib/transport/dpdk/arp.hpp
+++ b/host/lib/include/uhdlib/transport/dpdk/arp.hpp
@@ -13,14 +13,14 @@ namespace uhd { namespace transport { namespace dpdk {
 
 struct arp_request
 {
-    struct ether_addr tha;
+    struct rte_ether_addr tha;
     port_id_t port;
     ipv4_addr tpa;
 };
 
 struct arp_entry
 {
-    struct ether_addr mac_addr;
+    struct rte_ether_addr mac_addr;
     std::vector<wait_req*> reqs;
 };
 
diff --git a/host/lib/include/uhdlib/transport/dpdk/common.hpp b/host/lib/include/uhdlib/transport/dpdk/common.hpp
index c153c7107..f4a4b31f0 100644
--- a/host/lib/include/uhdlib/transport/dpdk/common.hpp
+++ b/host/lib/include/uhdlib/transport/dpdk/common.hpp
@@ -180,7 +180,7 @@ public:
     /*! Getter for this port's MAC address
      * \return this port's MAC address
      */
-    inline ether_addr get_mac_addr() const
+    inline rte_ether_addr get_mac_addr() const
     {
         return _mac_addr;
     }
@@ -261,14 +261,14 @@ private:
     /*!
      * Construct and transmit an ARP reply (for the given ARP request)
      */
-    int _arp_reply(queue_id_t queue_id, struct arp_hdr* arp_req);
+    int _arp_reply(queue_id_t queue_id, struct rte_arp_hdr* arp_req);
 
     port_id_t _port;
     size_t _mtu;
     size_t _num_queues;
     struct rte_mempool* _rx_pktbuf_pool;
     struct rte_mempool* _tx_pktbuf_pool;
-    struct ether_addr _mac_addr;
+    struct rte_ether_addr _mac_addr;
     ipv4_addr _ipv4;
     ipv4_addr _netmask;
 
@@ -317,7 +317,7 @@ public:
      * \param mac_addr MAC address
      * \return pointer to port if match found, else nullptr
      */
-    dpdk_port* get_port(struct ether_addr mac_addr) const;
+    dpdk_port* get_port(struct rte_ether_addr mac_addr) const;
 
     /*!
      * Get port structure from provided port ID
diff --git a/host/lib/include/uhdlib/transport/dpdk/udp.hpp b/host/lib/include/uhdlib/transport/dpdk/udp.hpp
index d74183bf5..93722e75a 100644
--- a/host/lib/include/uhdlib/transport/dpdk/udp.hpp
+++ b/host/lib/include/uhdlib/transport/dpdk/udp.hpp
@@ -15,7 +15,7 @@
 namespace uhd { namespace transport { namespace dpdk {
 
 constexpr size_t HDR_SIZE_UDP_IPV4 =
-    (sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + sizeof(struct udp_hdr));
+    (sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) + sizeof(struct rte_udp_hdr));
 
 /*!
  * An enumerated type representing the type of flow for an IPv4 client
@@ -44,14 +44,14 @@ inline void fill_ipv4_hdr(struct rte_mbuf* mbuf,
     uint8_t proto_id,
     uint32_t payload_len)
 {
-    struct ether_hdr* eth_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr*);
-    struct ipv4_hdr* ip_hdr   = (struct ipv4_hdr*)&eth_hdr[1];
+    struct rte_ether_hdr* eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr*);
+    struct rte_ipv4_hdr* ip_hdr   = (struct rte_ipv4_hdr*)&eth_hdr[1];
 
     ip_hdr->version_ihl     = 0x40 | 5;
     ip_hdr->type_of_service = 0;
     ip_hdr->total_length    = rte_cpu_to_be_16(20 + payload_len);
     ip_hdr->packet_id       = 0;
-    ip_hdr->fragment_offset = rte_cpu_to_be_16(IPV4_HDR_DF_FLAG);
+    ip_hdr->fragment_offset = rte_cpu_to_be_16(RTE_IPV4_HDR_DF_FLAG);
     ip_hdr->time_to_live    = 64;
     ip_hdr->next_proto_id   = proto_id;
     ip_hdr->hdr_checksum    = 0; // Require HW offload
@@ -59,10 +59,10 @@ inline void fill_ipv4_hdr(struct rte_mbuf* mbuf,
     ip_hdr->dst_addr        = dst_ipv4_addr;
 
     mbuf->ol_flags = PKT_TX_IP_CKSUM | PKT_TX_IPV4;
-    mbuf->l2_len   = sizeof(struct ether_hdr);
-    mbuf->l3_len   = sizeof(struct ipv4_hdr);
-    mbuf->pkt_len  = sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + payload_len;
-    mbuf->data_len = sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + payload_len;
+    mbuf->l2_len   = sizeof(struct rte_ether_hdr);
+    mbuf->l3_len   = sizeof(struct rte_ipv4_hdr);
+    mbuf->pkt_len  = sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) + payload_len;
+    mbuf->data_len = sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) + payload_len;
 }
 
 /* All values except payload length must be in network order */
@@ -73,22 +73,22 @@ inline void fill_udp_hdr(struct rte_mbuf* mbuf,
     uint16_t dst_port,
     uint32_t payload_len)
 {
-    struct ether_hdr* eth_hdr;
-    struct ipv4_hdr* ip_hdr;
-    struct udp_hdr* tx_hdr;
+    struct rte_ether_hdr* eth_hdr;
+    struct rte_ipv4_hdr* ip_hdr;
+    struct rte_udp_hdr* tx_hdr;
 
     fill_ipv4_hdr(
-        mbuf, port, dst_ipv4_addr, IPPROTO_UDP, sizeof(struct udp_hdr) + payload_len);
+        mbuf, port, dst_ipv4_addr, IPPROTO_UDP, sizeof(struct rte_udp_hdr) + payload_len);
 
-    eth_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr*);
-    ip_hdr  = (struct ipv4_hdr*)&eth_hdr[1];
-    tx_hdr  = (struct udp_hdr*)&ip_hdr[1];
+    eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr*);
+    ip_hdr  = (struct rte_ipv4_hdr*)&eth_hdr[1];
+    tx_hdr  = (struct rte_udp_hdr*)&ip_hdr[1];
 
     tx_hdr->src_port    = src_port;
     tx_hdr->dst_port    = dst_port;
     tx_hdr->dgram_len   = rte_cpu_to_be_16(8 + payload_len);
     tx_hdr->dgram_cksum = 0;
-    mbuf->l4_len        = sizeof(struct udp_hdr);
+    mbuf->l4_len        = sizeof(struct rte_udp_hdr);
 }
 
 //! Return an IPv4 address (numeric, in network order) into a string
@@ -101,7 +101,7 @@ inline std::string ipv4_num_to_str(const uint32_t ip_addr)
     return std::string(addr_str);
 }
 
-inline std::string eth_addr_to_string(const struct ether_addr mac_addr)
+inline std::string eth_addr_to_string(const struct rte_ether_addr mac_addr)
 {
     auto mac_stream = boost::format("%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx");
     mac_stream % (uint32_t)mac_addr.addr_bytes[0] % (uint32_t)mac_addr.addr_bytes[1]
diff --git a/host/lib/include/uhdlib/transport/dpdk_io_service.hpp b/host/lib/include/uhdlib/transport/dpdk_io_service.hpp
index 223bed249..616faaa7e 100644
--- a/host/lib/include/uhdlib/transport/dpdk_io_service.hpp
+++ b/host/lib/include/uhdlib/transport/dpdk_io_service.hpp
@@ -170,7 +170,7 @@ private:
      * \param arp_frame a pointer to the ARP frame
      */
     int _process_arp(
-        dpdk::dpdk_port* port, dpdk::queue_id_t queue_id, struct arp_hdr* arp_frame);
+        dpdk::dpdk_port* port, dpdk::queue_id_t queue_id, struct rte_arp_hdr* arp_frame);
 
     /*!
      * Helper function for I/O thread to process an IPv4 packet
@@ -179,7 +179,7 @@ private:
      * \param mbuf a pointer to the packet buffer container
      * \param pkt a pointer to the IPv4 header of the packet
      */
-    int _process_ipv4(dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct ipv4_hdr* pkt);
+    int _process_ipv4(dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct rte_ipv4_hdr* pkt);
 
     /*!
      * Helper function for I/O thread to process an IPv4 packet
@@ -191,7 +191,7 @@ private:
      *              IPv4 address
      */
     int _process_udp(
-        dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct udp_hdr* pkt, bool bcast);
+        dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct rte_udp_hdr* pkt, bool bcast);
 
     /*!
      * Helper function to get a unique client ID
diff --git a/host/lib/include/uhdlib/transport/udp_dpdk_link.hpp b/host/lib/include/uhdlib/transport/udp_dpdk_link.hpp
index 305d35319..3fce165f0 100644
--- a/host/lib/include/uhdlib/transport/udp_dpdk_link.hpp
+++ b/host/lib/include/uhdlib/transport/udp_dpdk_link.hpp
@@ -120,9 +120,9 @@ public:
      *
      * \param mac the remote host's MAC address
      */
-    inline void set_remote_mac(struct ether_addr& mac)
+    inline void set_remote_mac(struct rte_ether_addr& mac)
     {
-        ether_addr_copy(&mac, &_remote_mac);
+        rte_ether_addr_copy(&mac, &_remote_mac);
     }
 
     /*!
@@ -130,9 +130,9 @@ public:
      *
      * \param mac Where to write the MAC address
      */
-    inline void get_remote_mac(struct ether_addr& dst)
+    inline void get_remote_mac(struct rte_ether_addr& dst)
     {
-        ether_addr_copy(&_remote_mac, &dst);
+        rte_ether_addr_copy(&_remote_mac, &dst);
     }
 
     /*!
@@ -244,7 +244,7 @@ private:
     //! Remote IPv4 address, in network order
     uint32_t _remote_ipv4;
     //! Remote host's MAC address
-    struct ether_addr _remote_mac;
+    struct rte_ether_addr _remote_mac;
     //! Number of recv frames is not validated
     size_t _num_recv_frames;
     //! Maximum bytes of UDP payload data in recv frame
diff --git a/host/lib/transport/dpdk_simple.cpp b/host/lib/transport/dpdk_simple.cpp
index 835885cba..0d4e4f91e 100644
--- a/host/lib/transport/dpdk_simple.cpp
+++ b/host/lib/transport/dpdk_simple.cpp
@@ -129,9 +129,9 @@ public:
 
         // Extract the sender's address. This is only possible because we know
         // the memory layout of the buff
-        struct udp_hdr* udp_hdr_end = (struct udp_hdr*)buff->data();
-        struct ipv4_hdr* ip_hdr_end = (struct ipv4_hdr*)(&udp_hdr_end[-1]);
-        struct ipv4_hdr* ip_hdr     = (struct ipv4_hdr*)(&ip_hdr_end[-1]);
+        struct rte_udp_hdr* udp_hdr_end = (struct rte_udp_hdr*)buff->data();
+        struct rte_ipv4_hdr* ip_hdr_end = (struct rte_ipv4_hdr*)(&udp_hdr_end[-1]);
+        struct rte_ipv4_hdr* ip_hdr     = (struct rte_ipv4_hdr*)(&ip_hdr_end[-1]);
         _last_recv_addr             = ip_hdr->src_addr;
 
         // Extract the buffer data
diff --git a/host/lib/transport/udp_dpdk_link.cpp b/host/lib/transport/udp_dpdk_link.cpp
index dc56de43c..d65198e77 100644
--- a/host/lib/transport/udp_dpdk_link.cpp
+++ b/host/lib/transport/udp_dpdk_link.cpp
@@ -101,13 +101,13 @@ udp_dpdk_link::sptr udp_dpdk_link::make(const dpdk::port_id_t port_id,
 void udp_dpdk_link::enqueue_recv_mbuf(struct rte_mbuf* mbuf)
 {
     // Get packet size
-    struct udp_hdr* hdr = rte_pktmbuf_mtod_offset(
-        mbuf, struct udp_hdr*, sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr));
-    size_t packet_size = rte_be_to_cpu_16(hdr->dgram_len) - sizeof(struct udp_hdr);
+    struct rte_udp_hdr* hdr = rte_pktmbuf_mtod_offset(
+        mbuf, struct rte_udp_hdr*, sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr));
+    size_t packet_size = rte_be_to_cpu_16(hdr->dgram_len) - sizeof(struct rte_udp_hdr);
     // Prepare the dpdk_frame_buff
     auto buff = new (rte_mbuf_to_priv(mbuf)) dpdk_frame_buff(mbuf);
     buff->header_jump(
-        sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + sizeof(struct udp_hdr));
+        sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) + sizeof(struct rte_udp_hdr));
     buff->set_packet_size(packet_size);
     // Add the dpdk_frame_buff to the list
     if (_recv_buff_head) {
@@ -155,7 +155,7 @@ frame_buff::uptr udp_dpdk_link::get_send_buff(int32_t /*timeout_ms*/)
     if (mbuf) {
         auto buff = new (rte_mbuf_to_priv(mbuf)) dpdk_frame_buff(mbuf);
         buff->header_jump(
-            sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + sizeof(struct udp_hdr));
+            sizeof(struct rte_ether_hdr) + sizeof(struct rte_ipv4_hdr) + sizeof(struct rte_udp_hdr));
         return frame_buff::uptr(buff);
     }
     return frame_buff::uptr();
@@ -169,10 +169,10 @@ void udp_dpdk_link::release_send_buff(frame_buff::uptr buff)
     if (buff_ptr->packet_size()) {
         // Fill in L2 header
         auto local_mac           = _port->get_mac_addr();
-        struct ether_hdr* l2_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr*);
-        ether_addr_copy(&_remote_mac, &l2_hdr->d_addr);
-        ether_addr_copy(&local_mac, &l2_hdr->s_addr);
-        l2_hdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
+        struct rte_ether_hdr* l2_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr*);
+        rte_ether_addr_copy(&_remote_mac, &l2_hdr->d_addr);
+        rte_ether_addr_copy(&local_mac, &l2_hdr->s_addr);
+        l2_hdr->ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4);
         // Fill in L3 and L4 headers
         dpdk::fill_udp_hdr(mbuf,
             _port,
diff --git a/host/lib/transport/uhd-dpdk/dpdk_common.cpp b/host/lib/transport/uhd-dpdk/dpdk_common.cpp
index 78b29513a..de8ac13bd 100644
--- a/host/lib/transport/uhd-dpdk/dpdk_common.cpp
+++ b/host/lib/transport/uhd-dpdk/dpdk_common.cpp
@@ -13,6 +13,7 @@
 #include <uhdlib/utils/prefs.hpp>
 #include <arpa/inet.h>
 #include <rte_arp.h>
+#include "generic/rte_cycles.h"
 #include <boost/algorithm/string.hpp>
 
 namespace uhd { namespace transport { namespace dpdk {
@@ -251,11 +252,11 @@ uint16_t dpdk_port::alloc_udp_port(uint16_t udp_port)
     return rte_cpu_to_be_16(port_selected);
 }
 
-int dpdk_port::_arp_reply(queue_id_t queue_id, struct arp_hdr* arp_req)
+int dpdk_port::_arp_reply(queue_id_t queue_id, struct rte_arp_hdr* arp_req)
 {
     struct rte_mbuf* mbuf;
-    struct ether_hdr* hdr;
-    struct arp_hdr* arp_frame;
+    struct rte_ether_hdr* hdr;
+    struct rte_arp_hdr* arp_frame;
 
     mbuf = rte_pktmbuf_alloc(_tx_pktbuf_pool);
     if (unlikely(mbuf == NULL)) {
@@ -263,21 +264,21 @@ int dpdk_port::_arp_reply(queue_id_t queue_id, struct arp_hdr* arp_req)
         return -ENOMEM;
     }
 
-    hdr       = rte_pktmbuf_mtod(mbuf, struct ether_hdr*);
-    arp_frame = (struct arp_hdr*)&hdr[1];
+    hdr       = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr*);
+    arp_frame = (struct rte_arp_hdr*)&hdr[1];
 
-    ether_addr_copy(&arp_req->arp_data.arp_sha, &hdr->d_addr);
-    ether_addr_copy(&_mac_addr, &hdr->s_addr);
-    hdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_ARP);
+    rte_ether_addr_copy(&arp_req->arp_data.arp_sha, &hdr->d_addr);
+    rte_ether_addr_copy(&_mac_addr, &hdr->s_addr);
+    hdr->ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_ARP);
 
-    arp_frame->arp_hrd = rte_cpu_to_be_16(ARP_HRD_ETHER);
-    arp_frame->arp_pro = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
-    arp_frame->arp_hln = 6;
-    arp_frame->arp_pln = 4;
-    arp_frame->arp_op  = rte_cpu_to_be_16(ARP_OP_REPLY);
-    ether_addr_copy(&_mac_addr, &arp_frame->arp_data.arp_sha);
+    arp_frame->arp_hardware = rte_cpu_to_be_16(RTE_ARP_HRD_ETHER);
+    arp_frame->arp_protocol = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4);
+    arp_frame->arp_hlen     = 6;
+    arp_frame->arp_plen     = 4;
+    arp_frame->arp_opcode   = rte_cpu_to_be_16(RTE_ARP_OP_REPLY);
+    rte_ether_addr_copy(&_mac_addr, &arp_frame->arp_data.arp_sha);
     arp_frame->arp_data.arp_sip = _ipv4;
-    ether_addr_copy(&hdr->d_addr, &arp_frame->arp_data.arp_tha);
+    rte_ether_addr_copy(&hdr->d_addr, &arp_frame->arp_data.arp_tha);
     arp_frame->arp_data.arp_tip = arp_req->arp_data.arp_sip;
 
     mbuf->pkt_len  = 42;
@@ -418,7 +419,7 @@ void dpdk_ctx::init(const device_addr_t& user_args)
         device_addrs_t nics(num_dpdk_ports);
         RTE_ETH_FOREACH_DEV(i)
         {
-            struct ether_addr mac_addr;
+            struct rte_ether_addr mac_addr;
             rte_eth_macaddr_get(i, &mac_addr);
             nics[i]["dpdk_mac"] = eth_addr_to_string(mac_addr);
         }
@@ -543,11 +544,11 @@ dpdk_port* dpdk_ctx::get_port(port_id_t port) const
     return _ports.at(port).get();
 }
 
-dpdk_port* dpdk_ctx::get_port(struct ether_addr mac_addr) const
+dpdk_port* dpdk_ctx::get_port(struct rte_ether_addr mac_addr) const
 {
     assert(is_init_done());
     for (const auto& port : _ports) {
-        struct ether_addr port_mac_addr;
+        struct rte_ether_addr port_mac_addr;
         rte_eth_macaddr_get(port.first, &port_mac_addr);
         for (int j = 0; j < 6; j++) {
             if (mac_addr.addr_bytes[j] != port_mac_addr.addr_bytes[j]) {
diff --git a/host/lib/transport/uhd-dpdk/dpdk_io_service.cpp b/host/lib/transport/uhd-dpdk/dpdk_io_service.cpp
index 1fcedca51..324dfaad7 100644
--- a/host/lib/transport/uhd-dpdk/dpdk_io_service.cpp
+++ b/host/lib/transport/uhd-dpdk/dpdk_io_service.cpp
@@ -595,7 +595,7 @@ int dpdk_io_service::_service_arp_request(dpdk::wait_req* req)
         _send_arp_request(port, 0, arp_req_data->tpa);
     } else {
         entry = port->_arp_table.at(dst_addr);
-        if (is_zero_ether_addr(&entry->mac_addr)) {
+        if (rte_is_zero_ether_addr(&entry->mac_addr)) {
             UHD_LOG_TRACE("DPDK::IO_SERVICE",
                 "ARP: Address in table, but not populated yet. Resending ARP request.");
             port->_arp_table.at(dst_addr)->reqs.push_back(req);
@@ -603,7 +603,7 @@ int dpdk_io_service::_service_arp_request(dpdk::wait_req* req)
             _send_arp_request(port, 0, arp_req_data->tpa);
         } else {
             UHD_LOG_TRACE("DPDK::IO_SERVICE", "ARP: Address in table.");
-            ether_addr_copy(&entry->mac_addr, &arp_req_data->tha);
+            rte_ether_addr_copy(&entry->mac_addr, &arp_req_data->tha);
             status = 0;
         }
     }
@@ -616,8 +616,8 @@ int dpdk_io_service::_send_arp_request(
     dpdk::dpdk_port* port, dpdk::queue_id_t queue, dpdk::ipv4_addr ip)
 {
     struct rte_mbuf* mbuf;
-    struct ether_hdr* hdr;
-    struct arp_hdr* arp_frame;
+    struct rte_ether_hdr* hdr;
+    struct rte_arp_hdr* arp_frame;
 
     mbuf = rte_pktmbuf_alloc(port->get_tx_pktbuf_pool());
     if (unlikely(mbuf == NULL)) {
@@ -626,21 +626,21 @@ int dpdk_io_service::_send_arp_request(
         return -ENOMEM;
     }
 
-    hdr       = rte_pktmbuf_mtod(mbuf, struct ether_hdr*);
-    arp_frame = (struct arp_hdr*)&hdr[1];
+    hdr       = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr*);
+    arp_frame = (struct rte_arp_hdr*)&hdr[1];
 
-    memset(hdr->d_addr.addr_bytes, 0xFF, ETHER_ADDR_LEN);
+    memset(hdr->d_addr.addr_bytes, 0xFF, RTE_ETHER_ADDR_LEN);
     hdr->s_addr     = port->get_mac_addr();
-    hdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_ARP);
+    hdr->ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_ARP);
 
-    arp_frame->arp_hrd          = rte_cpu_to_be_16(ARP_HRD_ETHER);
-    arp_frame->arp_pro          = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
-    arp_frame->arp_hln          = 6;
-    arp_frame->arp_pln          = 4;
-    arp_frame->arp_op           = rte_cpu_to_be_16(ARP_OP_REQUEST);
+    arp_frame->arp_hardware     = rte_cpu_to_be_16(RTE_ARP_HRD_ETHER);
+    arp_frame->arp_protocol     = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4);
+    arp_frame->arp_hlen         = 6;
+    arp_frame->arp_plen         = 4;
+    arp_frame->arp_opcode       = rte_cpu_to_be_16(RTE_ARP_OP_REQUEST);
     arp_frame->arp_data.arp_sha = port->get_mac_addr();
     arp_frame->arp_data.arp_sip = port->get_ipv4();
-    memset(arp_frame->arp_data.arp_tha.addr_bytes, 0x00, ETHER_ADDR_LEN);
+    memset(arp_frame->arp_data.arp_tha.addr_bytes, 0x00, RTE_ETHER_ADDR_LEN);
     arp_frame->arp_data.arp_tip = ip;
 
     mbuf->pkt_len  = 42;
@@ -657,7 +657,7 @@ int dpdk_io_service::_send_arp_request(
 /* Do a burst of RX on port */
 int dpdk_io_service::_rx_burst(dpdk::dpdk_port* port, dpdk::queue_id_t queue)
 {
-    struct ether_hdr* hdr;
+    struct rte_ether_hdr* hdr;
     char* l2_data;
     struct rte_mbuf* bufs[RX_BURST_SIZE];
     const uint16_t num_rx =
@@ -668,20 +668,20 @@ int dpdk_io_service::_rx_burst(dpdk::dpdk_port* port, dpdk::queue_id_t queue)
 
     for (int buf = 0; buf < num_rx; buf++) {
         uint64_t ol_flags = bufs[buf]->ol_flags;
-        hdr               = rte_pktmbuf_mtod(bufs[buf], struct ether_hdr*);
+        hdr               = rte_pktmbuf_mtod(bufs[buf], struct rte_ether_hdr*);
         l2_data           = (char*)&hdr[1];
         switch (rte_be_to_cpu_16(hdr->ether_type)) {
-            case ETHER_TYPE_ARP:
-                _process_arp(port, queue, (struct arp_hdr*)l2_data);
+            case RTE_ETHER_TYPE_ARP:
+                _process_arp(port, queue, (struct rte_arp_hdr*)l2_data);
                 rte_pktmbuf_free(bufs[buf]);
                 break;
-            case ETHER_TYPE_IPv4:
+            case RTE_ETHER_TYPE_IPV4:
                 if ((ol_flags & PKT_RX_IP_CKSUM_MASK) == PKT_RX_IP_CKSUM_BAD) {
                     UHD_LOG_WARNING("DPDK::IO_SERVICE", "RX packet has bad IP cksum");
                 } else if ((ol_flags & PKT_RX_IP_CKSUM_MASK) == PKT_RX_IP_CKSUM_NONE) {
                     UHD_LOG_WARNING("DPDK::IO_SERVICE", "RX packet missing IP cksum");
                 } else {
-                    _process_ipv4(port, bufs[buf], (struct ipv4_hdr*)l2_data);
+                    _process_ipv4(port, bufs[buf], (struct rte_ipv4_hdr*)l2_data);
                 }
                 break;
             default:
@@ -693,10 +693,10 @@ int dpdk_io_service::_rx_burst(dpdk::dpdk_port* port, dpdk::queue_id_t queue)
 }
 
 int dpdk_io_service::_process_arp(
-    dpdk::dpdk_port* port, dpdk::queue_id_t queue_id, struct arp_hdr* arp_frame)
+    dpdk::dpdk_port* port, dpdk::queue_id_t queue_id, struct rte_arp_hdr* arp_frame)
 {
     uint32_t dest_ip            = arp_frame->arp_data.arp_sip;
-    struct ether_addr dest_addr = arp_frame->arp_data.arp_sha;
+    struct rte_ether_addr dest_addr = arp_frame->arp_data.arp_sha;
     UHD_LOG_TRACE("DPDK::IO_SERVICE",
         "Processing ARP packet: " << dpdk::ipv4_num_to_str(dest_ip) << " -> "
                                   << dpdk::eth_addr_to_string(dest_addr));
@@ -709,14 +709,14 @@ int dpdk_io_service::_process_arp(
             return -ENOMEM;
         }
         entry = new (entry) dpdk::arp_entry();
-        ether_addr_copy(&dest_addr, &entry->mac_addr);
+        rte_ether_addr_copy(&dest_addr, &entry->mac_addr);
         port->_arp_table[dest_ip] = entry;
     } else {
         entry = port->_arp_table.at(dest_ip);
-        ether_addr_copy(&dest_addr, &entry->mac_addr);
+        rte_ether_addr_copy(&dest_addr, &entry->mac_addr);
         for (auto req : entry->reqs) {
             auto arp_data = (struct dpdk::arp_request*)req->data;
-            ether_addr_copy(&dest_addr, &arp_data->tha);
+            rte_ether_addr_copy(&dest_addr, &arp_data->tha);
             while (_servq.complete(req) == -ENOBUFS)
                 ;
         }
@@ -725,7 +725,7 @@ int dpdk_io_service::_process_arp(
     rte_spinlock_unlock(&port->_spinlock);
 
     /* Respond if this was an ARP request */
-    if (arp_frame->arp_op == rte_cpu_to_be_16(ARP_OP_REQUEST)
+    if (arp_frame->arp_opcode == rte_cpu_to_be_16(RTE_ARP_OP_REQUEST)
         && arp_frame->arp_data.arp_tip == port->get_ipv4()) {
         UHD_LOG_TRACE("DPDK::IO_SERVICE", "Sending ARP reply.");
         port->_arp_reply(queue_id, arp_frame);
@@ -735,7 +735,7 @@ int dpdk_io_service::_process_arp(
 }
 
 int dpdk_io_service::_process_ipv4(
-    dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct ipv4_hdr* pkt)
+    dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct rte_ipv4_hdr* pkt)
 {
     bool bcast = port->dst_is_broadcast(pkt->dst_addr);
     if (pkt->dst_addr != port->get_ipv4() && !bcast) {
@@ -743,7 +743,7 @@ int dpdk_io_service::_process_ipv4(
         return -ENODEV;
     }
     if (pkt->next_proto_id == IPPROTO_UDP) {
-        return _process_udp(port, mbuf, (struct udp_hdr*)&pkt[1], bcast);
+        return _process_udp(port, mbuf, (struct rte_udp_hdr*)&pkt[1], bcast);
     }
     rte_pktmbuf_free(mbuf);
     return -EINVAL;
@@ -751,7 +751,7 @@ int dpdk_io_service::_process_ipv4(
 
 
 int dpdk_io_service::_process_udp(
-    dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct udp_hdr* pkt, bool /*bcast*/)
+    dpdk::dpdk_port* port, struct rte_mbuf* mbuf, struct rte_udp_hdr* pkt, bool /*bcast*/)
 {
     // Get the link
     struct dpdk::ipv4_5tuple ht_key = {.flow_type = dpdk::flow_type::FLOW_TYPE_UDP,
diff --git a/host/tests/dpdk_port_test.cpp b/host/tests/dpdk_port_test.cpp
index 323d02e48..4932b167d 100644
--- a/host/tests/dpdk_port_test.cpp
+++ b/host/tests/dpdk_port_test.cpp
@@ -120,10 +120,10 @@ int main(int argc, char** argv)
     // Attach link
     std::cout << "Attaching UDP send link..." << std::endl;
     io_srv->attach_send_link(link);
-    struct ether_addr dest_mac;
+    struct rte_ether_addr dest_mac;
     link->get_remote_mac(dest_mac);
     char mac_str[20];
-    ether_format_addr(mac_str, 20, &dest_mac);
+    rte_ether_format_addr(mac_str, 20, &dest_mac);
     std::cout << "Remote MAC address is " << mac_str << std::endl;
     std::cout << std::endl;
     std::cout << "Attaching UDP recv link..." << std::endl;
-- 
2.30.2

