+ dev->data->dev_started = 0;
+
+ return 0;
+}
+
+static int
+eth_kni_close(struct rte_eth_dev *eth_dev)
+{
+ struct pmd_internals *internals;
+ int ret;
+
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
+ ret = eth_kni_dev_stop(eth_dev);
+ if (ret)
+ PMD_LOG(WARNING, "Not able to stop kni for %s",
+ eth_dev->data->name);
+
+ /* mac_addrs must not be freed alone because part of dev_private */
+ eth_dev->data->mac_addrs = NULL;
+
+ internals = eth_dev->data->dev_private;
+ ret = rte_kni_release(internals->kni);
+ if (ret)
+ PMD_LOG(WARNING, "Not able to release kni for %s",
+ eth_dev->data->name);
+
+ return ret;