Index: uspace/lib/c/generic/iplink_srv.c
===================================================================
--- uspace/lib/c/generic/iplink_srv.c	(revision 02a09ed9ab72cd7eb2ca3f11873db078ab906acc)
+++ uspace/lib/c/generic/iplink_srv.c	(revision db71e2af5cdfe169de296e6f39b3e5eda7a966f6)
@@ -50,4 +50,35 @@
 }
 
+static void iplink_get_mac48_srv(iplink_srv_t *srv, ipc_callid_t iid,
+    ipc_call_t *icall)
+{
+	addr48_t mac;
+	int rc = srv->ops->get_mac48(srv, &mac);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	ipc_callid_t callid;
+	size_t size;
+	if (!async_data_read_receive(&callid, &size)) {
+		async_answer_0(callid, EREFUSED);
+		async_answer_0(iid, EREFUSED);
+		return;
+	}
+	
+	if (size != sizeof(addr48_t)) {
+		async_answer_0(callid, EINVAL);
+		async_answer_0(iid, EINVAL);
+		return;
+	}
+	
+	rc = async_data_read_finalize(callid, &mac, size);
+	if (rc != EOK)
+		async_answer_0(callid, rc);
+	
+	async_answer_0(iid, (sysarg_t) rc);
+}
+
 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid,
     ipc_call_t *icall)
@@ -111,4 +142,24 @@
 	iplink_sdu_t sdu;
 	
+	sdu.src = IPC_GET_ARG1(*icall);
+	sdu.dest = IPC_GET_ARG2(*icall);
+	
+	int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
+	    &sdu.size);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	rc = srv->ops->send(srv, &sdu);
+	free(sdu.data);
+	async_answer_0(iid, rc);
+}
+
+static void iplink_send6_srv(iplink_srv_t *srv, ipc_callid_t iid,
+    ipc_call_t *icall)
+{
+	iplink_sdu6_t sdu;
+	
 	ipc_callid_t callid;
 	size_t size;
@@ -119,5 +170,5 @@
 	}
 	
-	if (size != sizeof(inet_addr_t)) {
+	if (size != sizeof(addr48_t)) {
 		async_answer_0(callid, EINVAL);
 		async_answer_0(iid, EINVAL);
@@ -125,5 +176,5 @@
 	}
 	
-	int rc = async_data_write_finalize(callid, &sdu.src, size);
+	int rc = async_data_write_finalize(callid, &sdu.dest, size);
 	if (rc != EOK) {
 		async_answer_0(callid, (sysarg_t) rc);
@@ -131,28 +182,12 @@
 	}
 	
-	if (!async_data_write_receive(&callid, &size)) {
-		async_answer_0(callid, EREFUSED);
-		async_answer_0(iid, EREFUSED);
-		return;
-	}
-	
-	if (size != sizeof(inet_addr_t)) {
-		async_answer_0(callid, EINVAL);
-		async_answer_0(iid, EINVAL);
-		return;
-	}
-	
-	rc = async_data_write_finalize(callid, &sdu.dest, size);
-	if (rc != EOK) {
-		async_answer_0(callid, (sysarg_t) rc);
-		async_answer_0(iid, (sysarg_t) rc);
-	}
-	
 	rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
 	    &sdu.size);
-	if (rc != EOK)
-		return;
-	
-	rc = srv->ops->send(srv, &sdu);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	rc = srv->ops->send6(srv, &sdu);
 	free(sdu.data);
 	async_answer_0(iid, rc);
@@ -170,5 +205,5 @@
 int iplink_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
-	iplink_srv_t *srv = (iplink_srv_t *)arg;
+	iplink_srv_t *srv = (iplink_srv_t *) arg;
 	int rc;
 	
@@ -214,6 +249,12 @@
 			iplink_get_mtu_srv(srv, callid, &call);
 			break;
+		case IPLINK_GET_MAC48:
+			iplink_get_mac48_srv(srv, callid, &call);
+			break;
 		case IPLINK_SEND:
 			iplink_send_srv(srv, callid, &call);
+			break;
+		case IPLINK_SEND6:
+			iplink_send6_srv(srv, callid, &call);
 			break;
 		case IPLINK_ADDR_ADD:
