Index: uspace/srv/ethip/ethip_nic.c
===================================================================
--- uspace/srv/ethip/ethip_nic.c	(revision df15e5f181264043903da170259c6dba1dd99a30)
+++ uspace/srv/ethip/ethip_nic.c	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
@@ -303,4 +303,5 @@
 int ethip_nic_send(ethip_nic_t *nic, void *data, size_t size)
 {
+	log_msg(LVL_DEBUG, "ethip_nic_send(size=%zu)", size);
 	return nic_send_frame(nic->sess, data, size);
 }
Index: uspace/srv/inet/inet.c
===================================================================
--- uspace/srv/inet/inet.c	(revision df15e5f181264043903da170259c6dba1dd99a30)
+++ uspace/srv/inet/inet.c	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
@@ -122,10 +122,35 @@
 }
 
+static int inet_get_srcaddr(inet_client_t *client, inet_addr_t *remote,
+    uint8_t tos, inet_addr_t *local)
+{
+	inet_addrobj_t *addr;
+
+	addr = inet_addrobj_find(remote, iaf_net);
+	if (addr != NULL) {
+		/* Destination is directly accessible */
+		local->ipv4 = addr->naddr.ipv4;
+		return EOK;
+	}
+
+	return ENOENT;
+}
+
 static void inet_get_srcaddr_srv(inet_client_t *client, ipc_callid_t callid,
     ipc_call_t *call)
 {
+	inet_addr_t remote;
+	uint8_t tos;
+	inet_addr_t local;
+	int rc;
+
 	log_msg(LVL_DEBUG, "inet_get_srcaddr_srv()");
 
-	async_answer_0(callid, ENOTSUP);
+	remote.ipv4 = IPC_GET_ARG1(*call);
+	tos = IPC_GET_ARG2(*call);
+	local.ipv4 = 0;
+
+	rc = inet_get_srcaddr(client, &remote, tos, &local);
+	async_answer_1(callid, rc, local.ipv4);
 }
 
