Hi all,

I'm using ovs-dpdk with this patch:
```
commit 4c226944f7c55c9d6e7c85f7c33c5ce11c35ce54
Author: Jianbo Liu <jian...@nvidia.com>
Date:   Fri Jul 8 03:06:26 2022 +0000

    netdev-offload-tc: Implement meter offload API for tc
```
This patch is for offload flow meter by tc.

Now I found a bug: ovs crash when add meter openflow.

1. How to produce:
(NOTICE: This bug is not always reproducible.)
```
Add these commands:

ovs-ofctl -O OpenFlow13 add-meter br-int
meter=1,kbps,band=type=drop,rate=1000
ovs-ofctl -O OpenFlow13 add-flow br-int in_port=\"pf0vf0\",ip,nw_src=
16.0.0.0/24,nw_dst=48.0.0.0/24,nw_proto=17,actions=\"meter:1,output:p0\"
ovs-ofctl -O OpenFlow13 add-flow br-int
in_port=\"pf0vf0\",udp6,ipv6_src=2001:4860:0:2001::/64,ipv6_dst=2001:0:4137:9350:8000:f12a:b9c8:2815,actions=\"meter:1,output:p0\"

Then ovs crash, this is core file call trace:

(gdb) bt
#0  id_pool_alloc_id (pool=0x0, id_=id_@entry=0x7fff180c841c) at
lib/id-pool.c:112
#1  0x000000000055f0a0 in meter_alloc_police_index
(police_index=0x7fff180c841c) at lib/netdev-offload-tc.c:2530
#2  meter_tc_set_policer (meter_id=..., config=0x7fff180c8538) at
lib/netdev-offload-tc.c:2567
#3  0x00000000004af207 in meter_offload_set (meter_id=meter_id@entry=...,
config=config@entry=0x7fff180c8538) at lib/netdev-offload.c:207
#4  0x0000000000474c2b in dpif_netdev_meter_set (dpif=<optimized out>,
meter_id=..., config=0x7fff180c8538) at lib/dpif-netdev.c:9137
#5  0x000000000048e3fd in dpif_meter_set (dpif=0x28cfd10, meter_id=...,
config=<optimized out>) at lib/dpif.c:1973
#6  0x000000000042daf8 in meter_set (ofproto_=0x28cc670,
meter_id=0x7fff180c8590, config=<optimized out>) at
ofproto/ofproto-dpif.c:6751
#7  0x0000000000423e91 in handle_add_meter (mm=0x7fff180c8530,
ofproto=0x28cc670) at ofproto/ofproto.c:6905
#8  handle_meter_mod (ofconn=0x29073d0, oh=0x291bd40) at
ofproto/ofproto.c:7013
#9  0x0000000000426d21 in handle_single_part_openflow
(type=OFPTYPE_METER_MOD, oh=0x291bd40, ofconn=0x29073d0) at
ofproto/ofproto.c:8668
#10 handle_openflow (ofconn=0x29073d0, msgs=0x7fff180c88c0) at
ofproto/ofproto.c:8843
#11 0x000000000045b3b4 in ofconn_run (handle_openflow=0x4267b0
<handle_openflow>, ofconn=0x29073d0) at ofproto/connmgr.c:1329
#12 connmgr_run (mgr=0x272a200, handle_openflow=handle_openflow@entry=0x4267b0
<handle_openflow>) at ofproto/connmgr.c:356
#13 0x00000000004209be in ofproto_run (p=0x28cc670) at
ofproto/ofproto.c:1964
#14 0x000000000040da44 in bridge_run__ () at vswitchd/bridge.c:3251
#15 0x00000000004138ec in bridge_run () at vswitchd/bridge.c:3310
#16 0x000000000040955d in main (argc=<optimized out>, argv=<optimized out>)
at vswitchd/ovs-vswitchd.c:129

```

2. Check code:
```
Notice
#0  id_pool_alloc_id (pool=0x0, id_=id_@entry=0x7fff180c841c) at
lib/id-pool.c:112
the @pool param is NULL.

This is happened ONLY when @netdev_tc_init_flow_api is NOT called.
But in code, ONLY after @netdev_tc_init_flow_api is called, the
@handle_meter_mod could works on netdev with system type.
```

3. My question:
- How this BUG happen?
- Is there patch to solve this BUG?


----
Simon Jones
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to