'rte_kni_update_link()' updates virtual KNI interface link using kernel
sysfs interface.
If the requested link status is same as interface link status, do not
update the link status but return with success.

Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com>
---
Cc: Dan Gora <d...@adax.com>
---
 lib/kni/rte_kni.c   | 5 ++++-
 lib/kni/version.map | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/kni/rte_kni.c b/lib/kni/rte_kni.c
index 9dae6a8d7c0c..8ac4484272b0 100644
--- a/lib/kni/rte_kni.c
+++ b/lib/kni/rte_kni.c
@@ -810,6 +810,9 @@ rte_kni_update_link(struct rte_kni *kni, unsigned int 
linkup)
        }
        old_linkup = (old_carrier[0] == '1');
 
+       if (old_linkup == (int)linkup)
+               goto out;
+
        new_carrier = linkup ? "1" : "0";
        ret = write(fd, new_carrier, 1);
        if (ret < 1) {
@@ -817,7 +820,7 @@ rte_kni_update_link(struct rte_kni *kni, unsigned int 
linkup)
                close(fd);
                return -1;
        }
-
+out:
        close(fd);
        return old_linkup;
 }
diff --git a/lib/kni/version.map b/lib/kni/version.map
index a93da95f3671..bb810a7f2f38 100644
--- a/lib/kni/version.map
+++ b/lib/kni/version.map
@@ -19,5 +19,6 @@ DPDK_21 {
 EXPERIMENTAL {
        global:
 
+       # updated in v21.08
        rte_kni_update_link;
 };
-- 
2.31.1

Reply via email to