Hi Stephen, On Mon, Jun 24, 2019 at 01:44:28PM -0700, Stephen Hemminger wrote: > Formatting Ethernet address and getting a random value are > not in critical path so they should not be inlined. > > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > Acked-by: Rami Rosen <ramir...@gmail.com> > Reviewed-by: Andrew Rybchenko <arybche...@solarflare.com> > --- > lib/librte_net/Makefile | 1 + > lib/librte_net/meson.build | 2 +- > lib/librte_net/rte_ether.c | 29 +++++++++++++++++++++++++++++ > lib/librte_net/rte_ether.h | 25 ++++--------------------- > lib/librte_net/rte_net_version.map | 7 +++++++ > 5 files changed, 42 insertions(+), 22 deletions(-) > create mode 100644 lib/librte_net/rte_ether.c > > diff --git a/lib/librte_net/Makefile b/lib/librte_net/Makefile > index c3082069ab50..1244c9fd54c9 100644 > --- a/lib/librte_net/Makefile > +++ b/lib/librte_net/Makefile > @@ -14,6 +14,7 @@ LIBABIVER := 1 > > SRCS-$(CONFIG_RTE_LIBRTE_NET) := rte_net.c > SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_net_crc.c > +SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_ether.c > SRCS-$(CONFIG_RTE_LIBRTE_NET) += rte_arp.c > > # install includes > diff --git a/lib/librte_net/meson.build b/lib/librte_net/meson.build > index 7d66f693cbf3..868a93fd6b6b 100644 > --- a/lib/librte_net/meson.build > +++ b/lib/librte_net/meson.build > @@ -16,5 +16,5 @@ headers = files('rte_ip.h', > 'rte_net_crc.h', > 'rte_mpls.h') > > -sources = files('rte_arp.c', 'rte_net.c', 'rte_net_crc.c') > +sources = files('rte_arp.c', 'rte_ether.c', 'rte_net.c', 'rte_net_crc.c') > deps += ['mbuf'] > diff --git a/lib/librte_net/rte_ether.c b/lib/librte_net/rte_ether.c > new file mode 100644 > index 000000000000..974fe815b335 > --- /dev/null > +++ b/lib/librte_net/rte_ether.c > @@ -0,0 +1,29 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2010-2014 Intel Corporation > + */ > + > +#include <rte_ether.h> > + > +void > +rte_eth_random_addr(uint8_t *addr) > +{ > + uint64_t rand = rte_rand(); > + uint8_t *p = (uint8_t *)&rand; > + > + rte_memcpy(addr, p, RTE_ETHER_ADDR_LEN); > + addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit > */ > + addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ > +} > + > +void > +rte_ether_format_addr(char *buf, uint16_t size, > + const struct rte_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]); > +} > diff --git a/lib/librte_net/rte_ether.h b/lib/librte_net/rte_ether.h > index 7be9b4890af7..3caae0d98f6d 100644 > --- a/lib/librte_net/rte_ether.h > +++ b/lib/librte_net/rte_ether.h > @@ -207,15 +207,8 @@ static inline int rte_is_valid_assigned_ether_addr(const > struct rte_ether_addr * > * @param addr > * A pointer to Ethernet address. > */ > -static inline void rte_eth_random_addr(uint8_t *addr) > -{ > - uint64_t rand = rte_rand(); > - uint8_t *p = (uint8_t *)&rand; > - > - rte_memcpy(addr, p, RTE_ETHER_ADDR_LEN); > - addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit */ > - addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */ > -} > +void > +rte_eth_random_addr(uint8_t *addr); > > /** > * Fast copy an Ethernet address. > @@ -254,19 +247,9 @@ static inline void rte_ether_addr_copy(const struct > rte_ether_addr *ea_from, > * @param eth_addr > * A pointer to a ether_addr structure. > */ > -static inline void > +void > rte_ether_format_addr(char *buf, uint16_t size, > - const struct rte_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]); > -} > - > + const struct rte_ether_addr *eth_addr); > /** > * Ethernet header: Contains the destination address, source address > * and frame type. > diff --git a/lib/librte_net/rte_net_version.map > b/lib/librte_net/rte_net_version.map > index 26c06e7c7ae7..f1e1b84ab491 100644 > --- a/lib/librte_net/rte_net_version.map > +++ b/lib/librte_net/rte_net_version.map > @@ -13,6 +13,13 @@ DPDK_17.05 { > > } DPDK_16.11; > > +DPDK_19.08 { > + global: > + > + rte_eth_random_addr; > + rte_ether_format_addr; > +} DPDK_17.05; > + > EXPERIMENTAL { > global: > > -- > 2.20.1 >
In drivers/net/memif and drivers/net/axgbe, rte_ether_format_addr() is used, but -lrte_net is not passed to LDLIBS in the Makefile. This was probably ok before because it was an inline function, but I wonder if it shouldn't be added in this patch.