diff -rupN a/config.c b/config.c
--- a/config.c	2014-04-23 22:26:01.231923000 +0530
+++ b/config.c	2014-04-23 23:34:53.564420000 +0530
@@ -191,7 +191,7 @@ void config_vifs_from_kernel(void)
                 continue;
             if (v->uv_flags & VIFF_POINT_TO_POINT)
                 continue;
-#if 0
+#if 1
             /*
              * TODO: to allow different interfaces belong to
              * overlapping subnet addresses, use this version instead
@@ -409,7 +409,8 @@ static int parse_phyint(char *s)
                 altnet_addr = ifname2addr(w);
                 if (!altnet_addr) {
                     altnet_addr = inet_parse(w, 4);
-                    if (!inet_valid_host(altnet_addr)) {
+                    /* Skip check for RMNET interface. */
+                    if (!inet_valid_host(altnet_addr) && !(strncmp(v->uv_name, "rmnet", 5) == 0)) {
                         logit(LOG_WARNING, 0, "Invalid altnet address '%s' in %s", w, configfilename);
                         return(FALSE);
                     } /* invalid address */
@@ -429,7 +430,8 @@ static int parse_phyint(char *s)
                 ph = (struct phaddr *)calloc(1, sizeof(struct phaddr));
                 if (ph == NULL)
                     return(FALSE);
-                if (altnet_masklen) {
+                /* Skip check for RMNET interface. */
+                if (altnet_masklen || (strncmp(v->uv_name, "rmnet", 5) == 0)) {
                     VAL_TO_MASK(ph->pa_subnetmask, altnet_masklen);
                 } else {
                     ph->pa_subnetmask = v->uv_subnetmask;
diff -rupN a/pimd.conf b/pimd.conf
--- a/pimd.conf	2014-04-23 22:26:01.241923000 +0530
+++ b/pimd.conf	2014-04-23 23:34:53.564420000 +0530
@@ -97,6 +97,15 @@
 # By default, all non-loopback multicast capable interfaces are enabled.
 #phyint de1 disable
 
+phyint rmnet_data0 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data1 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data2 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data3 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data4 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data5 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data6 enable altnet 0.0.0.0 masklen 0
+phyint rmnet_data7 enable altnet 0.0.0.0 masklen 0
+
 # Smaller value means "higher" priority
 cand_rp time 30 priority 20
 
diff -rupN a/vif.c b/vif.c
--- a/vif.c	2014-04-23 22:26:01.241923000 +0530
+++ b/vif.c	2014-04-23 23:34:53.564420000 +0530
@@ -568,6 +568,14 @@ vifi_t find_vif_direct(u_int32 src)
 	     (src != v->uv_subnetbcast)))
 	    return vifi;
 
+	/* POINTOPOINT but not VIFF_TUNNEL interface (e.g., GRE) */
+	if ((v->uv_flags & VIFF_POINT_TO_POINT) && (src == v->uv_rmt_addr))
+	    return vifi;
+    }
+
+    for (vifi = 0, v = uvifs; vifi < numvifs; ++vifi, ++v) {
+	if (v->uv_flags & (VIFF_DISABLED | VIFF_DOWN | VIFF_REGISTER | VIFF_TUNNEL))
+	    continue;
 	/* Check the extra subnets for this vif */
 	/* TODO: don't think currently pimd can handle extra subnets */
 	for (p = v->uv_addrs; p; p = p->pa_next) {
@@ -577,11 +585,7 @@ vifi_t find_vif_direct(u_int32 src)
 		return vifi;
 	}
 
-	/* POINTOPOINT but not VIFF_TUNNEL interface (e.g., GRE) */
-	if ((v->uv_flags & VIFF_POINT_TO_POINT) && (src == v->uv_rmt_addr))
-	    return vifi;
     }
-
     return NO_VIF;
 }
 
@@ -635,18 +639,23 @@ vifi_t find_vif_direct_local(u_int32 src
 		|| (src != v->uv_subnetbcast)))
 	    return vifi;
 
+	/* POINTOPOINT but not VIFF_TUNNEL interface (e.g., GRE) */
+	if ((v->uv_flags & VIFF_POINT_TO_POINT) && (src == v->uv_rmt_addr))
+	    return vifi;
+    }
+
+    for (vifi = 0, v = uvifs; vifi < numvifs; ++vifi, ++v) {
+	/* TODO: XXX: what about VIFF_TUNNEL? */
+	if (v->uv_flags & (VIFF_DISABLED | VIFF_DOWN | VIFF_REGISTER | VIFF_TUNNEL))
+	    continue;
 	/* Check the extra subnets for this vif */
 	/* TODO: don't think currently pimd can handle extra subnets */
 	for (p = v->uv_addrs; p; p = p->pa_next) {
-	    if (((src & p->pa_subnetmask) == p->pa_subnet)
+	if (((src & p->pa_subnetmask) == p->pa_subnet)
 		&& ((p->pa_subnetmask == 0xffffffff)
 		    || (src != p->pa_subnetbcast)))
 		return vifi;
 	}
-
-	/* POINTOPOINT but not VIFF_TUNNEL interface (e.g., GRE) */
-	if ((v->uv_flags & VIFF_POINT_TO_POINT) && (src == v->uv_rmt_addr))
-	    return vifi;
     }
     return NO_VIF;
 }
