diff --git a/exports/nss_dynamic_interface.h b/exports/nss_dynamic_interface.h
index 6bab870..801cf28 100644
--- a/exports/nss_dynamic_interface.h
+++ b/exports/nss_dynamic_interface.h
@@ -66,8 +66,8 @@
 	NSS_DYNAMIC_INTERFACE_TYPE_GRE_REDIR_OUTER,
 	NSS_DYNAMIC_INTERFACE_TYPE_GRE_TUNNEL_INLINE_INNER,
 	NSS_DYNAMIC_INTERFACE_TYPE_GRE_TUNNEL_INLINE_OUTER,
-	NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H,
-	NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N,
+	NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H,
+	NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N,
 	NSS_DYNAMIC_INTERFACE_TYPE_TUN6RD_INNER,
 	NSS_DYNAMIC_INTERFACE_TYPE_TUN6RD_OUTER,
 	NSS_DYNAMIC_INTERFACE_TYPE_GRE_REDIR_LAG_US,
diff --git a/nss_cmn.c b/nss_cmn.c
index 920aca2..55131b7 100644
--- a/nss_cmn.c
+++ b/nss_cmn.c
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2014-2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2019, 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.
@@ -186,8 +186,8 @@
 	enum nss_dynamic_interface_type type = nss_dynamic_interface_get_type(nss_ctx, interface_num);
 
 	return type == NSS_DYNAMIC_INTERFACE_TYPE_WIFI
-		|| type == NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H
-		|| type == NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N
+		|| type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H
+		|| type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N
 		|| type == NSS_DYNAMIC_INTERFACE_TYPE_VIRTIF_DEPRECATED;
 }
 EXPORT_SYMBOL(nss_cmn_interface_is_redirect);
diff --git a/nss_hal/nss_hal.c b/nss_hal/nss_hal.c
index b5697b1..1d2cd95 100644
--- a/nss_hal/nss_hal.c
+++ b/nss_hal/nss_hal.c
@@ -371,8 +371,8 @@
 
 		nss_top->virt_if_handler_id = nss_dev->id;
 
-		nss_top->dynamic_interface_table[NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H] = nss_dev->id;
-		nss_top->dynamic_interface_table[NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N] = nss_dev->id;
+		nss_top->dynamic_interface_table[NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H] = nss_dev->id;
+		nss_top->dynamic_interface_table[NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N] = nss_dev->id;
 	}
 
 	if (npd->capwap_enabled == NSS_FEATURE_ENABLED) {
diff --git a/nss_virt_if.c b/nss_virt_if.c
index 3fd280d..981ae49 100644
--- a/nss_virt_if.c
+++ b/nss_virt_if.c
@@ -54,8 +54,8 @@
 {
 	enum nss_dynamic_interface_type type = nss_dynamic_interface_get_type(nss_virt_if_get_context(), if_num);
 
-	return type == NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H
-		|| type == NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N;
+	return type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H
+		|| type == NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N;
 }
 EXPORT_SYMBOL(nss_virt_if_verify_if_num);
 
@@ -227,13 +227,13 @@
 	index_n2h = NSS_VIRT_IF_GET_INDEX(if_num_n2h);
 	index_h2n = NSS_VIRT_IF_GET_INDEX(if_num_h2n);
 
-	status = nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H);
+	status = nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H);
 	if (status != NSS_TX_SUCCESS) {
 		nss_warning("%p: Dynamic interface destroy failed status %d\n", handle->nss_ctx, status);
 		return status;
 	}
 
-	status = nss_dynamic_interface_dealloc_node(if_num_h2n, NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N);
+	status = nss_dynamic_interface_dealloc_node(if_num_h2n, NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N);
 	if (status != NSS_TX_SUCCESS) {
 		nss_warning("%p: Dynamic interface destroy failed status %d\n", handle->nss_ctx, status);
 		return status;
@@ -358,24 +358,24 @@
 		return NULL;
 	}
 
-	if_num_n2h = nss_dynamic_interface_alloc_node(NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H);
+	if_num_n2h = nss_dynamic_interface_alloc_node(NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H);
 	if (if_num_n2h < 0) {
 		nss_warning("%p: failure allocating redir_n2h\n", nss_ctx);
 		return NULL;
 	}
 
-	if_num_h2n = nss_dynamic_interface_alloc_node(NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N);
+	if_num_h2n = nss_dynamic_interface_alloc_node(NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N);
 	if (if_num_h2n < 0) {
 		nss_warning("%p: failure allocating redir_h2n\n", nss_ctx);
-		nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H);
+		nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H);
 		return NULL;
 	}
 
 	handle = nss_virt_if_handle_create_sync(nss_ctx, if_num_n2h, if_num_h2n, &ret);
 	if (!handle) {
 		nss_warning("%p: virt_if handle creation failed ret %d\n", nss_ctx, ret);
-		nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_N2H);
-		nss_dynamic_interface_dealloc_node(if_num_h2n, NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N);
+		nss_dynamic_interface_dealloc_node(if_num_n2h, NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_N2H);
+		nss_dynamic_interface_dealloc_node(if_num_h2n, NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N);
 		return NULL;
 	}
 
@@ -619,12 +619,12 @@
 	nss_ctx = handle->nss_ctx;
 	NSS_VERIFY_CTX_MAGIC(nss_ctx);
 
-	if (!nss_virt_if_verify_if_num(handle->if_num_h2n)) {
+	if (!nss_virt_if_verify_if_num(handle->if_num_n2h)) {
 		nss_warning("if_num is invalid\n");
 		return;
 	}
 
-	reg = &nss_ctx->subsys_dp_register[handle->if_num_h2n];
+	reg = &nss_ctx->subsys_dp_register[handle->if_num_n2h];
 	reg->xmit_cb = cb;
 }
 EXPORT_SYMBOL(nss_virt_if_xmit_callback_register);
@@ -646,12 +646,12 @@
 	nss_ctx = handle->nss_ctx;
 	NSS_VERIFY_CTX_MAGIC(nss_ctx);
 
-	if (!nss_virt_if_verify_if_num(handle->if_num_h2n)) {
+	if (!nss_virt_if_verify_if_num(handle->if_num_n2h)) {
 		nss_warning("if_num is invalid\n");
 		return;
 	}
 
-	reg = &nss_ctx->subsys_dp_register[handle->if_num_h2n];
+	reg = &nss_ctx->subsys_dp_register[handle->if_num_n2h];
 	reg->xmit_cb = NULL;
 }
 EXPORT_SYMBOL(nss_virt_if_xmit_callback_unregister);
@@ -674,12 +674,12 @@
 	nss_ctx = handle->nss_ctx;
 	NSS_VERIFY_CTX_MAGIC(nss_ctx);
 
-	if (!nss_virt_if_verify_if_num(handle->if_num_h2n)) {
+	if (!nss_virt_if_verify_if_num(handle->if_num_n2h)) {
 		nss_warning("if_num is invalid\n");
 		return;
 	}
 
-	if_num = handle->if_num_h2n;
+	if_num = handle->if_num_n2h;
 
 	nss_core_register_subsys_dp(nss_ctx, if_num, data_callback, NULL, NULL, netdev, (uint32_t)netdev->features);
 	nss_top_main.if_rx_msg_callback[if_num] = NULL;
@@ -702,12 +702,12 @@
 	nss_ctx = handle->nss_ctx;
 	NSS_VERIFY_CTX_MAGIC(nss_ctx);
 
-	if (!nss_virt_if_verify_if_num(handle->if_num_h2n)) {
+	if (!nss_virt_if_verify_if_num(handle->if_num_n2h)) {
 		nss_warning("if_num is invalid\n");
 		return;
 	}
 
-	if_num = handle->if_num_h2n;
+	if_num = handle->if_num_n2h;
 
 	nss_core_unregister_subsys_dp(nss_ctx, if_num);
 
diff --git a/nss_virt_if_stats.c b/nss_virt_if_stats.c
index 7b2f7ba..2df701c 100644
--- a/nss_virt_if_stats.c
+++ b/nss_virt_if_stats.c
@@ -1,6 +1,6 @@
 /*
  **************************************************************************
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, 2019, 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.
@@ -126,7 +126,7 @@
 		/*
 		 * redir_h2n will collect stats from redir_n2h and redir_h2n in nss.
 		 */
-		if (nss_dynamic_interface_get_type(nss_ctx, if_num) != NSS_DYNAMIC_INTERFACE_TYPE_802_3_REDIR_H2N)
+		if (nss_dynamic_interface_get_type(nss_ctx, if_num) != NSS_DYNAMIC_INTERFACE_TYPE_GENERIC_REDIR_H2N)
 			continue;
 
 		bytes = scnprintf(line, sizeof(line), "if_num %d stats start:\n\n", if_num);
