Index: uspace/srv/net/inetsrv/sroute.c
===================================================================
--- uspace/srv/net/inetsrv/sroute.c	(revision a2e3ee6092cd450ed63e80fa45ddb46a740aa02c)
+++ uspace/srv/net/inetsrv/sroute.c	(revision 69b264a9735df226a05998fb3c1faab281862562)
@@ -42,9 +42,7 @@
 #include <stdlib.h>
 #include <str.h>
-
 #include "sroute.h"
 #include "inetsrv.h"
 #include "inet_link.h"
-#include "inet_util.h"
 
 static FIBRIL_MUTEX_INITIALIZE(sroute_list_lock);
@@ -97,8 +95,5 @@
 inet_sroute_t *inet_sroute_find(inet_addr_t *addr)
 {
-	uint32_t addr_addr;
-	int rc = inet_addr_pack(addr, &addr_addr);
-	if (rc != EOK)
-		return NULL;
+	uint16_t addr_af = inet_addr_get(addr, NULL, NULL);
 	
 	inet_sroute_t *best = NULL;
@@ -111,8 +106,10 @@
 		    inet_sroute_t, sroute_list);
 		
-		uint32_t dest_addr;
 		uint8_t dest_bits;
-		rc = inet_naddr_pack(&sroute->dest, &dest_addr, &dest_bits);
-		if (rc != EOK)
+		uint16_t dest_af = inet_naddr_get(&sroute->dest, NULL, NULL,
+		    &dest_bits);
+		
+		/* Skip comparison with different address family */
+		if (addr_af != dest_af)
 			continue;
 		
@@ -121,6 +118,5 @@
 			continue;
 		
-		uint32_t mask = inet_netmask(dest_bits);
-		if ((dest_addr & mask) == (addr_addr & mask)) {
+		if (inet_naddr_compare_mask(&sroute->dest, addr)) {
 			log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_sroute_find: found candidate %p",
 			    sroute);
