ONOS-5629: Enable encapsulation in SDN-IP

Change-Id: I4c3dbe877fd009302938b228fc9af40225d75329
diff --git a/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIp.java b/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIp.java
index 643bb2b..249a2da 100644
--- a/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIp.java
+++ b/apps/sdnip/src/main/java/org/onosproject/sdnip/SdnIp.java
@@ -26,9 +26,13 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.incubator.component.ComponentService;
 import org.onosproject.incubator.net.intf.InterfaceService;
+import org.onosproject.net.config.ConfigFactory;
+import org.onosproject.net.config.NetworkConfigRegistry;
 import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.routing.IntentSynchronizationService;
 import org.onosproject.routing.RoutingService;
+import org.onosproject.sdnip.config.SdnIpConfig;
 import org.slf4j.Logger;
 
 import java.util.List;
@@ -60,6 +64,9 @@
     protected IntentSynchronizationService intentSynchronizer;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected NetworkConfigRegistry cfgRegistry;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected ComponentService componentService;
 
     private PeerConnectivityManager peerConnectivity;
@@ -72,12 +79,23 @@
             org.onosproject.sdnip.SdnIpFib.class.getName()
     );
 
+    private final List<ConfigFactory<?, ?>> factories = ImmutableList.of(
+            new ConfigFactory<ApplicationId, SdnIpConfig>(SubjectFactories.APP_SUBJECT_FACTORY,
+                                                          SdnIpConfig.class, SdnIpConfig.CONFIG_KEY) {
+                @Override
+                public SdnIpConfig createConfig() {
+                    return new SdnIpConfig();
+                }
+            });
+
     @Activate
     protected void activate() {
-        components.forEach(name -> componentService.activate(appId, name));
-
         appId = coreService.registerApplication(SDN_IP_APP);
 
+        factories.forEach(cfgRegistry::registerConfigFactory);
+
+        components.forEach(name -> componentService.activate(appId, name));
+
         peerConnectivity = new PeerConnectivityManager(appId,
                                                        intentSynchronizer,
                                                        networkConfigService,
@@ -95,6 +113,8 @@
     protected void deactivate() {
         components.forEach(name -> componentService.deactivate(appId, name));
 
+        factories.forEach(cfgRegistry::unregisterConfigFactory);
+
         peerConnectivity.stop();
 
         log.info("Stopped");