Я обрабатываю / изменяю дейтаграммы UDP для локальной доставки в ловушке сетевого фильтра в версии ядра Linux> 4.x в цепочке NF_INET_PRE_ROUTING.Однако, прежде чем я начну изменять такие дейтаграммы, я хочу проверить их согласованность, проверив их контрольную сумму.Как наиболее эффективный способ сделать это?
Поскольку я предполагаю, что уровень IP уже пройден и, следовательно, согласованность заголовка IP уже задана, достаточно ли этого, если я выполню проверку с помощью:
if(udp4_csum_init(skb,udp_hdr(skb),IPPROTO_UDP)) {
return NF_DROP;
}
else {
//start modifying skb
}
Охватывает ли udp4_csum_init
заголовок UDP и полезную нагрузку?
Прав ли я, что заголовок IP-пакета уже проверен, поскольку вызывается ловушка netfilterв ip_rcv
?
В чем разница между udp4_csum_init
, udp_lib_checksum_comblete(skb)
и udp_v4_check(len,saddr,daddr,base)
?
Как можно избежатьдополнительная проверка контрольной суммы в самом стеке UDP после того, как дейтаграммы покидают ловушку netfilter и принимаются локальным стеком UDP.Это возможно путем установки skb->csum_valid = 1
?
BR