[dpdk-dev] kni: error building with kernel < 3.3 and ether_addr_equal backport

Patrick McGleenon Patrick.McGleenon at owmobility.com
Wed Mar 5 14:32:08 CET 2014


Here is a patch to building DPDK 1.6 on RHEL 6 kernels.   It's similar to the issue below.   The kernel version check really only applies to vanilla kernels - for commercial distributions it's common for features from later kernels to be backported.   Should we be using autoconf or something to check if the code is present instead of the kernel version check?

http://www.dpdk.org/browse/dpdk/commit/?id=caa3d413086205f3bff0fa4753edb7dfbfc1f633

diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
index 6933626..33bb858 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
+++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/igb_main.c
@@ -9275,7 +9275,7 @@ int igb_del_mac_filter(struct igb_adapter *adapter, u8* addr, u16 queue)
        if (is_zero_ether_addr(addr))
                return 0;
        for (i = 0; i < hw->mac.rar_entry_count; i++) {
-               if (ether_addr_equal(addr, adapter->mac_table[i].addr) &&
+               if (kni_ether_addr_equal(addr, adapter->mac_table[i].addr) &&
                    adapter->mac_table[i].queue == queue) {
                        adapter->mac_table[i].state = IGB_MAC_STATE_MODIFIED;
                        memset(adapter->mac_table[i].addr, 0, ETH_ALEN);
diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
index a404c9f..f6f6635 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
+++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
@@ -3528,11 +3528,12 @@ extern void _kc_skb_add_rx_frag(struct sk_buff *, int, struct page *,
 /*****************************************************************************/
 #if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) )
 #define skb_tx_timestamp(skb) do {} while (0)
-static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
+static inline bool kni_ether_addr_equal(const u8 *addr1, const u8 *addr2)
 {
        return !compare_ether_addr(addr1, addr2);
 }
 #else
+typedef ether_addr_equal kni_ether_addr_equal;
 #define HAVE_FDB_OPS
 #define HAVE_ETHTOOL_GET_TS_INFO
 #endif /* < 3.5.0 */
diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_main.c b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_main.c
index cb56906..dea2192 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_main.c
+++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/ixgbe_main.c
@@ -525,7 +525,7 @@ int ixgbe_del_mac_filter(struct ixgbe_adapter *adapter, u8* addr, u16 queue)
        if (is_zero_ether_addr(addr))
                return 0;
        for (i = 0; i < hw->mac.num_rar_entries; i++) {
-               if (ether_addr_equal(addr, adapter->mac_table[i].addr) &&
+               if (kni_ether_addr_equal(addr, adapter->mac_table[i].addr) &&
                    adapter->mac_table[i].queue == queue) {
                        adapter->mac_table[i].state |= IXGBE_MAC_STATE_MODIFIED;
                        adapter->mac_table[i].state &= ~IXGBE_MAC_STATE_IN_USE;
diff --git a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/kcompat.h b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/kcompat.h
index 3fb6b14..45f6c4c 100644
--- a/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/kcompat.h
+++ b/lib/librte_eal/linuxapp/kni/ethtool/ixgbe/kcompat.h
@@ -3107,11 +3107,12 @@ typedef netdev_features_t kni_netdev_features_t;
 
 /*****************************************************************************/
 #if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) )
-static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
+static inline bool kni_ether_addr_equal(const u8 *addr1, const u8 *addr2)
 {
        return !compare_ether_addr(addr1, addr2);
 }
 #else
+typedef ether_addr_equal kni_ether_addr_equal;
 #define HAVE_FDB_OPS
 #endif /* < 3.5.0 */


More information about the dev mailing list