本人内核小菜,最近工作需要在内核模块做udp的recv checksum 校验,整理了相关资料并把关键的函数列出来。
参考4.9内核及相关博客
http://blog.csdn.net/one_clouder/article/details/53177992
http://wenx05124561.blog.163.com/blog/static/124000805201242032041268/
//recv udp packet check
static bool checksumError(struct sk_buff* skb, struct udphdr* uh)
{
unsigned int psum = 0;
//needn't check if below:
//1. ip_summed is CHECKSUM_UNNECESSARY hardware check
if(skb->ip_summed == CHECKSUM_UNNECESSARY)
{
return false;
}
//2. udp header check is 0,mean needn't check
if(uh->check == 0)
{
incCounter64(&recvChecksumStat_g.checkZero);
return false;
}
//otherwise, we must calculate csum
//skb->data must move to udphr
if(skb_pull(skb, ip_hdrlen (skb)) == NULL)