I'm sorry, I can't help with OVS 2.0.  It is too old.  I recommend
upgrading.

On Sat, Aug 05, 2017 at 12:34:49PM +0000, Yangxiaoliang (Neo) wrote:
> Hello Ben,
> 
> I'm looking this problem with yinpeijun. Our ovs code is almost same with the 
> latest ovs 2.0 branch. We found no patch related to this problem. We hope to 
> get some advice from you. We are looking forward to your reply. Thanks.
> 
> The calling functions are as follows: 
> handle_flow_miss->facet_lookup_valid->facet_create->classifier_insert. 
> There is an assert error: classifier.c:236: assertion !displaced_rule failed 
> in classifier_insert(). 
> 
> ==Related functions:
> static void
> handle_flow_miss(struct flow_miss *miss, struct flow_miss_op *ops,
>                  size_t *n_ops)
> {
>     struct facet *facet;
> 
>     miss->ofproto->n_missed += list_size(&miss->packets);
> 
>     facet = facet_lookup_valid(miss->ofproto, &miss->flow);
>     if (!facet) { //**** facet is NULL, take this branch
>         if (miss->key_fitness == ODP_FIT_TOO_LITTLE //**** 
> miss->key_fitness=ODP_FIT_PERFECT
>             || !flow_miss_should_make_facet(miss)) {
>             return;
>         }
> 
>         facet = facet_create(miss); //**** take this line
>     }
>     handle_flow_miss_with_facet(miss, facet, ops, n_ops);
> }
> 
> static struct facet *
> facet_lookup_valid(struct ofproto_dpif *ofproto, const struct flow *flow)
> {
>     struct facet *facet;
> 
>     facet = facet_find(ofproto, flow); //**** facet is found
>     if (facet
>         && ofproto->backer->need_revalidate
>         && !facet_revalidate(facet)) { //**** facet_revalidate has been 
> called.
>         return NULL;  //**** take this line
>     }
> 
>     return facet;
> }
> 
> ==In the core file, we found 2 same rules. After analyzing the ovs 2.0.2 code 
> for a long time, we have no idea about how does this happen? 
> //new rule
> (gdb) p *rule
> $2 = {hmap_node = {hash = 2324087362, next = 0x0}, list = {prev = 
> 0x7f230c603258, next = 0x7f230c603258}, match = {
>     flow = {values = 0x7f230c603270, inline_values = {2, 8, 3301985768, 
> 1278747220, 3813303887, 0, 0, 0}, map = {
>         0, 1825}}, mask = {masks = {values = 0x7f230c6032a0, inline_values = 
> {4294967295, 4294967295, 4280221696, 
>           65535, 4294967295, 4294967295, 4294967295, 50331648}, map = 
> {1048576, 18225}}}}, priority = 32768}
> //old rule
> (gdb) p *displaced_rule
> $4 = {hmap_node = {hash = 2324087362, next = 0x0}, list = {prev = 
> 0x7f230c603258, next = 0x7f230c173d38}, match = {
>     flow = {values = 0x7f230c173d50, inline_values = {2, 8, 3301985768, 
> 1278747220, 3813303887, 0, 0, 0}, map = {
>         0, 1825}}, mask = {masks = {values = 0x7f230c173d80, inline_values = 
> {4294967295, 4294967295, 4280221696, 
>           65535, 4294967295, 4294967295, 4294967295, 50331648}, map = 
> {1048576, 18225}}}}, priority = 32768}
> 
> 
> -----Original Message-----
> From: Yinpeijun 
> Sent: Thursday, August 03, 2017 11:06 AM
> To: Ben Pfaff <b...@ovn.org>
> Cc: ovs-discuss@openvswitch.org; lixiao (H) <lixia...@huawei.com>; gaoxiaoqiu 
> <gaoxiao...@huawei.com>; Lichunhe <lichu...@huawei.com>; Chentao (Boby) 
> <boby.c...@huawei.com>; Yangxiaoliang (Neo) <david.yangxiaoli...@huawei.com>
> Subject: reply: [ovs-discuss] ovs_assert when do classifier_insert
> 
> 
> >>On Thu, Aug 03, 2017 at 02:04:34AM +0000, Yinpeijun wrote:
> >>                    Recently, there's been a problem when I use ovs,  
> >>the problem is ovs_assert when do classifier_insert. I read the source  
> >>code and annotation, but I don't understand how the problem is been  
> >>triggered.
> 
> >Can you provide a backtrace?  Which assertion is failing?  When did this 
> >start?
> 
>  Thank you for your reply, Ben.
>  
> I use ovs2.0.2(may be too old) and backtrace as follow:
>  #0  0x00007f2315a98875 in raise () from /lib64/libc.so.6
>  #1  0x00007f2315a99e51 in abort () from /lib64/libc.so.6
>  #2  0x00000000004d64ff in ovs_abort_valist (err_no=0, format=0x5577e0 "%s: 
> assertion %s failed in %s()",
>     args=0x7ffc597e57a0) at lib/util.c:243
>  #3  0x00000000004dcd8a in vlog_abort_valist (module_=0x7cdae0 <VLM_util>,
>     message=0x5577e0 "%s: assertion %s failed in %s()", args=0x7ffc597e57a0) 
> at lib/vlog.c:944
>  #4  0x00000000004dce6d in vlog_abort (module=0x7cdae0 <VLM_util>,
>     message=0x5577e0 "%s: assertion %s failed in %s()") at lib/vlog.c:958
>  #5  0x00000000004d5f50 in ovs_assert_failure (where=0x53d3c2 
> "lib/classifier.c:236",
>     function=0x53d3a0 <__func__.10702> "classifier_insert", 
> condition=0x53d3b2 "!displaced_rule") at lib/util.c:66
>  #6  0x0000000000457f16 in classifier_insert (cls=0xa2ff48, 
> rule=0x7f230c603248) at lib/classifier.c:236
>  #7  0x000000000042cdb2 in facet_create (miss=0xb68c10) at 
> ofproto/ofproto_dpif.c:4444
>  #8  0x000000000042b6de in handle_flow_miss (miss=0xb68c10, 
> ops=0x7ffc597e5cb0, n_ops=0x7ffc597e5b18)
>     at ofproto/ofproto_dpif.c:3826
>  #9  0x000000000042b9eb in handle_flow_misses (backer=0xcce850, fmb=0xb68c00) 
> at ofproto/ofproto_dpif.c:3886
>  #10 0x000000000042c0a6 in handle_upcalls (backer=0xcce850) at 
> ofproto/ofproto_dpif.c:4047
>  #11 0x00000000004254c8 in dpif_backer_run_fast (backer=0xcce850) at 
> ofproto/ofproto_dpif.c:1155
>  #12 0x0000000000425506 in type_run_fast (type=0x7f230c52fc20 "system") at 
> ofproto/ofproto_dpif.c:1172
>  #13 0x0000000000418db9 in ofproto_type_run_fast 
> (datapath_type=0x7f230c52fc20 "system") at ofproto/ofproto.c:1462
>  #14 0x000000000040e0dd in bridge_run_fast () at vswitchd/bridge.c:2493
> 
>  I've been using ovs2.0.2 for more than one year, it happened recently in my  
> lab environment.
>   
>  And I was a little confused, there is only one thread to process the 
> classifier insert , why need  to lock it ?
_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to