On Fri, Feb 03, 2012 at 12:43:53PM -0800, Ben Pfaff wrote:
> OpenFlow 1.1 extends port numbers to 32 bits.  Initially we plan to support
> only port numbers in the 16-bit range in Open vSwitch.  However the OF1.1
> reserved ports have high-valued fixed numbers that require translation to
> high fixed values in the 16-bit range for OF1.0.  These new functions
> provide this translation.
> 
> Nothing uses these functions yet.
> 
> These new functions need comments before they're ready.
> ---
>  lib/ofp-util.c |   24 ++++++++++++++++++++++++
>  lib/ofp-util.h |    3 +++
>  2 files changed, 27 insertions(+), 0 deletions(-)
> 
> diff --git a/lib/ofp-util.c b/lib/ofp-util.c
> index 1257e6f..a4d13cc 100644
> --- a/lib/ofp-util.c
> +++ b/lib/ofp-util.c
> @@ -2591,6 +2591,30 @@ ofputil_frag_handling_from_string(const char *s, enum 
> ofp_config_flags *flags)
>      return true;
>  }
>  
> +enum ofperr
> +ofputil_port_from_ofp11(ovs_be32 ofp11_port, uint16_t *ofp10_port)
> +{
> +    uint32_t ofp11_port_h = ntohl(ofp11_port);
> +
> +    if (ofp11_port_h < OFPP_MAX) {
> +        *ofp10_port = ofp11_port_h;
> +        return 0;
> +    } else if (ofp11_port_h >= 0xfffffff8) {
> +        *ofp10_port = ofp11_port_h >> 16;
> +        return 0;

Perhaps a #define in place of 0xfffffff8 would improve readability.

> +    } else {
> +        VLOG_WARN_RL(&bad_ofmsg_rl, "port %"PRIu32" is outside the supported 
> "
> +                     "range 0 through %d", ofp11_port_h, OFPP_MAX - 1);

This message doesn't seem to reflect the code above which translates
fake output ports in the range 0xfffffff8 - 0xffffffff

> +        return OFPERR_OFPBAC_BAD_OUT_PORT;
> +    }
> +}
> +
> +ovs_be32
> +ofputil_port_to_ofp11(uint16_t ofp10_port)
> +{
> +    return htonl(ofp10_port < OFPP_MAX ? ofp10_port : ofp10_port + 
> 0xffff0000);
> +}

Perhaps 0xffff0000 could be a #define ?

Is it ok for ports in the range OFPP_MAX - (OFPP_IN_PORT -1) to
be translated to the 0xffff0000 range?

> +
>  /* Checks that 'port' is a valid output port for the OFPAT_OUTPUT action, 
> given
>   * that the switch will never have more than 'max_ports' ports.  Returns 0 if
>   * 'port' is valid, otherwise an OpenFlow return code. */

[snip]
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to