From b3a9381ad54ea30bf872cf781023e353a89ebaa6 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 29 Oct 2018 01:55:24 -0700 Subject: [PATCH] interface-flags; fix coverity error found in conversion Change-Id: I2eafac4ce810fe53454b729d81161ec80d036db7 Signed-off-by: Neale Ranns --- src/vnet/interface.c | 31 ++++++++++++++++++++++++++++--- src/vnet/interface.h | 3 ++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/vnet/interface.c b/src/vnet/interface.c index dff1793712a..c882a8381b7 100644 --- a/src/vnet/interface.c +++ b/src/vnet/interface.c @@ -109,6 +109,17 @@ unserialize_vec_vnet_sw_hw_interface_state (serialize_main_t * m, } } +static vnet_sw_interface_flags_t +vnet_hw_interface_flags_to_sw (vnet_hw_interface_flags_t hwf) +{ + vnet_sw_interface_flags_t swf = VNET_SW_INTERFACE_FLAG_NONE; + + if (hwf & VNET_HW_INTERFACE_FLAG_LINK_UP) + swf |= VNET_SW_INTERFACE_FLAG_ADMIN_UP; + + return (swf); +} + void serialize_vnet_interface_state (serialize_main_t * m, va_list * va) { @@ -150,7 +161,7 @@ serialize_vnet_interface_state (serialize_main_t * m, va_list * va) { vec_add2 (sts, st, 1); st->sw_hw_if_index = hif->hw_if_index; - st->flags = hif->flags; + st->flags = vnet_hw_interface_flags_to_sw(hif->flags); } })); /* *INDENT-ON* */ @@ -160,6 +171,17 @@ serialize_vnet_interface_state (serialize_main_t * m, va_list * va) vec_free (sts); } +static vnet_hw_interface_flags_t +vnet_sw_interface_flags_to_hw (vnet_sw_interface_flags_t swf) +{ + vnet_hw_interface_flags_t hwf = VNET_HW_INTERFACE_FLAG_NONE; + + if (swf & VNET_SW_INTERFACE_FLAG_ADMIN_UP) + hwf |= VNET_HW_INTERFACE_FLAG_LINK_UP; + + return (hwf); +} + void unserialize_vnet_interface_state (serialize_main_t * m, va_list * va) { @@ -195,8 +217,11 @@ unserialize_vnet_interface_state (serialize_main_t * m, va_list * va) vec_unserialize (m, &sts, unserialize_vec_vnet_sw_hw_interface_state); vec_foreach (st, sts) - vnet_hw_interface_set_flags_helper (vnm, st->sw_hw_if_index, st->flags, - /* no distribute */ 0); + { + vnet_hw_interface_set_flags_helper + (vnm, st->sw_hw_if_index, vnet_sw_interface_flags_to_hw (st->flags), + /* no distribute */ 0); + } vec_free (sts); } diff --git a/src/vnet/interface.h b/src/vnet/interface.h index 5c15d29f453..9be38709020 100644 --- a/src/vnet/interface.h +++ b/src/vnet/interface.h @@ -484,6 +484,7 @@ __VA_ARGS__ vnet_hw_interface_class_t x typedef enum vnet_hw_interface_flags_t_ { + VNET_HW_INTERFACE_FLAG_NONE, /* Hardware link state is up. */ VNET_HW_INTERFACE_FLAG_LINK_UP = (1 << 0), /* Hardware duplex state */ @@ -692,7 +693,7 @@ extern vnet_mtu_t vnet_link_to_mtu (vnet_link_t link); typedef enum vnet_sw_interface_flags_t_ { - VNET_SW_INTERFACE_FLAG_ADMIN_NONE = 0, + VNET_SW_INTERFACE_FLAG_NONE = 0, /* Interface is "up" meaning administratively up. Up in the sense of link state being up is maintained by hardware interface. */ VNET_SW_INTERFACE_FLAG_ADMIN_UP = (1 << 0), -- 2.16.6