Index: uspace/lib/c/generic/iplink.c
===================================================================
--- uspace/lib/c/generic/iplink.c	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
+++ uspace/lib/c/generic/iplink.c	(revision f9d3dd42a7fa78eec449a5bdb934e3fbe205b4f8)
@@ -121,4 +121,24 @@
 }
 
+int iplink_addr_add(iplink_t *iplink, iplink_addr_t *addr)
+{
+	async_exch_t *exch = async_exchange_begin(iplink->sess);
+
+	int rc = async_req_1_0(exch, IPLINK_ADDR_ADD, (sysarg_t)addr->ipv4);
+	async_exchange_end(exch);
+
+	return rc;
+}
+
+int iplink_addr_remove(iplink_t *iplink, iplink_addr_t *addr)
+{
+	async_exch_t *exch = async_exchange_begin(iplink->sess);
+
+	int rc = async_req_1_0(exch, IPLINK_ADDR_REMOVE, (sysarg_t)addr->ipv4);
+	async_exchange_end(exch);
+
+	return rc;
+}
+
 static void iplink_ev_recv(iplink_t *iplink, ipc_callid_t callid,
     ipc_call_t *call)
Index: uspace/lib/c/generic/iplink_srv.c
===================================================================
--- uspace/lib/c/generic/iplink_srv.c	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
+++ uspace/lib/c/generic/iplink_srv.c	(revision f9d3dd42a7fa78eec449a5bdb934e3fbe205b4f8)
@@ -49,4 +49,28 @@
 	rc = srv->ops->get_mtu(srv, &mtu);
 	async_answer_1(callid, rc, mtu);
+}
+
+static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t callid,
+    ipc_call_t *call)
+{
+	int rc;
+	iplink_srv_addr_t addr;
+
+	addr.ipv4 = IPC_GET_ARG1(*call);
+
+	rc = srv->ops->addr_add(srv, &addr);
+	async_answer_0(callid, rc);
+}
+
+static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t callid,
+    ipc_call_t *call)
+{
+	int rc;
+	iplink_srv_addr_t addr;
+
+	addr.ipv4 = IPC_GET_ARG1(*call);
+
+	rc = srv->ops->addr_remove(srv, &addr);
+	async_answer_0(callid, rc);
 }
 
@@ -126,4 +150,10 @@
 			iplink_send_srv(srv, callid, &call);
 			break;
+		case IPLINK_ADDR_ADD:
+			iplink_addr_add_srv(srv, callid, &call);
+			break;
+		case IPLINK_ADDR_REMOVE:
+			iplink_addr_remove_srv(srv, callid, &call);
+			break;
 		default:
 			async_answer_0(callid, EINVAL);
Index: uspace/lib/c/include/inet/iplink.h
===================================================================
--- uspace/lib/c/include/inet/iplink.h	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
+++ uspace/lib/c/include/inet/iplink.h	(revision f9d3dd42a7fa78eec449a5bdb934e3fbe205b4f8)
@@ -69,4 +69,6 @@
 extern void iplink_close(iplink_t *);
 extern int iplink_send(iplink_t *, iplink_sdu_t *);
+extern int iplink_addr_add(iplink_t *, iplink_addr_t *);
+extern int iplink_addr_remove(iplink_t *, iplink_addr_t *);
 extern int iplink_get_mtu(iplink_t *, size_t *);
 
Index: uspace/lib/c/include/inet/iplink_srv.h
===================================================================
--- uspace/lib/c/include/inet/iplink_srv.h	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
+++ uspace/lib/c/include/inet/iplink_srv.h	(revision f9d3dd42a7fa78eec449a5bdb934e3fbe205b4f8)
@@ -72,4 +72,6 @@
 	int (*send)(iplink_srv_t *, iplink_srv_sdu_t *);
 	int (*get_mtu)(iplink_srv_t *, size_t *);
+	int (*addr_add)(iplink_srv_t *, iplink_srv_addr_t *);
+	int (*addr_remove)(iplink_srv_t *, iplink_srv_addr_t *);
 } iplink_ops_t;
 
Index: uspace/lib/c/include/ipc/iplink.h
===================================================================
--- uspace/lib/c/include/ipc/iplink.h	(revision bd8bfc5a1e64e744c8d4a01e764930e6e96c38bf)
+++ uspace/lib/c/include/ipc/iplink.h	(revision f9d3dd42a7fa78eec449a5bdb934e3fbe205b4f8)
@@ -40,5 +40,7 @@
 typedef enum {
 	IPLINK_GET_MTU = IPC_FIRST_USER_METHOD,
-	IPLINK_SEND
+	IPLINK_SEND,
+	IPLINK_ADDR_ADD,
+	IPLINK_ADDR_REMOVE
 } iplink_request_t;
 
