Factorize code by moving random_addr() function in only place.
It will be reused for virtio.
Signed-off-by: Intel
#include <stdint.h>
+#include <rte_memcpy.h>
+#include <rte_random.h>
+
#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. */
return (is_unicast_ether_addr(ea) && (! is_zero_ether_addr(ea)));
}
+/**
+ * Generate a random Ethernet address that is locally administered
+ * and not multicast.
+ * @param addr
+ * A pointer to Ethernet address.
+ */
+static inline void eth_random_addr(uint8_t *addr)
+{
+ uint64_t rand = rte_rand();
+ uint8_t *p = (uint8_t*)&rand;
+
+ rte_memcpy(addr, p, ETHER_ADDR_LEN);
+ addr[0] &= ~ETHER_GROUP_ADDR; /* clear multicast bit */
+ addr[0] |= ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */
+}
+
/**
* Fast copy an Ethernet address.
*
#include "e1000/e1000_hw.h"
#include "e1000_ethdev.h"
-static inline
-void eth_random_addr(uint8_t *addr)
-{
- uint64_t rand = rte_rand();
- uint8_t *p = (uint8_t*)&rand;
-
- rte_memcpy(addr, p, ETHER_ADDR_LEN);
- addr[0] &= 0xfe; /* clear multicast bit */
- addr[0] |= 0x02; /* set local assignment bit (IEEE802) */
-}
-
static inline uint16_t
dev_num_vf(struct rte_eth_dev *eth_dev)
{
#define IXGBE_MAX_VFTA (128)
-static inline
-void eth_random_addr(uint8_t *addr)
-{
- uint64_t rand = rte_rand();
- uint8_t *p = (uint8_t*)&rand;
-
- rte_memcpy(addr, p, ETHER_ADDR_LEN);
- addr[0] &= 0xfe; /* clear multicast bit */
- addr[0] |= 0x02; /* set local assignment bit (IEEE802) */
-}
-
static inline uint16_t
dev_num_vf(struct rte_eth_dev *eth_dev)
{