blob: 01e716d185f4253af3a262bdbfb4bde3dbdbb561 [file] [log] [blame]
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -07001
2The "enviromental" rules for authors of any new tc actions are:
3
41) If you stealeth or borroweth any packet thou shalt be branching
5from the righteous path and thou shalt cloneth.
6
7For example if your action queues a packet to be processed later
8or intentionaly branches by redirecting a packet then you need to
9clone the packet.
10There are certain fields in the skb tc_verd that need to be reset so we
11avoid loops etc. A few are generic enough so much so that skb_act_clone()
12resets them for you. So invoke skb_act_clone() rather than skb_clone()
13
142) If you munge any packet thou shalt call pskb_expand_head in the case
15someone else is referencing the skb. After that you "own" the skb.
16You must also tell us if it is ok to munge the packet (TC_OK2MUNGE),
17this way any action downstream can stomp on the packet.
18
193) dropping packets you dont own is a nono. You simply return
20TC_ACT_SHOT to the caller and they will drop it.
21
22The "enviromental" rules for callers of actions (qdiscs etc) are:
23
24*) thou art responsible for freeing anything returned as being
25TC_ACT_SHOT/STOLEN/QUEUED. If none of TC_ACT_SHOT/STOLEN/QUEUED is
26returned then all is great and you dont need to do anything.
27
28Post on netdev if something is unclear.
29