Index: /branches/rel_apv_10_7/usr/click/bin/backend/Makefile
===================================================================
--- /branches/rel_apv_10_7/usr/click/bin/backend/Makefile	(revision 39037)
+++ /branches/rel_apv_10_7/usr/click/bin/backend/Makefile	(working copy)
@@ -1,7 +1,7 @@
 # ArrayOS
 NO_MAN=
 PROG=	backend
-SRCS=	sys_cmd.c backend.c segment_nat_auto.c ntp.c sys_tool.c users.c engineering.c \
+SRCS=	sys_cmd.c backend.c segment_nat_auto.c ntp.c geneve.c sys_tool.c users.c engineering.c \
 	engineering_commands.c sys_time.c sync_ui.c role.c \
 	utils.c sys_dump.c
 
Index: /branches/rel_apv_10_7/usr/click/bin/backend/geneve.c
===================================================================
--- /branches/rel_apv_10_7/usr/click/bin/backend/geneve.c	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/bin/backend/geneve.c	(working copy)
@@ -0,0 +1,143 @@
+
+/*-----------------------------------------------------------------------
+*
+* Copyright (C) 2024
+* ArrayNetworks Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification is not permitted unless authorized in writing by a duly
+* appointed officer of ClickArray Inc. or its derivatives
+*
+* UI Geneve
+*
+* $ArrayOS$
+*
+*-----------------------------------------------------------------------
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <netdb.h>
+
+#if __BSD_VISIBLE
+typedef	unsigned char	u_char;
+typedef	unsigned short	u_short;
+typedef	unsigned int	u_int;
+typedef	unsigned long	u_long;
+#ifndef _KERNEL
+typedef	unsigned short	ushort;		/* Sys V compatibility */
+typedef	unsigned int	uint;		/* Sys V compatibility */
+#endif
+#endif
+
+// set
+int set_geneve(char* geneve_name, u_int vni) {
+    printf("Set GENEVE: %s, VI number: %d\n", geneve_name, vni);
+    return 0;
+}
+
+int geneve_tunnel(char* tun_name, char* localip, char* dstip) {
+    printf("GENEVE tunnel: %s, localip: %s, dstip: %s\n", tun_name, localip, dstip);
+    return 0;
+}
+
+int geneve_bind(char* geneve_name, char* tun_name) {
+    printf("GENEVE : %s, tunnel name: %s\n", geneve_name, tun_name);
+    return 0;
+}
+
+int geneve_associate(char* geneve_name, char* port_name) {
+    printf("GENEVE : %s, port name: %s\n", geneve_name, port_name);
+    return 0;
+}
+
+// no
+int no_geneve(char* geneve_name) {
+	printf("no GENEVE : %s\n", geneve_name);
+    return 0;
+}
+
+int no_geneve_tunnel(char* tun_name) {
+    printf("no GENEVE tunnel : %s\n", tun_name);
+    return 0;
+}
+
+int no_geneve_bind(char* geneve_name, char* tun_name) {
+    printf("GENEVE : %s, tunnel name: %s\n", geneve_name, tun_name);
+    return 0;
+}
+
+int no_geneve_associate(char* geneve_name, char* port_name) {
+    printf("GENEVE : %s, port name: %s\n", geneve_name, port_name);
+    return 0;
+}
+
+// show
+int show_geneve_interface(void) {
+    printf("Show GENEVE interface\n");
+    return 0;
+}
+
+int show_geneve_port(void) {
+    printf("Show GENEVE port\n");
+    return 0;
+}
+
+int show_geneve_learn(void) {
+    printf("Show GENEVE learn\n");
+    return 0;
+}
+
+int show_geneve_bind(char* geneve_name) {
+    printf("Show GENEVE bind\n");
+    return 0;
+}
+
+int show_geneve_associate(char* geneve_name) {
+    printf("Show GENEVE associate\n");
+    return 0;
+}
+
+int show_geneve_tunnel(char *tun_name) {
+    printf("Show GENEVE tunnel\n");
+    return 0;
+}
+
+int show_geneve_forwarding(uint32_t vni, char* mac) {
+    printf("Show GENEVE forward vni: %d, mac: %s\n", vni, mac);
+    return 0;
+}
+
+int show_geneve_all(void) {
+    printf("Show GENEVE all\n");
+    return 0;
+}
+
+// // clear
+int clear_geneve_bind(char * geneve_name) {
+    printf("Clear GENEVE bind %s\n", geneve_name);
+    return 0;
+}
+
+int clear_geneve_associate(void) {
+    printf("Clear GENEVE associate\n");
+    return 0;
+}
+
+int clear_geneve_tunnel(void) {
+    printf("Clear GENEVE tunnel\n");
+    return 0;
+}
+
+int clear_geneve_interface(void) {
+    printf("Clear GENEVE interface\n");
+    return 0;
+}
+
+int clear_geneve_all(void) {
+    printf("Clear GENEVE all\n");
+    return 0;
+}
\ No newline at end of file
Index: /branches/rel_apv_10_7/usr/click/lib/libparser/commands.pm
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libparser/commands.pm	(revision 39037)
+++ /branches/rel_apv_10_7/usr/click/lib/libparser/commands.pm	(working copy)
@@ -43443,6 +43443,566 @@
 
 # vxlan end
 
+# geneve begin
+	{
+		obj_type => "MENU",
+		name => "geneve",
+		parent_menu => ".",
+		uniq_name => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Configure GENEVE",
+	},
+	{
+		obj_type => "ITEM",
+		name => "interface",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Create a GENEVE interface",
+		function_name => "set_geneve",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE interface name",
+				     optional => "NO",
+				 },
+				 {
+		                     type => "U32",
+				     help_string => "VNI number",
+				     optional => "NO",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "port",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Configure GENEVE port",
+		function_name => "geneve_port_func",
+		function_args => [ {
+		                     type => "U16",
+				     help_string => "GENEVE port number (1025-65000, default = 6081)",
+				     optional => "NO",
+				     min => "1025",
+				     max => "65000",
+				 }, ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "enable",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Enable GENEVE",
+		function_name => "geneve_enable_func",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "disable",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Disable GENEVE",
+		function_name => "geneve_disable_func",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "learn",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Enable or disable GENEVE learning function",
+		function_name => "geneve_learn_func",
+		function_args => [{
+							type => "STRING",
+							help_string => "on or off",
+							optional => "NO",
+						},],
+	},
+	{
+		obj_type => "ITEM",
+		name => "tunnel",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Create a GENEVE tunnel",
+		function_name => "geneve_tunnel",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "Tunnel name",
+							optional => "NO",
+						},
+						{
+							type => "IPADDR",
+							help_string => "Local GTEP IP",
+							optional => "NO",
+						},
+						{
+							type => "IPADDR",
+							help_string => "Remote GTEP IP",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "bind",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Bind a GENEVE interface to a GENEVE tunnel",
+		function_name => "geneve_bind",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "GENEVE interface name",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Tunnel name",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "associate",
+		menu => "root_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Associate GENEVE with VLAN to enable GENEVE gateway function",
+		function_name => "geneve_associate",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "GENEVE interface name",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "VLAN interface name",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "MENU",
+		name => "forwarding",
+		parent_menu => "root_geneve",
+		uniq_name => "root_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Configure GENEVE forwarding entries",
+	},
+	{
+		obj_type => "ITEM",
+		name => "remote",
+		menu => "root_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Add a static GENEVE forwarding entry to remote GTEP",
+		function_name => "geneve_forwarding_remote_add",
+		function_args => [
+						{
+							type => "U32",
+							help_string => "VNI number",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Destination MAC address (x:x:x:x:x:x)",
+							optional => "NO",
+						},
+						{
+							type => "IPADDR",
+							help_string => "Remote GTEP IP address",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "local",
+		menu => "root_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Add a static GENEVE forwarding entry to L2 interface",
+		function_name => "geneve_forwarding_local_add",
+		function_args => [
+						{
+							type => "U32",
+							help_string => "VNI number",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Destination MAC address (x:x:x:x:x:x)",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "MENU",
+		name => "geneve",
+		parent_menu => "root_no",
+		uniq_name => "root_no_geneve",
+		help_string => "Remove GENEVE settings",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+	},
+	{
+		obj_type => "ITEM",
+		name => "interface",
+		menu => "root_no_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Delete a GENEVE interface",
+		function_name => "no_geneve",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE interface name",
+				     optional => "NO",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "tunnel",
+		menu => "root_no_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Delete a GENEVE tunnel",
+		function_name => "no_geneve_tunnel",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "Tunnel name",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "bind",
+		menu => "root_no_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Unbind GENEVE interface from GENEVE tunnel",
+		function_name => "no_geneve_bind",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "GENEVE interface name",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Tunnel name",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "associate",
+		menu => "root_no_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Disassociate GENEVE from VLAN",
+		function_name => "no_geneve_associate",
+		function_args => [
+						{
+							type => "STRING",
+							help_string => "GENEVE interface name",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "VLAN interface name",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "MENU",
+		name => "forwarding",
+		parent_menu => "root_no_geneve",
+		uniq_name => "root_no_geneve_forwarding",
+		help_string => "Delete GENEVE forwarding entries",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+	},
+	{
+		obj_type => "ITEM",
+		name => "remote",
+		menu => "root_no_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Delete a static GENEVE forwarding entry to remote GTEP",
+		function_name => "geneve_forwarding_remote_del",
+		function_args => [
+						{
+							type => "U32",
+							help_string => "VNI number",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Destination MAC address (x:x:x:x:x:x)",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "local",
+		menu => "root_no_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Delete a static GENEVE forwarding entry to L2 interface",
+		function_name => "geneve_forwarding_local_del",
+		function_args => [
+						{
+							type => "U32",
+							help_string => "VNI number",
+							optional => "NO",
+						},
+						{
+							type => "STRING",
+							help_string => "Destination MAC address (x:x:x:x:x:x)",
+							optional => "NO",
+						},
+					  ],
+	},
+	{
+		obj_type => "MENU",
+		name => "geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		parent_menu => "root_show",
+		uniq_name => "root_show_geneve",
+		help_string => "Display GENEVE configurations",
+	},
+	{
+		obj_type => "ITEM",
+		name => "interface",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display GENEVE interface configurations",
+		function_name => "show_geneve_interface",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "port",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display GENEVE port configurations",
+		function_name => "show_geneve_port",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "learn",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display GENEVE learn configurations",
+		function_name => "show_geneve_learn",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "bind",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display tunnel binding configurations",
+		function_name => "show_geneve_bind",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE interface name",
+				     optional => "YES",
+				     default_value => "\"\"",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "associate",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display associated Layer 2 configurations",
+		function_name => "show_geneve_associate",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE interface name",
+				     optional => "YES",
+				     default_value => "\"\"",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "tunnel",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display GENEVE tunnel configurations",
+		function_name => "show_geneve_tunnel",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE tunnel name",
+				     optional => "YES",
+				     default_value => "\"\"",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "forwarding",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display all GENEVE forwarding entries",
+		function_name => "show_geneve_forwarding",
+		function_args => [ {
+		                     type => "U32",
+				     help_string => "VNI number",
+				     optional => "NO",
+				 },
+				 {
+		                     type => "STRING",
+				     help_string => "MAC address",
+				     optional => "YES",
+				     default_value => "\"\"",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "all",
+		menu => "root_show_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		help_string => "Display all configurations of GENEVE",
+		function_name => "show_geneve_all",
+		function_args => [],
+	},
+	{
+		obj_type => "MENU",
+		name => "geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		parent_menu => "root_clear",
+		uniq_name => "root_clear_geneve",
+		help_string => "Clear GENEVE configurations",
+	},
+	{
+		obj_type => "ITEM",
+		name => "bind",
+		menu => "root_clear_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear tunnel binding configurations of GENEVE interfaces",
+		function_name => "clear_geneve_bind",
+		function_args => [ {
+		                     type => "STRING",
+				     help_string => "GENEVE interface name",
+				     optional => "YES",
+				     default_value => "\"\"",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "associate",
+		menu => "root_clear_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear associated Layer 2 configurations",
+		function_name => "clear_geneve_associate",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "tunnel",
+		menu => "root_clear_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear all GENEVE tunnels",
+		function_name => "clear_geneve_tunnel",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "interface",
+		menu => "root_clear_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear all GENEVE interfaces",
+		function_name => "clear_geneve_interface",
+		function_args => [],
+	},
+	{
+		obj_type => "ITEM",
+		name => "all",
+		menu => "root_clear_geneve",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear all GENEVE configurations",
+		function_name => "clear_geneve_all",
+		function_args => [],
+	},
+	{
+		obj_type => "MENU",
+		name => "forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL",
+		user_level => "CLI_LEVEL_ENABLE",
+		parent_menu => "root_clear_geneve",
+		uniq_name => "root_clear_geneve_forwarding",
+		help_string => "Clear GENEVE forwarding entries",
+	},
+	{
+		obj_type => "ITEM",
+		name => "static",
+		menu => "root_clear_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API|CMD_KAPI_LOCK",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear all static GENEVE forwarding entries",
+		function_name => "clear_geneve_forwarding_static",
+		function_args => [ {
+		                     type => "U32",
+				     help_string => "VNI number",
+				     optional => "NO",
+				 },
+			 ],
+	},
+	{
+		obj_type => "ITEM",
+		name => "dynamic",
+		menu => "root_clear_geneve_forwarding",
+		cmd_attribute => "CMD_ARRAYOS|CMD_NORMAL|CMD_GLOBAL|CMD_KERN_API",
+		user_level => "CLI_LEVEL_CONFIG",
+		help_string => "Clear all dynamic GENEVE forwarding entries",
+		function_name => "clear_geneve_forwarding_dynamic",
+		function_args => [ {
+		                     type => "U32",
+				     help_string => "VNI number",
+				     optional => "NO",
+				 },
+			 ],
+	},
+# geneve end
 
 # Begin - XMLRPC Commands
 	{
Index: /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/Makefile
===================================================================
--- /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/Makefile	(revision 39037)
+++ /branches/rel_apv_10_7/usr/click/lib/libuinet-atcp/lib/libuinet/Makefile	(working copy)
@@ -408,7 +408,8 @@
 	bridgestp.c \
 	if_media.c \
 	if_mib.c \
-	if_vxlan.c
+	if_vxlan.c \
+	if_geneve.c
 
 NETINET_SRCS+=		\
 	ip_carp.c	\
Index: /branches/rel_apv_10_7/usr/src/sys/conf/files
===================================================================
--- /branches/rel_apv_10_7/usr/src/sys/conf/files	(revision 39037)
+++ /branches/rel_apv_10_7/usr/src/sys/conf/files	(working copy)
@@ -3258,6 +3258,7 @@
 net/if_tap.c			optional tap
 net/if_vlan.c			optional vlan
 net/if_vxlan.c			optional vxlan
+net/if_geneve.c			optional geneve
 net/mppcc.c			optional netgraph_mppc_compression
 net/mppcd.c			optional netgraph_mppc_compression
 net/netisr.c			standard
Index: /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.h
===================================================================
--- /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.h	(revision 0)
+++ /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.h	(working copy)
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2014, Bryan Venteicher <bryanv@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice unmodified, this list of conditions, and the following
+ *    disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _NET_IF_GENEVE_H_
+#define _NET_IF_GENEVE_H_
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/ethernet.h>
+#include <net/if.h>
+#include <netinet/in.h>
+
+#endif /*  _NET_IF_GENEVE_H_ */
\ No newline at end of file
Index: /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.c
===================================================================
--- /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.c	(revision 0)
+++ /branches/rel_apv_10_7/usr/src/sys/net/if_geneve.c	(working copy)
@@ -0,0 +1,108 @@
+#include "opt_inet.h"
+#include "opt_inet6.h"
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/eventhandler.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/hash.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <sys/module.h>
+#include <sys/refcount.h>
+#include <sys/rmlock.h>
+#include <sys/priv.h>
+#include <sys/proc.h>
+#include <sys/queue.h>
+#include <sys/sbuf.h>
+#include <sys/socket.h>
+#include <sys/socketvar.h>
+#include <sys/sockio.h>
+#include <sys/sysctl.h>
+#include <sys/systm.h>
+
+#include <vm/uma.h>
+
+#include <net/bpf.h>
+#include <net/ethernet.h>
+#include <net/if.h>
+#include <net/if_var.h>
+#include <net/if_clone.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <net/if_geneve.h>
+#include <net/netisr.h>
+
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/in_var.h>
+#include <netinet/in_pcb.h>
+#include <netinet/ip.h>
+#include <netinet/ip6.h>
+#include <netinet/ip_var.h>
+#include <netinet6/ip6_var.h>
+#include <netinet/udp.h>
+#include <netinet/udp_var.h>
+
+#include <click/app/proxy/proxy_errs.h>
+#include "kernelWrapper.h"
+#include <click/app/kernelapi/kernelapi.h>
+#include <click/sys/mbuf_atcp.h>
+#include <click/sys/clickaddr.h>
+#include <click/netinet/click_var.h>
+#include <click/app/util/generic_lock.h>
+#include <uinet_host_interface.h>
+#include <uinet_if_dpdk.h>
+
+ca_errcode_t geneve_port_func(void* pcb, uint16_t geneve_port) {
+	app_printf(pcb, "GENEVE port: %d\n", geneve_port);
+	return 0;
+}
+
+ca_errcode_t geneve_enable_func(void* pcb) {
+	app_printf(pcb, "GENEVE enable.\n");
+	return 0;
+}
+
+ca_errcode_t geneve_disable_func(void* pcb) {
+	app_printf(pcb, "GENEVE disable.\n");
+	return 0;
+}
+
+ca_errcode_t geneve_learn_func(void* pcb, char* learn_str) {
+	app_printf(pcb, "GENEVE learn %s.\n", learn_str);
+	return 0;
+}
+
+int geneve_forwarding_remote_add(void* pcb, uint32_t vni, char* mac, char* gtep_ip) {
+	app_printf(pcb, "GENEVE forward remote add vni: %d, mac: %s, dstip: %s\n", vni, mac, gtep_ip);
+	return 0;
+}
+
+int geneve_forwarding_remote_del(void* pcb, uint32_t vni, char* mac)  {
+	app_printf(pcb, "GENEVE forward remote del vni: %d, mac: %s\n", vni, mac);
+	return 0;
+}
+
+int geneve_forwarding_local_add(void* pcb, uint32_t vni, char* mac) {
+	app_printf(pcb, "GENEVE forward local add vni: %d, mac: %s\n", vni, mac);
+	return 0;
+}
+
+int geneve_forwarding_local_del(void* pcb, uint32_t vni, char* mac)  {
+	app_printf(pcb, "GENEVE forward local del vni: %d, dstmac: %s\n", vni, mac);
+	return 0;
+}
+
+int clear_geneve_forwarding_static(void* pcb, uint32_t vni) {
+	app_printf(pcb, "Clear GENEVE forward static vni: %d\n", vni);
+	return 0;
+}
+
+int clear_geneve_forwarding_dynamic(void* pcb, uint32_t vni) {
+	app_printf(pcb, "Clear GENEVE forward dynamic vni: %d\n", vni);
+	return 0;
+}
\ No newline at end of file
