AW: IP Defragmentation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oh boy.
In a "normal" ethernet environment, the MTU size of the ethernet is 1500.
Means: the maximum packet size on the cable is 1500 bytes at one shot.

As the ping packet and ANY other packet needs mac-address, ip adress ---
-> in a default IPv4 header, the IP header has exactly 6*4 = 24 bytes.
The ICMP (ping) is a sub of IP, and has exactly 4 bytes for type, code and 16 bit chechsum
Summary = 28 bytes.

So sending a 1500 bytes big ping will always result when having a mtu size of 1500 on an ipv4 in 2 packets.

Packet 1: 24+4+1472 
Packet 2: 24+4+28  

skb->data[] is the buffer coming from kernel, and is highly dependent on the MTU setting of the interface.
(look to ifconfig)
And this buffer is more the network buffer of the network card, and not a kernel buffer.
Also, on most network cards with DMA and internal ram on the chip, the skb->data[] is not a real memory as more a IO mapping to the network card.

Look to eg. A modern ethernet card
http://lxr.linux.no/source/drivers/net/eepro100.c

1448                 cpu_to_le32(pci_map_single(sp->pdev, skb->data,
1449                                            skb->len, PCI_DMA_TODEVICE));
1450         sp->tx_ring[entry].tx_buf_size0 = cpu_to_le32(skb->len);


You should not mix the socket pipe with the network buffer for the card.
Look to ping.c to see how socket is accessed.

Franz

-----Ursprüngliche Nachricht-----
Von: linux-net-owner@xxxxxxxxxxxxxxx [mailto:linux-net-owner@xxxxxxxxxxxxxxx] Im Auftrag von Kanhu Rauta
Gesendet: Donnerstag, 8. März 2007 07:16
An: netfilter-devel@xxxxxxxxxxxxxxxxxxx; linux-net@xxxxxxxxxxxxxxx; kernelnewbies@xxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
Betreff: IP Defragmentation

Hi list,

I am using kernel 2.6.20.1. I have written a module,which will
register a function at local_in hook, i have found a strange behavior
with the packets getting in my callback function i.e

[let say i am sending 1500 bytes to this machine from the network]
ping -s 1500 <ip>

1>in case of fragmention i am getting only one packet at the
hook,While analyzing the ip header it says this is the assembled
packet(skb->len=1528,offset=0,MF=0).

While dumping the data(for 0 to 1528 print skb->data[i]) it shows that
only 1472 bytes are valid data and rest 28 bytes are something
garbage.
I verified this with ethereal.

2>I have dumped these packets in ip_local_deliver function after
ip_defrag and before NF_HOOK,But the result is same.

Can Anybody let me know why i am not getting the complete data ?

Regards,
kanhu
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux