Index: /branches/rel_apv_10_4_2_107_cloud/tools/image_creator.sh
===================================================================
--- /branches/rel_apv_10_4_2_107_cloud/tools/image_creator.sh	(revision 37921)
+++ /branches/rel_apv_10_4_2_107_cloud/tools/image_creator.sh	(working copy)
@@ -185,6 +185,10 @@
         echo cloud_platform=${IMAGE_TARGET} >> ./files/loader.conf
         echo dhcp_enabled_all=yes >> ./files/loader.conf
         sed -i "s/nullconsole/comconsole/g" ./files/loader.conf
+    elif [ "x$IMAGE_TARGET" = "xgcp" ]; then
+        echo cloud_platform=${IMAGE_TARGET} >> ./files/loader.conf
+        echo dhcp_enabled_all=yes >> ./files/loader.conf
+        sed -i "s/nullconsole/comconsole/g" ./files/loader.conf
     fi
     if [ "x$DEFAULT_LICENSE" = "xyes" ]; then
         echo vapv_default_license=yes >> ./files/loader.conf
Index: /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/drivers/net/virtio/virtio_ethdev.c
===================================================================
--- /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/drivers/net/virtio/virtio_ethdev.c	(revision 37921)
+++ /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/drivers/net/virtio/virtio_ethdev.c	(working copy)
@@ -2024,6 +2024,10 @@
 	if ((host_features & tso_mask) == tso_mask)
 		dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO;
 
+	if (host_features & (1ULL << VIRTIO_NET_F_CTRL_VLAN)) {
+		dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_VLAN_FILTER;
+	}
+
 	dev_info->tx_offload_capa = 0;
 	if (hw->guest_features & (1ULL << VIRTIO_NET_F_CSUM)) {
 		dev_info->tx_offload_capa |=
Index: /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.c
===================================================================
--- /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.c	(revision 37921)
+++ /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libintel_dpdk/lib/librte_ether/rte_ethdev.c	(working copy)
@@ -3441,6 +3441,8 @@
 		return 16;
 	} else if (strcmp(driver_name, "net_e1000_igb") == 0) {
 		return 4;
+	} else if (strcmp(driver_name, "net_virtio") == 0) {
+		return dev_info.max_rx_queues;
 	} else {
 		return 1;
 	}
Index: /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c
===================================================================
--- /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c	(revision 37921)
+++ /branches/rel_apv_10_4_2_107_cloud/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_if_dpdk_host.c	(working copy)
@@ -1792,6 +1792,13 @@
 		_tmp_port_conf.rxmode.jumbo_frame = 1;
 	}
 
+	/* GCP cloud net_virtio NIC doesn't support hw vlan filter */
+	if (dev_info.driver_name != NULL && strcmp(dev_info.driver_name, "net_virtio") == 0) {
+		if(!(dev_info.rx_offload_capa & DEV_RX_OFFLOAD_VLAN_FILTER)) {
+			_tmp_port_conf.rxmode.hw_vlan_filter = 0;
+		}
+	}
+
 	if (rte_eth_dev_configure(port_id, rx_queue_num, tx_queue_num, &_tmp_port_conf) < 0) {
 		printf("configure device %u failed\n", port_id);
 		goto fail;
