2012-02-08 17 views
1

サーバーとクライアントの間にSCTP接続を設定しようとしています(Linux)。サーバにはいくつかのIPアドレスがあり、送信元のパケットはソースのアドレスに従ってルーティングされます。私は私が見つけた唯一の選択肢であるSCTPでOWNのプライマリアドレスを設定することはできますか?

SCTP接続が(デフォルトでは、特定のルートを使用するために)デフォルトでは、特定のアドレスを使用したい:

SCTP_SET_PEER_PRIMARY_ADDR 
      Requests that the peer mark the enclosed address as the association primary. The enclosed address must be one of the association's locally bound addresses. The struc‐ 
      ture sctp_setpeerprim defined in /usr/include/netinet/sctp.h is used to make a set peer primary request. 

    SCTP_PRIMARY_ADDR 
      Requests that the local SCTP stack use the enclosed peer address as the association primary. The enclosed address must be one of the association peer's addresses. The 
      structure sctp_prim defined in /usr/include/netinet/sctp.h is used to make a get/set primary request. 

私の知る限り理解して、このオプションが選択できるようにしますピアのプライマリアドレス(送信時)およびローカルアドレスの1つを使用するようにピアに要求する(受信時)

質問:送信メッセージを送信するローカルアドレスを選択する方法はありますか?

答えて

0

インターフェイスを選択すると、お手伝いしますか?

struct ifreq ifr; 
strncpy_IFNAMSIZ(ifr.ifr_name, "ethX"); 
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)); 
+0

私はそれを試みることができますが、他のインターフェイスを無効にしません(それぞれのinerface btwに対して1つのアドレスがあります)。私が達成したいのは、すべてのアドレス/インターフェースにバインドされたSCTPソケットですが、特にメッセージを送信するためにSCTPソケットを選択することです –

0

免責事項:私はlksctpのマルチパスまたはASCONFものを使用していないんだけど、私は、カーネルモジュールのソースを読んだことをやるために

あなたがのsetsockoptを使用することができます。

ピアアドレスごとに別々のsctp_transportが構築されているため、ローカルアドレスが1つのリモートアドレスにマルチパスされているかどうかによって異なります。

アソシエーションは、受信パケットの宛先アドレスを保存します。これは、特定のsctp_transportを送信する際の優先ソースとして再利用するためです。 SCTP_SET_PEER_PRIMARY_ADDRを設定すると、ピアが特定のトランスポートのプライマリとして適切なローカルアドレスを保持できるようになります。トランスポートが1つだけの場合は、完了している可能性があります。トランスポートが複数ある場合は、ピアが特定のトランスポートを選択させる可能性があります。 SCTP_PRIMARY_ADDRを設定するのはフリップケースで、複数のトランスポートがある場合は、どのトランスポートがプライマリであるかが確実に更新されます。

複数のトランスポートの場合、上位レイヤーに指示されていない限り、「プライマリ」トランスポートからスイッチを離してはなりません。しかし、どのトランスポートが「アクティブ」であるかはエラーなどに依存し、再送信の場合、仕様は代替トランスポートアドレスの使用を明示的に推奨します。一般的には、どのトランスポートが常にアクティブであるか(プライマリかプライマリか)を制御しようとするのはかなり難しいと言えます。ピアが始まる前にINITを送信するような簡単なことは、それを前後に切り替えるでしょう。

/bindxを特定のアドレス(0.0.0.0)にバインドすると、絶対に使用したくないアドレスを持っている場合にのみ使用されます。

私は運がいいです。