From owner-FreeBSD-users-jp@jp.FreeBSD.org Mon Jul  7 22:01:01 2008
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id m67D11V83851;
	Mon, 7 Jul 2008 22:01:01 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from mail.miraclelinux.com (ns.miraclelinux.com [219.118.163.66])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet id m67D11U83846
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Mon, 7 Jul 2008 22:01:01 +0900 (JST)
	(envelope-from ysugiura0@gmail.com)
Received: from mail.miraclelinux.com (mail.miraclelinux.com [127.0.0.1])
	by localhost (Postfix) with SMTP id EFD3772002
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Mon,  7 Jul 2008 22:01:00 +0900 (JST)
Received: from dhcp-0238.miraclelinux.com (dhcp-0238.miraclelinux.com [10.1.1.238])
	by mail.miraclelinux.com (Postfix) with ESMTP id 88E5372001
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Mon,  7 Jul 2008 22:01:00 +0900 (JST)
Message-ID: <4872138C.9000900@gmail.com>
From: Yuta <ysugiura0@gmail.com>
User-Agent: Thunderbird 2.0.0.14 (X11/20080501)
MIME-Version: 1.0
To: FreeBSD-users-jp@jp.FreeBSD.org
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-PMX-Version: 5.3.1.294258, Antispam-Engine: 2.5.1.298604, Antispam-Data: 2008.7.7.124911
X-PerlMx-Spam: Gauge=IIIIIII, Probability=7%, Report='FORGED_FROM_GMAIL 0.1, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __FRAUD_419_WEBMAIL 0, __FRAUD_419_WEBMAIL_FROM 0, __FROM_GMAIL 0, __HAS_MSGID 0, __HIGHBITS 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __SANE_MSGID 0, __STOCK_PHRASE_7 0, __SUBJ_HIGHBIT 0, __USER_AGENT 0'
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Mon, 07 Jul 2008 22:01:00 +0900
X-Sequence: FreeBSD-users-jp 91718
Subject: [FreeBSD-users-jp 91718] ping
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: ysugiura0@gmail.com
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+060209

はじめまして杉浦です
アドレス変換テーブルのキャッシュクリア直後にmtuより大きいサイズのパケッ 
トを送信しようとすると
一つ目のフラグメントパケットだけが送信されない現象が起きています
何かご存知の方はいらっしゃいますか。

FreeBSD5.4,6.0,7.0の３つで試した所、3つともこの問題が起こりました。
また、フラグメントして送る場合は発生率100%ですが、フラグメントなしで送る 
場合でもごくたまに発生しています。

host2#ping6 -I rl1 -c 3 -mm -s 2000 fe80::2a0:b0ff:fe87:7310
PING6(2048=40+8+2000 bytes) fe80::2a0:b0ff:fe87:7db2%rl1 --> 
fe80::2a0:b0ff:fe87:7310
2008 bytes from fe80::2a0:b0ff:fe87:7310%rl1, icmp_seq=1 hlim=64 
time=0.818 ms
2008 bytes from fe80::2a0:b0ff:fe87:7310%rl1, icmp_seq=2 hlim=64 
time=0.714 ms

--- fe80::2a0:b0ff:fe87:7310 ping6 statistics ---
3 packets transmitted, 2 packets received, 33.3% packet loss
round-trip min/avg/max/std-dev = 0.714/0.766/0.818/0.052 ms

上記のようにpingコマンドを実行すると、一つ目のpingに対する応答がないよう 
に表示
されますが、tcpdumpでキャプチャすると、実際は一つ目のフラグメントパケッ 
トだけが
落ちているのが原因のようです。

host2# tcpdump -r dump6.FreeBSD6.0 -vn
reading from file dump6.FreeBSD6.0, link-type EN10MB (Ethernet)
03:25:16.139346 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) 
fe80::2a0:b0ff:fe87:7db2 > ff02::1:ff87:7310: [icmp6 sum ok] ICMP6, 
neighbor solicitation, length 32, who has fe80::2a0:b0ff:fe87:7310
          source link-address option (1), length 8 (1): 00:a0:b0:87:7d:b2
03:25:16.139517 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: [icmp6 sum ok] 
ICMP6, neighbor advertisment, length 32, tgt is 
fe80::2a0:b0ff:fe87:7310, Flags [solicited, override]
          destination link-address option (2), length 8 (1): 
00:a0:b0:87:73:10
03:25:16.139589 IP6 (hlim 64, next-header: Fragment (44), length: 784) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: frag 
(0x5f8e7b9c:1232|776)
03:25:16.912362 IP6 (hlim 64, next-header: Fragment (44), length: 1240) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: frag 
(0x432b9342:0|1232) ICMP6, echo request, length 1232, seq 1
03:25:16.912373 IP6 (hlim 64, next-header: Fragment (44), length: 784) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: frag 
(0x432b9342:1232|776)
03:25:16.913010 IP6 (hlim 64, next-header: Fragment (44), length: 1456) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: frag 
(0x9a3fd7d5:0|1448) ICMP6, echo reply, length 1448, seq 1
03:25:16.913050 IP6 (hlim 64, next-header: Fragment (44), length: 568) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: frag 
(0x9a3fd7d5:1448|560)
03:25:17.912188 IP6 (hlim 64, next-header: Fragment (44), length: 1240) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: frag 
(0x0ee95246:0|1232) ICMP6, echo request, length 1232, seq 2
03:25:17.912199 IP6 (hlim 64, next-header: Fragment (44), length: 784) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: frag 
(0x0ee95246:1232|776)
03:25:17.912715 IP6 (hlim 64, next-header: Fragment (44), length: 1456) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: frag 
(0x8eef51a5:0|1448) ICMP6, echo reply, length 1448, seq 2
03:25:17.912758 IP6 (hlim 64, next-header: Fragment (44), length: 568) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: frag 
(0x8eef51a5:1448|560)
03:25:20.789907 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) 
fe80::2a0:b0ff:fe87:7310 > fe80::2a0:b0ff:fe87:7db2: [icmp6 sum ok] 
ICMP6, neighbor solicitation, length 32, who has fe80::2a0:b0ff:fe87:7db2
          source link-address option (1), length 8 (1): 00:a0:b0:87:73:10
03:25:20.790008 IP6 (hlim 255, next-header: ICMPv6 (58), length: 24) 
fe80::2a0:b0ff:fe87:7db2 > fe80::2a0:b0ff:fe87:7310: [icmp6 sum ok] 
ICMP6, neighbor advertisment, length 24, tgt is 
fe80::2a0:b0ff:fe87:7db2, Flags [solicited]
host2#

IPv4でも試した所同じ問題が起こりました。



環境と再現手順
-------
(1)機器構成

FreeBSD 6.0-RELEASE-p7 2台
(kame_version: 20010528/FreeBSD)
リピータハブ　1台
(NetAgent IDS-HUB)


2台のホスト間をリピータハブを使い接続
それぞれのホスト名をhost1,host2とします。

host1のrl0と
host2のrl1をハブに接続し、2台のホスト間で通信を行っています。

(2)実行方法

(2.1)IPv6
host1,host2をifup、確認する

host1#ifconfig rl0 up
host1#ifconfig rl0
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet6 fe80::2a0:b0ff:fe87:7310%rl0 prefixlen 64 scopeid 0x1
        ether 00:a0:b0:87:73:10
        media: Ethernet autoselect (100baseTX)
        status: active

host2#ifconfig rl1 up
host2#ifconfig rl1
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet6 fe80::2a0:b0ff:fe87:7db2%rl1 prefixlen 64 scopeid 0x2
        ether 00:a0:b0:87:7d:b2
        media: Ethernet autoselect (100baseTX)
        status: active

pingを送る(host2->host1)前に送信側の宛先エントリを消去

host2#ndp -cn


宛先エントリが消えたことを確認
host2#ndp -a

host2のパケットをダンプする
host2#tcpdump -i rl1 -w dump6.FreeBSD6.0 &

mtuより大きなサイズを指定し、フラグメントするようにしてpingを送る。
host2#ping6 -I rl1 -c 3 -mm -s 2000 fe80::2a0:b0ff:fe87:7310 2>&1 | tee 
ping.FreeBSD6.0

ダンプを終了する。
host2#killall tcpdump


(2.2)IPv4
host1,host2にIPアドレスを手動で設定し、確認する

host1#ifconfig rl0 up
host1#ifconfig rl0 inet 192.168.44.4
host1#ifconfig rl0
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet 192.168.44.4 netmask 0xffffff00 broadcast 192.168.44.255
        inet6 fe80::2a0:b0ff:fe87:7310%rl0 prefixlen 64 scopeid 0x1
        ether 00:a0:b0:87:73:10
        media: Ethernet autoselect (100baseTX)
        status: active

host2#ifconfig rl1 up
host2#ifconfig rl1 inet 192.168.44.3
host2#ifconfig rl1
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=8<VLAN_MTU>
        inet6 fe80::2a0:b0ff:fe87:7db2%rl1 prefixlen 64 scopeid 0x2
        inet 192.168.44.3 netmask 0xffffff00 broadcast 192.168.44.255
        ether 00:a0:b0:87:7d:b2
        media: Ethernet autoselect (100baseTX)
        status: active

pingを送る(host2->host1)前に送信側の宛先エントリを消去

host2#arp -d 192.168.44.4

宛先エントリが消えたことを確認
host2#arp -a

host2のパケットをダンプする
host2#tcpdump -i rl1 -w dump4.FreeBSD6.0 &

mtuより大きなサイズを指定し、フラグメントするようにしてpingを送る。
host2#ping -s 2000  -c 3 192.168.44.4 2>&1 | tee ping.FreeBSD6.0

ダンプを終了する。
host2#killall tcpdump

(3)設定について
rc.confはsysinstallを用いて以下の様に設定しています

cat /etc/rc.conf
linux_enable="YES"
nfs_client_enable="YES"
nfs_server_enable="YES"
rpcbind_enable="YES"
sshd_enable="YES"
usbd_enable="YES"
nfs_client_enable="NO"
ipv6_enable="YES"
# -- sysinstall generated deltas -- # Tue Jul  1 02:13:45 2008
ifconfig_rl2="inet 192.168.11.12  netmask 255.255.255.0"
defaultrouter="192.168.11.1"
hostname="host2.cgl"
