Hi William, One of those it’s easy if you know what to look for bugs, otherwise a real headache to find.
But a one line fix, so I might as well … https://gerrit.fd.io/r/#/c/5440/ /neale From: <vpp-dev-boun...@lists.fd.io> on behalf of William McCall <william.mcc...@gmail.com> Date: Monday, 20 February 2017 at 15:36 To: "Dave Barach (dbarach)" <dbar...@cisco.com> Cc: Siamak Abdollahzade <siamak_abdollahz...@yahoo.com>, "Andrew Yourtchenko (ayourtch)" <ayour...@cisco.com>, "Ole Troan (otroan)" <otr...@cisco.com>, "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io> Subject: Re: [vpp-dev] problem in classify command in vpp hmm.. i thought I did with "make debug" and thought the same thing too (sorta hoping for an easier fix where my talents could be more useful)... alas, i SI'ed through the vnet_classify_new_table function and got here and validated all the steps in the macro to yield this bad result (plus matched the asm piece-for-piece with the macro code). Am I missing something in building/using the debug image? I'm very unfamiliar with the pool allocation mechanisms.. maybe there is something I could watch/read that would explain/help me debug it better? naturally, the mask pointer definitely looks off, but haven't gotten to any dereference of it in the debugger (yet). On Mon, Feb 20, 2017 at 1:45 PM, Dave Barach (dbarach) <dbar...@cisco.com<mailto:dbar...@cisco.com>> wrote: Try it with a debug image. Mask==0x1 => SIGSEGV, with probability 1. Thanks… Dave From: vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io> [mailto:vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io>] On Behalf Of William McCall Sent: Monday, February 20, 2017 7:58 AM To: Ni, Hongjun <hongjun...@intel.com<mailto:hongjun...@intel.com>> Cc: Siamak Abdollahzade <siamak_abdollahz...@yahoo.com<mailto:siamak_abdollahz...@yahoo.com>>; Andrew Yourtchenko (ayourtch) <ayour...@cisco.com<mailto:ayour...@cisco.com>>; Ole Troan (otroan) <otr...@cisco.com<mailto:otr...@cisco.com>>; vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: Re: [vpp-dev] problem in classify command in vpp looks like it is getting hung up in pool_get_aligned macro right here.. guessing due to something that was supposed to be done earlier: if (P) \ _pool_var (l) = vec_len (_pool_var (p)->free_indices); Hopefully helpful debugging info: Thread 1 "vpp_main" received signal SIGSEGV, Segmentation fault. 0x00007ffff66598dc in vnet_classify_new_table (cm=0x7ffff7608500 <vnet_classify_main>, mask=0x1 <error: Cannot access memory at address 0x1>, nbuckets=2, memory_size=2097152, skip_n_vectors=1, match_n_vectors=1) at /home/comm3c/vpp2/build-data/../src/vnet/classify/vnet_classify.c:118 118 pool_get_aligned (cm->tables, t, CLIB_CACHE_LINE_BYTES); 0x00007ffff665989c <vnet_classify_new_table+91>: 48 8b 45 88 mov -0x78(%rbp),%rax -0x78(%rbp) is cm->tables aka P in the macro 0x00007ffff66598a0 <vnet_classify_new_table+95>: 48 8b 00 mov (%rax),%rax 0x00007ffff66598a3 <vnet_classify_new_table+98>: 48 89 c7 mov %rax,%rdi 0x00007ffff66598a6 <vnet_classify_new_table+101>: e8 77 ec ff ff callq 0x7ffff6658522 <pool_header> 0x00007ffff66598ab <vnet_classify_new_table+106>: 48 89 45 a0 mov %rax,-0x60(%rbp) -0x60(%rbp) is _pool_p, a pool header. Set pool_l = 0 0x00007ffff66598af <vnet_classify_new_table+110>: 48 c7 45 98 00 00 00 00 movq $0x0,-0x68(%rbp) Check if P (cm->tables) exists: 0x00007ffff66598b7 <vnet_classify_new_table+118>: 48 8b 45 88 mov -0x78(%rbp),%rax 0x00007ffff66598bb <vnet_classify_new_table+122>: 48 8b 00 mov (%rax),%rax 0x00007ffff66598be <vnet_classify_new_table+125>: 48 85 c0 test %rax,%rax 0x00007ffff66598c1 <vnet_classify_new_table+128>: 74 28 je 0x7ffff66598eb <vnet_classify_new_table+170> Check if _pool_p free indicies either indices or 0. Relevant portion vppinfra/vec_bootstrap.h:142:#define vec_len(v) ((v) ? _vec_len(v) : 0) vppinfra/vec_bootstrap.h:134:#define _vec_len(v) (_vec_find(v)->len) vppinfra/vec_bootstrap.h:73:#define _vec_find(v) ((vec_header_t *) (v) - 1) 0x00007ffff66598c3 <vnet_classify_new_table+130>: 48 8b 45 a0 mov -0x60(%rbp),%rax 0x00007ffff66598c7 <vnet_classify_new_table+134>: 48 8b 40 08 mov 0x8(%rax),%rax 0x00007ffff66598cb <vnet_classify_new_table+138>: 48 85 c0 test %rax,%rax 0x00007ffff66598ce <vnet_classify_new_table+141>: 74 12 je 0x7ffff66598e2 <vnet_classify_new_table+161> Subtract 4 from pointer ((vec_header_t *) (v) - 1 ) from pool_l. 0x00007ffff66598d0 <vnet_classify_new_table+143>: 48 8b 45 a0 mov -0x60(%rbp),%rax 0x00007ffff66598d4 <vnet_classify_new_table+147>: 48 8b 40 08 mov 0x8(%rax),%rax 0x00007ffff66598d8 <vnet_classify_new_table+151>: 48 83 e8 04 sub $0x4,%rax Dies here trying to mov address 0x9fffffffc to EAX => 0x00007ffff66598dc <vnet_classify_new_table+155>: 8b 00 mov (%rax),%eax Included for context: 0x00007ffff66598de <vnet_classify_new_table+157>: 89 c0 mov %eax,%eax 0x00007ffff66598e0 <vnet_classify_new_table+159>: eb 05 jmp 0x7ffff66598e7 <vnet_classify_new_table+166> 0x00007ffff66598e2 <vnet_classify_new_table+161>: b8 00 00 00 00 mov $0x0,%eax 0x00007ffff66598e7 <vnet_classify_new_table+166>: 48 89 45 98 mov %rax,-0x68(%rbp) 0x00007ffff66598eb <vnet_classify_new_table+170>: 48 83 7d 98 00 cmpq $0x0,-0x68(%rbp) 0x00007ffff66598f0 <vnet_classify_new_table+175>: 74 7c je 0x7ffff665996e <vnet_classify_new_table+301> (gdb) info registers rax 0x9fffffffc 42949672956 rbx 0x1 1 rcx 0x0 0 rdx 0xffffffffffffffe8 -24 rsi 0x8 8 rdi 0x14 20 rbp 0x7fffb5ddfa70 0x7fffb5ddfa70 (gdb) x/2x 0x7fffb5ddfa70-0x60 0x7fffb5ddfa10: 0xb4bae750 0x00007fff (gdb) print _pool_p $25 = (pool_header_t *) 0x7fffb4bae750 (gdb) x/2x (0x7fffb4bae758) ->_pool_p + 8 0x7fffb4bae758: 0x00000000 0x0000000a and 0xA00000000 - 0x4 = 0x9fffffffc On Fri, Feb 17, 2017 at 7:12 AM, Ni, Hongjun <hongjun...@intel.com<mailto:hongjun...@intel.com>> wrote: Hey, I met the same issue when I using latest VPP code. In VPP 17.01, CLI command “classify table mask l3 ip4 proto” works well. Below is the error and bt log: Could someone take a look at it? Thanks a lot. DBGvpp# classify table match 1 mask l3 ip4 proto Thread 1 "vpp_main" received signal SIGSEGV, Segmentation fault. 0x00007ffff68e67b4 in vnet_classify_new_table (cm=0x7ffff7608320 <vnet_classify_main>, mask=0x1 <error: Cannot access\ memory at address 0x1>, nbuckets=2, memory_size=2097152, skip_n_vectors=1, match_n_vectors=1) at /root/vpp/build-data/../src/vnet/classify/vnet_classify.c:118 (gdb) bt #0 0x00007ffff68e67b4 in vnet_classify_new_table (cm=0x7ffff7608320 <vnet_classify_main>, mask=0x1 <error: Cannot ac\ cess memory at address 0x1>, nbuckets=2, memory_size=2097152, skip_n_vectors=1, match_n_vectors=1) at /root/vpp/build-data/../src/vnet/classify/vnet_classify.c:118 #1 0x00007ffff68e98ad in vnet_classify_add_del_table (cm=0x7ffff7608320 <vnet_classify_main>, mask=0x1 <error: Canno\ t access memory at address 0x1>, nbuckets=2, memory_size=2097152, skip=1, match=1, next_table_index=4294967295, miss_next_index=4294967295, table_index=0x7fffb6089b70, current_data_flag=0 '\000', current_data_offset=0, is_add\ =1, del_chain=0) at /root/vpp/build-data/../src/vnet/classify/vnet_classify.c:675 #2 0x00007ffff68ec6cd in classify_table_command_fn (vm=0x7ffff7999340 <vlib_global_main>, input=0x7fffb6089ef0, cmd=\ 0x7fffb6060e30) at /root/vpp/build-data/../src/vnet/classify/vnet_classify.c:1461 #3 0x00007ffff76ccb08 in vlib_cli_dispatch_sub_commands (vm=0x7ffff7999340 <vlib_global_main>, cm=0x7ffff79995a8 <vl\ ib_global_main+616>, input=0x7fffb6089ef0, parent_command_index=393) at /root/vpp/build-data/../src/vlib/cli.c:484 #4 0x00007ffff76cca16 in vlib_cli_dispatch_sub_commands (vm=0x7ffff7999340 <vlib_global_main>, cm=0x7ffff79995a8 <vl\ ib_global_main+616>, input=0x7fffb6089ef0, parent_command_index=0) at /root/vpp/build-data/../src/vlib/cli.c:462 #5 0x00007ffff76ccded in vlib_cli_input (vm=0x7ffff7999340 <vlib_global_main>, input=0x7fffb6089ef0, function=0x7fff\ f7755b97 <unix_vlib_cli_output>, function_arg=0) at /root/vpp/build-data/../src/vlib/cli.c:558 #6 0x00007ffff775a3b7 in unix_cli_process_input (cm=0x7ffff79991a0 <unix_cli_main>, cli_file_index=0) at /root/vpp/b\ uild-data/../src/vlib/unix/cli.c:2033 #7 0x00007ffff775ae1e in unix_cli_process (vm=0x7ffff7999340 <vlib_global_main>, rt=0x7fffb6079000, f=0x0) at /root/\ vpp/build-data/../src/vlib/unix/cli.c:2130 #8 0x00007ffff76f3aa3 in vlib_process_bootstrap (_a=140736230333104) at /root/vpp/build-data/../src/vlib/main.c:1218 #9 0x00007ffff5fd2668 in clib_calljmp () at /root/vpp/build-data/../src/vppinfra/longjmp.S:110 #10 0x00007fffb5041a80 in ?? () #11 0x00007ffff76f3bce in vlib_process_startup (vm=0x7fffffffe260, p=0x406220 <_start>, f=0x7ffff7999340 <vlib_global\ _main>) at /root/vpp/build-data/../src/vlib/main.c:1240 Backtrace stopped: previous frame inner to this frame (corrupt stack?) Thanks, Hongjun From: vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io> [mailto:vpp-dev-boun...@lists.fd.io<mailto:vpp-dev-boun...@lists.fd.io>] On Behalf Of Siamak Abdollahzade via vpp-dev Sent: Wednesday, February 15, 2017 2:57 PM To: vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> Subject: [vpp-dev] problem in classify command in vpp Hi all. I am new in VPP and I'm trying to use classify command to filter specific traffic. I've followed [vpp-dev] Question: Classification with hex mask<https://lists.fd.io/pipermail/vpp-dev/2016-June/001408.html>. At first, I entered this command: vpp# classify table mask l3 ip4 src dst proto the result was: classify table: match count required I've done some research around this error, but I couldn't find anything helpful. So, I was wondering if there is a manual for this command? or can you tell me what the problem is? I also tried to enter an integer number as match and I got this error: exec error: Misc thanks. [vpp-dev] Question: Classification with hex mask _______________________________________________ vpp-dev mailing list vpp-dev@lists.fd.io<mailto:vpp-dev@lists.fd.io> https://lists.fd.io/mailman/listinfo/vpp-dev -- William McCall -- William McCall
_______________________________________________ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev