[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20100424022121.GE3843@x200.localdomain>
Date: Fri, 23 Apr 2010 19:21:21 -0700
From: Chris Wright <chrisw@...hat.com>
To: Scott Feldman <scofeldm@...co.com>
Cc: davem@...emloft.net, netdev@...r.kernel.org, chrisw@...hat.com,
arnd@...db.de
Subject: Re: [net-next-2.6 PATCH 2/2] add enic ndo_vf_set_port_profile op
support for dynamic vnics
* Scott Feldman (scofeldm@...co.com) wrote:
> -#define DRV_VERSION "1.3.1.1"
> +#define DRV_VERSION "1.3.1.1-iov"
not a version bump?
> @@ -810,14 +819,24 @@ static void enic_reset_mcaddrs(struct enic *enic)
>
> static int enic_set_mac_addr(struct net_device *netdev, char *addr)
> {
> - if (!is_valid_ether_addr(addr))
> - return -EADDRNOTAVAIL;
> + struct enic *enic = netdev_priv(netdev);
>
> - memcpy(netdev->dev_addr, addr, netdev->addr_len);
> + if (enic_is_dynamic(enic)) {
> + random_ether_addr(netdev->dev_addr);
Would it make more sense to just ignore this? Then the default (not
port profile configured yet) mac is still a useful identifier.
> + } else {
> + if (!is_valid_ether_addr(addr))
> + return -EADDRNOTAVAIL;
> + memcpy(netdev->dev_addr, addr, netdev->addr_len);
> + }
>
> return 0;
> }
>
> +static int enic_set_mac_address(struct net_device *netdev, void *p)
> +{
> + return -EOPNOTSUPP;
> +}
> +
Ever? Even on non-dynamic enic? Oh, I see, this was just a lie before ;-)
> +static int enic_set_vf_port_profile(struct net_device *netdev, int vf,
> + u8 *port_profile, u8 *mac, u8 *host_uuid, u8 *client_uuid,
> + u8 *client_name)
> +{
> + struct enic *enic = netdev_priv(netdev);
> + struct vic_provinfo *vp;
> + u8 oui[3] = VIC_PROVINFO_CISCO_OUI;
> + int err;
> +
> + if (!enic_is_dynamic(enic))
> + return -EOPNOTSUPP;
Do you want to validate vf (like require it to be 0) or something?
How should userspace know to talk directly to the VF (dynamic enic) in
this device, but a PF + VF_index for another device?
> + if (strlen(port_profile) == 0)
> + return enic_vnic_dev_deinit(enic);
> +
> + vp = vic_provinfo_alloc(GFP_KERNEL, oui, VIC_PROVINFO_LINUX_TYPE);
> + if (!vp)
> + return -ENOMEM;
> +
> + enic_provinfo_add_tlv_str(vp, VIC_LINUX_PROV_TLV_PORT_PROFILE_NAME_STR,
> + port_profile);
> + vic_provinfo_add_tlv(vp, VIC_LINUX_PROV_TLV_CLIENT_MAC_ADDR,
> + ETH_ALEN, mac);
> + enic_provinfo_add_tlv_str(vp, VIC_LINUX_PROV_TLV_HOST_UUID_STR,
> + host_uuid);
> + enic_provinfo_add_tlv_str(vp, VIC_LINUX_PROV_TLV_CLIENT_UUID_STR,
> + client_uuid);
> + enic_provinfo_add_tlv_str(vp, VIC_LINUX_PROV_TLV_CLIENT_NAME_STR,
> + client_name);
> +
> + err = enic_vnic_dev_deinit(enic);
> + if (err)
> + goto err_out;
> +
> + err = enic_dev_init_prov(enic, vp);
> +
> +err_out:
> + vic_provinfo_free(vp);
> +
> + enic_set_multicast_list(netdev);
Should that happen in error case (and is the locking correct)?
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists