diff options
-rw-r--r-- | vnet/vnet/unix/tuntap.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/vnet/vnet/unix/tuntap.c b/vnet/vnet/unix/tuntap.c index 43ff06aa9ff..4eab3913780 100644 --- a/vnet/vnet/unix/tuntap.c +++ b/vnet/vnet/unix/tuntap.c @@ -753,6 +753,12 @@ tuntap_ip4_add_del_interface_address (ip4_main_t * im, 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; @@ -856,6 +862,12 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im, 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); |