Messages in this thread | | | Date | Wed, 7 Aug 2019 11:25:18 -0700 | From | Jakub Kicinski <> | Subject | Re: [PATCH net-next] net/ncsi: allow to customize BMC MAC Address offset |
| |
On Tue, 6 Aug 2019 17:21:18 -0700, Tao Ren wrote: > Currently BMC's MAC address is calculated by adding 1 to NCSI NIC's base > MAC address when CONFIG_NCSI_OEM_CMD_GET_MAC option is enabled. The logic > doesn't work for platforms with different BMC MAC offset: for example, > Facebook Yamp BMC's MAC address is calculated by adding 2 to NIC's base > MAC address ("BaseMAC + 1" is reserved for Host use). > > This patch adds NET_NCSI_MC_MAC_OFFSET config option to customize offset > between NIC's Base MAC address and BMC's MAC address. Its default value is > set to 1 to avoid breaking existing users. > > Signed-off-by: Tao Ren <taoren@fb.com>
Maybe someone more knowledgeable like Andrew has an opinion here, but to me it seems a bit strange to encode what seems to be platfrom information in the kernel config :(
> diff --git a/net/ncsi/Kconfig b/net/ncsi/Kconfig > index 2f1e5756c03a..be8efe1ed99e 100644 > --- a/net/ncsi/Kconfig > +++ b/net/ncsi/Kconfig > @@ -17,3 +17,11 @@ config NCSI_OEM_CMD_GET_MAC > ---help--- > This allows to get MAC address from NCSI firmware and set them back to > controller. > +config NET_NCSI_MC_MAC_OFFSET > + int > + prompt "Offset of Management Controller's MAC Address" > + depends on NCSI_OEM_CMD_GET_MAC > + default 1 > + help > + This defines the offset between Network Controller's (base) MAC > + address and Management Controller's MAC address. > diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c > index 7581bf919885..24a791f9ebf5 100644 > --- a/net/ncsi/ncsi-rsp.c > +++ b/net/ncsi/ncsi-rsp.c > @@ -656,6 +656,11 @@ static int ncsi_rsp_handler_oem_bcm_gma(struct ncsi_request *nr) > struct ncsi_rsp_oem_pkt *rsp; > struct sockaddr saddr; > int ret = 0; > +#ifdef CONFIG_NET_NCSI_MC_MAC_OFFSET > + int mac_offset = CONFIG_NET_NCSI_MC_MAC_OFFSET; > +#else > + int mac_offset = 1; > +#endif > > /* Get the response header */ > rsp = (struct ncsi_rsp_oem_pkt *)skb_network_header(nr->rsp); > @@ -663,8 +668,14 @@ static int ncsi_rsp_handler_oem_bcm_gma(struct ncsi_request *nr) > saddr.sa_family = ndev->type; > ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE; > memcpy(saddr.sa_data, &rsp->data[BCM_MAC_ADDR_OFFSET], ETH_ALEN); > - /* Increase mac address by 1 for BMC's address */ > - eth_addr_inc((u8 *)saddr.sa_data); > + > + /* Management Controller's MAC address is calculated by adding > + * the offset to Network Controller's (base) MAC address. > + * Note: negative offset is "ignored", and BMC will use the Base > + * MAC address in this case. > + */ > + while (mac_offset-- > 0) > + eth_addr_inc((u8 *)saddr.sa_data); > if (!is_valid_ether_addr((const u8 *)saddr.sa_data)) > return -ENXIO; >
| |