ethdev: random MAC address
Factorize code by moving random_addr() function in only place. It will be reused for virtio. Signed-off-by: Intel
This commit is contained in:
parent
7bd128eae2
commit
7ef0072910
@ -46,6 +46,9 @@ extern "C" {
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <rte_memcpy.h>
|
||||||
|
#include <rte_random.h>
|
||||||
|
|
||||||
#define ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */
|
#define ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */
|
||||||
#define ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */
|
#define ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */
|
||||||
#define ETHER_CRC_LEN 4 /**< Length of Ethernet CRC. */
|
#define ETHER_CRC_LEN 4 /**< Length of Ethernet CRC. */
|
||||||
@ -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)));
|
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.
|
* Fast copy an Ethernet address.
|
||||||
*
|
*
|
||||||
|
@ -54,17 +54,6 @@
|
|||||||
#include "e1000/e1000_hw.h"
|
#include "e1000/e1000_hw.h"
|
||||||
#include "e1000_ethdev.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
|
static inline uint16_t
|
||||||
dev_num_vf(struct rte_eth_dev *eth_dev)
|
dev_num_vf(struct rte_eth_dev *eth_dev)
|
||||||
{
|
{
|
||||||
|
@ -54,17 +54,6 @@
|
|||||||
|
|
||||||
#define IXGBE_MAX_VFTA (128)
|
#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
|
static inline uint16_t
|
||||||
dev_num_vf(struct rte_eth_dev *eth_dev)
|
dev_num_vf(struct rte_eth_dev *eth_dev)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user