Skip to content

Commit

Permalink
ethdev: random MAC address
Browse files Browse the repository at this point in the history
Factorize code by moving random_addr() function in only place.
It will be reused for virtio.

Signed-off-by: Intel
  • Loading branch information
Intel authored and Thomas Monjalon committed Oct 9, 2013
1 parent 7bd128e commit 7ef0072
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 22 deletions.
19 changes: 19 additions & 0 deletions lib/librte_ether/rte_ether.h
Expand Up @@ -46,6 +46,9 @@ extern "C" {

#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. */
Expand Down Expand Up @@ -195,6 +198,22 @@ static inline int is_valid_assigned_ether_addr(const struct ether_addr *ea)
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.
*
Expand Down
11 changes: 0 additions & 11 deletions lib/librte_pmd_e1000/igb_pf.c
Expand Up @@ -54,17 +54,6 @@
#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)
{
Expand Down
11 changes: 0 additions & 11 deletions lib/librte_pmd_ixgbe/ixgbe_pf.c
Expand Up @@ -54,17 +54,6 @@

#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)
{
Expand Down

0 comments on commit 7ef0072

Please sign in to comment.