Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/geneve/__init__.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/geneve/__init__.py	(revision 0)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/geneve/__init__.py	(working copy)
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+SPLIT_CHAR = "ÿÿÿÿÿ"
+
+class CLI_FIELD():
+    ENABLE = "geneve enable"
+    DISABLE = "geneve disable"
+    LEARN_ON = "geneve learn on"
+    LEARN_OFF = "geneve learn off"
+    PORT = "geneve port "
+    NAME = "name"
+    VNI = "vni"
+
+class API_FILED():
+    ENABLE = "enable"
+    LEARNING = "learning"
+    PORT = "port"
+    NAME = "name"
+    VNI = "vni"
+    VLAN = "vlan"
+    LOCAL_IP = "local_ip"
+    REMOTE_IP = "remote_ip"
+    MAC = "mac"
+    GTEP_IP = "gtep_ip"
+    TYPE = "type"
+    LOCATION = "location"
+    CONTENT = "content"
+
+class INPUT_FIELD():
+    PK = "pk"
+    VNI = "vni"
+    MAC = "mac"
+    GTEP_IP = "gtep_ip"
+    TYPE = "type"
+    NAME = "name"
+    LOCAL_IP = "local_ip"
+    REMOTE_IP = "remote_ip"
+    INTERFACE = "interface"
+    VLAN = "vlan"
+    TUNNELS = "tunnels"
+    TUNNEL = "tunnel"
+
+class FORWARDING_DIRECTION():
+    REMOTE_CODE = 1
+    LOCAL_CODE = 2
+    REMOTE_TYPE = "remote"
+    LOCAL_TYPE = "local"
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/router.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/router.py	(revision 39287)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/router.py	(working copy)
@@ -789,4 +789,15 @@
             template = env.get_template("/monitoring/prometheus/index/log.html")
             response = HttpResponse(template.render())
             return response
-    raise Http404('Page not found')
\ No newline at end of file
+    raise Http404('Page not found')
+
+def geneve_log_download(request):
+    sess = get_current_session()
+    sess.cli.set_enable()
+    logs = sess.cli.cmd('show geneve all')
+    cur_time = time.strftime("%Y%m%d%H%M%S", time.localtime())
+    file_name = "%s_%s.%s" % ("GENEVE_log", cur_time, 'txt')
+    response = HttpResponse(logs)
+    response['Content-Type'] = 'text/plain; charset=utf-8'
+    response['Content-Disposition'] = 'attachment; filename=%s' % file_name
+    return response
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/urls.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/urls.py	(revision 39287)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/urls.py	(working copy)
@@ -59,4 +59,5 @@
     url(r'^%s/%s/get_topology$' % (PRODUCT_KEYWORD, C_PATH_GSLB), get_topology),
     url(r'^%s/%s/get_top_chart_data$' % (PRODUCT_KEYWORD, C_PATH_GSLB), get_top_chart_data),
     url(r'^%s/%s/get_hits_chart_data$' % (PRODUCT_KEYWORD, C_PATH_GSLB), get_hits_chart_data),
+    url(r'^%s/network/geneve/download' % PRODUCT_KEYWORD, geneve_log_download),
 )
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py	(revision 39287)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/model/ajax.py	(working copy)
@@ -31,6 +31,7 @@
 from djproject.an_settings import GRAPH_DB_FILE_LIST
 from hive.utils import escapehtml 
 import sqlite3, re
+import traceback
 
 TIMEFORMAT='%Y-%m-%d %X'
         
@@ -1148,6 +1149,28 @@
                 ret['error'] = unicode(_('Fails to save statistics data.'))
         return json.dumps(ret)
 
+    def get_info(self, **kwargs):
+        if 'initial_filter' not in kwargs:
+            raise Http404('no initial_filter provided')
+        try:
+            pk_list = json.loads(kwargs['initial_filter'])
+            instance = self.manager.get(pk_list)
+            data = instance.get_field_dict()
+            output = {}
+            for key, val in data.items():
+                if isinstance(val, dict):
+                    if "ipv4" in val and val["ipv4"]:
+                        output[key] = val["ipv4"]
+                    if "ipv6" in val and val["ipv6"]:
+                        output[key] = val["ipv6"]
+                    continue
+                output[key] = val
+            return json.dumps(output)
+        except Exception:
+            traceback.print_exc()
+            err_msg = traceback.format_exc()
+            return json.dumps([True, [['warning',unicode(_("Error occurred: {msg}".format(msg=err_msg) ))]]])
+
 class ObjectAjaxHandler(object):
     def __init__(self, request, session, app, model, action, pk):
         self.request = request
Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py	(revision 39287)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/hive/utils.py	(working copy)
@@ -592,7 +592,15 @@
         except:
             return False
     return True
-    
+
+def get_ip_by_field(data, field):
+    ip_str = ""
+    if "ipv4" in data[field]:
+        ip_str = data[field]["ipv4"]
+    elif "ipv6" in data[field]:
+        ip_str = data[field]["ipv6"]
+    return ip_str
+
 def get_sysctl_int(name):
     try:
         fh = open("/lib/libc.so.7", "r")
