Avoid accidental link type override

Change-Id: I3462838f8208c231f7b7ff24e63a03984fae4475
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
index eeed07f..7e6af79 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
@@ -53,6 +53,15 @@
     }
 
     /**
+     * Returns if the link type is configured.
+     *
+     * @return true if config contains link type
+     */
+    public boolean isTypeConfigured() {
+        return hasField(TYPE);
+    }
+
+    /**
      * Returns the link type.
      *
      * @return link type override
diff --git a/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java b/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
index 7795f77..9247b83 100644
--- a/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
+++ b/core/net/src/main/java/org/onosproject/net/link/impl/BasicLinkOperator.java
@@ -58,11 +58,11 @@
             return descr;
         }
 
-        // cfg.type() defaults to DIRECT, so there is a risk of unwanted override.
-        // do we want this behavior?
         Link.Type type = descr.type();
-        if (cfg.type() != type) {
-            type = cfg.type();
+        if (cfg.isTypeConfigured()) {
+            if (cfg.type() != type) {
+                type = cfg.type();
+            }
         }
 
         SparseAnnotations sa = combine(cfg, descr.annotations());