Hello, I need new match options for my openvswitch. I have already sorted out the flow_mod message handling and everything. Now, I need to find where the match is performed, but I cannot find it. Through debugging, I found that the matching is performed (or part of it) at miniflow_extract() at lib\flow.c
However, as described in flow.h /* * The fields are organized in four segments to facilitate staged lookup, where * lower layer fields are first used to determine if the later fields need to * be looked at. This enables better wildcarding for datapath flows. * * NOTE: Order of the fields is significant, any change in the order must be * reflected in miniflow_extract()! */ struct flow { blablabla } What I did, is to take advantage of a padding field in flow structure, and use it. This is now what miniflow_extract() assumes to be true (tcp_flags and new field are 16-bit size). BUILD_ASSERT_DECL(offsetof(struct flow, tcp_flags) + 2 == offsetof(struct flow, new_field) && offsetof(struct flow, tcp_flags) / 4 == offsetof(struct flow, new_field) / 4); Then, in miniflow_extract(), I use the miniflow_push_be16(mf, new_field, new_field); sentence (I do not know if this is correct). Here is my question: where I have to take into account the order of the fields, as stated in flow.h comment before definition of "struct flow"? Am I missing/misunderstanding something? I also do not understand how "miniflow structure" works, I know it is an optimization of flow structure, but I do not know how it is formed or how to read one. ANY clue or documentation is useful. Thank you for your support. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev