Hmm, I didn't remember ever sending you that round of feedback but indeed I see that all of my comments have been addressed.
Thanks, I'll take another look soon. On Tue, May 22, 2012 at 08:12:09PM +0200, ravi.ke...@telekom.com wrote: > Thanks Ben. I have addressed all your previous comments with one > exception of adding ofpbuf_* common function. I haven't worked on > the patch since mid April, will work on it after I receive > additional comments on the latest patch. > > Please note that latest patch has gone through additional testing > > vlan + mpls (ICMP) > vlan-qinq + mpls (ICMP) > > (both kernel and user-space) > > vlan + mpls (TCP offload) > mpls (tcp offload) > vlan-qinq (tcp offload) > > TCP offload is not perfect yet but works fine so far. I am looking into > performance numbers which doesn't look quite right. > > Thanks, > Ravi > > -----Original Message----- > From: Ben Pfaff [mailto:b...@nicira.com] > Sent: Tuesday, May 22, 2012 10:49 AM > To: Kerur, Ravi > Cc: dev@openvswitch.org > Subject: Re: [ovs-dev] MPLS and VLAN QinQ patch > > On Tue, May 22, 2012 at 07:36:32PM +0200, ravi.ke...@telekom.com wrote: > > Attached MPLS and VLAN QinQ patch after rebasing to following commit > > > > commit 046f1f89e6d7716581de207dd0c54421926bc25b > > Author: Ethan Jackson <et...@nicira.com<mailto:et...@nicira.com>> > > Date: Mon May 21 13:20:18 2012 -0700 > > > > Patch(s) have undergone additional integration testing and incorporates > > initial code review comments from Ben. > > Hi Ravi. Here's some feedback that I had started writing up on a > previous version of the patch that you sent me in private email some > time ago. Will you please apply any parts of it that still apply to > the current version of the MPLS patch, then post a revised version? > > Thanks, > > Ben. > > It applies, compiles, and passes "sparse" cleanly. Great! > > I don't see any handling for decrementing a TTL of 0. That's supposed > to be sent to the controller with OFPR_INVALID_TTL. > > include/linux/openvswitch.h > --------------------------- > > I think these should say be16 and be32 since their operands are > in network byte order: > + OVS_ACTION_ATTR_PUSH_MPLS, /* u16, ethertype */ > + OVS_ACTION_ATTR_POP_MPLS, /* u16, ethertype */ > + OVS_ACTION_ATTR_SET_MPLS_LSE, /* u32, mpls label stack entry */ > > > include/openflow/nicira-ext.h > ----------------------------- > > You can drop this line, it doesn't fit in in the context: > + /* MPLS related definitions*/ > > lib/dpif-netdev.c > ----------------- > > I don't think there's a benefit to the temporary vars here: > + case OVS_ACTION_ATTR_PUSH_MPLS: > + push_ethertype = nl_attr_get_be16(a); > + push_mpls(packet, push_ethertype); > + break; > + > + case OVS_ACTION_ATTR_POP_MPLS: > + pop_ethertype = nl_attr_get_be16(a); > + pop_mpls(packet, pop_ethertype); > + break; > + > + case OVS_ACTION_ATTR_SET_MPLS_LSE: > + mpls_lse = nl_attr_get_be32(a); > + set_mpls_lse(packet, mpls_lse); > + break; > > lib/flow.c > ---------- > > In flow_extract(), I don't think the cast is necessary: > + packet->l2_5 = (uint32_t *)b.data; > > lib/odp-util.c > -------------- > > I think that these should be ovs_be<N> types: > + case OVS_ACTION_ATTR_PUSH_MPLS: return sizeof(uint16_t); > + case OVS_ACTION_ATTR_POP_MPLS: return sizeof(uint16_t); > + case OVS_ACTION_ATTR_SET_MPLS_LSE: return sizeof(uint32_t); > > format_odp_action() and parse_odp_action() use different syntax for > push_mpls and pop_mpls (one includes "tpid=", the other doesn't). > Please make them consistent. > > (Is 'tpid' correct terminology for MPLS? I thought it was > VLAN-specific.) > > In parse_odp_action(), the numbers passed to strncmp() and returned > differ, but they should be the same. > > Code like this appears in a few places. Should we create a helper > function? > + htonl((mpls_label << MPLS_LABEL_SHIFT) | > + (mpls_tc << MPLS_TC_SHIFT) | > + (mpls_ttl << MPLS_TTL_SHIFT) | > + (mpls_stack << MPLS_STACK_SHIFT))); > The set_mpls_lse_values() function could also be implemented in terms > of such a helper. > > I'd like to see commit_mpls_action() split into a function to pop an > MPLS header and a function to push an MPLS header. The current > organization is confusing and I'm not convinced that it's 100% > correct. > > lib/packets.c > ------------- > > In set_mpls_lse_ttl(), please drop the unneeded parentheses here: > + *tag |= (ttl & htonl(MPLS_TTL_MASK)); > also in the other similar functions. > > I think the logic in dec_mpls_ttl() only works because the TTL is the > low 8 bits of mpls_lse. Conceptually there's a missing shift. > > copy_mpls_ttl_in() and copy_mpls_ttl_out() don't appear to check that > packet data is actually present. > > Also in those functions, missing {} here: > + if (mh == NULL || nh == NULL) > + return; > > The "return;" at the end of push_mpls_lse() may be omitted. > > push_mpls() and push_mpls_lse() look like they don't check that IPv4 > packet data is actually present. > > I think it's time to add ofpbuf_*() functions to insert and remove > data in the middle of a packet. It's hard to see whether open-coded > moves (there are a few in this file in addition to the ones you added > for MPLS) are correct, so it'd be nice to get it right once and reuse > it. > > ofproto/ofproto-dpif.c > ---------------------- > > facet_account() has some stray VLOG_DBG calls. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev