Почему стек TCPIP ядра Linux не использует какой-либо шаблон проектирования для обработки skb, например, Chain Of Responsibility? - PullRequest
0 голосов
/ 09 ноября 2018

Теперь я читаю код ipv6 в ядре Linux. Я обнаружил, что есть много функций, которые одна вызывает другую, для обработки skb. Код такой:

Func1(skb) {  Func2(skb) }
Func2(skb) {  Func3(skb) }
Func3(skb) {  Func4(skb) }
...

Итак, проблема в том, что в этом процессе будет DEEP CALL TRACE , например:

Func4
Func3
Func2
Func1

Так почему бы не написать такой код:

Func(skb) { Subfunc1(skb); Subfunc2(skb); Subfunc3(skb); ...}

И CALL TRACE - это всего 2 слоя.

SubfuncX
Func

Если CALL TRACE слишком глубокий, я думаю, что 1) трудно отладить, 2) могут возникнуть проблемы при использовании устройства с парой VETH.

Так что, если это правда, то с чем это связано?

Это вызовы функции ipv6:

enter image description here

...