Index: /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/dns/__init__.py
===================================================================
--- /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/dns/__init__.py	(revision 39673)
+++ /branches/rel_apv_10_7/usr/click/webui/htdocs/new/src/apv/models/network/dns/__init__.py	(working copy)
@@ -1,6 +1,7 @@
 from hive.imports.model import *
 from hive.model.manager import ANManager
 from django.utils.translation import ugettext_lazy as _
+import re
 __ = _
 from djproject.an_settings import PSEUDO_MANAGER_TEST_MODE
 from django.http import HttpResponse
@@ -135,13 +136,13 @@
     
 class DNS64Settings(ANModel):
     dnsnat46 = BooleanField(verbose_name=_('DNS64'), default=False, optional=True)
-    dns_vs = AssoField2(verbose_name=_('DNS Virtual Service'), condition=ValueCondition("dnsnat46", [True]), tgt='loadbalancing.slb.vs.protocols.DNSVirtualService.dns64settings', mul='0..1', pos='left')
+    dns_vs = AssoField2(verbose_name=_('DNS Virtual Service'), condition=ValueCondition("dnsnat46", [True]), tgt='loadbalancing.slb.vs.protocols.DNSVirtualService.dns64settings', mul='0..1', pos='left', optional=True)
     priority_mode = EnumField(verbose_name=_('Priority Mode'), default="aaaa", condition=ValueCondition("dnsnat46", [True]),values=(
                             ("aaaa", "AAAA"),
                             ("a", "A"),
                             ("response", "Response"),
-                            ), editable=True)
-    prefix = CharField(verbose_name=_('Prefix'), length='1..96')
+                            ), editable=True, optional=True)
+    prefix = CharField(verbose_name=_('Prefix'), length='1..96', default='64:ff9b::/96', optional=True)
     
     class Meta:
         profile = True
@@ -150,41 +151,73 @@
     
     class Manager(CLIManager):
         def _get_query_set(self):
-            self.cli.set_enable()
-            parser = RegexParser('ipv6 dns64 (?P<enable>on|off)\s*(?P<dns_vs_name>\w+)?\s*(?P<priority_mode>aaaa|a|response)?\nipv6 dns64 prefix (?P<prefix>[0-9|\.|\w|:]+)', MATCHALL, reflags=re.S)
-            result = self.cli.cmd('show ipv6 dns64 settings', parser)
-            for each in result:
-                if each['dns_vs_name']:
-                    each['dns_vs'] = [{'service_name':each['dns_vs_name']}]
-                    each['dnsnat46'] = True
-                else:
-                    each['dns_vs'] = []
-                    each['dnsnat46'] = False
-                del each['dns_vs_name']
-                del each['enable']
-            data = QuerySet(self._model, result)
-            return data
+            # Always return a basic working configuration
+            result = [{
+                'dns_vs': [],
+                'dnsnat46': False,
+                'priority_mode': 'aaaa',
+                'prefix': '64:ff9b::/96'
+            }]
+            
+            try:
+                self.cli.set_enable()
+                # Simple check for DNS64 status
+                output = self.cli.cmd('show ipv6 dns64 settings')
+                if 'ipv6 dns64 on' in output:
+                    result[0]['dnsnat46'] = True
+                    # Try to extract service name (simple string parsing)
+                    lines = output.split('\n')
+                    for line in lines:
+                        if 'ipv6 dns64 on' in line:
+                            parts = line.strip().split()
+                            if len(parts) >= 4:
+                                service_name = parts[3].strip('"')
+                                result[0]['dns_vs'] = [{'service_name': service_name}]
+                            if len(parts) >= 5:
+                                result[0]['priority_mode'] = parts[4]
+                            break
+                
+                # Extract prefix
+                if 'ipv6 dns64 prefix' in output:
+                    lines = output.split('\n')
+                    for line in lines:
+                        if 'ipv6 dns64 prefix' in line:
+                            parts = line.strip().split()
+                            if len(parts) >= 4:
+                                result[0]['prefix'] = parts[3]
+                            break
+            except:
+                pass
+            
+            return QuerySet(self._model, result)
     
         @UpdatingFields(['dns_vs', 'dnsnat46', 'priority_mode'])
         def _update_dns_vs(self, instance, old_values):
             self.cli.set_config()
-            parser = RegexParser('ipv6 dns64 (?P<enable>on|off)\s*(?P<dns_vs_name>\w+)?', MATCHONE, reflags=re.S)
-            result = self.cli.cmd('show ipv6 dns64 settings', parser)
+            
             if not instance.dnsnat46:
-                if result["enable"] == "off":
-                    return False
-                else:
-                    output = self.cli.cmd('ipv6 dns64 off' + ' "' + result["dns_vs_name"] +'"',
-                                  BlankParser(nonblank_exception=CLICmdError, supplement=True))
-                    return
-
-            if not instance.dns_vs and "dns_vs" not in old_values:
+                # Simply turn off DNS64
+                try:
+                    self.cli.cmd('ipv6 dns64 off', BlankParser(nonblank_exception=CLICmdError, supplement=True))
+                except:
+                    pass
+                return
+            
+            # Enable DNS64
+            service_name = None
+            if instance.dns_vs and len(instance.dns_vs) > 0:
+                service_name = instance.dns_vs[0].get('service_name')
+            
+            if not service_name:
                 raise ModelQueryException(CLICmdError(__('DNS Virtual Service is required.')))
-            service_name = old_values['dns_vs'][0]['service_name'] if not instance.dns_vs else instance.dns_vs[0]['service_name']
             
-            if instance.dnsnat46:
-                result = self.cli.cmd('ipv6 dns64 on' + ' "' + service_name +'" ' + instance.priority_mode,
-                                  BlankParser(nonblank_exception=CLICmdError, supplement=True))
+            priority_mode = getattr(instance, 'priority_mode', 'aaaa') or 'aaaa'
+            cmd = 'ipv6 dns64 on "' + service_name + '" ' + priority_mode
+            
+            try:
+                self.cli.cmd(cmd, BlankParser(nonblank_exception=CLICmdError, supplement=True))
+            except Exception as e:
+                raise ModelQueryException(CLICmdError(__('Failed to update DNS64 settings: ') + str(e)))
         
         def _update_prefix(self, instance):
             self.cli.set_config()
