Hi Andrew,
On Tuesday 12 April 2016 22:42:59 Andrew Lunn wrote:
Hi Folks
Does anybody remember the history for the follow and can explain why the code is as it is?
The soft interface transmit function, batadv_interface_tx() calls batadv_skb_set_priority(skb, 0) to set the skb->priority based on the TOS bits or 801.p.
If the packet needs to be fragmented because of MTU issues, batadv_frag_create() is used to create the fragments. It overwrites the skb->priority in the original skb to TC_PRIO_CONTROL, and leaves the fragment skb with the default priority.
This seems a bit odd to me. I would of expected the priority to of been copied from the original into the fragment.
I think this part could be improved. Right now, if I remember correctly, we set TC_PRIO_CONTROL by default and set another priority if we can parse the header (batadv_skb_set_priority()).
There are two cases:
1.) On the original sender, both fragments could adopt the priority as you suggest. The code probably doesn't take care of that yet, so that could be fixed.
2.) On routers on the way, the priority could only be set based on the first fragment, since the second fragment will not have a valid header to parse. And unless we remember the priority from the first fragment, we have no way to know to which priority we should set the second fragment.
I believe case 1 can be fixed easily, for case 2 I don't have an idea right now. :)
Cheers, Simon