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,10 @@
 DEFAULT_LICENSE=$5
 MACHINE_ARCH=`uname -m`
 
+if [ "x$IMAGE_TARGET" = "xaws" ]; then
+KERNEL_VERSION=3.10.0-327.28.2.21.el7.x86_64
+fi
+
 # create base image
 create_base_image() {
     if [ ! -f $BASEIMAGE_DIR/$BASEIMAGE_NAME.$IMAGE_TYPE ]
@@ -162,7 +166,11 @@
     /bin/cp -rfpd ./img/* /mnt/
     /bin/cp -f /mnt/ca/ssl/bin/root-cas.crt /mnt/ca/ssl/vhost/
     /bin/cp -f /mnt/ca/etc/loader.conf ./files/
-    /bin/cp -f /mnt/ca/etc/grub.cfg.vAPV ./files/grub.cfg
+    if [ "x$IMAGE_TARGET" = "xaws" ]; then
+        /bin/cp -f /mnt/ca/etc/grub.cfg.AWS ./files/grub.cfg
+    else
+        /bin/cp -f /mnt/ca/etc/grub.cfg.vAPV ./files/grub.cfg
+    fi
     if [ "x$IMAGE_TARGET" = "xhuawei" ]; then
         echo cloud_platform=${IMAGE_TARGET} >> ./files/loader.conf
         echo dhcp_enabled_all=yes >> ./files/loader.conf
@@ -194,14 +202,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 ./files/vmlinuz-${KERNEL_VERSION}
+        /bin/cp -f /mnt/initramfs-array.img ./files/initramfs-${KERNEL_VERSION}.img
+        /bin/cp -f /mnt/vmlinuz /mnt/vmlinuz-${KERNEL_VERSION}
+        /bin/cp -f /mnt/initramfs-array.img /mnt/initramfs-${KERNEL_VERSION}.img
+        /bin/cp -f /mnt/etc/shadow /mnt/etc/shadow.aws_backup
+        sed -i '/^ansync/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 +239,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/ustackbuildenv.ks
===================================================================
--- /branches/rel_apv_10_7/tools/ustackbuildenv.ks	(revision 38122)
+++ /branches/rel_apv_10_7/tools/ustackbuildenv.ks	(working copy)
@@ -26,8 +26,8 @@
 
 bash-4.2.46-19.el7.x86_64
 sparsehash-devel-2.0.2-4.el7.x86_64
-kernel-3.10.0-327.28.2.17.el7.x86_64
-kernel-devel-3.10.0-327.28.2.17.el7.x86_64
+kernel-3.10.0-327.28.2.21.el7.x86_64
+kernel-devel-3.10.0-327.28.2.21.el7.x86_64
 syslinux-4.05-12.el7.x86_64
 passwd-0.79-4.el7.x86_64
 policycoreutils-2.2.5-20.el7.x86_64
@@ -381,7 +381,7 @@
 python-pycurl-7.19.0-17.el7.x86_64
 fipscheck-lib-1.4.1-5.el7.x86_64
 krb5-devel-1.13.2-10.el7.x86_64
-kernel-headers-3.10.0-327.28.2.17.el7.x86_64
+kernel-headers-3.10.0-327.28.2.21.el7.x86_64
 libicu-50.1.2-15.el7.x86_64
 fontpackages-filesystem-1.44-8.el7.noarch
 msgpack-0.5.8-1.el7.x86_64
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,12 @@
 	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);
+		}else{
+                        ui_adduser(ARRAY_COMPINFO_DEFAULT_USER, "", 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,8 +1292,8 @@
 	int	pstat;
 	pid_t	pid;
 	struct passwd	*pw;
-
-	(void) signal(SIGCHLD, sig_chi_process);
+	
+        (void) signal(SIGCHLD, sig_chi_process);
 	
 	if (!(pid = vfork())) {
 		endpwent();
@@ -1505,7 +1505,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 +1683,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 +1707,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 +1745,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 +1813,6 @@
 	
 
 	if (!check_cloud_env("aliyun")) {
-
-		
 		if (pass && 0 == strncmp(pass, ENCRYPTSTR, sizeof(ENCRYPTSTR)-1)) {
 			is_encpass = 1;
 		}
@@ -1830,7 +1824,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 +2194,9 @@
 			syslog(LOG_ERR, "failed to configure azure account");
 		return (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 +2209,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,8 +3683,8 @@
 	int len = 0, idx;
 	struct timeval tv;
 	uint64_t expired_time;
-
-	bzero(&st, sizeof(st));
+	
+        bzero(&st, sizeof(st));
 	if (stat(ARRAY_USER_CONF_PATH, &st) == -1) {
 		if (mkdir(ARRAY_USER_CONF_PATH, 0755) != 0) {
 			dbgprintf("Can't make or access %s directory.\n", ARRAY_USER_CONF_PATH);
@@ -3926,8 +3920,8 @@
 		 * 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);
-
-		p->user[idx].user_status = USER_FIRST_TIME_LOGIN;
+		
+                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__);
 			printf("Failed to add the user account due to an internal error.\n");
@@ -4017,8 +4011,8 @@
 		first_login = passwd_forcemode ? (is_encpass ? 0 : 1) : 0;
 
 		p->user[idx].user_status = first_login ? USER_FIRST_TIME_LOGIN : USER_INIT;
-
-		if (create_userlogin_conf(&p->user[idx], first_login) != 0) {
+		
+                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");
 			return -1;
@@ -4483,7 +4477,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/Makefile
===================================================================
--- /branches/rel_apv_10_7/usr/click/etc/Makefile	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/etc/Makefile	(working copy)
@@ -38,7 +38,8 @@
 		grub.cfg.arm.kylin	\
 		grub.cfg.arm.vapv	\
 		grub.cfg.zx	\
-		grub.cfg.vAPV	\
+		grub.cfg.AWS    \
+                grub.cfg.vAPV	\
 		grub.cfg.FT2004.arm	\
 		grub.cfg.arm.FT2004.kylin \
 		avx_vtch.service\
Index: /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/lib/libfeactl/feactl.c	(working copy)
@@ -3991,17 +3991,42 @@
 	return 0;
 }
 
+static int 
+check_aws()
+{
+    int ret = 1;
+    FILE *fp;
+    char buff[1024 + 1] = "";
+
+    fp = fopen("/boot/loader.conf", "r");
+    if (!fp)
+        return -1;
+
+    while (fgets(buff, sizeof(buff), fp) != NULL) {
+        if (strstr(buff, "cloud_platform=aws")) {
+            ret = 0;
+            break;
+        }
+    }
+
+    fclose(fp);
+
+    return ret;
+}
+
 int
 check_cloud_env(const char *cloud)
 {
+    if (!cloud || cloud[0] == '\0')
+        return 0;
 
-        if (!cloud || cloud[0] == '\0')
-                return 0;
+    if (strcmp(cloud, "aws") == 0)
+        return check_aws();
 
-        if (strcmp(cloud, "azure") == 0)
-                return check_azure();
+    if (strcmp(cloud, "azure") == 0)
+        return check_azure();
 
-        return 0;
+    return 0;
 }
 
 int
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;
@@ -305,8 +330,10 @@
 	mount_partition();
 }
 
-#fallback or Abnormal restart switching
-`/usr/bin/chattr -i /caupgrade/ca/etc/sshd_config`;
+if( -e "/caupgrade/ca/etc/sshd_config" ){
+    #fallback or Abnormal restart switching
+    `/usr/bin/chattr -i /caupgrade/ca/etc/sshd_config`;
+}
 
 `$mv $package /caupgrade`;
 $package="/caupgrade/click.tgz";
@@ -314,16 +341,18 @@
 	# Update teecmd in case system hang when displaying information during upgrade
 	update_teecmd();
 	`$echo "Applying update" | $teecmd 2>/dev/null`;
-	# extract the pre_upgrade_hooks.sh first, and run it
-	`/usr/bin/tar --xattrs-include=* -zxf $package -C /tmp/ ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
-	`/tmp/ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
-	my $ret=$?>>8;
-	if ($ret ne 0) {
-		if ("$dpart" eq  "0") {
-			umount_partition();
-		}
-		die " can not excute pre_upgrade\n";
-	}
+	if( -e "/caupgrade/etc/fstab" ){
+            # extract the pre_upgrade_hooks.sh first, and run it
+	    `/usr/bin/tar --xattrs-include=* -zxf $package -C /tmp/ ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
+	    `/tmp/ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
+	    my $ret=$?>>8;
+	    if ($ret ne 0) {
+		    if ("$dpart" eq  "0") {
+			    umount_partition();
+		    }
+		    die " can not excute pre_upgrade\n";
+	    }
+        }
 	# do the real upgrade work
 	`/usr/bin/tar --xattrs-include=* -zxf $package -C /caupgrade/ 2>&1 1>/dev/null`;
 	`/caupgrade/ca/bin/upgrade_hooks.sh 2>&1 1>/dev/null`;
@@ -331,16 +360,18 @@
 } else {
 	# move "sysv_init stop"  before reboot, since stop ustack will lost connection
 	`$echo "Applying update" | $teecmd 2>/dev/null`;
-	# extract the pre_upgrade_hooks.sh first, and run it
-	`/usr/bin/tar --xattrs-include=* -zxf $package -C /tmp/ ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
-	`/tmp/ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
-	my $ret=$?>>8;
-	if ($ret ne 0) {
-		if ("$dpart" eq  "0") {
-			umount_partition();
-		}
-		die " can not excute pre_upgrade\n";
-	}
+	if( -e "/caupgrade/etc/fstab" ){
+            # extract the pre_upgrade_hooks.sh first, and run it
+	    `/usr/bin/tar --xattrs-include=* -zxf $package -C /tmp/ ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
+	    `/tmp/ca/bin/pre_upgrade_hooks.sh 2>&1 1>/dev/null`;
+	    my $ret=$?>>8;
+	    if ($ret ne 0) {
+		    if ("$dpart" eq  "0") {
+			    umount_partition();
+		    }
+		    die " can not excute pre_upgrade\n";
+	    }
+        }
 	# do the real upgrade work
 	`/usr/bin/tar --xattrs-include=* -zxf $package -C /caupgrade/ 2>&1 1>/dev/null`;
 	`/caupgrade/ca/bin/upgrade_hooks.sh 2>&1 1>/dev/null`;
@@ -356,6 +387,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/tools/upgrade_hooks.sh
===================================================================
--- /branches/rel_apv_10_7/usr/click/tools/upgrade_hooks.sh	(revision 38122)
+++ /branches/rel_apv_10_7/usr/click/tools/upgrade_hooks.sh	(working copy)
@@ -203,15 +203,20 @@
 else
 	var_mount_dev=`mount |grep "/var" |grep sda3 |awk '{print $1}'`
 	arrayos_release=`cat /caupgrade/etc/arrayos-release`
-	if [ $var_mount_dev == "/dev/sda3" ]; then
+	cloud_platform=`grep "^cloud_platform" /boot/loader.conf`
+        if [ $var_mount_dev == "/dev/sda3" ]; then
 		if [ "$arrayos_release" == "APV-ZX 10.0" ]; then
 			install -m 0644 /caupgrade/ca/etc/grub.cfg.zx /boot/grub2/grub.cfg
 		else 
 			install -m 0644 /caupgrade/ca/etc/grub.cfg.hw /boot/grub2/grub.cfg
 		fi
 	else
-		install -m 0644 /caupgrade/ca/etc/grub.cfg.vAPV /boot/grub2/grub.cfg
-	fi
+	        if [ $cloud_platform == "cloud_platform=aws" ]; then
+                        install -m 0644 /caupgrade/ca/etc/grub.cfg.AWS /boot/grub2/grub.cfg
+                else
+                        install -m 0644 /caupgrade/ca/etc/grub.cfg.vAPV /boot/grub2/grub.cfg
+                fi
+        fi
 fi
 
 if [ "$arrayos_release" == "APV-ZX 10.0" ]; then
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
