'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