diff --git a/filter/config.Y b/filter/config.Y
index 6328ba09..3b7f9004 100644
--- a/filter/config.Y
+++ b/filter/config.Y
@@ -792,7 +792,7 @@ static_attr:
  | SCOPE   { $$ = f_new_static_attr(T_ENUM_SCOPE, SA_SCOPE,	1); }
  | CAST    { $$ = f_new_static_attr(T_ENUM_RTC,   SA_CAST,	0); }
  | DEST    { $$ = f_new_static_attr(T_ENUM_RTD,   SA_DEST,	1); }
- | IFNAME  { $$ = f_new_static_attr(T_STRING,     SA_IFNAME,	0); }
+ | IFNAME  { $$ = f_new_static_attr(T_STRING,     SA_IFNAME,	1); }
  | IFINDEX { $$ = f_new_static_attr(T_INT,        SA_IFINDEX,	0); }
  ;
 
diff --git a/filter/filter.c b/filter/filter.c
index 8b66b57e..02d3b960 100644
--- a/filter/filter.c
+++ b/filter/filter.c
@@ -1000,6 +1000,20 @@ interpret(struct f_inst *what)
 	rta->hostentry = NULL;
 	break;
 
+      case SA_IFNAME:
+	{
+	  struct iface *ifa = if_find_by_name(v1.val.s);
+	  if (!ifa)
+	    runtime( "Invalid iface name" );
+
+	  rta->dest = RTD_DEVICE;
+	  rta->gw = IPA_NONE;
+	  rta->iface = ifa;
+	  rta->nexthops = NULL;
+	  rta->hostentry = NULL;
+	}
+	break;
+
       default:
 	bug("Invalid static attribute access (%x)", res.type);
       }
diff --git a/nest/iface.c b/nest/iface.c
index 3dd45065..56de1f5c 100644
--- a/nest/iface.c
+++ b/nest/iface.c
@@ -441,7 +441,7 @@ if_find_by_name(char *name)
   struct iface *i;
 
   WALK_LIST(i, iface_list)
-    if (!strcmp(i->name, name))
+    if (!strcmp(i->name, name) && !(i->flags & IF_SHUTDOWN))
       return i;
   return NULL;
 }
@@ -451,8 +451,9 @@ if_get_by_name(char *name)
 {
   struct iface *i;
 
-  if (i = if_find_by_name(name))
-    return i;
+  WALK_LIST(i, iface_list)
+    if (!strcmp(i->name, name))
+      return i;
 
   /* No active iface, create a dummy */
   i = mb_allocz(if_pool, sizeof(struct iface));
