Index: /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c	(working copy)
@@ -2567,15 +2567,15 @@
 			}
 		}
 
-		if (if_info_p->mlxen_nics + if_info_p->i40e_nics > 0) {
+		if (if_info_p->t5g_nics > 0) {
 			if (new_line) printf("                    ");
-			printf("%d x 40Gigabit Ethernet fiber\n", if_info_p->mlxen_nics + if_info_p->i40e_nics);
+			printf("%d x 10/25Gigabit Ethernet fiber\n", if_info_p->t5g_nics);
 			new_line = 1;
 		}
 
-		if (if_info_p->t5g_nics > 0) {
+		if (if_info_p->mlxen_nics + if_info_p->i40e_nics > 0) {
 			if (new_line) printf("                    ");
-			printf("%d x 10/25Gigabit Ethernet fiber\n", if_info_p->t5g_nics);
+			printf("%d x 40Gigabit Ethernet fiber\n", if_info_p->mlxen_nics + if_info_p->i40e_nics);
 			new_line = 1;
 		}
 
Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/i40e/i40e_ethdev_vf.c	(working copy)
@@ -2575,14 +2575,12 @@
 		.nb_align = I40E_ALIGN_RING_DESC,
 	};
 
-	if ((vf->link_up & 0x01) && (vf->link_speed == I40E_LINK_SPEED_40GB)) {
-		vf->is_40G = 1; // once link down, it still should be 40G.
-	} 
-
-	if (vf->is_40G) {
-		dev_info->link_speed_40G = 1;
-	} else {
-		dev_info->link_speed_40G = 0;
+	if (vf->link_up & 0x01) {
+		if (vf->link_speed == I40E_LINK_SPEED_40GB) {
+			dev_info->link_speed = ETH_SPEED_NUM_40G;
+		} else if (vf->link_speed == I40E_LINK_SPEED_25GB) {
+			dev_info->link_speed = ETH_SPEED_NUM_25G;
+		}
 	}
 }
 
Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/iavf/iavf_ethdev.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/iavf/iavf_ethdev.c	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/iavf/iavf_ethdev.c	(working copy)
@@ -565,6 +565,10 @@
 		.nb_min = IAVF_MIN_RING_DESC,
 		.nb_align = IAVF_ALIGN_RING_DESC,
 	};
+
+	if (vf->link_up & 0x01) {
+		dev_info->link_speed = vf->link_speed;
+	}
 }
 
 static const uint32_t *
Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.h
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.h	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.h	(working copy)
@@ -1119,7 +1119,7 @@
 	/** Configured number of rx/tx queues */
 	uint16_t nb_rx_queues; /**< Number of RX queues. */
 	uint16_t nb_tx_queues; /**< Number of TX queues. */
-	uint16_t link_speed_40G; /** only for i40e_vf */
+	uint32_t link_speed; /** Only for vf */
 	/** Rx parameter recommendations */
 	struct rte_eth_dev_portconf default_rxportconf;
 	/** Tx parameter recommendations */
Index: /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.h
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.h	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.h	(working copy)
@@ -138,6 +138,23 @@
 #define TXGBE_DEV_ID_WX1820				0x2001
 #define IAVF_DEV_ID_ADAPTIVE_VF        0x1889
 
+/**
+ * Ethernet numeric link speeds in Mbps
+ */
+#define ETH_SPEED_NUM_NONE         0 /**< Not defined */
+#define ETH_SPEED_NUM_10M         10 /**<  10 Mbps */
+#define ETH_SPEED_NUM_100M       100 /**< 100 Mbps */
+#define ETH_SPEED_NUM_1G        1000 /**<   1 Gbps */
+#define ETH_SPEED_NUM_2_5G      2500 /**< 2.5 Gbps */
+#define ETH_SPEED_NUM_5G        5000 /**<   5 Gbps */
+#define ETH_SPEED_NUM_10G      10000 /**<  10 Gbps */
+#define ETH_SPEED_NUM_20G      20000 /**<  20 Gbps */
+#define ETH_SPEED_NUM_25G      25000 /**<  25 Gbps */
+#define ETH_SPEED_NUM_40G      40000 /**<  40 Gbps */
+#define ETH_SPEED_NUM_50G      50000 /**<  50 Gbps */
+#define ETH_SPEED_NUM_56G      56000 /**<  56 Gbps */
+#define ETH_SPEED_NUM_100G    100000 /**< 100 Gbps */
+
 struct em_info_array {
 	uint16_t device_id;
 	uint32_t next_rx_desc_to_check;
Index: /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.c	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.c	(working copy)
@@ -476,8 +476,10 @@
 				if_info_p->cu_nics++;
 			}
 		} else if (!strncmp(pinfo->dev_name, "net_i40e_vf", 11)) {
-			if (pinfo->dev_id) {// 40G fiber
+			if (pinfo->link_speed == ETH_SPEED_NUM_40G) {// 40G fiber
 				if_info_p->i40e_nics++;
+			} else if (pinfo->link_speed == ETH_SPEED_NUM_25G) {// 25G fiber
+				if_info_p->t5g_nics++;
 			} else { // 10G fiber
 				if_info_p->tg_nics++;
 				if_info_p->fb_tg_nics++;
@@ -518,8 +520,13 @@
 			if_info_p->tg_nics++;
 			if_info_p->fb_tg_nics++;
 		} else if (!strncmp(pinfo->dev_name, "net_iavf", 8)) {
-			if(pinfo->dev_id == IAVF_DEV_ID_ADAPTIVE_VF) {
+			if (pinfo->link_speed == ETH_SPEED_NUM_100G){
 				if_info_p->hg_nics++;
+			} else if (pinfo->link_speed == ETH_SPEED_NUM_25G){
+				if_info_p->t5g_nics++;
+			} else { // 10G fiber
+				if_info_p->tg_nics++;
+				if_info_p->fb_tg_nics++;
 			}
         }
 	}
Index: /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/api_include/uinet_api_types.h
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/api_include/uinet_api_types.h	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/api_include/uinet_api_types.h	(working copy)
@@ -175,6 +175,7 @@
         uint16_t dev_id;
 		struct uinet_pci_id	pci_id;
 		struct uinet_pci_addr pci_addr;
+	uint32_t link_speed; /* for distinguish vf by speed */
 };
 
 #define	UINET_SS_ISCONNECTED		0x0002	/* socket connected to a peer */
Index: /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c	(revision 37898)
+++ /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c	(working copy)
@@ -2563,8 +2563,9 @@
 	info->pci_addr.devid = dev_info.pci_dev->addr.devid;
 	info->pci_addr.function = dev_info.pci_dev->addr.function;
 
-	if (strncmp(info->dev_name, "net_i40e_vf", strlen("net_i40e_vf")) == 0) {
-		info->dev_id = dev_info.link_speed_40G;
+	if ((strncmp(info->dev_name, "net_i40e_vf", strlen("net_i40e_vf")) == 0) ||
+		(strncmp(info->dev_name, "net_iavf", strlen("net_iavf")) == 0)) {
+		info->link_speed = dev_info.link_speed;
 	}
 }
 
