Added NettyMessagingService constructor that accepts both ip and port
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java
index 55d8b1a..42d89de 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java
@@ -67,7 +67,7 @@
     @Activate
     public void activate() {
         ControllerNode localNode = clusterService.getLocalNode();
-        NettyMessagingService netty = new NettyMessagingService(localNode.tcpPort());
+        NettyMessagingService netty = new NettyMessagingService(localNode.ip().toString(), localNode.tcpPort());
         // FIXME: workaround until it becomes a service.
         try {
             netty.activate();
diff --git a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
index 938ec7b..04de356 100644
--- a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
+++ b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
@@ -44,8 +44,7 @@
     public void respond(byte[] data) throws IOException {
         Builder builder = new Builder(messagingService);
         InternalMessage message = builder.withId(this.id)
-             // FIXME: Sender should be messagingService.localEp.
-            .withSender(this.sender)
+            .withSender(messagingService.localEp())
             .withPayload(data)
             .withType(REPLY_MESSAGE_TYPE)
             .build();
diff --git a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
index 2f3e039..5ef1768 100644
--- a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
+++ b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
@@ -42,7 +42,6 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private final int port;
     private final Endpoint localEp;
     private final ConcurrentMap<String, MessageHandler> handlers = new ConcurrentHashMap<>();
     private final Cache<Long, AsyncResponse> responseFutures = CacheBuilder.newBuilder()
@@ -77,6 +76,10 @@
         clientChannelClass = NioSocketChannel.class;
     }
 
+    public NettyMessagingService(String ip, int port) {
+        localEp = new Endpoint(ip, port);
+    }
+
     public NettyMessagingService() {
         // TODO: Default port should be configurable.
         this(8080);
@@ -84,7 +87,6 @@
 
     // FIXME: Constructor should not throw exceptions.
     public NettyMessagingService(int port) {
-        this.port = port;
         try {
             localEp = new Endpoint(java.net.InetAddress.getLocalHost().getHostName(), port);
         } catch (UnknownHostException e) {
@@ -106,6 +108,14 @@
         clientGroup.shutdownGracefully();
     }
 
+    /**
+     * Returns the local endpoint for this instance.
+     * @return local end point.
+     */
+    public Endpoint localEp() {
+        return localEp;
+    }
+
     @Override
     public void sendAsync(Endpoint ep, String type, byte[] payload) throws IOException {
         InternalMessage message = new InternalMessage.Builder(this)
@@ -127,7 +137,7 @@
                 channels.returnObject(ep, channel);
             }
         } catch (Exception e) {
-            throw new IOException(e);
+            throw new IOException("Failed to send message to " + ep.toString(), e);
         }
     }
 
@@ -174,7 +184,7 @@
             .childOption(ChannelOption.SO_KEEPALIVE, true);
 
         // Bind and start to accept incoming connections.
-        b.bind(port).sync();
+        b.bind(localEp.port()).sync();
     }
 
     private class OnosCommunicationChannelFactory