Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c2c9d96 authored by Roopa Prabhu's avatar Roopa Prabhu Committed by David S. Miller
Browse files

enic: Move enic port profile handling code to a new 802.1Qbh provisioning info type

parent 36accaed
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@

#define DRV_NAME		"enic"
#define DRV_DESCRIPTION		"Cisco VIC Ethernet NIC Driver"
#define DRV_VERSION		"1.4.1.9"
#define DRV_VERSION		"1.4.1.10"
#define DRV_COPYRIGHT		"Copyright 2008-2010 Cisco Systems, Inc"

#define ENIC_BARS_MAX		6
+23 −10
Original line number Diff line number Diff line
@@ -1252,7 +1252,10 @@ static int enic_set_port_profile(struct enic *enic, u8 *mac)
{
	struct vic_provinfo *vp;
	u8 oui[3] = VIC_PROVINFO_CISCO_OUI;
	u16 os_type = VIC_GENERIC_PROV_OS_TYPE_LINUX;
	char uuid_str[38];
	char client_mac_str[18];
	u8 *client_mac;
	int err;

	err = enic_vnic_dev_deinit(enic);
@@ -1270,37 +1273,47 @@ static int enic_set_port_profile(struct enic *enic, u8 *mac)
			return -EADDRNOTAVAIL;

		vp = vic_provinfo_alloc(GFP_KERNEL, oui,
			VIC_PROVINFO_LINUX_TYPE);
			VIC_PROVINFO_GENERIC_TYPE);
		if (!vp)
			return -ENOMEM;

		vic_provinfo_add_tlv(vp,
			VIC_LINUX_PROV_TLV_PORT_PROFILE_NAME_STR,
			VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR,
			strlen(enic->pp.name) + 1, enic->pp.name);

		if (!is_zero_ether_addr(enic->pp.mac_addr))
			vic_provinfo_add_tlv(vp,
				VIC_LINUX_PROV_TLV_CLIENT_MAC_ADDR,
				ETH_ALEN, enic->pp.mac_addr);
			client_mac = enic->pp.mac_addr;
		else
			client_mac = mac;

		vic_provinfo_add_tlv(vp,
			VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR,
			ETH_ALEN, client_mac);

		sprintf(client_mac_str, "%pM", client_mac);
		vic_provinfo_add_tlv(vp,
				VIC_LINUX_PROV_TLV_CLIENT_MAC_ADDR,
				ETH_ALEN, mac);
			VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR,
			sizeof(client_mac_str), client_mac_str);

		if (enic->pp.set & ENIC_SET_INSTANCE) {
			sprintf(uuid_str, "%pUB", enic->pp.instance_uuid);
			vic_provinfo_add_tlv(vp,
				VIC_LINUX_PROV_TLV_CLIENT_UUID_STR,
				VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR,
				sizeof(uuid_str), uuid_str);
		}

		if (enic->pp.set & ENIC_SET_HOST) {
			sprintf(uuid_str, "%pUB", enic->pp.host_uuid);
			vic_provinfo_add_tlv(vp,
				VIC_LINUX_PROV_TLV_HOST_UUID_STR,
				VIC_GENERIC_PROV_TLV_HOST_UUID_STR,
				sizeof(uuid_str), uuid_str);
		}

		os_type = htons(os_type);
		vic_provinfo_add_tlv(vp,
			VIC_GENERIC_PROV_TLV_OS_TYPE,
			sizeof(os_type), &os_type);

		err = enic_dev_init_prov(enic, vp);
		vic_provinfo_free(vp);
		if (err)
+23 −8
Original line number Diff line number Diff line
@@ -24,14 +24,29 @@
/* Note: String field lengths include null char */

#define VIC_PROVINFO_CISCO_OUI		{ 0x00, 0x00, 0x0c }
#define VIC_PROVINFO_LINUX_TYPE		0x2

enum vic_linux_prov_tlv_type {
	VIC_LINUX_PROV_TLV_PORT_PROFILE_NAME_STR = 0,
	VIC_LINUX_PROV_TLV_CLIENT_MAC_ADDR = 1,			/* u8[6] */
	VIC_LINUX_PROV_TLV_CLIENT_NAME_STR = 2,
	VIC_LINUX_PROV_TLV_HOST_UUID_STR = 8,
	VIC_LINUX_PROV_TLV_CLIENT_UUID_STR = 9,
#define VIC_PROVINFO_GENERIC_TYPE		0x4

enum vic_generic_prov_tlv_type {
	VIC_GENERIC_PROV_TLV_PORT_PROFILE_NAME_STR = 0,
	VIC_GENERIC_PROV_TLV_CLIENT_MAC_ADDR = 1,
	VIC_GENERIC_PROV_TLV_CLIENT_NAME_STR = 2,
	VIC_GENERIC_PROV_TLV_CLUSTER_PORT_NAME_STR = 3,
	VIC_GENERIC_PROV_TLV_CLUSTER_PORT_UUID_STR = 4,
	VIC_GENERIC_PROV_TLV_CLUSTER_UUID_STR = 5,
	VIC_GENERIC_PROV_TLV_CLUSTER_NAME_STR = 7,
	VIC_GENERIC_PROV_TLV_HOST_UUID_STR = 8,
	VIC_GENERIC_PROV_TLV_CLIENT_UUID_STR = 9,
	VIC_GENERIC_PROV_TLV_INCARNATION_NUMBER = 10,
	VIC_GENERIC_PROV_TLV_OS_TYPE = 11,
	VIC_GENERIC_PROV_TLV_OS_VENDOR = 12,
	VIC_GENERIC_PROV_TLV_CLIENT_TYPE = 15,
};

enum vic_generic_prov_os_type {
	VIC_GENERIC_PROV_OS_TYPE_UNKNOWN = 0,
	VIC_GENERIC_PROV_OS_TYPE_ESX = 1,
	VIC_GENERIC_PROV_OS_TYPE_LINUX = 2,
	VIC_GENERIC_PROV_OS_TYPE_WINDOWS = 3,
};

struct vic_provinfo {