conman:  Read cwmp output from /config, not /tmp.

This prevents having to reprovision after the device reboots.
Corresponding CLs will be needed for apman and Catawampus.

Change-Id: Iad6e63d478b851130c113562cf79a482f8dbeba5
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index 829fda4..abfcb36 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -178,6 +178,7 @@
   def __init__(self,
                bridge_interface='br0',
                status_dir='/tmp/conman',
+               config_dir='/config/conman',
                moca_status_dir='/tmp/cwmp/monitoring/moca2',
                wpa_control_interface='/var/run/wpa_supplicant',
                run_duration_s=1, interface_update_period=5,
@@ -201,6 +202,7 @@
                        key=lambda w: w.metric)
 
     self._status_dir = status_dir
+    self._config_dir = config_dir
     self._interface_status_dir = os.path.join(status_dir, 'interfaces')
     self._moca_status_dir = moca_status_dir
     self._wpa_control_interface = wpa_control_interface
@@ -215,16 +217,18 @@
     self._wlan_configuration = {}
 
     # Make sure all necessary directories exist.
-    for directory in (self._status_dir, self._interface_status_dir,
-                      self._moca_status_dir):
+    for directory in (self._status_dir, self._config_dir,
+                      self._interface_status_dir, self._moca_status_dir):
       if not os.path.exists(directory):
         os.makedirs(directory)
         logging.info('Created monitored directory: %s', directory)
 
     wm = pyinotify.WatchManager()
-    wm.add_watch(self._status_dir,
+    wm.add_watch(self._config_dir,
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO |
                  pyinotify.IN_DELETE | pyinotify.IN_MOVED_FROM)
+    wm.add_watch(self._status_dir,
+                 pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     wm.add_watch(self._interface_status_dir,
                  pyinotify.IN_CLOSE_WRITE | pyinotify.IN_MOVED_TO)
     wm.add_watch(self._moca_status_dir,
@@ -242,7 +246,7 @@
     for path, prefix in ((self._status_dir, self.GATEWAY_FILE_PREFIX),
                          (self._interface_status_dir, ''),
                          (self._moca_status_dir, self.MOCA_NODE_FILE_PREFIX),
-                         (self._status_dir, self.COMMAND_FILE_PREFIX)):
+                         (self._config_dir, self.COMMAND_FILE_PREFIX)):
       for filepath in glob.glob(os.path.join(path, prefix + '*')):
         self._process_file(path, os.path.split(filepath)[-1])
 
@@ -429,7 +433,7 @@
       self._process_file(path, filename)
 
   def _handle_deleted_file(self, path, filename):
-    if path == self._status_dir:
+    if path == self._config_dir:
       match = re.match(self.COMMAND_FILE_REGEXP, filename)
       if match:
         band = match.group('band')
@@ -474,7 +478,7 @@
                         contents)
           return
 
-    if path == self._status_dir:
+    elif path == self._config_dir:
       if filename.startswith(self.COMMAND_FILE_PREFIX):
         match = re.match(self.COMMAND_FILE_REGEXP, filename)
         if match:
@@ -490,7 +494,9 @@
           if band in self._wlan_configuration:
             self._wlan_configuration[band].access_point = True
           logging.debug('AP enabled for %s GHz', band)
-      elif filename.startswith(self.GATEWAY_FILE_PREFIX):
+
+    elif path == self._status_dir:
+      if filename.startswith(self.GATEWAY_FILE_PREFIX):
         interface_name = filename.split(self.GATEWAY_FILE_PREFIX)[-1]
         ifc = self.interface_by_name(interface_name)
         if ifc:
@@ -586,7 +592,7 @@
         wlan_configuration.access_point = current.access_point
       else:
         ap_file = os.path.join(
-            self._status_dir, self.ACCESS_POINT_FILE_PREFIX +
+            self._config_dir, self.ACCESS_POINT_FILE_PREFIX +
             (('%s.' % wlan_configuration.interface_suffix)
              if wlan_configuration.interface_suffix else '') + band)
         wlan_configuration.access_point = os.path.exists(ap_file)
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index 0903c15..19264f7 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -285,10 +285,10 @@
   # Test methods
 
   def wlan_config_filename(self, band):
-    return os.path.join(self._status_dir, 'command.%s' % band)
+    return os.path.join(self._config_dir, 'command.%s' % band)
 
   def access_point_filename(self, band):
-    return os.path.join(self._status_dir, 'access_point.%s' % band)
+    return os.path.join(self._config_dir, 'access_point.%s' % band)
 
   def delete_wlan_config(self, band):
     os.unlink(self.wlan_config_filename(band))
@@ -364,6 +364,7 @@
       try:
         # No initial state.
         status_dir = tempfile.mkdtemp()
+        config_dir = tempfile.mkdtemp()
         os.mkdir(os.path.join(status_dir, 'interfaces'))
         moca_status_dir = tempfile.mkdtemp()
         wpa_control_interface = tempfile.mkdtemp()
@@ -372,6 +373,7 @@
         shutil.rmtree(status_dir)
 
         c = ConnectionManager(status_dir=status_dir,
+                              config_dir=config_dir,
                               moca_status_dir=moca_status_dir,
                               wpa_control_interface=wpa_control_interface,
                               run_duration_s=run_duration_s,
@@ -385,6 +387,7 @@
 
       finally:
         shutil.rmtree(status_dir)
+        shutil.rmtree(config_dir)
         shutil.rmtree(moca_status_dir)
         shutil.rmtree(wpa_control_interface)
         # pylint: disable=protected-access