From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by dpdk.org (Postfix) with ESMTP id 188A62EDA for ; Sun, 28 Dec 2014 00:13:13 +0100 (CET) Received: by mail-pd0-f176.google.com with SMTP id r10so14912318pdi.21 for ; Sat, 27 Dec 2014 15:13:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-type:content-transfer-encoding; bh=LBr/IM8pIGyjCSosBw3caX71yMuqiUqLNs+LRISrXME=; b=ST9UB/Dvwb0VzT1MagQE0edX0MMC8nlAEFvduiY/36hlxIkbL/bfPGkeS6gOjxijY1 qyIHqF1x7fIshNbxp5wmPk71JLRD1pq6iFlK2XHGau69eDlp1DjSFDVVh1KKXatD6r10 VhfcSTFuqtte6GPjvzBsags0qnu4yEmMlrhEfiUQ0IwIsd4+FFt4tTi2eblBfaMef4KN XjaWliElZ3Azn5bM653/Xiht6/eMBGrTAlIaJb0/p8bEKHVeBOJzAkZYRd6tfvrXlMtz kvG/CG/tA+lMbM+kKR3s5ZOYx6jID/9NKWOX3oc3u3mReb1yBtFDdPreBwKViT0tTthe eWDw== X-Gm-Message-State: ALoCoQkOa1mT2SVfUHYKCHyP1BiVMZGSkS16VvBpmQ8kO36/rQ6vVMBhKd//mSTuMfOuY3AThniL X-Received: by 10.70.55.163 with SMTP id t3mr78707860pdp.8.1419721990111; Sat, 27 Dec 2014 15:13:10 -0800 (PST) Received: from urahara (static-50-53-82-155.bvtn.or.frontiernet.net. [50.53.82.155]) by mx.google.com with ESMTPSA id mw3sm7265562pdb.70.2014.12.27.15.13.08 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 27 Dec 2014 15:13:09 -0800 (PST) Date: Sat, 27 Dec 2014 15:13:00 -0800 From: Stephen Hemminger To: dev@dpdk.org Message-ID: <20141227151300.7b62f5bf@urahara> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: [dpdk-dev] [RFC] resolve conflict between net/ethernet.h and rte_ethdev.h X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Dec 2014 23:13:13 -0000 This is a patch to address the conflict between and the definitions in . It has two side effects worth discussion: 1. It forces inclusion of net/ethernet.h 2. It has definition to deal with the differing structure elements in the two versions of struct ether_addr. By doing this ether_ntoa and related functions can be used without messing with prototypes. Alternative is more complex #ifdef magic like linux/libc-compat.h --- a/lib/librte_ether/rte_ether.h +++ b/lib/librte_ether/rte_ether.h @@ -46,17 +46,11 @@ #include #include +#include #include #include -#define ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */ -#define ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */ -#define ETHER_CRC_LEN 4 /**< Length of Ethernet CRC. */ -#define ETHER_HDR_LEN \ - (ETHER_ADDR_LEN * 2 + ETHER_TYPE_LEN) /**< Length of Ethernet header. */ -#define ETHER_MIN_LEN 64 /**< Minimum frame len, including CRC. */ -#define ETHER_MAX_LEN 1518 /**< Maximum frame len, including CRC. */ #define ETHER_MTU \ (ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) /**< Ethernet MTU. */ @@ -69,25 +63,12 @@ #define ETHER_MAX_VLAN_ID 4095 /**< Maximum VLAN ID. */ #define ETHER_MIN_MTU 68 /**< Minimum MTU for IPv4 packets, see RFC 791. */ - -/** - * Ethernet address: - * A universally administered address is uniquely assigned to a device by its - * manufacturer. The first three octets (in transmission order) contain the - * Organizationally Unique Identifier (OUI). The following three (MAC-48 and - * EUI-48) octets are assigned by that organization with the only constraint - * of uniqueness. - * A locally administered address is assigned to a device by a network - * administrator and does not contain OUIs. - * See http://standards.ieee.org/regauth/groupmac/tutorial.html - */ -struct ether_addr { - uint8_t addr_bytes[ETHER_ADDR_LEN]; /**< Address bytes in transmission order */ -} __attribute__((__packed__)); - #define ETHER_LOCAL_ADMIN_ADDR 0x02 /**< Locally assigned Eth. address. */ #define ETHER_GROUP_ADDR 0x01 /**< Multicast or broadcast Eth. address. */ +/* Deprecated definition to allow for compatiablity with net/ethernet.h */ +#define addr_bytes ether_addr_octet + /** * Check if two Ethernet addresses are the same. * @@ -107,7 +88,7 @@ { int i; for (i = 0; i < ETHER_ADDR_LEN; i++) - if (ea1->addr_bytes[i] != ea2->addr_bytes[i]) + if (ea1->ether_addr_octet[i] != ea2->ether_addr_octet[i]) return 0; return 1; } @@ -126,7 +107,7 @@ { int i; for (i = 0; i < ETHER_ADDR_LEN; i++) - if (ea->addr_bytes[i] != 0x00) + if (ea->ether_addr_octet[i] != 0x00) return 0; return 1; } @@ -143,7 +124,7 @@ */ static inline int is_unicast_ether_addr(const struct ether_addr *ea) { - return ((ea->addr_bytes[0] & ETHER_GROUP_ADDR) == 0); + return ((ea->ether_addr_octet[0] & ETHER_GROUP_ADDR) == 0); } /** @@ -158,7 +139,7 @@ */ static inline int is_multicast_ether_addr(const struct ether_addr *ea) { - return (ea->addr_bytes[0] & ETHER_GROUP_ADDR); + return (ea->ether_addr_octet[0] & ETHER_GROUP_ADDR); } /** @@ -191,7 +172,7 @@ */ static inline int is_universal_ether_addr(const struct ether_addr *ea) { - return ((ea->addr_bytes[0] & ETHER_LOCAL_ADMIN_ADDR) == 0); + return ((ea->ether_addr_octet[0] & ETHER_LOCAL_ADMIN_ADDR) == 0); } /** @@ -206,7 +187,7 @@ */ static inline int is_local_admin_ether_addr(const struct ether_addr *ea) { - return ((ea->addr_bytes[0] & ETHER_LOCAL_ADMIN_ADDR) != 0); + return ((ea->ether_addr_octet[0] & ETHER_LOCAL_ADMIN_ADDR) != 0); } /** @@ -253,8 +234,8 @@ struct ether_addr *ea_to) { #ifdef __INTEL_COMPILER - uint16_t *from_words = (uint16_t *)(ea_from->addr_bytes); - uint16_t *to_words = (uint16_t *)(ea_to->addr_bytes); + uint16_t *from_words = (uint16_t *)(ea_from->ether_addr_octet); + uint16_t *to_words = (uint16_t *)(ea_to->ether_addr_octet); to_words[0] = from_words[0]; to_words[1] = from_words[1]; @@ -283,12 +264,12 @@ const struct ether_addr *eth_addr) { snprintf(buf, size, "%02X:%02X:%02X:%02X:%02X:%02X", - eth_addr->addr_bytes[0], - eth_addr->addr_bytes[1], - eth_addr->addr_bytes[2], - eth_addr->addr_bytes[3], - eth_addr->addr_bytes[4], - eth_addr->addr_bytes[5]); + eth_addr->ether_addr_octet[0], + eth_addr->ether_addr_octet[1], + eth_addr->ether_addr_octet[2], + eth_addr->ether_addr_octet[3], + eth_addr->ether_addr_octet[4], + eth_addr->ether_addr_octet[5]); } /**