diff --git a/Makefile b/Makefile
index 30f9c5b..5fc6d10 100644
--- a/Makefile
+++ b/Makefile
@@ -63,6 +63,7 @@
 			nss_pptp_stats.o \
 			nss_rps.o \
 			nss_qrfs.o \
+			nss_qrfs_stats.o \
 			nss_shaper.o \
 			nss_sjack.o \
 			nss_sjack_stats.o \
diff --git a/exports/nss_qrfs.h b/exports/nss_qrfs.h
index cf1ed0a..f0c344e 100644
--- a/exports/nss_qrfs.h
+++ b/exports/nss_qrfs.h
@@ -36,6 +36,7 @@
 	NSS_QRFS_MSG_FLOW_DELETE,
 	NSS_QRFS_MSG_MAC_ADD,
 	NSS_QRFS_MSG_MAC_DELETE,
+	NSS_QRFS_MSG_STATS_SYNC,
 	NSS_QRFS_MSG_MAX,
 };
 
@@ -79,20 +80,33 @@
 };
 
 /**
+ * nss_qrfs_stats_sync_msg
+ *	Information for the NSS QRFS statistics message.
+ */
+struct nss_qrfs_stats_sync_msg {
+	struct nss_cmn_node_stats node_stats;	/**< Common pnode statistics. */
+	uint32_t invalid_offset;		/**< Packets with invalid offset. */
+	uint32_t unknown_protocol;		/**< Protocol other than TCP, UDP. */
+	uint32_t ipv4_flow_rule_hits;		/**< Number of IPv4 flow rule hits. */
+	uint32_t ipv6_flow_rule_hits;		/**< Number of IPv6 flow rule hits. */
+};
+
+/**
  * nss_qrfs_msg
- *	Data for sending and receiving NSS QRFS rule messages.
+ *	Data for sending and receiving NSS QRFS rule or statistics messages.
  */
 struct nss_qrfs_msg {
 	struct nss_cmn_msg cm;	/**< Common message header. */
 
 	/**
-	 * Payload of a NSS QRFS rule message.
+	 * Payload of a NSS QRFS rule or statistics message.
 	 */
 	union {
-		struct nss_qrfs_flow_rule_msg flow_add; 	/**< Add flow rule. */
-		struct nss_qrfs_flow_rule_msg flow_delete; 	/**< Delete flow rule. */
+		struct nss_qrfs_flow_rule_msg flow_add;		/**< Add flow rule. */
+		struct nss_qrfs_flow_rule_msg flow_delete;	/**< Delete flow rule. */
 		struct nss_qrfs_mac_rule_msg mac_add;		/**< Add MAC rule. */
 		struct nss_qrfs_mac_rule_msg mac_delete;	/**< Delete MAC rule. */
+		struct nss_qrfs_stats_sync_msg stats_sync;	/**< Synchronize statistics. */
 	} msg;			/**< Message payload. */
 };
 
diff --git a/nss_qrfs.c b/nss_qrfs.c
index d1125ed..121cd48 100644
--- a/nss_qrfs.c
+++ b/nss_qrfs.c
@@ -15,6 +15,7 @@
  */
 
 #include "nss_tx_rx_common.h"
+#include "nss_qrfs_stats.h"
 
 /*
  * Notify data structure
@@ -67,6 +68,15 @@
 	 */
 	nss_core_log_msg_failures(nss_ctx, ncm);
 
+	switch (ncm->type) {
+	case NSS_QRFS_MSG_STATS_SYNC:
+		/*
+		 * Update QRFS statistics.
+		 */
+		nss_qrfs_stats_sync(nss_ctx, &nqm->msg.stats_sync);
+		break;
+	}
+
 	/*
 	 * Update the callback and app_data for NOTIFY messages
 	 */
@@ -434,6 +444,7 @@
 void nss_qrfs_register_handler(struct nss_ctx_instance *nss_ctx)
 {
 	nss_core_register_handler(nss_ctx, NSS_QRFS_INTERFACE, nss_qrfs_msg_handler, NULL);
+	nss_qrfs_stats_dentry_create();
 }
 EXPORT_SYMBOL(nss_qrfs_register_handler);
 
diff --git a/nss_qrfs_stats.c b/nss_qrfs_stats.c
new file mode 100644
index 0000000..1e5734f
--- /dev/null
+++ b/nss_qrfs_stats.c
@@ -0,0 +1,150 @@
+/*
+ **************************************************************************
+ * Copyright (c) 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.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ **************************************************************************
+ */
+
+#include "nss_stats.h"
+#include "nss_core.h"
+#include "nss_qrfs_stats.h"
+
+/*
+ * Spinlock to protect QRFS statistics update/read
+ */
+DEFINE_SPINLOCK(nss_qrfs_stats_lock);
+
+/*
+ * nss_qrfs_stats_str
+ *	QRFS stats strings
+ */
+static int8_t *nss_qrfs_stats_str[NSS_QRFS_STATS_MAX] = {
+	"rx_packets",
+	"rx_bytes",
+	"tx_packets",
+	"tx_bytes",
+	"rx_queue_0_dropped",
+	"rx_queue_1_dropped",
+	"rx_queue_2_dropped",
+	"rx_queue_3_dropped",
+	"invalid_offset",
+	"unknown_protocol",
+	"ipv4_flow_rule_hits",
+	"ipv6_flow_rule_hits",
+};
+
+uint64_t nss_qrfs_stats[NSS_MAX_CORES][NSS_QRFS_STATS_MAX];
+
+/*
+ * nss_qrfs_stats_read()
+ *	Read QRFS statistics
+ */
+static ssize_t nss_qrfs_stats_read(struct file *fp, char __user *ubuf, size_t sz, loff_t *ppos)
+{
+	int32_t i, core;
+
+	/*
+	 * Max output lines = #stats + start tag line + end tag line + three blank lines
+	 */
+	uint32_t max_output_lines = (NSS_QRFS_STATS_MAX + 3) * 2 + 5;
+	size_t size_al = NSS_STATS_MAX_STR_LENGTH * max_output_lines;
+	size_t size_wr = 0;
+	ssize_t bytes_read = 0;
+	uint64_t *stats_shadow;
+
+	char *lbuf = kzalloc(size_al, GFP_KERNEL);
+	if (unlikely(lbuf == NULL)) {
+		nss_warning("Could not allocate memory for local statistics buffer");
+		return 0;
+	}
+
+	stats_shadow = kzalloc(NSS_QRFS_STATS_MAX * 8, GFP_KERNEL);
+	if (unlikely(stats_shadow == NULL)) {
+		nss_warning("Could not allocate memory for local shadow buffer");
+		kfree(lbuf);
+		return 0;
+	}
+
+	size_wr = scnprintf(lbuf, size_al, "qrfs stats start:\n\n");
+
+	/*
+	 * QRFS statistics
+	 */
+	for (core = 0; core < NSS_MAX_CORES; core++) {
+		size_wr += scnprintf(lbuf + size_wr, size_al - size_wr, "\nqrfs core %d stats:\n\n", core);
+		spin_lock_bh(&nss_qrfs_stats_lock);
+		for (i = 0; i < NSS_QRFS_STATS_MAX; i++) {
+			stats_shadow[i] = nss_qrfs_stats[core][i];
+		}
+		spin_unlock_bh(&nss_qrfs_stats_lock);
+
+		for (i = 0; i < NSS_QRFS_STATS_MAX; i++) {
+			size_wr += scnprintf(lbuf + size_wr, size_al - size_wr,
+					"%s = %llu\n", nss_qrfs_stats_str[i], stats_shadow[i]);
+		}
+	}
+
+	size_wr += scnprintf(lbuf + size_wr, size_al - size_wr, "\nqrfs stats end\n\n");
+	bytes_read = simple_read_from_buffer(ubuf, sz, ppos, lbuf, strlen(lbuf));
+	kfree(lbuf);
+	kfree(stats_shadow);
+
+	return bytes_read;
+}
+
+/*
+ * nss_qrfs_stats_ops
+ */
+NSS_STATS_DECLARE_FILE_OPERATIONS(qrfs)
+
+/*
+ * nss_qrfs_stats_dentry_create()
+ *	Create QRFS statistics debug entry.
+ */
+void nss_qrfs_stats_dentry_create(void)
+{
+	nss_stats_create_dentry("qrfs", &nss_qrfs_stats_ops);
+}
+
+/*
+ * nss_qrfs_stats_sync()
+ *	Handle the syncing of NSS QRFS statistics.
+ */
+void nss_qrfs_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_qrfs_stats_sync_msg *nqssm)
+{
+	int id = nss_ctx->id;
+	int j;
+
+	spin_lock_bh(&nss_qrfs_stats_lock);
+
+	/*
+	 * Common node stats
+	 */
+	nss_qrfs_stats[id][NSS_STATS_NODE_RX_PKTS] += nqssm->node_stats.rx_packets;
+	nss_qrfs_stats[id][NSS_STATS_NODE_RX_BYTES] += nqssm->node_stats.rx_bytes;
+	nss_qrfs_stats[id][NSS_STATS_NODE_TX_PKTS] += nqssm->node_stats.tx_packets;
+	nss_qrfs_stats[id][NSS_STATS_NODE_TX_BYTES] += nqssm->node_stats.tx_bytes;
+
+	for (j = 0; j < NSS_MAX_NUM_PRI; j++) {
+		nss_qrfs_stats[id][NSS_STATS_NODE_RX_QUEUE_0_DROPPED + j] += nqssm->node_stats.rx_dropped[j];
+	}
+
+	/*
+	 * QRFS statistics
+	 */
+	nss_qrfs_stats[id][NSS_QRFS_STATS_INVALID_OFFSET] += nqssm->invalid_offset;
+	nss_qrfs_stats[id][NSS_QRFS_STATS_UNKNOWN_PROTO] += nqssm->unknown_protocol;
+	nss_qrfs_stats[id][NSS_QRFS_STATS_IPV4_FLOW_HITS] += nqssm->ipv4_flow_rule_hits;
+	nss_qrfs_stats[id][NSS_QRFS_STATS_IPV6_FLOW_HITS] += nqssm->ipv6_flow_rule_hits;
+
+	spin_unlock_bh(&nss_qrfs_stats_lock);
+}
diff --git a/nss_qrfs_stats.h b/nss_qrfs_stats.h
new file mode 100644
index 0000000..7992270
--- /dev/null
+++ b/nss_qrfs_stats.h
@@ -0,0 +1,38 @@
+/*
+ ******************************************************************************
+ * Copyright (c) 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.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * ****************************************************************************
+ */
+
+#ifndef __NSS_QRFS_STATS_H
+#define __NSS_QRFS_STATS_H
+
+/*
+ * QRFS node statistics
+ */
+enum nss_qrfs_stats_types {
+	NSS_QRFS_STATS_INVALID_OFFSET = NSS_STATS_NODE_MAX,
+					/* Number of packets with invalid L3, L4 offset */
+	NSS_QRFS_STATS_UNKNOWN_PROTO,	/* Number of packets with protocol other than TCP, UDP */
+	NSS_QRFS_STATS_IPV4_FLOW_HITS,	/* Number of IPv4 flow rule hits */
+	NSS_QRFS_STATS_IPV6_FLOW_HITS,	/* Number of IPv6 flow rule hits */
+	NSS_QRFS_STATS_MAX,
+};
+
+/*
+ * QRFS statistics APIs
+ */
+extern void nss_qrfs_stats_sync(struct nss_ctx_instance *nss_ctx, struct nss_qrfs_stats_sync_msg *nqssm);
+extern void nss_qrfs_stats_dentry_create(void);
+
+#endif /* __NSS_QRFS_STATS_H */
