diff --git a/exports/arch/nss_ipq807x.h b/exports/arch/nss_ipq807x.h
index 05122bc..1f80f98 100644
--- a/exports/arch/nss_ipq807x.h
+++ b/exports/arch/nss_ipq807x.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -28,6 +28,7 @@
 
 #define NSS_MAX_NUM_PRI 4		/**< Maximum number of priority queues in NSS for the IPQ807x chipsets. */
 #define NSS_HOST_CORES 4		/**< Number of host cores for the IPQ807x chipsets. */
+#define NSS_PPE_SUPPORTED		/**< PPE supported flag for the IPQ807x chipsets. */
 
 /**
  * @}
diff --git a/exports/arch/nss_ipq807x_64.h b/exports/arch/nss_ipq807x_64.h
index ca6d07f..ae32665 100644
--- a/exports/arch/nss_ipq807x_64.h
+++ b/exports/arch/nss_ipq807x_64.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -28,6 +28,7 @@
 
 #define NSS_MAX_NUM_PRI 4		/**< Maximum number of priority queues in NSS for the IPQ807x 64-bit chipsets. */
 #define NSS_HOST_CORES 4		/**< Number of host cores for the IPQ807x 64-bit chipsets. */
+#define NSS_PPE_SUPPORTED		/**< PPE supported flag for the IPQ807x 64-bit chipsets. */
 
 /**
  * @}
diff --git a/exports/nss_crypto_cmn.h b/exports/nss_crypto_cmn.h
index d8741c5..95e21e7 100644
--- a/exports/nss_crypto_cmn.h
+++ b/exports/nss_crypto_cmn.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -31,13 +31,16 @@
  */
 #define NSS_CRYPTO_CMN_CTX_SPARE 4 /**< Context spare words size. */
 #define NSS_CRYPTO_CMN_VER_WORDS 4 /**< Firmware version words size.*/
+#define NSS_CRYPTO_CIPHER_KEYLEN_MAX 32 /**< Maximum cipher keysize. */
+#define NSS_CRYPTO_AUTH_KEYLEN_MAX 64 /**< Maximum authorization keysize. */
+#define NSS_CRYPTO_NONCE_SIZE_MAX 4 /**< Maximum authorization keysize. */
 
 /**
  * nss_crypto_cmn_algo
  *	List of crypto algorithms supported.
  */
 enum nss_crypto_cmn_algo {
-	NSS_CRYPTO_CMN_ALGO_NULL,			/**< NULL tranform */
+	NSS_CRYPTO_CMN_ALGO_NULL,			/**< NULL transform. */
 	NSS_CRYPTO_CMN_ALGO_3DES_CBC,			/**< Asynchronous block cipher. */
 	NSS_CRYPTO_CMN_ALGO_AES128_CBC,			/**< Asynchronous block cipher. */
 	NSS_CRYPTO_CMN_ALGO_AES192_CBC,			/**< Asynchronous block cipher. */
@@ -48,6 +51,9 @@
 	NSS_CRYPTO_CMN_ALGO_AES128_ECB,			/**< Asynchronous block cipher. */
 	NSS_CRYPTO_CMN_ALGO_AES192_ECB,			/**< Asynchronous block cipher. */
 	NSS_CRYPTO_CMN_ALGO_AES256_ECB,			/**< Asynchronous block cipher. */
+	NSS_CRYPTO_CMN_ALGO_AES128_GCM,			/**< Asynchronous block cipher. */
+	NSS_CRYPTO_CMN_ALGO_AES192_GCM,			/**< Asynchronous block cipher. */
+	NSS_CRYPTO_CMN_ALGO_AES256_GCM,			/**< Asynchronous block cipher. */
 	NSS_CRYPTO_CMN_ALGO_MD5_HASH,			/**< Asynchronous digest. */
 	NSS_CRYPTO_CMN_ALGO_SHA160_HASH,		/**< Asynchronous digest. */
 	NSS_CRYPTO_CMN_ALGO_SHA224_HASH,		/**< Asynchronous digest. */
@@ -220,13 +226,13 @@
  *	Context message for setting up a crypto context in firmware.
  */
 struct nss_crypto_cmn_ctx {
-	uint32_t words;					/**< Number of valid context words. */
-	uint32_t addr;					/**< Address to configuration. */
 	uint32_t spare[NSS_CRYPTO_CMN_CTX_SPARE];	/**< Context spare words. */
-
 	uint16_t index;					/**< Crypto index. */
 	uint16_t sec_offset;				/**< Secure offset for copying keys. */
 
+	uint8_t cipher_key[NSS_CRYPTO_CIPHER_KEYLEN_MAX];	/**< Array containing cipher keys. */
+	uint8_t auth_key[NSS_CRYPTO_AUTH_KEYLEN_MAX];	/**< Array containing authorization keys. */
+	uint8_t nonce[NSS_CRYPTO_NONCE_SIZE_MAX];		/**< Nonce value. */
 	enum nss_crypto_cmn_algo algo;			/**< Crypto algorithm. */
 	enum nss_crypto_cmn_ctx_flags flags;		/**< Context specific flags. */
 };
diff --git a/exports/nss_edma.h b/exports/nss_edma.h
index 744c59b..4e2fc3e 100644
--- a/exports/nss_edma.h
+++ b/exports/nss_edma.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -139,7 +139,7 @@
 
 /**
  * nss_edma_misc_err_stats
- * 	EDMA error statistics.
+ *	EDMA error statistics.
  */
 struct nss_edma_misc_err_stats {
 	uint32_t axi_rd_err;            /**< EDMA AXI read error. */
@@ -152,6 +152,7 @@
 	uint32_t pkt_len_le33_err;      /**< EDMA packet length smaller than 33b error. */
 	uint32_t data_len_err;          /**< EDMA data length error. */
 	uint32_t alloc_fail_cnt;	/**< EDMA number of times the allocation of pbuf for statistics failed. */
+	uint32_t qos_inval_dst_drops;	/**< EDMA number of QoS packet dropped due to invalid destination. */
 };
 
 /**
diff --git a/exports/nss_ipsec.h b/exports/nss_ipsec.h
index a5adfd7..ed62142 100644
--- a/exports/nss_ipsec.h
+++ b/exports/nss_ipsec.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -61,6 +61,7 @@
 	NSS_IPSEC_MSG_TYPE_SYNC_SA_STATS = 4,
 	NSS_IPSEC_MSG_TYPE_SYNC_FLOW_STATS = 5,
 	NSS_IPSEC_MSG_TYPE_SYNC_NODE_STATS = 6,
+	NSS_IPSEC_MSG_TYPE_CONFIGURE_NODE = 7,
 	NSS_IPSEC_MSG_TYPE_MAX
 };
 
@@ -189,6 +190,15 @@
 };
 
 /**
+ * nss_ipsec_configure_node
+ *	Push message for setting IPsec inline mode and initializing DMA rings.
+ */
+struct nss_ipsec_configure_node {
+	bool dma_redirect;	/**< Program redirect DMA ring. */
+	bool dma_lookaside;	/**< Program lookaside DMA ring. */
+};
+
+/**
  * nss_ipsec_sa_stats
  *	Packet statistics per security association.
  */
@@ -230,6 +240,8 @@
 	uint32_t linearized;		/**< Packet is linear. */
 	uint32_t exceptioned;		/**< Packets exception from the NSS. */
 	uint32_t fail_enqueue;		/**< Packets failed to enqueue. */
+	uint32_t redir_rx;		/**< Packets received in redirect ring. */
+	uint32_t fail_redir;		/**< Packets dropped in redirect ring. */
 };
 
 /**
@@ -260,6 +272,8 @@
 	union {
 		struct nss_ipsec_rule rule;
 				/**< IPsec rule message. */
+		struct nss_ipsec_configure_node node;
+				/**< IPsec node message. */
 		union nss_ipsec_stats stats;
 				/**< Retrieve statistics for the tunnel. */
 	} msg;			/**< Message payload. */
@@ -307,6 +321,30 @@
 extern nss_tx_status_t nss_ipsec_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_ipsec_msg *msg);
 
 /**
+ * nss_ipsec_tx_msg_sync
+ *	Sends IPsec messages synchronously.
+ *
+ * @datatypes
+ * nss_ctx_instance \n
+ * nss_ipsec_msg_type \n
+ * nss_ipsec_msg \n
+ * nss_ipsec_error_type
+ *
+ * @param[in]     nss_ctx  Pointer to the NSS context.
+ * @param[in]     if_num   Configuration interface number.
+ * @param[in]     type     Type of the message.
+ * @param[in]     len      Size of the payload.
+ * @param[in]     nim      Pointer to the message data.
+ * @param[in,out] resp     Response for the configuration.
+ *
+ * @return
+ * Status of the Tx operation.
+ */
+extern nss_tx_status_t nss_ipsec_tx_msg_sync(struct nss_ctx_instance *nss_ctx, uint32_t if_num,
+						enum nss_ipsec_msg_type type, uint16_t len,
+						struct nss_ipsec_msg *nim, enum nss_ipsec_error_type *resp);
+
+/**
  * nss_ipsec_tx_buf
  *	Sends a plain text packet to NSS for IPsec encapsulation or decapsulation.
  *
@@ -455,6 +493,25 @@
 extern int32_t nss_ipsec_get_data_interface(void);
 
 /**
+ * nss_ipsec_ppe_port_config
+ *	Configure Packet Processing Engine IPsec port.
+ *
+ * @datatypes
+ * nss_ctx_instance \n
+ * net_device
+ *
+ * @param[in] ctx     Pointer to the context of the HLOS driver.
+ * @param[in] netdev  Pointer to the associated network device.
+ * @param[in] if_num  Data interface number.
+ * @param[in] vsi_num Virtual switch instance number.
+ *
+ * @return
+ * True if successful, else false.
+ */
+extern bool nss_ipsec_ppe_port_config(struct nss_ctx_instance *ctx, struct net_device *netdev,
+				uint32_t if_num, uint32_t vsi_num);
+
+/**
  * @}
  */
 
diff --git a/exports/nss_ppe.h b/exports/nss_ppe.h
index f3ac045..8bb6274 100644
--- a/exports/nss_ppe.h
+++ b/exports/nss_ppe.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -31,15 +31,24 @@
  * NSS PORT defines
  */
 #define NSS_PPE_NUM_PHY_PORTS_MAX		8
-		/**< Maximum number of PPE phsyical ports. */
+		/**< Maximum number of PPE physical ports. */
+#define NSS_PPE_PORT_IPSEC			7
+		/**< Port number of PPE inline IPsec port. */
 
 /**
- * nss_ppe_metadata_types
+ * nss_ppe_message_types
  *	Message types for Packet Processing Engine (PPE) requests and responses.
+ *
+ * Note: PPE messages are added as short term approach, expect all
+ * messages below to be deprecated for more integrated approach.
  */
-enum nss_ppe_metadata_types {
+enum nss_ppe_message_types {
 	NSS_PPE_MSG_SYNC_STATS,
 	NSS_PPE_MSG_L2_EXCEPTION,
+	NSS_PPE_MSG_IPSEC_PORT_CONFIG,
+	NSS_PPE_MSG_IPSEC_PORT_MTU_CHANGE,
+	NSS_PPE_MSG_IPSEC_ADD_INTF,
+	NSS_PPE_MSG_IPSEC_DEL_INTF,
 	NSS_PPE_MSG_MAX,
 };
 
@@ -50,6 +59,13 @@
 enum nss_ppe_msg_error_type {
 	PPE_MSG_ERROR_OK,
 	PPE_MSG_ERROR_UNKNOWN_TYPE,
+	PPE_MSG_ERROR_PORT_CREATION_FAIL,
+	PPE_MSG_ERROR_INVALID_PORT_VSI,
+	PPE_MSG_ERROR_INVALID_L3_IF,
+	PPE_MSG_ERROR_IPSEC_PORT_CONFIG,
+	PPE_MSG_ERROR_IPSEC_INTF_TABLE_FULL,
+	PPE_MSG_ERROR_IPSEC_INTF_ATTACHED,
+	PPE_MSG_ERROR_IPSEC_INTF_UNATTACHED
 };
 
 /**
@@ -104,12 +120,12 @@
 	uint32_t nss_ppe_fail_ppe_unresponsive;
 			/**< Request failed because the PPE is not responding. */
 	uint32_t nss_ppe_ce_opaque_invalid;
-			/**< Request failed because of invalid opaque in connection entry */
+			/**< Request failed because of invalid opaque in connection entry. */
 	uint32_t nss_ppe_fail_fqg_full;
 			/**< Request failed because the flow QoS group is full. */
 };
 
-/*
+/**
  * nss_ppe_l2_exception_msg
  *	Message structure for L2 exception.
  */
@@ -118,6 +134,41 @@
 };
 
 /**
+ * nss_ppe_ipsec_port_config_msg
+ *	Message structure for inline IPsec port configuration.
+ */
+struct nss_ppe_ipsec_port_config_msg {
+	uint32_t nss_ifnum;		/**< NSS interface number corresponding to inline IPsec port. */
+	uint16_t mtu;			/**< MTU value for inline IPsec port. */
+	uint8_t vsi_num;		/**< Default port VSI for inline IPsec port. */
+};
+
+/**
+ * nss_ppe_ipsec_port_mtu_msg
+ *	Message structure for inline IPsec port MTU change.
+ */
+struct nss_ppe_ipsec_port_mtu_msg {
+	uint32_t nss_ifnum;		/**< NSS interface number corresponding to inline IPsec port. */
+	uint16_t mtu;			/**< MTU value for inline IPsec port. */
+};
+
+/**
+ * nss_ppe_ipsec_add_intf_msg
+ *	Message structure for adding dynamic IPsec/DTLS interface to inline IPsec port.
+ */
+struct nss_ppe_ipsec_add_intf_msg {
+	uint32_t nss_ifnum;	/**< Dynamic IPsec/DTLS interface number. */
+};
+
+/**
+ * nss_ppe_ipsec_del_intf_msg
+ *	Message structure for deleting dynamic IPsec/DTLS interface to inline IPsec port.
+ */
+struct nss_ppe_ipsec_del_intf_msg {
+	uint32_t nss_ifnum;	/**< Dynamic IPsec/DTLS interface number. */
+};
+
+/**
  * nss_ppe_msg
  *	Data for sending and receiving PPE host-to-NSS messages.
  */
@@ -132,6 +183,14 @@
 				/**< Synchronization statistics. */
 		struct nss_ppe_l2_exception_msg l2_exception;
 				/**< L2 exception message. */
+		struct nss_ppe_ipsec_port_config_msg ipsec_config;
+				/**< PPE inline IPsec port configuration message. */
+		struct nss_ppe_ipsec_port_mtu_msg ipsec_mtu;
+				/**< Inline IPsec port MTU change message. */
+		struct nss_ppe_ipsec_add_intf_msg ipsec_addif;
+				/**< Inline IPsec NSS interface attach message. */
+		struct nss_ppe_ipsec_del_intf_msg ipsec_delif;
+				/**< Inline IPsec NSS interface detach message. */
 	} msg;			/**< Message payload. */
 };
 
@@ -228,6 +287,53 @@
 nss_tx_status_t nss_ppe_tx_l2_exception_msg(uint32_t if_num, bool exception_enable);
 
 /**
+ * nss_ppe_tx_ipsec_config_msg
+ *      Sends the PPE a message to configure inline IPsec port.
+ *
+ * @param[in] if_num        Static IPsec interface number.
+ * @param[in] vsi_num       Default VSI number associated with inline IPsec port.
+ * @param[in] mtu           Default MTU of static inline IPsec port.
+ *
+ * @return
+ * Status of the Tx operation.
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_config_msg(uint32_t nss_ifnum, uint32_t vsi_num, uint16_t mtu);
+
+/**
+ * nss_ppe_tx_ipsec_mtu_msg
+ *      Sends the PPE a message to configure MTU value on IPsec port.
+ *
+ * @param[in] nss_ifnum  Static IPsec interface number.
+ * @param[in] mtu        MTU of static IPsec interface.
+ *
+ * @return
+ * Status of the Tx operation.
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_mtu_msg(uint32_t nss_ifnum, uint16_t mtu);
+
+/**
+ * nss_ppe_tx_ipsec_add_intf_msg
+ *      Sends the PPE a message to attach a dynamic interface number to IPsec port.
+ *
+ * @param[in] if_num  Dynamic IPsec/DTLS interface number.
+ *
+ * @return
+ * Status of the Tx operation.
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_add_intf_msg(uint32_t nss_ifnum);
+
+/**
+ * nss_ppe_tx_ipsec_del_intf_msg
+ *      Sends the PPE a message to detach a dynamic interface number to IPsec port.
+ *
+ * @param[in] if_num  Dynamic IPsec/DTLS interface number.
+ *
+ * @return
+ * Status of the Tx operation.
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_del_intf_msg(uint32_t nss_ifnum);
+
+/**
  * nss_ppe_stats_conn_get
  *	Gets PPE connection statistics.
  *
diff --git a/exports/nss_wifi.h b/exports/nss_wifi.h
index 7925c10..6669b1e 100644
--- a/exports/nss_wifi.h
+++ b/exports/nss_wifi.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -134,6 +134,7 @@
 	NSS_WIFI_RX_EXT_INV_PEER_TYPE,
 	NSS_WIFI_RX_EXT_PKTLOG_TYPE,
 	NSS_WIFI_RX_STATS_V2_EXCEPTION,
+	NSS_WIFI_RX_MGMT_NULL_TYPE,
 	NSS_WIFI_RX_EXT_MAX_TYPE,
 };
 
diff --git a/exports/nss_wifi_vdev.h b/exports/nss_wifi_vdev.h
index a424842..ea91d6e 100644
--- a/exports/nss_wifi_vdev.h
+++ b/exports/nss_wifi_vdev.h
@@ -591,6 +591,7 @@
 	uint8_t reserved;	/**< Reserve bytes for alignment. */
 	enum wifi_vdev_ext_wds_info_type wds_type;
 				/**< WDS message type. */
+	uint8_t addr4_valid;	/**< 802.11 4th address valid flag. */
 };
 
 /**
diff --git a/exports/nss_wifili_if.h b/exports/nss_wifili_if.h
index 1c136d6..a7ccf36 100644
--- a/exports/nss_wifili_if.h
+++ b/exports/nss_wifili_if.h
@@ -132,6 +132,7 @@
 	NSS_WIFILI_RADIO_CMD_MSG,
 	NSS_WIFILI_LINK_DESC_INFO_MSG,
 	NSS_WIFILI_PEER_SECURITY_TYPE_MSG,
+	NSS_WIFILI_PEER_NAWDS_ENABLE_MSG,
 	NSS_WIFILI_MAX_MSG
 };
 
@@ -330,6 +331,10 @@
 			/**< Number of memory address. */
 	uint32_t ext_desc_page_num;
 			/**< Extended descriptor page number. */
+	uint32_t num_tx_desc_2;
+			/**< Count of the software descriptors for 2nd radio. */
+	uint32_t num_tx_desc_ext_2;
+			/**< Count of software extented descriptors for 2nd radio. */
 };
 
 /**
@@ -675,6 +680,10 @@
 	uint32_t ofdma; 		/**< Total number of OFDMA packets. */
 	uint32_t non_amsdu_cnt; 	/**< Number of MSDUs with no MSDU level aggregation. */
 	uint32_t amsdu_cnt;		/**< Number of MSDUs part of AMSDU. */
+	uint32_t tx_mcast_cnt;          /**< Total number of multicast packets sent. */
+	uint32_t tx_mcast_bytes;        /**< Total number of multicast bytes sent. */
+	uint32_t tx_ucast_cnt;          /**< Total number of unicast packets sent. */
+	uint32_t tx_ucast_bytes;        /**< Total number of unicast bytes sent. */
 	struct nss_wifili_tx_dropped dropped;	/**< Tx peer dropped. */
 };
 
@@ -803,6 +812,15 @@
 };
 
 /**
+ * nss_wifili_peer_nawds_enable_msg
+ *	Wifili NAWDS enable for this peer.
+ */
+struct nss_wifili_peer_nawds_enable_msg {
+	uint16_t peer_id;			/**< Peer ID. */
+	uint16_t is_nawds;			/**< Enable NAWDS on this peer. */
+};
+
+/**
  * nss_wifili_reo_tidq_msg
  *	REO TID queue setup message.
  */
@@ -880,7 +898,9 @@
 				/**< Link descriptor buffer address information. */
 		struct nss_wifili_peer_security_type_msg securitymsg;
 				/**< Wifili peer security message. */
-	} msg;
+		struct nss_wifili_peer_nawds_enable_msg nawdsmsg;
+				/**< Wifili peer enable NAWDS message. */
+	} msg;			/**< Message payload. */
 };
 
 /**
diff --git a/nss_c2c_tx.c b/nss_c2c_tx.c
index dd866de..819e97d 100644
--- a/nss_c2c_tx.c
+++ b/nss_c2c_tx.c
@@ -81,7 +81,7 @@
 
 	case NSS_C2C_TX_MSG_TYPE_STATS:
 		nss_c2c_tx_stats_sync(nss_ctx, &nctm->msg.stats);
-		return;
+		break;
 	}
 
 	/*
diff --git a/nss_core.c b/nss_core.c
index 8b19221..22779f7 100644
--- a/nss_core.c
+++ b/nss_core.c
@@ -773,10 +773,11 @@
  * nss_core_rx_pbuf()
  *	Receive a pbuf from the NSS into Linux.
  */
-static inline void nss_core_rx_pbuf(struct nss_ctx_instance *nss_ctx, struct n2h_descriptor *desc, struct napi_struct *napi, uint8_t buffer_type, struct sk_buff *nbuf)
+static inline void nss_core_rx_pbuf(struct nss_ctx_instance *nss_ctx, struct napi_struct *napi,
+				uint8_t buffer_type, struct sk_buff *nbuf, uint32_t desc_ifnum, uint32_t bit_flags)
 {
-	unsigned int interface_num = NSS_INTERFACE_NUM_GET(desc->interface_num);
-	unsigned int core_id = NSS_INTERFACE_NUM_GET_COREID(desc->interface_num);
+	unsigned int interface_num = NSS_INTERFACE_NUM_GET(desc_ifnum);
+	unsigned int core_id = NSS_INTERFACE_NUM_GET_COREID(desc_ifnum);
 	struct nss_shaper_bounce_registrant *reg = NULL;
 	int32_t status;
 
@@ -816,11 +817,11 @@
 		break;
 
 	case N2H_BUFFER_PACKET:
-		nss_core_handle_buffer_pkt(nss_ctx, interface_num, nbuf, napi, desc->bit_flags);
+		nss_core_handle_buffer_pkt(nss_ctx, interface_num, nbuf, napi, bit_flags);
 		break;
 
 	case N2H_BUFFER_PACKET_EXT:
-		nss_core_handle_ext_buffer_pkt(nss_ctx, interface_num, nbuf, napi, desc->bit_flags);
+		nss_core_handle_ext_buffer_pkt(nss_ctx, interface_num, nbuf, napi, bit_flags);
 		break;
 
 	case N2H_BUFFER_STATUS:
@@ -861,7 +862,7 @@
  * nss_core_handle_nrfrag_skb()
  *	Handled the processing of fragmented skb's
  */
-static inline bool nss_core_handle_nr_frag_skb(struct nss_ctx_instance *nss_ctx, struct sk_buff **nbuf_ptr, struct sk_buff **jumbo_start_ptr, struct n2h_descriptor *desc, unsigned int buffer_type)
+static inline bool nss_core_handle_nr_frag_skb(struct nss_ctx_instance *nss_ctx, struct sk_buff **nbuf_ptr, struct sk_buff **jumbo_start_ptr, struct n2h_descriptor *desc, struct hlos_n2h_desc_ring *n2h_desc_ring, unsigned int buffer_type)
 {
 	struct sk_buff *nbuf = *nbuf_ptr;
 	struct sk_buff *jumbo_start = *jumbo_start_ptr;
@@ -879,6 +880,13 @@
 	 * chains (or it's not a scattered one).
 	 */
 	if (likely(bit_flags & N2H_BIT_FLAG_FIRST_SEGMENT) && likely(bit_flags & N2H_BIT_FLAG_LAST_SEGMENT)) {
+		/*
+		 * This is considered safe for linear skb since
+		 * every skb has a FIRST and LAST bit. So this will
+		 * be updated for every packet.
+		 */
+		n2h_desc_ring->interface_num = desc->interface_num;
+		n2h_desc_ring->bit_flags = desc->bit_flags;
 
 		/*
 		 * We have received another head before we saw the last segment.
@@ -916,6 +924,17 @@
 	 * Build a frags[] out of segments.
 	 */
 	if (unlikely((bit_flags & N2H_BIT_FLAG_FIRST_SEGMENT))) {
+		/*
+		 * We want to grab the head descripter information
+		 * and consume the pbuf on that information only.
+		 *
+		 * This is considered safe since we will construct the
+		 * chain in the order of seeing a FIRST and a LAST.
+		 * Every other order will be dropped or destroyed.
+		 *
+		 */
+		n2h_desc_ring->interface_num = desc->interface_num;
+		n2h_desc_ring->bit_flags = desc->bit_flags;
 
 		/*
 		 * We have received another head before we saw the last segment.
@@ -1006,7 +1025,7 @@
  *	Handler for processing linear skbs.
  */
 static inline bool nss_core_handle_linear_skb(struct nss_ctx_instance *nss_ctx, struct sk_buff **nbuf_ptr, struct sk_buff **head_ptr,
-						struct sk_buff **tail_ptr, struct n2h_descriptor *desc)
+						struct sk_buff **tail_ptr, struct hlos_n2h_desc_ring *n2h_desc_ring, struct n2h_descriptor *desc)
 {
 	uint16_t bit_flags = desc->bit_flags;
 	struct sk_buff *nbuf = *nbuf_ptr;
@@ -1023,6 +1042,13 @@
 	prefetch((void *)(nbuf->data));
 
 	if (likely(bit_flags & N2H_BIT_FLAG_FIRST_SEGMENT) && likely(bit_flags & N2H_BIT_FLAG_LAST_SEGMENT)) {
+		/*
+		 * This is considered safe for linear skb since
+		 * every skb has a FIRST and LAST bit. So this will
+		 * be updated for every packet.
+		 */
+		n2h_desc_ring->interface_num = desc->interface_num;
+		n2h_desc_ring->bit_flags = desc->bit_flags;
 
 		/*
 		 * We have received another head before we saw the last segment.
@@ -1055,6 +1081,17 @@
 	 * Build a frag list out of segments.
 	 */
 	if (unlikely((bit_flags & N2H_BIT_FLAG_FIRST_SEGMENT))) {
+		/*
+		 * We want to grab the head descripter information
+		 * and consume the pbuf on that information only.
+		 *
+		 * This is considered safe since we will construct the
+		 * chain in the order of seeing a FIRST and a LAST.
+		 * Every other order will be dropped or destroyed.
+		 *
+		 */
+		n2h_desc_ring->interface_num = desc->interface_num;
+		n2h_desc_ring->bit_flags = desc->bit_flags;
 
 		/*
 		 * We have received another head before we saw the last segment.
@@ -1334,6 +1371,8 @@
 		 * one of them is actually looked at.
 		 */
 		if ((unlikely(buffer_type == N2H_BUFFER_SHAPER_BOUNCED_INTERFACE)) || (unlikely(buffer_type == N2H_BUFFER_SHAPER_BOUNCED_BRIDGE))) {
+			n2h_desc_ring->interface_num = desc->interface_num;
+			n2h_desc_ring->bit_flags = desc->bit_flags;
 			dma_unmap_page(nss_ctx->dev, (desc->buffer + desc->payload_offs), desc->payload_len, DMA_TO_DEVICE);
 			goto consume;
 		}
@@ -1343,6 +1382,8 @@
 		 *
 		 */
 		if (unlikely((buffer_type == N2H_BUFFER_CRYPTO_RESP))) {
+			n2h_desc_ring->interface_num = desc->interface_num;
+			n2h_desc_ring->bit_flags = desc->bit_flags;
 			dma_unmap_single(NULL, (desc->buffer + desc->payload_offs), desc->payload_len, DMA_FROM_DEVICE);
 			goto consume;
 		}
@@ -1364,7 +1405,7 @@
 				n2h_desc_ring->head = NULL;
 			}
 
-			if (!nss_core_handle_nr_frag_skb(nss_ctx, &nbuf, &n2h_desc_ring->jumbo_start, desc, buffer_type)) {
+			if (!nss_core_handle_nr_frag_skb(nss_ctx, &nbuf, &n2h_desc_ring->jumbo_start, desc, n2h_desc_ring, buffer_type)) {
 				goto next;
 			}
 			NSS_PKT_STATS_INCREMENT(nss_ctx, &nss_ctx->nss_top->stats_drv[NSS_STATS_DRV_RX_NR_FRAGS]);
@@ -1388,12 +1429,12 @@
 		 * This is a simple linear skb. Use the the linear skb
 		 * handler to process it.
 		 */
-		if (!nss_core_handle_linear_skb(nss_ctx, &nbuf, &n2h_desc_ring->head, &n2h_desc_ring->tail, desc)) {
+		if (!nss_core_handle_linear_skb(nss_ctx, &nbuf, &n2h_desc_ring->head, &n2h_desc_ring->tail, n2h_desc_ring, desc)) {
 			goto next;
 		}
 
 consume:
-		nss_core_rx_pbuf(nss_ctx, desc, &(int_ctx->napi), buffer_type, nbuf);
+		nss_core_rx_pbuf(nss_ctx, &(int_ctx->napi), buffer_type, nbuf, n2h_desc_ring->interface_num, n2h_desc_ring->bit_flags);
 
 next:
 
diff --git a/nss_core.h b/nss_core.h
index 9357f5a..250009a 100644
--- a/nss_core.h
+++ b/nss_core.h
@@ -399,6 +399,8 @@
 	struct sk_buff *head;		/* First segment of an skb fraglist */
 	struct sk_buff *tail;		/* Last segment received of an skb fraglist */
 	struct sk_buff *jumbo_start;	/* First segment of an skb with frags[] */
+	uint32_t interface_num;		/* Store head descriptor interface number */
+	uint32_t bit_flags;		/* Store head descriptor bit flags */
 };
 
 /*
diff --git a/nss_edma_stats.c b/nss_edma_stats.c
index 3f28df6..ae4cf4e 100644
--- a/nss_edma_stats.c
+++ b/nss_edma_stats.c
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -100,7 +100,8 @@
 	"pkt_len_la64k_err",
 	"pkt_len_le33_err",
 	"data_len_err",
-	"alloc_fail_cnt"
+	"alloc_fail_cnt",
+	"qos_inval_dst_drops"
 };
 
 /*
@@ -133,10 +134,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_STATS_NODE_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -236,10 +234,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_PORT_RING_MAP_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -296,10 +291,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_STATS_TX_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -356,10 +348,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_STATS_RX_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -416,10 +405,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_STATS_TXCMPL_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -476,10 +462,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_STATS_RXFILL_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -535,10 +518,7 @@
 		return 0;
 	}
 
-	/*
-	 * Note: The assumption here is that we do not have more than 64 stats
-	 */
-	stats_shadow = kzalloc(64 * 8, GFP_KERNEL);
+	stats_shadow = kzalloc(NSS_EDMA_ERR_STATS_MAX * sizeof(uint64_t), GFP_KERNEL);
 	if (unlikely(stats_shadow == NULL)) {
 		nss_warning("Could not allocate memory for local shadow buffer");
 		kfree(lbuf);
@@ -877,6 +857,8 @@
 	edma_stats.misc_err[NSS_EDMA_PKT_LEN_LA64K_ERR] += nerss->msg_err_stats.pkt_len_la64k_err;
 	edma_stats.misc_err[NSS_EDMA_PKT_LEN_LE33_ERR] += nerss->msg_err_stats.pkt_len_le33_err;
 	edma_stats.misc_err[NSS_EDMA_DATA_LEN_ERR] += nerss->msg_err_stats.data_len_err;
+	edma_stats.misc_err[NSS_EDMA_ALLOC_FAIL_CNT] += nerss->msg_err_stats.alloc_fail_cnt;
+	edma_stats.misc_err[NSS_EDMA_QOS_INVAL_DST_DROPS] += nerss->msg_err_stats.qos_inval_dst_drops;
 
 	spin_unlock_bh(&nss_top->stats_lock);
 }
diff --git a/nss_edma_stats.h b/nss_edma_stats.h
index 1c61075..063e553 100644
--- a/nss_edma_stats.h
+++ b/nss_edma_stats.h
@@ -1,6 +1,6 @@
 /*
  ******************************************************************************
- * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -83,6 +83,7 @@
 	NSS_EDMA_PKT_LEN_LE33_ERR,
 	NSS_EDMA_DATA_LEN_ERR,
 	NSS_EDMA_ALLOC_FAIL_CNT,
+	NSS_EDMA_QOS_INVAL_DST_DROPS,
 	NSS_EDMA_ERR_STATS_MAX
 };
 
diff --git a/nss_ipsec.c b/nss_ipsec.c
index 246f122..e67b959 100644
--- a/nss_ipsec.c
+++ b/nss_ipsec.c
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -45,6 +45,25 @@
 #endif
 
 /*
+ * Amount time the synchronous message should wait for response from
+ * NSS before the timeout happens. After the timeout the message
+ * response even if it arrives has to be discarded. Typically, the
+ * time needs to be selected based on the worst case time in case of
+ * peak throughput between host & NSS.
+ */
+#define NSS_IPSEC_TX_TIMEO_TICKS msecs_to_jiffies(3000) /* 3 Seconds */
+
+/*
+ * Private data structure to hold state for
+ * the ipsec specific NSS interaction
+ */
+struct nss_ipsec_pvt {
+	struct semaphore sem;		/* used for synchronizing 'tx_msg_sync' */
+	struct completion complete;	/* completion callback */
+	atomic_t resp;	/* Response error type */
+} nss_ipsec;
+
+/*
  * nss_ipsec_get_msg_ctx()
  * 	return ipsec message context assoicated with the callback
  *
@@ -147,6 +166,31 @@
  */
 
 /*
+ * nss_ipsec_callback()
+ *	Callback to handle the completion of NSS->HLOS messages.
+ */
+static void nss_ipsec_callback(void *app_data, struct nss_ipsec_msg *nim)
+{
+	struct nss_cmn_msg *ncm = &nim->cm;
+
+	/*
+	 * This callback is for synchronous operation. The caller sends its
+	 * response pointer which needs to be loaded with the response
+	 * data arriving from the NSS
+	 */
+	atomic_t *resp = (atomic_t *)app_data;
+
+	if (ncm->response == NSS_CMN_RESPONSE_ACK) {
+		atomic_set(resp, NSS_IPSEC_ERROR_TYPE_NONE);
+		complete(&nss_ipsec.complete);
+		return;
+	}
+
+	atomic_set(resp, ncm->error);
+	complete(&nss_ipsec.complete);
+}
+
+/*
  * nss_ipsec_tx_msg
  *	Send ipsec rule to NSS.
  */
@@ -210,6 +254,96 @@
 EXPORT_SYMBOL(nss_ipsec_tx_msg);
 
 /*
+ * nss_ipsec_tx_msg_sync()
+ *	Transmit a ipsec message to NSS firmware synchronously.
+ */
+nss_tx_status_t nss_ipsec_tx_msg_sync(struct nss_ctx_instance *nss_ctx, uint32_t if_num,
+					enum nss_ipsec_msg_type type, uint16_t len,
+					struct nss_ipsec_msg *nim, enum nss_ipsec_error_type *resp)
+{
+	struct nss_ipsec_msg nim_local = { {0} };
+	nss_tx_status_t status;
+	int ret;
+
+	/*
+	 * Length of the message should be the based on type
+	 */
+	if (len > sizeof(nim_local.msg)) {
+		nss_warning("%p: (%u)Bad message length(%u) for type (%d)", nss_ctx, if_num, len, type);
+		return NSS_TX_FAILURE_TOO_LARGE;
+	}
+
+	/*
+	 * Response buffer is a required for copying the response for message
+	 */
+	if (!resp) {
+		nss_warning("%p: (%u)Response buffer is empty, type(%d)", nss_ctx, if_num, type);
+		return NSS_TX_FAILURE_BAD_PARAM;
+	}
+
+	/*
+	 * TODO: this can be removed in future as we need to ensure that the response
+	 * memory is only updated when the current outstanding request is waiting.
+	 * This can be solved by introducing sequence no. in messages and only completing
+	 * the message if the sequence no. matches. For now this is solved by passing
+	 * a known memory nss_ipsec.resp
+	 */
+	down(&nss_ipsec.sem);
+
+	/*
+	 * Initializing it to a fail error type
+	 */
+	atomic_set(&nss_ipsec.resp, NSS_IPSEC_ERROR_TYPE_UNHANDLED_MSG);
+
+	/*
+	 * We need to copy the message content into the actual message
+	 * to be sent to NSS
+	 *
+	 * Note: Here pass the nss_ipsec.resp as the pointer. Since, the caller
+	 * provided pointer is not allocated by us and may go away when this function
+	 * returns with failure. The callback is not aware of this and may try to
+	 * access the pointer incorrectly potentially resulting in a crash.
+	 */
+	nss_ipsec_msg_init(&nim_local, if_num, type, len, nss_ipsec_callback, &nss_ipsec.resp);
+	memcpy(&nim_local.msg, &nim->msg, len);
+
+	status = nss_ipsec_tx_msg(nss_ctx, &nim_local);
+	if (status != NSS_TX_SUCCESS) {
+		nss_warning("%p: ipsec_tx_msg failed", nss_ctx);
+		goto done;
+	}
+
+	ret = wait_for_completion_timeout(&nss_ipsec.complete, NSS_IPSEC_TX_TIMEO_TICKS);
+	if (!ret) {
+		nss_warning("%p: IPsec msg tx failed due to timeout", nss_ctx);
+		status = NSS_TX_FAILURE_NOT_ENABLED;
+		goto done;
+	}
+
+	/*
+	 * Read memory barrier
+	 */
+	smp_rmb();
+
+	/*
+	 * Copy the response received
+	 */
+	*resp = atomic_read(&nss_ipsec.resp);
+
+	/*
+	 * Only in case of non-error response we will
+	 * indicate success
+	 */
+	if (*resp != NSS_IPSEC_ERROR_TYPE_NONE)
+		status = NSS_TX_FAILURE;
+
+done:
+	up(&nss_ipsec.sem);
+	return status;
+}
+EXPORT_SYMBOL(nss_ipsec_tx_msg_sync);
+
+/*
  * nss_ipsec_tx_buf
  * 	Send data packet for ipsec processing
  */
@@ -397,7 +531,7 @@
 
 /*
  * nss_ipsec_get_context()
- * 	get NSS context instance for IPsec handle
+ * 	Get NSS context instance for IPsec handle
  */
 struct nss_ctx_instance *nss_ipsec_get_context(void)
 {
@@ -406,6 +540,28 @@
 EXPORT_SYMBOL(nss_ipsec_get_context);
 
 /*
+ * nss_ipsec_ppe_port_config()
+ *	Configure PPE port for IPsec inline
+ */
+bool nss_ipsec_ppe_port_config(struct nss_ctx_instance *nss_ctx, struct net_device *dev,
+					uint32_t if_num, uint32_t vsi_num)
+{
+#ifdef NSS_PPE_SUPPORTED
+	if_num = NSS_INTERFACE_NUM_APPEND_COREID(nss_ctx, if_num);
+
+	if (nss_ppe_tx_ipsec_config_msg(if_num, vsi_num, dev->mtu) != NSS_TX_SUCCESS) {
+		nss_warning("%p: Failed to configure PPE IPsec port", nss_ctx);
+		return false;
+	}
+
+	return true;
+#else
+	return false;
+#endif
+}
+EXPORT_SYMBOL(nss_ipsec_ppe_port_config);
+
+/*
  * nss_ipsec_register_handler()
  */
 void nss_ipsec_register_handler()
@@ -415,6 +571,10 @@
 	BUILD_BUG_ON(NSS_IPSEC_ENCAP_INTERFACE_NUM < 0);
 	BUILD_BUG_ON(NSS_IPSEC_DECAP_INTERFACE_NUM < 0);
 
+	sema_init(&nss_ipsec.sem, 1);
+	init_completion(&nss_ipsec.complete);
+	atomic_set(&nss_ipsec.resp, NSS_IPSEC_ERROR_TYPE_NONE);
+
 	nss_ctx->nss_top->ipsec_encap_callback = NULL;
 	nss_ctx->nss_top->ipsec_decap_callback = NULL;
 
diff --git a/nss_ppe.c b/nss_ppe.c
index a914880..90f0c5d 100644
--- a/nss_ppe.c
+++ b/nss_ppe.c
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -196,6 +196,106 @@
 EXPORT_SYMBOL(nss_ppe_tx_l2_exception_msg);
 
 /*
+ * nss_ppe_tx_ipsec_config_msg
+ *	API to send inline IPsec port configure message to NSS FW
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_config_msg(uint32_t nss_ifnum, uint32_t vsi_num, uint16_t mtu)
+{
+	struct nss_ctx_instance *nss_ctx = nss_ppe_get_context();
+	struct nss_ppe_msg npm = {0};
+
+	if (!nss_ctx) {
+		nss_warning("Can't get nss context\n");
+		return NSS_TX_FAILURE;
+	}
+
+	if (vsi_num >= NSS_PPE_VSI_NUM_MAX) {
+		nss_warning("Invalid vsi number:%u\n", vsi_num);
+		return NSS_TX_FAILURE;
+	}
+
+	nss_ppe_msg_init(&npm, NSS_PPE_INTERFACE, NSS_PPE_MSG_IPSEC_PORT_CONFIG,
+			sizeof(struct nss_ppe_ipsec_port_config_msg), NULL, NULL);
+
+	npm.msg.ipsec_config.nss_ifnum = nss_ifnum;
+	npm.msg.ipsec_config.vsi_num = vsi_num;
+	npm.msg.ipsec_config.mtu = mtu;
+
+	return nss_ppe_tx_msg_sync(nss_ctx, &npm);
+}
+EXPORT_SYMBOL(nss_ppe_tx_ipsec_config_msg);
+
+/*
+ * nss_ppe_tx_ipsec_mtu_msg
+ *	API to send IPsec port MTU change message to NSS FW
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_mtu_msg(uint32_t nss_ifnum, uint16_t mtu)
+{
+	struct nss_ctx_instance *nss_ctx = nss_ppe_get_context();
+	struct nss_ppe_msg npm = {0};
+
+	if (!nss_ctx) {
+		nss_warning("Can't get nss context\n");
+		return NSS_TX_FAILURE;
+	}
+
+	nss_ppe_msg_init(&npm, NSS_PPE_INTERFACE, NSS_PPE_MSG_IPSEC_PORT_MTU_CHANGE,
+			sizeof(struct nss_ppe_ipsec_port_mtu_msg), NULL, NULL);
+
+	npm.msg.ipsec_mtu.nss_ifnum = nss_ifnum;
+	npm.msg.ipsec_mtu.mtu = mtu;
+
+	return nss_ppe_tx_msg_sync(nss_ctx, &npm);
+}
+EXPORT_SYMBOL(nss_ppe_tx_ipsec_mtu_msg);
+
+/*
+ * nss_ppe_tx_ipsec_add_intf_msg
+ *	API to attach NSS interface to IPsec port
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_add_intf_msg(uint32_t nss_ifnum)
+{
+	struct nss_ctx_instance *nss_ctx = nss_ppe_get_context();
+	struct nss_ppe_msg npm = {0};
+
+	if (!nss_ctx) {
+		nss_warning("Can't get nss context\n");
+		return NSS_TX_FAILURE;
+	}
+
+	nss_ppe_msg_init(&npm, NSS_PPE_INTERFACE, NSS_PPE_MSG_IPSEC_ADD_INTF,
+			sizeof(struct nss_ppe_ipsec_add_intf_msg), NULL, NULL);
+
+	npm.msg.ipsec_addif.nss_ifnum = nss_ifnum;
+
+	return nss_ppe_tx_msg_sync(nss_ctx, &npm);
+}
+EXPORT_SYMBOL(nss_ppe_tx_ipsec_add_intf_msg);
+
+/*
+ * nss_ppe_tx_ipsec_del_intf_msg
+ *	API to detach NSS interface to IPsec port
+ */
+nss_tx_status_t nss_ppe_tx_ipsec_del_intf_msg(uint32_t nss_ifnum)
+{
+	struct nss_ctx_instance *nss_ctx = nss_ppe_get_context();
+	struct nss_ppe_msg npm = {0};
+
+	if (!nss_ctx) {
+		nss_warning("Can't get nss context\n");
+		return NSS_TX_FAILURE;
+	}
+
+	nss_ppe_msg_init(&npm, NSS_PPE_INTERFACE, NSS_PPE_MSG_IPSEC_DEL_INTF,
+			sizeof(struct nss_ppe_ipsec_del_intf_msg), NULL, NULL);
+
+	npm.msg.ipsec_delif.nss_ifnum = nss_ifnum;
+
+	return nss_ppe_tx_msg_sync(nss_ctx, &npm);
+}
+EXPORT_SYMBOL(nss_ppe_tx_ipsec_del_intf_msg);
+
+/*
  * nss_ppe_handler()
  *	Handle NSS -> HLOS messages for ppe
  */
diff --git a/nss_ppe.h b/nss_ppe.h
index bc5e53f..797793a 100644
--- a/nss_ppe.h
+++ b/nss_ppe.h
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
  * above copyright notice and this permission notice appear in all copies.
@@ -71,6 +71,11 @@
 #define NSS_PPE_TX_TIMEOUT 1000 /* 1 Second */
 
 /*
+ * Maximum number of VSI
+ */
+#define NSS_PPE_VSI_NUM_MAX 32
+
+/*
  * ppe nss debug stats lock
  */
 extern spinlock_t nss_ppe_stats_lock;
