우리는 특정 인터페이스에 서버를 바인딩하지 않습니다,하지만 우리는 리눅스 4.15로 특정 인터페이스에 멀티 캐스트 그룹 (IP_MULTICAST_JOIN)에 가입, mlxsw 드라이버는 스펙트럼 ASIC에 L3 IPv4 멀티 캐스트 경로의 오프로드를 지원합니다. 리눅스 4.17으로, 그것은 L3 IPv6 멀티 캐스트 경로에 대 한 동일지원. 유니캐스트 케이스와 유사한 방식으로 ip 도구는 MFC 항목이 현재 오프로드된 키워드를 사용하고 있는지 여부를 나타냅니다. 리소스 부족으로 인해 오류가 발생하면 중단 메커니즘이 호출되고 모든 MFC 항목이 하드웨어에서 제거되고 대신 커널에 의해 라우팅이 수행됩니다. ipmr_mfc_add() 함수로 돌아가기; 이제 기존 MFC 항목을 찾을 수 없는 경우를 고려합니다. 이 경우 새 구조가 할당되어 MFC 테이블에 삽입됩니다. 이 작업이 완료되면 커널은 새로 추가된 대상 노드로 이동될 수 있는 mfc_unres_queue에 현재 큐에 대기 중인 해결되지 않은 멀티캐스트 패킷을 전달하는 마지막 작업을 수행해야 합니다. 긍정의 경우 패킷이 이 큐에서 제거되고 새 인터페이스로 전달됩니다. 실행될 다른 작업은 MFC 삭제입니다. 이것은 매우 간단합니다- 데이터 구조는 기본적으로 이전과 동일합니다. 캐시 항목을 제거하기 위해 사용자 모드 dæmon은 k_del_mfc() 함수를 호출하고 커널 모드의 처리기는 impr_mfc_delete()를 호출합니다.

이 함수는 MFC에서 지정된 항목을 제거하기만 하면 됩니다. 그룹에 가입하기 전에 소켓이 와일드카드 주소(INADDR_ANY)에 바인딩되어야 합니다. 이 예제에서 소켓은 로컬 인터페이스 157.124.22.104에서 멀티캐스트 그룹 234.5.6.7에 조인됩니다. 동일하거나 다른 인터페이스에서 동일한 소켓에 여러 그룹이 조인될 수 있습니다. 멀티캐스트 발신자 주소가 로컬 라우터에서 직접 연결할 수 없는 IP 서브넷에 있는 경우 업스트림 인터페이스에서 대체 서브넷을 구성해야 할 수도 있습니다. 테스트 네트워크로 돌아가 서 다음 시나리오를 가정 해 봅시다: SNOOPY는 멀티 캐스트 트래픽을 보내고, MAFALDA와 VAIO 모두 조인 요청을 발행. eth0 및 eth1이 있는 새로운 멀티캐스트 경로가 출력 인터페이스로 표시될 것으로 예상됩니다. 불행히도, 그것은 일어나지 않습니다. /proc/net/ip_mr_cache를 살펴보면 MAFALDA로 가는 단일 경로만 볼 수 있지만 MAFALDA와 VAIO 모두 멀티캐스트 트래픽을 올바르게 수신하고 있습니다.

SNOOPY의 나가는 패킷은 소스 주소로 192.168.1.200을 사용하여 전송됩니다. 이러한 이유로 eth0에서 데이터를 보낼 때 SNOOPY는 LAN에서 멀티캐스트 트래픽을 보내는 것처럼 작동합니다. 즉, 커널은 다른 PC에서 오는 IGMP 패킷을 해석 할 수있는 PIM dæmon의 존재를 인식하지 못하기 때문에 SNOOPY는 VAIO가 JOIN을 발행하기 전에 도전자패킷을 보내기 시작합니다. 다른 워크스테이션이 멀티캐스트 트래픽을 수신하도록 하기 위해 패킷을 전송하기만 하면 됩니다. 이렇게 하면 동일한 네트워크 세그먼트의 다른 모든 컴퓨터가 멀티캐스트 하드웨어 필터를 켜고 와이어에서 원하는 데이터를 선택할 수 있습니다.