blob: dcadf6f88e34222ef430d9423b34604c4ff37edd [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
Matt LaPlanted9195882008-07-25 19:45:33 -07007For example if your action queues a packet to be processed later,
8or intentionally branches by redirecting a packet, then you need to
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -07009clone the packet.
Matt LaPlanted9195882008-07-25 19:45:33 -070010
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -070011There are certain fields in the skb tc_verd that need to be reset so we
Matt LaPlanted9195882008-07-25 19:45:33 -070012avoid loops, etc. A few are generic enough that skb_act_clone()
13resets them for you, so invoke skb_act_clone() rather than skb_clone().
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -070014
152) If you munge any packet thou shalt call pskb_expand_head in the case
16someone else is referencing the skb. After that you "own" the skb.
17You must also tell us if it is ok to munge the packet (TC_OK2MUNGE),
18this way any action downstream can stomp on the packet.
19
Matt LaPlanted9195882008-07-25 19:45:33 -0700203) Dropping packets you don't own is a no-no. You simply return
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -070021TC_ACT_SHOT to the caller and they will drop it.
22
23The "enviromental" rules for callers of actions (qdiscs etc) are:
24
Matt LaPlanted9195882008-07-25 19:45:33 -070025*) Thou art responsible for freeing anything returned as being
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -070026TC_ACT_SHOT/STOLEN/QUEUED. If none of TC_ACT_SHOT/STOLEN/QUEUED is
Matt LaPlanted9195882008-07-25 19:45:33 -070027returned, then all is great and you don't need to do anything.
Jamal Hadi Salimd892afe2007-10-26 02:49:09 -070028
29Post on netdev if something is unclear.
30