VOL-1848 API for setting and querying loglevel of api-server;
Add source-router to support routing UpdateLogLevel to cores;
Add logging endpoints to rocore

Change-Id: I89eea3599ea3006fe92e6917221cd1fd235ec5e4
diff --git a/afrouter/afrouter/binding-router.go b/afrouter/afrouter/binding-router.go
index c0ff315..467b1e6 100644
--- a/afrouter/afrouter/binding-router.go
+++ b/afrouter/afrouter/binding-router.go
@@ -80,40 +80,41 @@
 func (br BindingRouter) ReplyHandler(v interface{}) error {
 	return nil
 }
-func (br BindingRouter) Route(sel interface{}) *backend {
+func (br BindingRouter) Route(sel interface{}) (*backend, *connection) {
 	var err error
 	switch sl := sel.(type) {
 	case *requestFrame:
 		if b, ok := br.bindings[sl.metaVal]; ok == true { // binding exists, just return it
-			return b
+			return b, nil
 		} else { // establish a new binding or error.
 			if sl.metaVal != "" {
 				err = errors.New(fmt.Sprintf("Attempt to route on non-existent metadata value '%s' in key '%s'",
 					sl.metaVal, sl.metaKey))
 				log.Error(err)
 				sl.err = err
-				return nil
+				return nil, nil
 			}
 			if sl.methodInfo.method != br.bindingMethod {
 				err = errors.New(fmt.Sprintf("Binding must occur with method %s but attempted with method %s",
 					br.bindingMethod, sl.methodInfo.method))
 				log.Error(err)
 				sl.err = err
-				return nil
+				return nil, nil
 			}
 			log.Debugf("MUST CREATE A NEW BINDING MAP ENTRY!!")
 			if *br.currentBackend, err = br.beCluster.nextBackend(*br.currentBackend, BackendSequenceRoundRobin); err == nil {
 				// Use the name of the backend as the metaVal for this new binding
 				br.bindings[(*br.currentBackend).name] = *br.currentBackend
-				return *br.currentBackend
+				return *br.currentBackend, nil
+
 			} else {
 				log.Error(err)
 				sl.err = err
-				return nil
+				return nil, nil
 			}
 		}
 	default:
-		return nil
+		return nil, nil
 	}
 }