[dpdk-dev] [PATCH v4 2/3] net/enetc: set random MAC in case no MAC for SI

Ferruh Yigit ferruh.yigit at intel.com
Tue Oct 22 10:59:46 CEST 2019


On 10/22/2019 6:31 AM, Gagandeep Singh wrote:
> 
> <...>
>>>
>>>  include $(RTE_SDK)/mk/rte.lib.mk
>>> diff --git a/drivers/net/enetc/enetc_ethdev.c
>> b/drivers/net/enetc/enetc_ethdev.c
>>> index 4e978348c..475ec77c3 100644
>>> --- a/drivers/net/enetc/enetc_ethdev.c
>>> +++ b/drivers/net/enetc/enetc_ethdev.c
>>> @@ -4,6 +4,7 @@
>>>
>>>  #include <stdbool.h>
>>>  #include <rte_ethdev_pci.h>
>>> +#include <rte_random.h>
>>>
>>>  #include "enetc_logs.h"
>>>  #include "enetc.h"
>>> @@ -123,11 +124,22 @@ enetc_link_update(struct rte_eth_dev *dev, int
>> wait_to_complete __rte_unused)
>>>  	return rte_eth_linkstatus_set(dev, &link);
>>>  }
>>>
>>> +static void
>>> +print_ethaddr(const char *name, const struct rte_ether_addr *eth_addr)
>>> +{
>>> +	char buf[RTE_ETHER_ADDR_FMT_SIZE];
>>> +
>>> +	rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, eth_addr);
>>> +	ENETC_PMD_INFO("%s%s\n", name, buf);
>>> +}
>>> +
>>>  static int
>>>  enetc_hardware_init(struct enetc_eth_hw *hw)
>>>  {
>>>  	struct enetc_hw *enetc_hw = &hw->hw;
>>>  	uint32_t *mac = (uint32_t *)hw->mac.addr;
>>> +	uint32_t high_mac = 0;
>>> +	uint16_t low_mac = 0;
>>>
>>>  	PMD_INIT_FUNC_TRACE();
>>>  	/* Calculating and storing the base HW addresses */
>>> @@ -138,8 +150,29 @@ enetc_hardware_init(struct enetc_eth_hw *hw)
>>>  	enetc_wr(enetc_hw, ENETC_SIMR, ENETC_SIMR_EN);
>>>
>>>  	*mac = (uint32_t)enetc_port_rd(enetc_hw, ENETC_PSIPMAR0(0));
>>> +	high_mac = (uint32_t)*mac;
>>>  	mac++;
>>>  	*mac = (uint16_t)enetc_port_rd(enetc_hw, ENETC_PSIPMAR1(0));
>>> +	low_mac = (uint16_t)*mac;
>>> +
>>> +	if ((high_mac | low_mac) == 0) {
>>> +		char *first_byte;
>>> +
>>> +		ENETC_PMD_INFO("MAC is not available for this SI, "
>>> +			       "set random MAC\n");
>>> +		mac = (uint32_t *)hw->mac.addr;
>>> +		*mac = (uint32_t)rte_rand();
>>> +		first_byte = (char *)mac;
>>> +		*first_byte &= 0xfe;	/* clear multicast bit */
>>> +		*first_byte |= 0x02;	/* set local assignment bit (IEEE802) */
>>> +
>>> +		enetc_port_wr(enetc_hw, ENETC_PSIPMAR0(0), *mac);
>>> +		mac++;
>>> +		*mac = (uint16_t)rte_rand();
>>> +		enetc_port_wr(enetc_hw, ENETC_PSIPMAR1(0), *mac);
>>> +		print_ethaddr("New address: ",
>>> +			      (const struct rte_ether_addr *)hw->mac.addr);
>>> +	}
>>>
>>>  	return 0;
>>>  }
>>> @@ -906,5 +939,5 @@ RTE_INIT(enetc_pmd_init_log)
>>>  {
>>>  	enetc_logtype_pmd = rte_log_register("pmd.net.enetc");
>>>  	if (enetc_logtype_pmd >= 0)
>>> -		rte_log_set_level(enetc_logtype_pmd, RTE_LOG_NOTICE);
>>> +		rte_log_set_level(enetc_logtype_pmd, RTE_LOG_INFO);
>>
>>
>> This part look unrelated with the what commit log describes. And why you are
>> making the driver more verbose by default?
>>
> I changed this to print MAC address by default. Currently, enetc driver is not supporting
> NOTICE type log and the next supported log level is INFO and we are using INFO type log
> only while setting the random MAC addresses.
> If INFO type log is not ok to print this information, please suggest me. Should I add NOTICE
> Type log? Or  just add a printf to display the MAC address.
> 

There is no strict rule, but mostly* drivers set the default log level to
NOTICE, the intention is to make logging less noisy by default.

Is the log you have mentioned should be printed always for all applications by
default, if so I suggest updating its level to NOTICE, (adding NOTICE level is
easy or you can use 'ENETC_PMD_LOG' directly for it.)

But if that log is not required for all, I suggest keeping it INFO and the
default level NOTICE.



More information about the dev mailing list