Looks fine.
--Justin
On May 31, 2011, at 4:15 PM, Ben Pfaff wrote:
> This seems like a small cleanup, plus the new function for translating
> wildcards will be independently useful in an upcoming commit.
> ---
> lib/ofp-util.c | 52 ++++++++++++++++++++++++++++------------------------
> 1 files changed, 28 insertions(+), 24 deletions(-)
>
> diff --git a/lib/ofp-util.c b/lib/ofp-util.c
> index 5da5989..df2f21d 100644
> --- a/lib/ofp-util.c
> +++ b/lib/ofp-util.c
> @@ -101,19 +101,12 @@ static const flow_wildcards_t WC_INVARIANTS = 0
> #undef WC_INVARIANT_BIT
> ;
>
> -/* Converts the ofp_match in 'match' into a cls_rule in 'rule', with the
> given
> - * 'priority'. */
> -void
> -ofputil_cls_rule_from_match(const struct ofp_match *match,
> - unsigned int priority, struct cls_rule *rule)
> +/* Converts the wildcard in 'ofpfw' into a flow_wildcards in 'wc' for use in
> + * struct cls_rule. It is the caller's responsibility to handle the special
> + * case where the flow match's dl_vlan is set to OFP_VLAN_NONE. */
> +static void
> +ofputil_wildcard_from_openflow(uint32_t ofpfw, struct flow_wildcards *wc)
> {
> - struct flow_wildcards *wc = &rule->wc;
> - uint32_t ofpfw;
> -
> - /* Initialize rule->priority. */
> - ofpfw = ntohl(match->wildcards) & OFPFW_ALL;
> - rule->priority = !ofpfw ? UINT16_MAX : priority;
> -
> /* Initialize most of rule->wc. */
> flow_wildcards_init_catchall(wc);
> wc->wildcards = (OVS_FORCE flow_wildcards_t) ofpfw & WC_INVARIANTS;
> @@ -134,6 +127,27 @@ ofputil_cls_rule_from_match(const struct ofp_match
> *match,
> wc->wildcards |= FWW_ETH_MCAST;
> }
>
> + /* VLAN TCI mask. */
> + if (!(ofpfw & OFPFW_DL_VLAN_PCP)) {
> + wc->vlan_tci_mask |= htons(VLAN_PCP_MASK | VLAN_CFI);
> + }
> + if (!(ofpfw & OFPFW_DL_VLAN)) {
> + wc->vlan_tci_mask |= htons(VLAN_VID_MASK | VLAN_CFI);
> + }
> +}
> +
> +/* Converts the ofp_match in 'match' into a cls_rule in 'rule', with the
> given
> + * 'priority'. */
> +void
> +ofputil_cls_rule_from_match(const struct ofp_match *match,
> + unsigned int priority, struct cls_rule *rule)
> +{
> + uint32_t ofpfw = ntohl(match->wildcards) & OFPFW_ALL;
> +
> + /* Initialize rule->priority, rule->wc. */
> + rule->priority = !ofpfw ? UINT16_MAX : priority;
> + ofputil_wildcard_from_openflow(ofpfw, &rule->wc);
> +
> /* Initialize most of rule->flow. */
> rule->flow.nw_src = match->nw_src;
> rule->flow.nw_dst = match->nw_dst;
> @@ -157,24 +171,14 @@ ofputil_cls_rule_from_match(const struct ofp_match
> *match,
> * However, older versions of OVS treated this as matching packets
> * withut an 802.1Q header, so we do here too. */
> rule->flow.vlan_tci = htons(0);
> - wc->vlan_tci_mask = htons(0xffff);
> + rule->wc.vlan_tci_mask = htons(0xffff);
> } else {
> ovs_be16 vid, pcp, tci;
>
> - /* Compute mask. */
> - wc->vlan_tci_mask = htons(0);
> - if (!(ofpfw & OFPFW_DL_VLAN_PCP)) {
> - wc->vlan_tci_mask |= htons(VLAN_PCP_MASK | VLAN_CFI);
> - }
> - if (!(ofpfw & OFPFW_DL_VLAN)) {
> - wc->vlan_tci_mask |= htons(VLAN_VID_MASK | VLAN_CFI);
> - }
> -
> - /* Compute match value based on mask. */
> vid = match->dl_vlan & htons(VLAN_VID_MASK);
> pcp = htons((match->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK);
> tci = vid | pcp | htons(VLAN_CFI);
> - rule->flow.vlan_tci = tci & wc->vlan_tci_mask;
> + rule->flow.vlan_tci = tci & rule->wc.vlan_tci_mask;
> }
>
> /* Clean up. */
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev