diff -purN a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c
--- a/sysdep/bsd/krt-sock.c	2013-07-23 11:53:12.000000000 +0300
+++ b/sysdep/bsd/krt-sock.c	2013-08-07 15:23:56.620899674 +0300
@@ -275,29 +275,18 @@ krt_read_rt(struct ks_msg *msg, struct k
     { log(L_ERR "%s (%I/%d) - missing gateway", errmsg, idst, pxlen); return; }
 
   u32 self_mask = RTF_PROTO1;
-  u32 alien_mask = RTF_STATIC | RTF_PROTO1 | RTF_GATEWAY;
 
   src2 = (flags & RTF_STATIC) ? 1 : 0;
   src2 |= (flags & RTF_PROTO1) ? 2 : 0;
 
 #ifdef RTF_PROTO2
-  alien_mask |= RTF_PROTO2;
   src2 |= (flags & RTF_PROTO2) ? 4 : 0;
 #endif
 
 #ifdef RTF_PROTO3
-  alien_mask |= RTF_PROTO3;
   src2 |= (flags & RTF_PROTO3) ? 8 : 0;
 #endif
 
-#ifdef RTF_REJECT
-  alien_mask |= RTF_REJECT;
-#endif
-
-#ifdef RTF_BLACKHOLE
-  alien_mask |= RTF_BLACKHOLE;
-#endif
-
   if (flags & (RTF_DYNAMIC | RTF_MODIFIED))
     src = KRT_SRC_REDIRECT;
   else if (flags & self_mask)
@@ -306,10 +295,8 @@ krt_read_rt(struct ks_msg *msg, struct k
 	SKIP("echo\n");
       src = KRT_SRC_BIRD;
     }
-  else if (flags & alien_mask)
-    src = KRT_SRC_ALIEN;
   else
-    src = KRT_SRC_KERNEL;
+    src = KRT_SRC_ALIEN;
 
   net = net_get(p->p.table, idst, pxlen);
 
diff -purN a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c
--- a/sysdep/linux/netlink.c	2013-07-23 11:53:12.000000000 +0300
+++ b/sysdep/linux/netlink.c	2013-08-07 15:25:39.249228706 +0300
@@ -786,17 +786,12 @@ nl_parse_route(struct nlmsghdr *h, int s
       src = KRT_SRC_REDIRECT;
       break;
 
-    case RTPROT_KERNEL:
-      src = KRT_SRC_KERNEL;
-      return;
-
     case RTPROT_BIRD:
       if (!scan)
 	SKIP("echo\n");
       src = KRT_SRC_BIRD;
       break;
 
-    case RTPROT_BOOT:
     default:
       src = KRT_SRC_ALIEN;
     }
@@ -857,22 +852,7 @@ nl_parse_route(struct nlmsghdr *h, int s
 	    }
 	}
       else
-	{
-	  ra.dest = RTD_DEVICE;
-
-	  /*
-	   * In Linux IPv6, 'native' device routes have proto
-	   * RTPROT_BOOT and not RTPROT_KERNEL (which they have in
-	   * IPv4 and which is expected). We cannot distinguish
-	   * 'native' and user defined device routes, so we ignore all
-	   * such device routes and for consistency, we have the same
-	   * behavior in IPv4. Anyway, users should use RTPROT_STATIC
-	   * for their 'alien' routes.
-	   */
-
-	  if (i->rtm_protocol == RTPROT_BOOT)
-	    src = KRT_SRC_KERNEL;
-	}
+	ra.dest = RTD_DEVICE;
 
       break;
     case RTN_BLACKHOLE:
diff -purN a/sysdep/unix/krt.c b/sysdep/unix/krt.c
--- a/sysdep/unix/krt.c	2013-07-23 11:53:12.000000000 +0300
+++ b/sysdep/unix/krt.c	2013-08-07 15:23:15.711175147 +0300
@@ -626,10 +626,6 @@ krt_got_route(struct krt_proto *p, rte *
 #ifdef KRT_ALLOW_LEARN
   switch (e->u.krt.src)
     {
-    case KRT_SRC_KERNEL:
-      verdict = KRF_IGNORE;
-      goto sentenced;
-
     case KRT_SRC_REDIRECT:
       verdict = KRF_DELETE;
       goto sentenced;
diff -purN a/sysdep/unix/krt.h b/sysdep/unix/krt.h
--- a/sysdep/unix/krt.h	2013-07-23 11:53:12.000000000 +0300
+++ b/sysdep/unix/krt.h	2013-08-07 15:20:37.568503494 +0300
@@ -83,7 +83,6 @@ void krt_got_route_async(struct krt_prot
 #define KRT_SRC_BIRD	 0	/* Our route (not passed in async mode) */
 #define KRT_SRC_REDIRECT 1	/* Redirect route, delete it */
 #define KRT_SRC_ALIEN	 2	/* Route installed by someone else */
-#define KRT_SRC_KERNEL	 3	/* Kernel routes, are ignored by krt syncer */
 
 extern struct protocol proto_unix_iface;
 
