(toppers-users 2813) TINETをM32Cで動作させようとしていますがnservが途中でとまります
市川 義裕
ichikawa @ elektroflex.co.jp
2008年 10月 7日 (火) 15:59:57 JST
始めまして、エレクトロフレックスの市川といいます。
現在JSP-1.4.3+TINET-1.4をM32C/87(ルネサスのスタータキット)にてPPPで
動作させようとしています。
何点か変更の後、WWWでの通信の確認を行っていますがうまく行きません。
どのあたりを確認すればよろしいのでしょうか。
なお、コンパイラはHEWの物を使用しています。
ハードウェアはLinuxのPPPサーバとM32Cマイコンボードをシリアル直接接続しています。
現象としては
tinet_cpu_config.h において NUM_MPF_NET_BUF_IF_PDU 2 の時コンソール上は
PPP/IPCP] up, Local IP Addr: 192.168.1.21, Remote IP Addr: 192.168.1.31.
[WWW:04] connected: 8, from: 21.1.168.192.53890
でとまっていてブラウザに変化はありません。パケットは
PC →syn →M32C
M32C→ack,syn→PC
PC →ack →M32C
PC →ack →M32C GET /〜
PC →ack →M32C =0.5CRLFAccept-〜
M32C→ack →PC GET /〜のack(=0.5CRLFAccept-〜受信中に送信)
PC →ack →M32C =0.5CRLFAccept-〜
M32C→ack →PC =0.5CRLFAccept-〜のack
でPPP通信が終わってしまいます。但しLCPのエコーのREQ、ACKは継続しています。
この状態のときM32CからのTCPのウインドウが最後以外が0200hで最後が016dhと
変化しています。
tinet_cpu_config.h において NUM_MPF_NET_BUF_IF_PDU 3〜6 ですと
1回はindex.htmlがPC上に送られるのですが、2回目にindex.htmlを表示させようとすると
[PPP/IPCP] up, Local IP Addr: 192.168.1.21, Remote IP Addr: 192.168.1.31.
[WWW:04] connected: 5, from: 21.1.168.192.35963 ←1回目
[WWW:04] send: index.html, len: 1227, time: 2 [ms]
[WWW:04] finished: 5
[WWW:04] connected: 6, from: 192.168.1.31.35964 ←2回目
[WWW:04] send: index.html, len: 1227, time: 1 [ms]
20 messages are lost.
[NET BUF] E_ID, ID=185.
E_ID reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_ID, ID=86.
E_ID reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_ID, ID=192.
E_ID reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_ID, ID=192.
E_ID reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_ID, ID=168.
E_ID reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_PAR, ID=1.
E_PAR reported by `rel_net_buf(cep->rwbufq)' in line 877 of `tcp_subr_cs.c'.
[NET BUF] E_ID, ID=31.
のようになります。(2回目のsend:以降はいつも同じでは有りません)
1回目のパケットは異常なく2回目のパケットではindex.hlmlのメッセージを含む
パケットの送信元アドレスが間違ったものになっており、PCは受信できず、
M32Cもackが帰ってこないので待ったまま(FIN_WAIT1)になります。
メモリーの内容が壊れているようですが何処から見て行けば良いのか判らない状況です。
以上ですがアドバイスを頂けないでしょうか。
よろしくお願いします。
なお以下のような変更も行っています。
ppp_hdlc.cのHDLC_putoctet (UB octet){}では
// if ((octet < 0x20 && ((1 << octet) & lcp_remote_ack_cfg.ACCM)) ||
if ((octet < 0x20 && (((UW)1 << octet) & lcp_remote_ack_cfg.ACCM)) ||
とキャストしないと必要な長さのシフトが行われませんでした。
ppp_fsm.c、ppp_lcp.c、ppp_upap.cではヘッダ長さのバイトオーダが逆で
長さチェックの部分で引っかかり、
たとえば
hdr = GET_PPP_CP_HDR(input);
hdr->len = (hdr->len >> 8) + ((hdr->len & 0x00ff) << 8); // 追加
のようにしてとりあえず動かしています。