Thanks, I look forward to the revised patch.

On Mon, Mar 12, 2012 at 10:53:05PM +0100, ravi.ke...@telekom.com wrote:
> Thanks again Ben for the review. Please see inline <rk>
> 
> -----Original Message-----
> From: dev-boun...@openvswitch.org [mailto:dev-boun...@openvswitch.org] On 
> Behalf Of Ben Pfaff
> Sent: Friday, March 09, 2012 11:21 AM
> To: Kerur, Ravi
> Cc: dev@openvswitch.org
> Subject: [ovs-dev] MPLS less-important comments (was: Re: Patch for MPLS)
> 
> Here are my additional comments that point out less-important issues.
> 
> include/openflow/nicira-ext.h
> -----------------------------
> 
> The "format' in the definition of mpls_label isn't entirely clear to
> me:
> 
>     +/* The mpls_label in MPLS shim header.
>     + *
>     + * Prereqs: NXM_OF_ETH_TYPE must be either 0x8847 or 0x8848.
>     + *
>     + * Format: 32-bit integer, higher 20 bits
>     + *
>     + * Masking: Not maskable. */
> 
> The "format" in OF1.2 looks clearer to me, can you use that instead?
> Here it is:
> 
>  * Format: 32-bit integer in network byte order with 12 most-significant
>  * bits forced to 0. Only the lower 20 bits have meaning.
> 
> Similarly for mpls_tc:
> 
>  * Format: 8-bit integer with 5 most-significant bits forced to 0.
>  * Only the lower 3 bits have meaning.
> 
> 
> lib/flow.c
> ----------
> 
> parse_mpls() is unused.  Please either use it or remove it.
> 
> I wonder whether we really need separate L2.5 and L3 in struct ofpbuf,
> since if MPLS is present then we never parse past it.  We could treat
> MPLS as L3, if that is appropriate.
> 
> <rk> Traditinally MPLS is treated as a L2.5. Would like to leave it
> like that.
> 
> This assignment is unnecessary because the top-level memset() will
> already have zeroed mpls_lse:
>     } else {
>         flow->mpls_lse = htonl(0);
>     }
> 
> <rk> Removed the code.
> 
> You can drop the parentheses around the == here, and in practice we
> normally do:
> -    if (eth->eth_type == htons(ETH_TYPE_VLAN)) {
> +    if ((eth->eth_type == htons(ETH_TYPE_VLAN_8021q)) ||
> +       (eth->eth_type == htons(ETH_TYPE_VLAN_8021ad))) {
> 
> <rk> Removed it.
> 
> This code in flow_zero_wildcards() looks odd to me:
>     if ((wc & FWW_MPLS_LABEL) || (wc & FWW_MPLS_TC)) {
>         if (wc & FWW_MPLS_LABEL) {
>             flow->mpls_lse &= ~htonl(MPLS_LABEL_MASK);
>         }
>         flow->mpls_lse &= ~htonl(MPLS_TTL_MASK);
>         flow->mpls_lse &= ~htonl(MPLS_STACK_MASK);
>         if (wc & FWW_MPLS_TC) {
>             flow->mpls_lse &= ~htonl(MPLS_TC_MASK);
>         }
>     } else {
>         flow->mpls_lse &= ~htonl(MPLS_TTL_MASK);
>         flow->mpls_lse &= ~htonl(MPLS_STACK_MASK);
>     }
> I think that you can write it as just:
>     flow->mpls_lse &= ~htonl(MPLS_TTL_MASK | MPLS_STACK_MASK);
>     if (wc & FWW_MPLS_LABEL) {
>         flow->mpls_lse &= ~htonl(MPLS_LABEL_MASK);
>     }
>     if (wc & FWW_MPLS_TC) {
>         flow->mpls_lse &= ~htonl(MPLS_TC_MASK);
>     }
> 
> 
> <rk> Agreed and fixed it.
> 
> lib/meta-flow.c
> ---------------
> 
> Since each of the new fields has a width in bits less than its width
> in bytes, it would be good to add them to the comment titled "Size"
> within struct mf_field.
> 
> Please fix the box.  Instead of this:
>     /* ## -- ## */
>     /* ## L2.5 ## */
>     /* ## -- ## */
> write:
>     /* ## ---- ## */
>     /* ## L2.5 ## */
>     /* ## ---- ## */
> 
> 
> <rk> Fixed it.
> 
> lib/nx-match.c
> --------------
> 
> I think that nx_put_match() can use mpls_lse_to_label() and
> mpls_lse_to_tc().
> 
> <rk> Agreed, fixed it.
> 
> 
> lib/odp-util.h
> --------------
> 
> I don't think that ODPUTIL_FLOW_KEY_BYTES or the comment above it
> needs an update, because MPLS is always the last header parsed; that
> is, it will never appear along with the IPv6, ICMPv6, and ND headers
> in the list.
> 
> <rk> Agreed. It was added during debugging when things were not working. 
> Fixed it now.
> 
> In parse_odp_key_attr() the outer parentheses here are unnecessarily doubled:
> +        if ((sscanf(s, "mpls(label=%"SCNi32",tc=%i,ttl=%i)%n",
> +                    &mpls_label, &mpls_tc, &mpls_ttl, &n) > 0 && n > 0)) {
> 
> <rk> Fixed it.
> 
> In parse_mpls_onward(), I think that the call to parse_l3_onward() can
> change to just check_expectations(), because none of the "if"
> statements in parse_l3_onward() will ever successfully match.
> 
> <rk> Fixed it.
> 
> In parse_mpls_onward(), the outer parentheses here are unnecessarily doubled:
> +    expected_attrs |= ((UINT64_C(1) << OVS_KEY_ATTR_MPLS));
> 
> 
> <rk> Fixed it.
> 
> lib/ofp-parse.c
> ---------------
> 
> In parse_named_action(), it would probably be a good idea to validate
> that the arguments to set_mpls_label, set_mpls_tc, and set_mpls_ttl
> are in the correct range.  For push_mpls and pop_mpls, you can use
> str_to_u16().
> 
> 
> lib/ofp-util.c
> --------------
> 
> A line is mis-indented in ofputil_normalize_rule().
> 
> <rk> Fixed it.
> 
> 
> lib/ofp-util.h
> --------------
> 
> The OFP_ACTION_* enum values are only used in ofproto-dpif.c, so I'd
> move them there.
> 
> <rk> Mainly used for mpls delayed action. Removed it.
> 
> lib/packets.c
> -------------
> 
> The comment on set_mpls_lse_ttl() is wrong.
> 
> I think that the set_mpls_lse_ttl() code is only correct because
> MPLS_TTL_SHIFT is 0.
> 
> dec_mpls_ttl() , copy_mpls_ttl_in(), and copy_mpls_ttl_out() could use
> mpls_lse_to_ttl().
> 
> The first and final cases in push_mpls() are identical except for the
> source of the TTL.  I suggest using a helper function.
> 
> In pop_mpls(), you can write:
>         if ((ntohl(mh->mpls_lse) & MPLS_STACK_MASK) >> MPLS_STACK_SHIFT) {
> as
>         if (mh->mpls_lse & htonl(MPLS_STACK_MASK))
> 
> <rk> Userspace code is tested now and comments incorporated.
> 
> lib/packets.h
> -------------
> 
> Please don't use an OFP_ prefix for constants that aren't defined by
> OpenFlow.  I don't see OFP_MPLS_ANY or OFP_MPLS_NONE in OpenFlow.  I
> don't see any user of OFP_MPLS_ANY anywhere in the tree, either (where
> is it used?)
> 
> If you do need them, please use #defines for these, because enum
> constants always have type "int" which means that these are actually
> negative values.
> 
> <rk> Don't need them, removed.
> 
> ofproto/ofproto-dpif.c
> ----------------------
> 
> The change to get_features() is a no-op, please drop it from the
> patch.
> 
> I don't think the facet_account() changes actually have any visible
> effect.
> 
> Why do all the "compose_*_mpls" functions check for null ctx or
> ofproto?  Can either one ever happen?  All of these functions are
> one-liners, and they only have a single caller, so I'd inline them
> into their caller.
> 
> <rk> Mostly safer coding. Not needed now hence removed.
> 
> utilities/ovs-ofctl.8.in
> ------------------------
> 
> I don't think the sentence that starts "If none specified" below is
> correct:
> +.IP \fBmpls_label=\fIlabel\fR
> +Matches MPLS Label when \fIethertype\fR is \fI0x8847\fR or \fI0x8848\fR.
> +Specify a number between 16 and 2^20-1, inclusive, as the 20-bit MPLS label
> +to match. If none specified, all packets which has \fIethertype\fR equal to
> +\fI0x8847\fR or \fI0x8848\fR are matched.
> 
> The shorthand notation "mpls" (for dl_type=0x8847) should be mentioned
> in the list of shorthands.
> 
> s/classe/class/ here:
> +Modifies the MPLS traffic-classe of a packet.
> 
> 
> <rk> I think it is true. If no label or tc is specified all packets which has 
> ethertype=0x8847/0x8848 is matched.
> 
> Thanks,
> Ravi
> 
> 
> Thanks,
> 
> Ben.
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to