2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-29 15:28:56 +00:00

ofp-util: Add ofputil_switch_features_ports_trunc function.

Add function to determine whether the max number of ports are contains
in a Features Reply.  If so, it removes the port list, since it may be
incomplete.  This function will be used in a later commit.

Signed-off-by: Justin Pettit <jpettit@nicira.com>
This commit is contained in:
Justin Pettit
2012-05-04 17:19:26 -07:00
parent 2be393edd3
commit 347b7ac46a
2 changed files with 35 additions and 0 deletions

View File

@@ -2568,6 +2568,40 @@ ofputil_decode_switch_features(const struct ofp_switch_features *osf,
return 0;
}
/* Returns true if the maximum number of ports are in 'osf'. */
static bool
max_ports_in_features(const struct ofp_switch_features *osf)
{
size_t pp_size = osf->header.version == OFP10_VERSION ?
sizeof(struct ofp10_phy_port) :
sizeof(struct ofp11_port);
return ntohs(osf->header.length) + pp_size > UINT16_MAX;
}
/* Given a buffer 'b' that contains a Features Reply message, checks if
* it contains the maximum number of ports that will fit. If so, it
* returns true and removes the ports from the message. The caller
* should then send an OFPST_PORT_DESC stats request to get the ports,
* since the switch may have more ports than could be represented in the
* Features Reply. Otherwise, returns false.
*/
bool
ofputil_switch_features_ports_trunc(struct ofpbuf *b)
{
struct ofp_switch_features *osf = b->data;
if (max_ports_in_features(osf)) {
/* Remove all the ports. */
b->size = sizeof(*osf);
update_openflow_length(b);
return true;
}
return false;
}
static ovs_be32
encode_action_bits(enum ofputil_action_bitmap ofputil_actions,
const struct ofputil_action_bit_translation *x)