next_index = VNET_DEVICE_INPUT_NEXT_DROP;
}
- vnet_feature_device_input_redirect_x1 (node, tm->hw_if_index, &next_index, b, 0);
+ vnet_feature_start_device_input_x1 (tm->sw_if_index, &next_index, b, 0);
vlib_set_next_frame_buffer (vm, node, next_index, bi);
snprintf (ifr.ifr_name, sizeof(ifr.ifr_name),
"%s:%d", tm->tun_name, (int)(ap - tm->subifs));
+ /* the tuntap punt/inject is enabled for IPv4 RX so long as
+ * any vpp interface has an IPv4 address.
+ * this is also ref counted.
+ */
+ ip4_sw_interface_enable_disable (tm->sw_if_index, !is_delete);
+
if (! is_delete)
{
struct sockaddr_in * sin;
snprintf (ifr.ifr_name, sizeof(ifr.ifr_name),
"%s:%d", tm->tun_name, (int)(ap - tm->subifs));
+ /* the tuntap punt/inject is enabled for IPv6 RX so long as
+ * any vpp interface has an IPv6 address.
+ * this is also ref counted.
+ */
+ ip6_sw_interface_enable_disable (tm->sw_if_index, !is_delete);
+
if (! is_delete)
{
int sockfd = socket (AF_INET6, SOCK_STREAM, 0);