改版履歴

Cente PPP

・暗号・認証ライブラリをCente CryptoからCente Compact Cryptoに変更

CHAPで使用するMD5ライブラリをCente CryptoのものからCente Compact Cryptoのものに変更した。

・PPTPを削除

PPTPを非対応に変更。これに伴い、MS-CHAPv2、MPPEも非対応とした。

・認証失敗を繰り返すと発信できなくなる(Cente障害情報:003-0003)

PPPoE接続の場合、認証失敗で接続に失敗した場合、送信バッファの解放がされないことがあった。これを繰り返すことで送信バッファが枯渇し、以後発信できなくなることがあった。これを修正した。

・接続完了後、数分でPPPサーバから切断される(Cente障害情報:003-0004)

リトルエンディアン環境の場合、PPPサーバによっては接続完了後、数分で切断されてしまうことがあった。これを修正した。

・シリアルI/FのPPP接続の場合、まれにメモリ破壊が発生する(Cente障害情報:003-0005)

受信するデータの一部が欠けたり化けたりすることがある環境では、まれに受信バッファをオーバーして書き込みを行うメモリ破壊が発生することがあった。これを修正した。

・モデムの応答が正しくない場合への対応を強化

ATコマンドを送信し、それに対するモデムからの応答に従って動作するが、応答文字列が一時的に不正になるようなケースへの対応を強化した。

・その他改善

環境によってはワーニングが発生するコードがあったので修正した。

 

Cente PPP

PPPoverEthernetに対応
PPPoverEthernetで発信、接続する機能を追加。

PPTPに対応
PPTPで発信、接続する機能を追加。

モデムでの着信に対応
モデムを介して、外部からPPP接続を受ける機能を追加。

MPPEに対応
PPPの暗号方式としてMPPEに対応。

CenteTCP/IPv4に対応
各種APIをCenteTCP/IPv4に準拠させた。

マルチチャネル対応
複数のI/Fを使って同時にPPP接続する機能を追加。

Cente PPP

LCPEchoによるリンクチェック機能を追加
定期的にLCPEcho-Requestを送信し、通信相手とPPPリンクが確立していることを確認する機能を追加した。

CHAP認証のとき、IDとパスワードが間違っていても接続できたように動作する
実際には接続できていないが、エラーコードが0で接続が完了したように動作することがあったので修正した。

PPPのタイマ動作間隔が不正
実行条件に不具合があり、1秒間隔で動作する必要があるタイマが1.1秒感覚で動作していたので修正した。

ネゴシエーション中に相手から切断されたときに接続できたように動作する
ネゴシエーション中に相手からLCPTRを受信すると正常切断と誤認識し、エラーコードが0で接続が完了したように動作していたので修正した。

Cente PPP

1tick=1msec環境で、PPPパケットの再送が5秒おきに発生する。
1tick=10msecを前提とした部分があり、0.5秒おきに発生する再送が、1tick=1msec環境では5秒おきに発生していたので修正した。

MPPEで、パケット到着順が逆になるとそれ以降の通信ができなくなる。
特にインターネット環境では、ときどきパケットの到着順が前後することがある。MPPE通信のシーケンス番号が0に戻るときに到着順が前後すると、それ以降の通信ができなくなっていたので対応した。

Cente PPP

PPP接続完了直後にIPパケットを受信できない。
PPPネゴシエーションが完了した直後に回線側から受信したパケットが破棄されてしまうことがあったので修正した。

PPP接続完了直後に送信したIPパケットの送信元IPアドレスが0.0.0.0になる。
PPPネゴシエーションが完了した直後にUDPパケット送信やTCP発信を実行すると、そのパケットの送信元IPアドレスが0.0.0.0になることがあったので修正した。

MS-CHAPv2を使用しない設定のとき、相手からMS-CHAPv2を要求されるとACKを返してしまう。
INCLUDE_MSCHAPV2を定義しない状態にしても、相手からMS-CHAPv2を要求されるとACKを返していた。そのため、MD5による認証ができずに接続が失敗してしまっていたので修正した。

モデムから不正な応答が返ると発信が終了しない。
「ATD」コマンドに対して「OK」が返った場合、その後も「CONNECT」や「NO CARRIER」を待ち続けてしまうので修正した。

モデムが応答を返さない状態で着信停止を実行しても無効となる。
モデムが応答を返さない異常状態のときに「ctrl_listen_stop」で着信停止を要求しても、着信可能状態に戻ってしまうことがあったので修正した。

発信時のエラーがクリアされない。
一旦発信を実行して認証失敗などで切断後、着信を行なうとネゴシエーションが成功してもコールバック関数に発信時のエラーが通知されてしまうので修正した。

再送間隔が設定したものより長くなることがある。
LCPの再送間隔を3秒に設定しても、4秒になることがあったので修正した。

LCPリンクアップ直後に受信したIPCPパケットを無視することがある。
相手がLCP ConfAckとIPCP ConfReqを連続して送信してきた場合、IPCP ConfReqを無視することがあったので修正した。

CodeRejの内容が間違っている。
本来CodeRejのデータ部はコード、ID、長さ、データ部と続くが、データ部しか送信していなかったので修正した。

ConfNak/ConfRejの最大送信回数が設定地より多い。
PPP_MFCの定義で設定した最大送信回数より1回多く送信していたので修正した。

ACFC/PFCの扱いが自分側と相手側で分かれていない。
ACFC/PFCは相手にフィールド圧縮して送信するよう要求するものだが、そのオプションをつけると自分からの送信パケットも圧縮していたので修正した。

自分からのConfReq内容が相手からのConfReq内容に影響される。
例えば送信するConfReqにMagicNumberのオプションがついていなくても、受信したConfReqについていた場合、次回送信するConfReqにそのオプションをつけていた。送信と受信のオプションを完全に分離するよう修正した。

ネゴシエーション中の切断理由が不正な場合がある。
ネゴシエーション中に回線が突然切れた場合や内容が不正だとして切断した場合、切断理由が0になる場合があったので修正した。

GREパケットのCallerIDが0になっている。
PPTPで使用するGREのCallerIDが、ACKパケットの場合0になっていたので修正した。