Changed trivial core behaviour to claim switch as a master by default and to apply role to the switch.
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
index e522064..ac84e7b 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -27,8 +27,11 @@
 import org.slf4j.Logger;
 
 import java.util.List;
+import java.util.concurrent.ExecutorService;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -53,6 +56,9 @@
 
     private final SimpleDeviceStore store = new SimpleDeviceStore();
 
+    private final ExecutorService executor =
+            newSingleThreadExecutor(namedThreads("onos-device-%d"));
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected EventDeliveryService eventDispatcher;
 
@@ -163,6 +169,11 @@
             DeviceEvent event = store.createOrUpdateDevice(provider().id(),
                                                            deviceId, deviceDescription);
             post(event);
+
+            // If there was a change of any kind, trigger role selection process.
+            if (event != null) {
+                triggerRoleSelection(event.subject(), provider());
+            }
         }
 
         @Override
@@ -199,6 +210,22 @@
         }
     }
 
+    /**
+     * Triggers asynchronous role selection.
+     *
+     * @param device   device
+     * @param provider device provider
+     */
+    private void triggerRoleSelection(final Device device,
+                                      final DeviceProvider provider) {
+        executor.execute(new Runnable() {
+            @Override
+            public void run() {
+                provider.roleChanged(device, store.getRole(device.id()));
+            }
+        });
+    }
+
     // Posts the specified event to the local event dispatcher.
     private void post(DeviceEvent event) {
         if (event != null && eventDispatcher != null) {