app/testpmd: disable Rx VLAN offloads by default
[dpdk.git] / doc / guides / sample_app_ug / kernel_nic_interface.rst
index d6876e2..67f2140 100644 (file)
@@ -71,42 +71,23 @@ it is just for performance testing, or it can work together with VMDq support in
 
 The packet flow through the Kernel NIC Interface application is as shown in the following figure.
 
 
 The packet flow through the Kernel NIC Interface application is as shown in the following figure.
 
-.. _figure_2:
+.. _figure_kernel_nic:
 
 
-**Figure 2. Kernel NIC Application Packet Flow**
+.. figure:: img/kernel_nic.*
 
 
-.. image3_png has been renamed to kernel_nic.*
-
-|kernel_nic|
+   Kernel NIC Application Packet Flow
 
 Compiling the Application
 -------------------------
 
 
 Compiling the Application
 -------------------------
 
-Compile the application as follows:
-
-#.  Go to the example directory:
-
-    .. code-block:: console
-
-        export RTE_SDK=/path/to/rte_sdk cd
-        ${RTE_SDK}/examples/kni
+To compile the sample application see :doc:`compiling`.
 
 
-#.  Set the target (a default target is used if not specified)
+The application is located in the ``kni`` sub-directory.
 
 
-    .. note::
+.. note::
 
         This application is intended as a linuxapp only.
 
 
         This application is intended as a linuxapp only.
 
-    .. code-block:: console
-
-        export RTE_TARGET=x86_64-native-linuxapp-gcc
-
-#.  Build the application:
-
-    .. code-block:: console
-
-        make
-
 Loading the Kernel Module
 -------------------------
 
 Loading the Kernel Module
 -------------------------
 
@@ -181,7 +162,7 @@ Where:
 
 Refer to *DPDK Getting Started Guide* for general information on running applications and the Environment Abstraction Layer (EAL) options.
 
 
 Refer to *DPDK Getting Started Guide* for general information on running applications and the Environment Abstraction Layer (EAL) options.
 
-The -c coremask parameter of the EAL options should include the lcores indicated by the lcore_rx and lcore_tx,
+The -c coremask or -l corelist parameter of the EAL options should include the lcores indicated by the lcore_rx and lcore_tx,
 but does not need to include lcores indicated by lcore_kthread as they are used to pin the kernel thread on.
 The -p PORTMASK parameter should include the ports indicated by the port in --config, neither more nor less.
 
 but does not need to include lcores indicated by lcore_kthread as they are used to pin the kernel thread on.
 The -p PORTMASK parameter should include the ports indicated by the port in --config, neither more nor less.
 
@@ -200,7 +181,7 @@ and one lcore of kernel thread for each port:
 
 .. code-block:: console
 
 
 .. code-block:: console
 
-    ./build/kni -c 0xf0 -n 4 -- -P -p 0x3 -config="(0,4,6,8),(1,5,7,9)"
+    ./build/kni -l 4-7 -n 4 -- -P -p 0x3 --config="(0,4,6,8),(1,5,7,9)"
 
 KNI Operations
 --------------
 
 KNI Operations
 --------------
@@ -238,26 +219,16 @@ The following sections provide some explanation of code.
 Initialization
 ~~~~~~~~~~~~~~
 
 Initialization
 ~~~~~~~~~~~~~~
 
-Setup of mbuf pool, driver and queues is similar to the setup done in the L2 Forwarding sample application
-(see Chapter 9 "L2 Forwarding Sample Application (in Real and Virtualized Environments" for details).
+Setup of mbuf pool, driver and queues is similar to the setup done in the :doc:`l2_forward_real_virtual`..
 In addition, one or more kernel NIC interfaces are allocated for each
 of the configured ports according to the command line parameters.
 
 In addition, one or more kernel NIC interfaces are allocated for each
 of the configured ports according to the command line parameters.
 
-The code for creating the kernel NIC interface for a specific port is as follows:
-
-.. code-block:: c
-
-    kni = rte_kni_create(port, MAX_PACKET_SZ, pktmbuf_pool, &kni_ops);
-    if (kni == NULL)
-        rte_exit(EXIT_FAILURE, "Fail to create kni dev "
-           "for port: %d\n", port);
-
 The code for allocating the kernel NIC interfaces for a specific port is as follows:
 
 .. code-block:: c
 
     static int
 The code for allocating the kernel NIC interfaces for a specific port is as follows:
 
 .. code-block:: c
 
     static int
-    kni_alloc(uint8_t port_id)
+    kni_alloc(uint16_t port_id)
     {
         uint8_t i;
         struct rte_kni *kni;
     {
         uint8_t i;
         struct rte_kni *kni;
@@ -275,11 +246,11 @@ The code for allocating the kernel NIC interfaces for a specific port is as foll
 
             memset(&conf, 0, sizeof(conf));
             if (params[port_id]->nb_lcore_k) {
 
             memset(&conf, 0, sizeof(conf));
             if (params[port_id]->nb_lcore_k) {
-                rte_snprintf(conf.name, RTE_KNI_NAMESIZE, "vEth%u_%u", port_id, i);
+                snprintf(conf.name, RTE_KNI_NAMESIZE, "vEth%u_%u", port_id, i);
                 conf.core_id = params[port_id]->lcore_k[i];
                 conf.force_bind = 1;
             } else
                 conf.core_id = params[port_id]->lcore_k[i];
                 conf.force_bind = 1;
             } else
-                rte_snprintf(conf.name, RTE_KNI_NAMESIZE, "vEth%u", port_id);
+                snprintf(conf.name, RTE_KNI_NAMESIZE, "vEth%u", port_id);
                 conf.group_id = (uint16_t)port_id;
                 conf.mbuf_size = MAX_PACKET_SZ;
 
                 conf.group_id = (uint16_t)port_id;
                 conf.mbuf_size = MAX_PACKET_SZ;
 
@@ -346,7 +317,7 @@ The code is as follows:
         int i, j, nb_token;
         char *str_fld[_NUM_FLD];
         unsigned long int_fld[_NUM_FLD];
         int i, j, nb_token;
         char *str_fld[_NUM_FLD];
         unsigned long int_fld[_NUM_FLD];
-        uint8_t port_id, nb_kni_port_params = 0;
+        uint16_t port_id, nb_kni_port_params = 0;
 
         memset(&kni_port_params_array, 0, sizeof(kni_port_params_array));
 
 
         memset(&kni_port_params_array, 0, sizeof(kni_port_params_array));
 
@@ -362,7 +333,7 @@ The code is as follows:
                 goto fail;
             }
 
                 goto fail;
             }
 
-            rte_snprintf(s, sizeof(s), "%.*s", size, p);
+            snprintf(s, sizeof(s), "%.*s", size, p);
             nb_token = rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',');
 
             if (nb_token <= FLD_LCORE_TX) {
             nb_token = rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',');
 
             if (nb_token <= FLD_LCORE_TX) {
@@ -435,7 +406,7 @@ to see if this lcore is reading from or writing to kernel NIC interfaces.
 
 For the case that reads from a NIC port and writes to the kernel NIC interfaces,
 the packet reception is the same as in L2 Forwarding sample application
 
 For the case that reads from a NIC port and writes to the kernel NIC interfaces,
 the packet reception is the same as in L2 Forwarding sample application
-(see Section 9.4.6 "Receive, Process  and Transmit Packets").
+(see :ref:`l2_fwd_app_rx_tx_packets`).
 The packet transmission is done by sending mbufs into the kernel NIC interfaces by rte_kni_tx_burst().
 The KNI library automatically frees the mbufs after the kernel successfully copied the mbufs.
 
 The packet transmission is done by sending mbufs into the kernel NIC interfaces by rte_kni_tx_burst().
 The KNI library automatically frees the mbufs after the kernel successfully copied the mbufs.
 
@@ -482,7 +453,7 @@ The KNI library automatically frees the mbufs after the kernel successfully copi
 For the other case that reads from kernel NIC interfaces and writes to a physical NIC port, packets are retrieved by reading
 mbufs from kernel NIC interfaces by `rte_kni_rx_burst()`.
 The packet transmission is the same as in the L2 Forwarding sample application
 For the other case that reads from kernel NIC interfaces and writes to a physical NIC port, packets are retrieved by reading
 mbufs from kernel NIC interfaces by `rte_kni_rx_burst()`.
 The packet transmission is the same as in the L2 Forwarding sample application
-(see Section 9.4.6 "Receive, Process and Transmit Packet's").
+(see :ref:`l2_fwd_app_rx_tx_packets`).
 
 .. code-block:: c
 
 
 .. code-block:: c
 
@@ -543,7 +514,7 @@ Currently, setting a new MTU and configuring the network interface (up/ down) ar
     /* Callback for request of changing MTU */
 
     static int
     /* Callback for request of changing MTU */
 
     static int
-    kni_change_mtu(uint8_t port_id, unsigned new_mtu)
+    kni_change_mtu(uint16_t port_id, unsigned new_mtu)
     {
         int ret;
         struct rte_eth_conf conf;
     {
         int ret;
         struct rte_eth_conf conf;
@@ -592,7 +563,7 @@ Currently, setting a new MTU and configuring the network interface (up/ down) ar
     /* Callback for request of configuring network interface up/down */
 
     static int
     /* Callback for request of configuring network interface up/down */
 
     static int
-    kni_config_network_interface(uint8_t port_id, uint8_t if_up)
+    kni_config_network_interface(uint16_t port_id, uint8_t if_up)
     {
         int ret = 0;
 
     {
         int ret = 0;
 
@@ -616,5 +587,3 @@ Currently, setting a new MTU and configuring the network interface (up/ down) ar
             RTE_LOG(ERR, APP, "Failed to start port %d\n", port_id);
         return ret;
     }
             RTE_LOG(ERR, APP, "Failed to start port %d\n", port_id);
         return ret;
     }
-
-.. |kernel_nic| image:: img/kernel_nic.*