2 Replies Latest reply on Oct 7, 2013 9:21 AM by LynnZ

    KPDK problem with KNI: ifconfig timeout due to IPv6 autoconfig

    marcfreynet Green Belt

      On the:

      DPDK 1.3.1.7

      OS: RHEL 2.6.32

      the command "ifconfig vEth0 up" to start the KNI interface fails a few times with

      SIOCSIFFLAGS: Timer expired

       

      After some time (around 1 minute) the command "ifconfig vEth0 up" works OK.

      It looks that it is linked to the IPv6 auto configuration as the kernel syslog shows the message kernel: vEth0: no IPv6 routers present.

       

      I am using the DPDK application on IPv4 and there is no IPv6 router in the LAN.

      Question how do I deactivate the IPv6 auto configuration for the KNI interface ?

      I tried to create a entry in /etc/sysconfig/ifcfg_vETh0 with IPV6INIT="no" and IPV6_AUTOCONF="no" without success.

      I guess that the kernel does not apply this setting as at boot time the the DPDK application does not run.

       

      Interestingly, it seems that the tap/tun interface does not have this problem.

      I am wondering how Linux avoid doing the IPv6 auto configuration on a tap/tun interface ?

        • Re: KPDK problem with KNI: ifconfig timeout due to IPv6 autoconfig
          marcfreynet Green Belt

          I solve my problem.

          The issue is the KNI function

          /**

          * It is called in the same lcore of receiving packets, and polls the request

          * mbufs sent from kernel space. Then analyzes it and calls the specific

          * actions for the specific requests. Finally constructs the response mbuf and

          * puts it back to the resp_q.

          */

          static int kni_request_handler(struct rte_kni *kni)

           

          This function is only called by

          unsigned rte_kni_tx_burst(struct rte_kni *kni, struct rte_mbuf **mbufs, unsigned num)

           

          So if there is no incoming PDU from the NIC to be sent to the Linux kernel, the function rte_kni_tx_burst is not called.

          The KNI layer does not read the request PDU so does not get the if_up message so does not answer to the kernel module so the KNI kernel module replies to IP with a time out.

           

          Work around:

          Call regularly rte_kni_tx_burst(kni, NULL, 0).