2012-02-08 5 views
1

서버와 클라이언트 사이에 SCTP 연결을 설정하려고합니다 (Linux). 서버에는 여러 개의 ip 주소가 있으며 발신 ip 패킷은 소스 주소에 따라 라우팅됩니다. 나는 SCTP 연결이SCTP에서 OWN 기본 주소를 설정할 수 있습니까?

를 (기본적으로 특정 경로를 사용하기 위해) 기본적으로 특정 주소를 사용하려면 내가 찾은 유일한 옵션은 다음과 같습니다

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. 

지금까지 내가 이해,이 옵션을 선택할 수 있습니다 피어의 기본 주소 (전송할 때) 및 피어에게 로컬 주소 중 하나를 사용하도록 요청할 때 (수신시)

질문 : 보내는 메시지를 보낼 로컬 주소를 선택하는 방법이 있습니까?

답변

0

인터페이스를 선택하면 도움이됩니까?

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

시도해 볼 수는 있지만 다른 인터페이스는 비활성화하지 않을 것입니다. (각 inerface btw에 대해 하나의 주소가 있습니다). 내가 성취하고자하는 것은 모든 주소/인터페이스에 바인딩 된 SCTP 소켓을 가지고 있지만 메시지를 보내기 위해 하나를 선택하는 것이다. –

0

면책 조항 : 나는 lksctp의 다중 또는 ASCONF 물건을 사용하지 않는,하지만 난 커널 모듈 소스를 읽은 그렇게 위해

당신은 setsockopt를 사용할 수 있습니다.

각 피어 주소에 대해 별도의 sctp_transport가 작성되므로 로컬 주소가 하나의 원격 주소로 다중화되는지 또는 두 개가 종속되는지에 따라 달라집니다.

이 연관성은 특정 sctp_transport를 통해 전송할 때 기본 소스로 재사용하기 위해 수신 된 패킷의 대상 주소를 저장합니다. SCTP_SET_PEER_PRIMARY_ADDR을 설정하면 동료가 올바른 로컬 주소를 특정 전송에 대한 기본 주소로 유지하도록 도와 주며 전송이 하나만있는 경우 완료됩니다. 복수의 전송이있는 경우, 피어가 특정의 것을 선택하게 할 수 있습니다. SCTP_PRIMARY_ADDR을 설정하는 것은 플립 경우이며, 둘 이상의 전송이있는 경우 어떤 전송이 기본인지를 확실히 업데이트합니다.

두 개 이상의 전송의 경우, 상위 계층이 말한 경우가 아니면 "기본"전송에서 전환하지 않아야합니다. 그러나 어떤 전송이 "활성"인지는 오류 등에 따라 다르며, 재전송의 경우 사양은 대체 전송 주소 사용을 명시 적으로 권장합니다. 일반적으로 어떤 전송이 항상 활성 상태 (기본 상태)인지 제어하려고하지 않는 것이 좋습니다. 피어가 시작되기 전에 INITs를 보내는 것과 같은 간단한 일은 앞뒤로 전환 할 것입니다.

특정 주소 (0.0.0.0)에/bindx를 바인딩하면 절대 사용하지 않으려는 주소가있는 경우에만 해당 주소를 사용한다는 사실을 간과하지 마십시오.

나는 당신에게 행운이 있기를 기원합니다.

관련 문제