Index: /branches/rel_apv_10_7/tools/image_creator.sh
===================================================================
--- /branches/rel_apv_10_7/tools/image_creator.sh	(revision 38122)
+++ /branches/rel_apv_10_7/tools/image_creator.sh	(working copy)
@@ -26,6 +26,8 @@
 DEFAULT_LICENSE=$5
 MACHINE_ARCH=`uname -m`
 
+KERNEL_VERSION=3.10.0-327.28.2.17.el7.x86_64
+
 # create base image
 create_base_image() {
     if [ ! -f $BASEIMAGE_DIR/$BASEIMAGE_NAME.$IMAGE_TYPE ]
@@ -194,14 +196,24 @@
     echo 'LABEL=caupgrade /caupgrade              xfs     defaults        0 0' >> /mnt/etc/fstab
     echo 'LABEL=swap swap                    swap    defaults        0 0' >> /mnt/etc/fstab
     echo 'LABEL=var /var                    xfs     defaults        0 0' >> /mnt/etc/fstab
-    echo "SELINUX=disabled" > /mnt/etc/selinux/config
-    echo "SELINUXTYPE=targeted" >> /mnt/etc/selinux/config
-    echo "AN" > /mnt/etc/hostname
-    sed -i '/^array/d' /mnt/etc/shadow
     if [ "x$IMAGE_TARGET" = "xaws" ]; then
-        sed -i 's/.*PasswordAuthentication yes/PasswordAuthentication no/g' /mnt/etc/ssh/sshd_config
+        echo 'LABEL=caupgrade /                       xfs     defaults        0 0' > /mnt/etc/fstab.slave
+        echo 'LABEL=boot /boot                   ext4    defaults        1 2' >> /mnt/etc/fstab.slave
+        echo 'LABEL=root /caupgrade              xfs     defaults        0 0' >> /mnt/etc/fstab.slave
+        echo 'LABEL=swap swap                    swap    defaults        0 0' >> /mnt/etc/fstab.slave
+        echo 'LABEL=var /var                    xfs     defaults        0 0' >> /mnt/etc/fstab.slave
+        /bin/cp -f /mnt/vmlinuz-${KERNEL_VERSION} ./files/vmlinuz-${KERNEL_VERSION}
+        /bin/cp -f /mnt/initramfs-${KERNEL_VERSION}.img ./files/initramfs-${KERNEL_VERSION}.img
+        /bin/cp -f /mnt/etc/shadow /mnt/etc/shadow.aws_backup
+        #sed -i '/^array/d' /mnt/etc/shadow
+        sed -i '/^ansync/d' /mnt/etc/shadow
+        #sed -i '/^test/d' /mnt/etc/shadow
         sed -i 's/.*PasswordAuthentication yes/PasswordAuthentication no/g' /mnt/ca/etc/sshd_config
+        sed -i 's/.*PasswordAuthentication yes/PasswordAuthentication no/g' /mnt/etc/ssh/sshd_config
     fi
+    echo "SELINUX=disabled" > /mnt/etc/selinux/config
+    echo "SELINUXTYPE=targeted" >> /mnt/etc/selinux/config
+    echo "AN" > /mnt/etc/hostname    
     /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/sshd.service
     /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/NetworkManager.service
     /bin/rm -f /mnt/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service
@@ -221,33 +233,37 @@
     echo 'hugepages=512' >> /mnt/grub2/grubenv
     echo 'avx_hgpgsz=2M' >> /mnt/grub2/grubenv
     echo 'avx_hgpgs=54272' >> /mnt/grub2/grubenv
-    guestunmount /mnt
-    sleep 10
-    #ROOTEEE
-    echo "copy files into the ROOTEEE partition"
-    guestmount -a ${BASEIMAGE_DIR}/ustack.${IMAGE_TYPE} -m /dev/sda3 /mnt
-    /bin/cp -rfpd ./img/* /mnt/
-    /bin/cp -f /mnt/ca/ssl/bin/root-cas.crt /mnt/ca/ssl/vhost/
-    echo 'LABEL=caupgrade /                       xfs     defaults        0 0' > /mnt/etc/fstab
-    echo 'LABEL=boot /boot                   ext4    defaults        1 2' >> /mnt/etc/fstab
-    echo 'LABEL=root /caupgrade              xfs     defaults        0 0' >> /mnt/etc/fstab
-    echo 'LABEL=swap swap                    swap    defaults        0 0' >> /mnt/etc/fstab
-    echo 'LABEL=var /var                    xfs     defaults        0 0' >> /mnt/etc/fstab
-    echo "SELINUX=disabled" > /mnt/etc/selinux/config
-    echo "SELINUXTYPE=targeted" >> /mnt/etc/selinux/config
-    echo "AN" > /mnt/etc/hostname
-    #delete the password of array on the image
-    sed -i '/^array/d' /mnt/etc/shadow
     if [ "x$IMAGE_TARGET" = "xaws" ]; then
-        sed -i 's/.*PasswordAuthentication yes/PasswordAuthentication no/g' /mnt/etc/ssh/sshd_config
-        sed -i 's/.*PasswordAuthentication yes/PasswordAuthentication no/g' /mnt/ca/etc/sshd_config
+        /bin/cp -f ./tools/config-${KERNEL_VERSION} /mnt/grub2/
+        /bin/cp -f ./tools/config-${KERNEL_VERSION} /mnt/
+        /bin/cp -f ./files/vmlinuz-${KERNEL_VERSION} /mnt
+        /bin/cp -f ./files/initramfs-${KERNEL_VERSION}.img /mnt
     fi
-    /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/sshd.service
-    /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/NetworkManager.service
-    /bin/rm -f /mnt/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service
-    /bin/rm -f /mnt/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service
     guestunmount /mnt
     sleep 10
+    #ROOTEEE
+    if [ "x$IMAGE_TARGET" != "xaws" ]; then
+        echo "copy files into the ROOTEEE partition"
+        guestmount -a ${BASEIMAGE_DIR}/ustack.${IMAGE_TYPE} -m /dev/sda3 /mnt
+        /bin/cp -rfpd ./img/* /mnt/
+        /bin/cp -f /mnt/ca/ssl/bin/root-cas.crt /mnt/ca/ssl/vhost/
+        echo 'LABEL=caupgrade /                       xfs     defaults        0 0' > /mnt/etc/fstab
+        echo 'LABEL=boot /boot                   ext4    defaults        1 2' >> /mnt/etc/fstab
+        echo 'LABEL=root /caupgrade              xfs     defaults        0 0' >> /mnt/etc/fstab
+        echo 'LABEL=swap swap                    swap    defaults        0 0' >> /mnt/etc/fstab
+        echo 'LABEL=var /var                    xfs     defaults        0 0' >> /mnt/etc/fstab
+        echo "SELINUX=disabled" > /mnt/etc/selinux/config
+        echo "SELINUXTYPE=targeted" >> /mnt/etc/selinux/config
+        echo "AN" > /mnt/etc/hostname
+        #delete the password of array on the image
+        #sed -i '/^array/d' /mnt/etc/shadow
+        /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/sshd.service
+        /bin/rm -f /mnt/etc/systemd/system/multi-user.target.wants/NetworkManager.service
+        /bin/rm -f /mnt/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service
+        /bin/rm -f /mnt/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service
+        guestunmount /mnt
+        sleep 10
+    fi    
     echo "repair the partiations"
     guestfish --rw -a ${BASEIMAGE_DIR}/ustack.${IMAGE_TYPE} run : xfs_repair /dev/sda2
     guestfish --rw -a ${BASEIMAGE_DIR}/ustack.${IMAGE_TYPE} run : xfs_repair /dev/sda3
Index: /branches/rel_apv_10_7/tools/ustack.spec
===================================================================
--- /branches/rel_apv_10_7/tools/ustack.spec	(revision 38122)
+++ /branches/rel_apv_10_7/tools/ustack.spec	(working copy)
@@ -274,7 +274,6 @@
 install -Dm 0755 -t %{buildroot}/ca/lib \
 	 %{ustack_rootdir}/usr/click/lib/libopenldap/openldap-2.4.30/libraries/liblber/.libs/liblber-2.4.so.2.8.3
 
-
 %files
 %defattr(-,root,root)
 %attr (755,root,root)/ca/bin/*
Index: /branches/rel_apv_10_7/tools/ustackbuildutils.py
===================================================================
--- /branches/rel_apv_10_7/tools/ustackbuildutils.py	(revision 38122)
+++ /branches/rel_apv_10_7/tools/ustackbuildutils.py	(working copy)
@@ -73,6 +73,8 @@
 BUILD_KICKSTART_FILE_ZX = CURRENT_DIR + "/tools/ustackbuildenv_zx.ks"
 DEFAULT_PACK_KICKSTART_FILE_ZX = CURRENT_DIR + "/tools/update/ustacksystem_zx.ks"
 
+KERNEL_VERSION = "3.10.0-327.28.2.17.el7.x86_64"
+
 sys.path.append(CURRENT_DIR + "/tools/update/");
 
 def init_log(log_file):
@@ -295,7 +297,7 @@
                     full_path = os.path.join(dirname, filename)
                     break
         if full_path:
-            dst_file = BUILD_CHROOT_BASE_PATH + "vmlinuz"
+            dst_file = BUILD_CHROOT_BASE_PATH + "vmlinuz-" + KERNEL_VERSION 
             os.rename(full_path, dst_file)
             logging.debug("copy file from %s to %s", full_path, dst_file)
             return True
@@ -311,7 +313,7 @@
                     full_path = os.path.join(dirname, filename)
                     break
         if full_path:
-            dst_file = BUILD_CHROOT_BASE_PATH + "initramfs-array.img"
+            dst_file = BUILD_CHROOT_BASE_PATH + "initramfs-" + KERNEL_VERSION + ".img"
             os.rename(full_path, dst_file)
             logging.debug("copy file from %s to %s", full_path, dst_file)
             return True
@@ -328,7 +330,7 @@
             # make tar.gz package
                 pack_dirs = ['root', 'etc', 'home', 'mnt', 'opt', 'run',
                              'media', 'srv', 'tmp', 'usr', 'ca', 'bin', 'dev',
-                             'lib', 'lib64', 'proc', 'sys', 'sbin', 'vmlinuz', 'initramfs-array.img', 'rpm.txt']
+                             'lib', 'lib64', 'proc', 'sys', 'sbin', 'vmlinuz-{}'.format(KERNEL_VERSION), 'initramfs-{}.img'.format(KERNEL_VERSION), 'rpm.txt']
             else:
                 pack_dirs = ['root', 'etc', 'home', 'mnt', 'opt', 'run',
                              'media', 'srv', 'tmp', 'usr', 'ca', 'bin', 'dev',
Index: /branches/rel_apv_10_7/usr/click/bin/backend/sys_tool.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/bin/backend/sys_tool.c	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/bin/backend/sys_tool.c	(working copy)
@@ -2664,8 +2664,10 @@
 	rtn =  ui_load_atomic_file(full_name, CMD_NORMAL, CMD_NORMAL);
 
 	/* bug 87095 */
-	if((access(full_name, F_OK) != 0) && get_bootup_flag()) {
-		ui_adduser(ARRAY_COMPINFO_DEFAULT_USER, ARRAY_COMPINFO_DEFAULT_PASSWD, NULL);
+	if((access(full_name, F_OK) != 0) && get_bootup_flag() ) {
+		if (str_in_file("cloud_platform=aws", "/boot/loader.conf") != 0) {
+			ui_adduser(ARRAY_COMPINFO_DEFAULT_USER, ARRAY_COMPINFO_DEFAULT_PASSWD, NULL);
+		}
 	}
 
 	ui_load_separation_user();
Index: /branches/rel_apv_10_7/usr/click/bin/backend/users.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/bin/backend/users.c	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/bin/backend/users.c	(working copy)
@@ -1292,7 +1292,6 @@
 	int	pstat;
 	pid_t	pid;
 	struct passwd	*pw;
-
 	(void) signal(SIGCHLD, sig_chi_process);
 	
 	if (!(pid = vfork())) {
@@ -1505,7 +1504,6 @@
 	char		*err_msg = "User name can not be longer than %d characters\n";
 	const char *shell;
 	char home[MAXPATHLEN];
-
 	if (!name || !*name)
 		return (-1);
 
@@ -1684,14 +1682,12 @@
 
 		passwd_forcemode = get_passwd_forcemode();
 		if (passwd_forcemode && !is_encpass) {
-
 			if ((pass == NULL || pass[0] == '\0') && 
 				(group == NULL || group[0] == '\0') &&
 				sess_state.ui_type == USER_TERMINAL) {
 
 				bzero(newpass, sizeof(newpass));
 				bzero(new_group, sizeof(new_group));
-
 				/* check password the user must exit, so add it then delete it */
 				if (is_validuser) {
 					adduser(name, CA_GROUP);
@@ -1710,12 +1706,12 @@
 				group = new_group;
 				if_check = 0;
 			} else {
-				if (passlen < FORCE_MIN_PASS_LEN_UI_ADDUSER) {
+				if ((passlen < FORCE_MIN_PASS_LEN_UI_ADDUSER) && check_cloud_env("aws")) {
 					printf("Invalid password! It must contain at least %d characters.\n", FORCE_MIN_PASS_LEN_UI_ADDUSER);
 					return -3;
 				}
 			}
-		} else if (!pass || 0 == passlen) {
+		} else if ((!pass || 0 == passlen) && check_cloud_env("aws")) {
 			printf("Password cannot be empty.\n");
 			return -4;
 		}
@@ -1748,7 +1744,6 @@
 		printf("Error:The maximum number of user accounts is %d in this system.\n",MAXUSERS);
 		return (-8);
 	}
-
 	if (0 != adduser(name, grpname)) {
 		printf("Failed to add the user account due to an internal error.\n");
 		return -9;
@@ -1817,8 +1812,6 @@
 	
 
 	if (!check_cloud_env("aliyun")) {
-
-		
 		if (pass && 0 == strncmp(pass, ENCRYPTSTR, sizeof(ENCRYPTSTR)-1)) {
 			is_encpass = 1;
 		}
@@ -1830,7 +1823,6 @@
 		}
 		passwd_forcemode = p->passwd_forcemode;
 		if (passwd_forcemode && !is_encpass) {
-
 			idx = user_conf_lookup(name, p);
 			if (idx == -1) {
 				printf("Set password failed.\n");
@@ -2201,8 +2193,13 @@
 			syslog(LOG_ERR, "failed to configure azure account");
 		return (0);
 	}
+	
+	if (!check_cloud_env("aws")) {
+		ui_adduser_internal(ARRAY_COMPINFO_DEFAULT_USER, "", NULL, 0);	
+	}
+	
+	if (!check_cloud_env("aliyun") && !get_bootup_flag()) {	
 
-	if (!check_cloud_env("aliyun") && !get_bootup_flag()) {
 		ui_adduser_internal(ARRAY_COMPINFO_DEFAULT_USER, ARRAY_COMPINFO_DEFAULT_PASSWD, NULL, 0);
 		clear_user_separation_method(ARRAY_COMPINFO_DEFAULT_USER);
 
@@ -2215,7 +2212,7 @@
 	
 		printf("A default user \"%s\" will be added after the execution of this operation.\n"
 		  "Please delete the default user \"%s\" after creating a new user.\n ",ARRAY_COMPINFO_DEFAULT_USER, ARRAY_COMPINFO_DEFAULT_USER);
-
+                
 	}
 	update_soapuser();
 	
@@ -3689,7 +3686,7 @@
 	int len = 0, idx;
 	struct timeval tv;
 	uint64_t expired_time;
-
+	//write_log("users.c 3724 userlogin in 5");
 	bzero(&st, sizeof(st));
 	if (stat(ARRAY_USER_CONF_PATH, &st) == -1) {
 		if (mkdir(ARRAY_USER_CONF_PATH, 0755) != 0) {
@@ -3926,7 +3923,7 @@
 		 * first time login must force change password even if a old build user
 		 */
 		dbgprintf("%s, user %s is a factory default user.\n", __FUNCTION__, name);
-
+		//write_log("users.c 3961 add_parse in 4");
 		p->user[idx].user_status = USER_FIRST_TIME_LOGIN;
 		if (create_userlogin_conf(&p->user[idx], 1) != 0) {
 			dbgprintf("%s, create_userlogin_conf error.\n", __FUNCTION__);
@@ -4017,7 +4014,7 @@
 		first_login = passwd_forcemode ? (is_encpass ? 0 : 1) : 0;
 
 		p->user[idx].user_status = first_login ? USER_FIRST_TIME_LOGIN : USER_INIT;
-
+		//write_log("users.c 4055 add_parse in 4");
 		if (create_userlogin_conf(&p->user[idx], first_login) != 0) {
 			dbgprintf("%s, create_userlogin_conf error.\n", __FUNCTION__);
 			printf("Failed to add the user account due to an internal error.\n");
@@ -4483,7 +4480,6 @@
 
 		break;
 	}
-
 	if (first_login || pwd_expired) {
 		int old_status = p->user[idx].user_status;
 		userlogin_item_t item;
Index: /branches/rel_apv_10_7/usr/click/bin/proxDetector/companyinfo.h
===================================================================
--- /branches/rel_apv_10_7/usr/click/bin/proxDetector/companyinfo.h	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/bin/proxDetector/companyinfo.h	(working copy)
@@ -1,7 +1,7 @@
 #ifndef _COMPANY_INFO_H_
 #define _COMPANY_INFO_H_
 
-#define ARRAY_COMPINFO_COPYRIGHT "Copyright (c) 2000-2022 Array Networks Inc. All rights reserved."
+#define ARRAY_COMPINFO_COPYRIGHT "Copyright (c) 2000-2024 Array Networks Inc. All rights reserved."
 #define ARRAY_CN_COMPINFO_COPYRIGHT "Copyright (c) 2019 Beijing Array Networks Co., Ltd. All rights reserved."
 
 
Index: /branches/rel_apv_10_7/usr/click/etc/grub.cfg.vAPV
===================================================================
--- /branches/rel_apv_10_7/usr/click/etc/grub.cfg.vAPV	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/etc/grub.cfg.vAPV	(working copy)
@@ -88,6 +88,7 @@
 fi
 
 serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
+terminal_input console serial
 terminal_output console serial
 ### END /etc/grub.d/00_header ###
 
@@ -122,15 +123,15 @@
 	load_video
 	set gfxpayload=keep
 	set root='hd0,2'
-	linux16 /vmlinuz root=LABEL=root ro crashkernel=auto arraykicker rhgb quiet LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600n8 iommu=pt intel_iommu=on hugepagesz=$hugepagesz hugepages=$hugepages pcie_acs_override=downstream loglevel=3
-	initrd16 /initramfs-array.img
+	linux16 /vmlinuz-3.10.0-327.28.2.17.el7.x86_64 root=LABEL=root ro crashkernel=auto arraykicker rhgb quiet LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600n8 iommu=pt intel_iommu=on hugepagesz=$hugepagesz hugepages=$hugepages pcie_acs_override=downstream loglevel=3
+	initrd16 /initramfs-3.10.0-327.28.2.17.el7.x86_64.img
 }
 menuentry 'Ustack Slave' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-8f32541a-803b-4f4e-8146-780a490d3139' {
 	load_video
 	set gfxpayload=keep
 	set root='hd0,3'
-	linux16 /vmlinuz root=LABEL=caupgrade ro crashkernel=auto arraykicker rhgb quiet LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600n8 iommu=pt intel_iommu=on hugepagesz=$hugepagesz hugepages=$hugepages pcie_acs_override=downstream loglevel=3
-	initrd16 /initramfs-array.img
+	linux16 /vmlinuz-3.10.0-327.28.2.17.el7.x86_64 root=LABEL=caupgrade ro crashkernel=auto arraykicker rhgb quiet LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600n8 iommu=pt intel_iommu=on hugepagesz=$hugepagesz hugepages=$hugepages pcie_acs_override=downstream loglevel=3
+	initrd16 /initramfs-3.10.0-327.28.2.17.el7.x86_64.img
 }
 
 ### END /etc/grub.d/10_linux ###
Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/config/common_base
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/config/common_base	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/config/common_base	(working copy)
@@ -140,7 +140,7 @@
 #
 # Compile burst-oriented Amazon ENA PMD driver
 #
-CONFIG_RTE_LIBRTE_ENA_PMD=n
+CONFIG_RTE_LIBRTE_ENA_PMD=y
 CONFIG_RTE_LIBRTE_ENA_DEBUG_RX=n
 CONFIG_RTE_LIBRTE_ENA_DEBUG_TX=n
 CONFIG_RTE_LIBRTE_ENA_DEBUG_TX_FREE=n
Index: /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/ena/ena_ethdev.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/ena/ena_ethdev.c	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libintel_dpdk/drivers/net/ena/ena_ethdev.c	(working copy)
@@ -919,7 +919,7 @@
 
 static int ena_queue_restart(struct ena_ring *ring)
 {
-	int rc;
+	int rc, bufs_num;
 
 	ena_assert_msg(ring->configured == 1,
 		       "Trying to restart unconfigured queue\n");
@@ -930,8 +930,9 @@
 	if (ring->type == ENA_RING_TYPE_TX)
 		return 0;
 
-	rc = ena_populate_rx_queue(ring, ring->ring_size);
-	if ((unsigned int)rc != ring->ring_size) {
+	bufs_num = ring->ring_size - 1;
+	rc = ena_populate_rx_queue(ring, bufs_num);
+	if (rc != bufs_num) {
 		PMD_INIT_LOG(ERR, "Failed to populate rx ring !");
 		return (-1);
 	}
@@ -1372,6 +1373,8 @@
 		return -ENOMEM;
 	}
 
+	rte_eth_copy_pci_info(eth_dev, pci_dev);
+
 	adapters_found++;
 	adapter->state = ENA_ADAPTER_STATE_INIT;
 
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 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libip/ip_media.c	(working copy)
@@ -514,9 +514,12 @@
 			}
 		} else if (!strncmp(pinfo->dev_name, "net_mlx5", 8)) {
 			if_info_p->hg_nics++;
-		}else if (!strncmp(pinfo->dev_name, "net_ngbe", 8)) {
+		} else if (!strncmp(pinfo->dev_name, "net_ena", 7)) {
+			if_info_p->tg_nics++;
+			if_info_p->fb_tg_nics++;
+		} else if (!strncmp(pinfo->dev_name, "net_ngbe", 8)) {
 			if_info_p->wx_1g_nic++;
-		}else if (!strncmp(pinfo->dev_name, "net_txgbe", 9)) {
+		} else if (!strncmp(pinfo->dev_name, "net_txgbe", 9)) {
 			if_info_p->tg_nics++;
 			if_info_p->fb_tg_nics++;
 		} else if (!strncmp(pinfo->dev_name, "net_iavf", 8)) {
Index: /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c	(working copy)
@@ -555,6 +555,7 @@
 	    !strcmp("net_i40e_vf", dev_pci->driver->driver.name) ||
 	    !strcmp("net_iavf", dev_pci->driver->driver.name) ||
 	    !strcmp("net_ice_pmd", dev_pci->driver->driver.name) ||
+		!strcmp("net_ena", dev_pci->driver->driver.name) ||
 	    !strcmp("net_mlx5", dev_pci->driver->driver.name)||
 	    !strcmp("net_ngbe", dev_pci->driver->driver.name) ||
 	    !strcmp("net_txgbe", dev_pci->driver->driver.name)) {
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 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c	(working copy)
@@ -355,6 +355,23 @@
 	return nbr_tx_desc;
 }
 
+/*
+** The number of rx descriptors for ENA NIC is 1024;
+** The other NIC is 4096;
+*/
+static int get_rx_desc_nbr(const char *driver_name)
+{	
+	int nbr_rx_desc = NMBUF_RX/2;
+	
+	if (driver_name != NULL) {
+		if (strcmp(driver_name, "net_ena") == 0) {
+			nbr_rx_desc = NMBUF_RX/8;
+		}
+	}
+
+	return nbr_rx_desc;
+}
+
 static int if_dpdk_filter_vlan_start(struct rte_mbuf *m, u_char *ether_vlan_hdr)
 {
 	uint16_t len = ETHER_ADDR_LEN * 2 + ETHER_VLAN_ENCAP_LEN;
@@ -1503,7 +1520,7 @@
 {
 	struct rte_eth_dev *dev = (struct rte_eth_dev *)args;
 	uint8_t port_id = dev->data->port_id;
-	int nbr_tx_desc;
+	int nbr_tx_desc, nbr_rx_desc;
 
 	if (pthread_mutex_trylock(&reset_mutex[port_id])) {
 		printf("Port %d already resetting\n", port_id);
@@ -1608,8 +1625,9 @@
 		goto RETRY;
 	}
 
+	nbr_rx_desc = get_rx_desc_nbr(dev->data->drv_name);
 	for (i = 0; i < nb_rx_queues; ++i) {
-		if (rte_eth_rx_queue_setup(port_id, i, NMBUF_RX/2, domain, eth_rxconf, ctx->mbpool_rx[i]) < 0) {
+		if (rte_eth_rx_queue_setup(port_id, i, nbr_rx_desc, domain, eth_rxconf, ctx->mbpool_rx[i]) < 0) {
 			printf("rx queue setup failed for port %u\n", port_id);
 			goto RETRY;
 		}
@@ -1688,7 +1706,7 @@
 	struct if_dpdk_host_context *ctx;
 	char poolname[256];
 	struct rte_eth_link link;
-	int i, error, nbr_tx_desc;
+	int i, error, nbr_tx_desc, nbr_rx_desc;
 	struct rte_eth_dev_info dev_info;
 	struct rte_eth_rxconf rxconf_temp;
 	struct rte_eth_txconf txconf_temp;
@@ -1835,8 +1853,9 @@
 		goto fail;
 	}
 
+	nbr_rx_desc = get_rx_desc_nbr(dev_info.driver_name);
 	for (i = 0; i < rx_queue_num; ++i) {
-		if (rte_eth_rx_queue_setup(port_id, i, NMBUF_RX/2, domain, eth_rxconf, ctx->mbpool_rx[i]) < 0) {
+		if (rte_eth_rx_queue_setup(port_id, i, nbr_rx_desc, domain, eth_rxconf, ctx->mbpool_rx[i]) < 0) {
 			printf("rx queue setup failed for port %u\n", port_id);
 			goto fail;
 		}
Index: /branches/rel_apv_10_7/usr/click/tools/click_upgrade.pl
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/click_upgrade.pl	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/tools/click_upgrade.pl	(working copy)
@@ -284,6 +284,31 @@
 	}
 }
 
+# For AWS image, copy /etc/fstab.slave to /caupgrade/etc/fstab
+sub check_fstab_aws {
+	my $is_aws = `grep "^cloud_platform=aws\$" /boot/loader.conf`;
+	if ( $is_aws ) {
+		#AWS does not allow password to login
+		if ( -e "/etc/shadow.aws_backup" ) {
+			`mv -f /etc/shadow.aws_backup /etc/shadow`;
+		}
+		#AWS does not allow two /etc/ directory
+		if ( ! -d "/caupgrade/etc" ) {
+			`mkdir -p /caupgrade/etc`;
+		}
+		if ( ! -e "/caupgrade/etc/fstab" && -e "/etc/fstab.slave" ) {
+			`mv -f /etc/fstab.slave /caupgrade/etc/fstab`;
+			`echo "SELINUX=disabled" > /caupgrade/etc/selinux/config`;
+			`echo "SELINUXTYPE=targeted" >> /caupgrade/etc/selinux/config`;
+			`echo "AN" > /caupgrade/etc/hostname`;
+			`/bin/rm -f /caupgrade/etc/systemd/system/multi-user.target.wants/sshd.service`;
+			`/bin/rm -f /caupgrade/etc/systemd/system/multi-user.target.wants/NetworkManager.service`;
+			`/bin/rm -f /caupgrade/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service`;
+			`/bin/rm -f /caupgrade/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service`;
+		}
+	}
+}
+
 my $flag=0;
 my $range = 0;	
 my $line;
@@ -356,6 +381,7 @@
 
 # Update teecmd in case system hang when displaying information during upgrade
 update_teecmd();
+check_fstab_aws();
 `echo "System successfully patched." | $teecmd`;
 
 #set to the other boot pation
Index: /branches/rel_apv_10_7/usr/click/tools/sysv_click
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/sysv_click	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/tools/sysv_click	(working copy)
@@ -143,6 +143,11 @@
 		rmmod PCIE_CCP903T
 	fi
 
+	# For AWS
+	if [ ! -z "${is_aws}" ]; then
+		modprobe nvme
+	fi
+
 	# install kmod sanwei
 	# the vendor&device id of sanwei card is 10ee&7011
 
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py	(working copy)
@@ -9,7 +9,8 @@
 import ctypes
 import collections
 from django.utils.datastructures import SortedDict
-
+import string
+import random
 
 _thread_locals = threading.local()
 import json
@@ -1259,6 +1260,18 @@
 
 def get_sess_cookie_name():
     serial_num = None
+    check_aws = False
+    file_content = "";
+    with open('/boot/loader.conf') as f:
+        file_content = f.readlines()
+    if file_content:
+        for lines in file_content:
+            if lines.startswith("cloud_platform=aws"):
+                check_aws = True
+                break
+    if check_aws:
+        random_txt = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(30));
+        return "hive_sess_%s"%random_txt
     res = cmd_direct("show version")
     for each in res.split("\n"):
         item = each.split(" : ")
@@ -1362,4 +1375,4 @@
     if len(matched_illegal_character_list):
         return ','.join(matched_illegal_character_list)
     else:
-        return
\ No newline at end of file
+        return
