Intel(R) PRO/100 Network Driver - version 2.3.43-k1 Copyright (c) 2004 Intel Corporation divert: allocating divert_blk for eth0 e100: selftest OK. e100: eth0: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled divert: freeing divert_blk for eth0 ip_tables: (C) 2000-2002 Netfilter core team Intel(R) PRO/100 Network Driver - version 2.3.43-k1 Copyright (c) 2004 Intel Corporat...
by lg8080 - 服务器架设 - 2006-04-12 13:43:12 阅读(596) 回复(0)
Intel(R) PRO/100 Network Driver - version 2.3.43-k1 Copyright (c) 2004 Intel Corporation divert: allocating divert_blk for eth0 e100: selftest OK. e100: eth0: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled divert: freeing divert_blk for eth0 ip_tables: (C) 2000-2002 Netfilter core team Intel(R) PRO/100 Network Driver - version 2.3.43-k1 Copyright (c) 2004 Intel Corporat...
在机器重新启动后dmesg发现有很多hw tcp v4 csum failed不知道是什么原因 是硬件的问题还是驱动的问题呢?请各位给看看,谢谢 divert: allocating divert_blk for eth1 e100: selftest OK. e100: eth1: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled ip_tables: (C) 2000-2002 Netfilter core team e100: eth0 NIC Link is Up 100 Mbps Full duplex ip_tables: (C) 2000-...
在机器重新启动后dmesg发现有很多hw tcp v4 csum failed不知道是什么原因 是硬件的问题还是驱动的问题呢?请各位给看看,谢谢 divert: allocating divert_blk for eth1 e100: selftest OK. e100: eth1: Intel(R) PRO/100 Network Connection Hardware receive checksums enabled cpu cycle saver enabled ip_tables: (C) 2000-2002 Netfilter core team e100: eth0 NIC Link is Up 100 Mbps Full duplex ip_tables: (C) 2000-...
在ip_output中,对于来自4层还是ip_input转发过来的包,还是有区别的。来自4层的需要计算sum的,也就是csum_DELAY_DATA,但是forward过来的,包是完整有效的。 但是如果要插入额外的处理代码时,尤其需要修改包的时候,就需要特别注意了,首先要做in_delayed_cksum(m),然后再修改包,这样就会相对简单一些。 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/132/showart_49455.html
[code]unsigned int ihl) { unsigned int sum; //(%1)就是iph数据包首地址,%0就是sum, %2数据包长度 //11-14行都是进行32位的加法运算 __asm__ __volatile__( "movl (%1), %0 ;\n" "subl $4, %2 ;\n" "jbe 2f ;\n" "addl 4(%1), %0 ;\n" "adcl 8(%1), %0 ;\n" "adcl 12(%1), %0 ;\n" "1: adcl 16(%1), %0 ;\n" "lea 4(%1), %1 ;\n" //没看懂 "decl %2 ;\n" "jne 1b ;\n" "adcl $0, %0 ;\n" "movl %0, %2 ;\n" //保存sum的值到...
用下面这段代码将hook收到的udp包做校验。但不知为何csum_tcpudp_magic总是返回0。 有谁知道吗? if (udp_header->check) { int datalen = sock_buff->len - (ip_header->ihl<<2); tmpcsum = csum_tcpudp_magic(ip_header->saddr, ip_header->daddr, datalen, IPPROTO_UDP, csum_partial((char *)udp_header, datalen, 0)); if((tmpcsum == 0)) ...
[code] __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, unsigned short proto, __wsum sum) { return (__force __sum16)~from64to16( (__force u64)saddr + (__force u64)daddr + (__force u64)sum + ((len + proto) << 8)); } [/code] [code] ((len + proto) << 8) [/code] 这一句是什么意思? [ 本帖最后由 印随 于 2009-11-5 20:54 编辑 ]
读到一段代码时,发现在计算TCP或者UDP校验和的时候,用sk_buff.csum存储TCP或UDP数据报数据部分的校验和,然后在这个校验和基础上再加上伪头部和头部的校验和。 但是整个TCP或UDP数据包本身也是有长度的,按理说也可以直接调用API计算整个TCP或UDP校验和。因此,很想知道结构体sk_buff中的csum成员一般怎么使用。
我想知道下面这段嵌入到c的汇编的算法,哪位大侠研究过,给我讲讲,它是如何算的,谢谢[code]static inline unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl) { unsigned int sum; __asm__ __volatile__(" movl (%1), %0 subl $4, %2 jbe 2f addl 4(%1), %0 adcl 8(%1), %0 adcl 12(%1), %0 1: adcl 16(%1), %0 lea 4(%1), %1 decl %2 jne 1b ...