Fri, Apr 28, 2017 at 02:23:34PM CEST, j...@mojatatu.com wrote: >On 17-04-28 02:52 AM, Jiri Pirko wrote: >> Fri, Apr 28, 2017 at 03:41:08AM CEST, j...@mojatatu.com wrote: >> > >> > Jiri, >> > >> > Good stuff! >> > Thanks for the effort. >> > >> > I didnt review the details - will do. I wanted to raise one issue. >> > This should work for all actions, not just gact (refer to the >> > recent commit i made on the action jumping). >> > >> > Example policy for policer: >> > >> > #if packets destined for mac address 52:54:00:3d:c7:6d >> > #exceed 90kbps with burst of 90K then jump to chain 11 >> > #for further classification, otherwise set their skb mark to 11 >> > # and proceed. >> > >> > tc filter add dev eth0 parent ffff: protocol ip pref 33 \ >> > flower dst_mac 52:54:00:3d:c7:6d \ >> > action police rate 1kbit burst 90k conform-exceed pipe/goto chain 11 \ >> > action skbedit mark 11 >> > >> > But i should also be able to do this for any other action, etc. >> > >[..] > >> You can have multiple actions in list and gact goto as the last one. Why >> to do this ugliness? > >To be able to do what I described above ;-> Policer is always a good >example because it can branch depending on whether a rate is exceeded >or not. > >Another example: >If you had two tables, one for flows that dont exceed their >rate and another for flows exceed their rate. >"match X > action police > if exceed > goto chain 12 > else did not exceed > tag packet, goto chain 11 >" > >But it is not just the policer, other actions as well would benefit. > >I am not sure you can achieve that with just gact.
Got it. Sigh, every day I find new oddities in net/sched :) I will try to figure out how to extend GOTO_CHAIN action for other actions. So basically, you suggest to encode chain number into the action opcode, like you do it in jump, right? For example: #define TC_ACT_GOTO_CHAIN 0x20000000 And then I will have chainlimit 0x10000000-1 Thanks.