> The fact that I shuffled around elements within struct flow and it increased > the size of the structure indicates padding(2 bytes) were added, which makes > flow hash doesn't work because flow_sig_data now has uninitialized 2 bytes. > In this case wouldn't it make sense to pack the structure? Or do you > recommend to carefully place elements/members such that no padding bytes are > added?
We don't want to use __attribute__((packed)) because it isn't portable. For this reason we've been carefully placing the elements to avoid adding padding. That's why we build assert on the size of struct flow. Ethan > > -----Original Message----- > From: Ethan Jackson [mailto:et...@nicira.com] > Sent: Tuesday, February 21, 2012 3:59 PM > To: Kerur, Ravi > Cc: dev@openvswitch.org > Subject: Re: [ovs-dev] Q on FLOW_SIG_SIZE and hashing > >> Just to give you another data, I shuffled elements/members in struct flow >> which increased the size of struct flow to 132(please note I have not added >> any new fields) and tested it on a 32 bit centos 6.2 system and it fails to >> match any flow that is programmed. Unfortunately the diffs are on a system >> which is currently at my home. I will send out those diffs tomorrow if you >> are interested. > > Yep, sounds like you have a bug which is causing the hash to use > uninitialized data. Have you tried running under valgrind? It's > pretty good at catching that sort of thing. > > Ethan > > > >> >> Thanks >> Ravi >> >> -----Original Message----- >> From: Kerur, Ravi >> Sent: Tuesday, February 21, 2012 3:41 PM >> To: Ethan Jackson >> Cc: dev@openvswitch.org >> Subject: RE: [ovs-dev] Q on FLOW_SIG_SIZE and hashing >> >> Thanks Ethan. I did zeroed out stack and ttl bits in my diffs earlier while >> debugging. It didn't help so I removed them. I will take a closer look one >> more time. >> >> Thanks >> Ravi >> >> -----Original Message----- >> From: dev-boun...@openvswitch.org [mailto:dev-boun...@openvswitch.org] On >> Behalf Of Ethan Jackson >> Sent: Tuesday, February 21, 2012 3:20 PM >> To: Kerur, Ravi >> Cc: dev@openvswitch.org >> Subject: Re: [ovs-dev] Q on FLOW_SIG_SIZE and hashing >> >>> Yes I do. Attached complete diffs. The debugging information I mentioned >>> earlier are with these diffs as well. I shifted to just flow struct diffs >>> after I went through FLOW_WC_SEQ changes I had and thought it might not >>> have an impact, as most of the checks are in ".c" and with >>> build_assert_decl and compilation should have failed if I had missed >>> something. Anyways let me know your inputs. >> >> OK great. So typically bugs like this come around when you have >> uninitialized data in the flow or in the flow wildcards which could >> cause cls_rule_hash() to return unpredictable results. This >> completely breaks the classifier. I haven't read the diff you've sent >> carefully, but it sounds to me like that's the issue you're running >> into. One place to look: in flow_zero_wildcards() it looks to me >> like you are only initializing the MPLS_LABEL_MASK and MPLS_TC_MASK >> pits of the 'mpls_lse' field. If you aren't planning to match on the >> TTL or STACk flags, you'll need to zero them out so the uninitialized >> memory doesn't break the hash. That's just a hunch though, I know >> very little about MPLS and I haven't read the diff carefully. >> >> Ethan >> >> >>> >>> Thanks >>> Ravi >>> >>> -----Original Message----- >>> From: Ethan Jackson [mailto:et...@nicira.com] >>> Sent: Tuesday, February 21, 2012 2:31 PM >>> To: Kerur, Ravi >>> Cc: dev@openvswitch.org >>> Subject: Re: [ovs-dev] Q on FLOW_SIG_SIZE and hashing >>> >>>> I have attached diffs which includes adding a member to struct flow and >>>> adjusting FLOW_SIG_SIZE accordingly. This is experimental so I haven't >>>> bothered to change FLOW_WC_SEQ... >>> >>> Oh I'm sorry for the confusion, I thought you had a more involved >>> patch which makes the necessary changes demanded by FLOW_WC_SEQ. The >>> code really does require those changes to work, simply adding the >>> field to the structure is insufficient. The behavior you're seeing is >>> what I'd expect to see without the FLOW_WC_SEQ changes. There may be >>> other changes necessary as well. >>> >>> Ethan >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev