[ovs-dev] [of1.5 v2 13/20] ofp-util: Remove ofputil_get_phy_port_size().
Ben Pfaff
blp at nicira.com
Sat May 10 02:40:29 UTC 2014
The size is not fixed for OpenFLow 1.4 and later, so it's a little
deceptive to return any particular value. This function was only used in
one place, so move it inline there.
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
lib/ofp-util.c | 46 +++++++++++++++++-----------------------------
1 file changed, 17 insertions(+), 29 deletions(-)
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 481410a..2e80340f 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -3808,22 +3808,6 @@ ofputil_pull_ofp14_port(struct ofputil_phy_port *pp, struct ofpbuf *msg)
return 0;
}
-static size_t
-ofputil_get_phy_port_size(enum ofp_version ofp_version)
-{
- switch (ofp_version) {
- case OFP10_VERSION:
- return sizeof(struct ofp10_phy_port);
- case OFP11_VERSION:
- case OFP12_VERSION:
- case OFP13_VERSION:
- case OFP14_VERSION:
- return sizeof(struct ofp11_port);
- default:
- OVS_NOT_REACHED();
- }
-}
-
static void
ofputil_encode_ofp10_phy_port(const struct ofputil_phy_port *pp,
struct ofp10_phy_port *opp)
@@ -4043,14 +4027,6 @@ ofputil_decode_switch_features(const struct ofp_header *oh,
return 0;
}
-/* Returns true if the maximum number of ports are in 'oh'. */
-static bool
-max_ports_in_features(const struct ofp_header *oh)
-{
- size_t pp_size = ofputil_get_phy_port_size(oh->version);
- return ntohs(oh->length) + pp_size > UINT16_MAX;
-}
-
/* In OpenFlow 1.0, 1.1, and 1.2, an OFPT_FEATURES_REPLY message lists all the
* switch's ports, unless there are too many to fit. In OpenFlow 1.3 and
* later, an OFPT_FEATURES_REPLY does not list ports at all.
@@ -4067,16 +4043,28 @@ bool
ofputil_switch_features_has_ports(struct ofpbuf *b)
{
struct ofp_header *oh = ofpbuf_data(b);
+ size_t phy_port_size;
if (oh->version >= OFP13_VERSION) {
+ /* OpenFlow 1.3+ never has ports in the feature reply. */
return false;
- } else if (max_ports_in_features(oh)) {
- ofpbuf_set_size(b, sizeof *oh + sizeof(struct ofp_switch_features));
- ofpmsg_update_length(b);
- return false;
- } else {
+ }
+
+ phy_port_size = (oh->version == OFP10_VERSION
+ ? sizeof(struct ofp10_phy_port)
+ : sizeof(struct ofp11_port));
+ if (ntohs(oh->length) + phy_port_size <= UINT16_MAX) {
+ /* There's room for additional ports in the feature reply.
+ * Assume that the list is complete. */
return true;
}
+
+ /* The feature reply has no room for more ports. Probably the list is
+ * truncated. Drop the ports and tell the caller to retrieve them with
+ * OFPST_PORT_DESC. */
+ ofpbuf_set_size(b, sizeof *oh + sizeof(struct ofp_switch_features));
+ ofpmsg_update_length(b);
+ return false;
}
static ovs_be32
--
1.9.1
More information about the dev
mailing list