커널 업데이트 후 UDP 멀티캐스트가 중단됨

커널 업데이트 후 UDP 멀티캐스트가 중단됨

수동으로 빌드한 커널을 사용하여 간단한 Gentoo 사용자 영역을 실행하는 임베디드 시스템이 있습니다. 시스템은 PCI 카드에서 데이터를 가져와 UDP 멀티캐스트 그룹으로 보냅니다.

이 모든 것은 이전 커널(2.6.11)에서 잘 실행됩니다. 이제 재부팅 중에 보드가 멈추는 또 다른 문제를 해결하기 위해 약간 더 젊은 커널(2.6.15)로 업데이트했습니다. 이렇게 하면 재부팅 시 중단 문제가 해결되지만 이제 UDP 멀티캐스트 그룹으로 데이터를 보내는 데 실패합니다.

2.6.15에서 sendto를 호출하면 ENOTCONN 오류가 발생합니다. 그러나 링크가 연결되어 있으므로 아무 문제 없이 TCP를 통해 데이터를 보낼 수 있습니다. 내 프로그램은 변경되지 않았습니다. 사실 다시 컴파일하지도 않았습니다. 두 커널 모두에서 ifconfig eth0을 호출하면 동일한 출력이 제공됩니다.

2.6.15 커널을 빌드할 때 구성이 잘못되었을 수 있다는 것을 알고 계십니까? 아니면 2.6.15에 버그나 API 변경이 있나요? 2.6.15보다 낮은 버전으로는 업데이트할 수 없습니다. 왜냐하면 2.6.15 버전은 시스템의 PCI 카드용 형편없는 드라이버가 지원하는 최신 커널이기 때문입니다.

답변1

15시간 동안 디버깅한 후에 문제를 발견했습니다. 프로그램이 매우 큰 패킷을 보내려고 했고, sendto에 전달된 크기가 최대 허용 UDP 패킷 크기인 ​​2^16바이트를 초과하는 경우가 많았습니다. 이제 sendto에 전달되는 최대 패킷 크기를 50000으로 설정하는 로직을 추가하면 모든 것이 정상으로 돌아옵니다. 이것은 정말 이상합니다. 이전 커널과 Windows XP 및 7에서 작동했었습니다.

답변2

2.6.11과 2.6.15의 .config를 비교하십시오. 내 생각에는 새 커널에 가 있거나 CONFIG_IP_MULTICAST=n있을 수 있습니다 m. 그것은해야한다 y.

관련 정보