2012-06-06 31 views
6

Tôi có một số máy nhúng nghe và truyền dữ liệu âm thanh rtp đến một nhóm đa hướng. Chúng được kết nối với một switch được quản lý thông minh (Netgear GS108Ev2) thực hiện lọc igmp cơ bản và lọc multicast trên các cổng của nó, để phần còn lại của mạng LAN (W) của tôi không bị ngập.Làm mới thành viên nhóm multicast

Lúc bắt đầu mọi thứ hoạt động tốt trong khoảng 500-520 giây. Sau đó, họ không nhận được thêm bất kỳ dữ liệu nào nữa cho đến khi họ rời khỏi và tham gia lại nhóm. Tôi đoán việc chuyển đổi là "quên" về việc tham gia sau một thời gian chờ.

Có cách nào để làm mới tư cách thành viên nhóm, tức là cho phép chuyển đổi biết rằng vẫn có ai đó đang nghe, mà không làm mất gói?

thông tin hệ thống:

Arch: blackfin 

# cat /proc/version 
Linux version 2.6.28.10-ADI-2009R1-uCBF54x-EMM 
(gcc version 4.3.3 (ADI)) #158 PREEMPT Tue Jun 5 20:05:42 CEST 2012 

Trả lời

2

Đây là cách multicast/thức hoạt động của giao thức IGMP. Khách hàng phải tham gia nhóm theo định kỳ bằng cách gửi Báo cáo thành viên hoặc sẽ được giả định rằng anh ấy đã rời khỏi nhóm sau một thời gian chờ ngắn. Tuy nhiên, những báo cáo này thường chỉ được gửi khi nhận được Truy vấn thành viên từ bộ định tuyến đa phương tiện cục bộ. Khách hàng của bạn không nhận được truy vấn hoặc không trả lời bằng báo cáo.

Hãy thử sử dụng một công cụ như Wireshark để xem gói IGMP nào được gửi qua mạng của bạn.

+0

tốt, có cách nào, trong C, để gửi Báo cáo thành viên theo cách thủ công, mà không phải chờ truy vấn hoặc rời nhóm trước? Tôi nghi ngờ việc chuyển đổi 20 đô la của tôi thực hiện điều này. – derhoch

+1

Có, chỉ cần xây dựng gói IGMP của riêng bạn (IGMPv2 sẽ là đủ) với loại Báo cáo thành viên và địa chỉ nhóm phát đa hướng của bạn. Bạn có thể sẽ cần một ổ cắm thô để gửi nó vì không có tiêu đề TCP hoặc UDP. – scai

1

Bạn cần Trình quản lý IGMP để gửi Membership Queries, như đã được giải thích bởi scai.

Nếu bạn không thể định cấu hình bộ định tuyến để thực hiện việc đó, bạn có thể sử dụng một trong các máy tính của mình. Việc xem cách chạy một daemon định tuyến multicast đầy đủ sẽ là quá mức cần thiết (và tôi chưa bao giờ làm điều đó), tôi đề nghị bạn cố gắng lạm dụng igmpproxy.

Đầu tiên tạo một giao diện thượng nguồn giả (điều này là không dai dẳng!):

ip tap add dev tap6 mode tap 

Viết igmpproxy.conf:

# Dummy upstream interface. 
phyint tap6 upstream ratelimit 0 threshold 1 

# Local interface. 
phyint eth0 downstream ratelimit 0 threshold 1 

# Explicitly disable any other interfaces (yes, it sucks). 
phyint NAME disabled 
... 

Cuối cùng bắt đầu igmpproxy (như root):

igmpproxy -v /path/to/igmpproxy.conf 
0

Nếu thiết bị nhúng của bạn đang chạy Linux, bạn cần phải tắt bộ lọc gói ngược lại trên chúng hoặc chúng sẽ không phản hồi nd để truy vấn thành viên nhóm. Trong trường hợp đó, công tắc ngược dòng sẽ giả sử không có ai nghe phát đa hướng đó và tắt nó đi.

Các vấn đề liên quan