سؤال

لقد واجهت مشكلة شائكة. نحن نكتب برنامج ج ++ الذي يتلقى حركة المرور UDP الإرسال المتعدد. نحن في عملية نقل تطبيقاتنا في بيئة الشبكة المختلفة، وطلب فريق عملياتنا أننا ندعم إعلانات عضوية IGMPv3 من طلباتنا. وتشير التحقيقات الأولية إلى أن لينكس 2.6 حبات تفعل دعم IGMPv3. لذلك، وأنا في حيرة أنه عندما نقوم بتشغيل تشبدومب نرى آثار الإخراج التالية:

[rtv@myhost]$ sudo /usr/sbin/tcpdump -i eth1.22 igmp
tcpdump: listening on eth1.22
00:20:09.007094 switch-a.stage > ALL-SYSTEMS.MCAST.NET: igmp query v2 [max resp time 20] [ttl 1]
00:20:09.241946 10.129.22.236 > 232.0.1.10: igmp v2 report 232.0.1.10 (DF) [tos 0xc0]  [ttl 1]
00:20:10.472159 10.129.22.236 > 236.0.1.101: igmp v2 report 236.0.1.101 (DF) [tos 0xc0]  [ttl 1]

44 packets received by filter

وما أفهمه هو أن واحدة قد يجبر نواة لاستخدام إصدار أقل من IGMP عن طريق تحديد قيمة غير صفرية في /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version ملف. ومع ذلك، لقد أكد أن الملف له تكوين قيمة الصفر.

وطلبنا يستخدم التعليمة البرمجية التالية للانضمام إلى مجموعة الإرسال المتعدد:

... joinMulticast(in_addr mcast_addr, in_addr interface_addr)
{
  struct ip_mreq  mcast_req;

  mcast_req.imr_multiaddr.s_addr = mcast_addr;
  mcast_req.imr_interface.s_addr = interface_addr;
  int err = setsockopt(fFileDesc, IPPROTO_IP, IP_ADD_MEMBERSHIP,
    (char*)&theMulti, sizeof(theMulti));
  // handle errors etc.
  // ...
}

هل هناك شيء اضافي أننا بحاجة إلى أن تدرج في البرنامج المصدر لإجبار IGMPv3؟

هل كانت مفيدة؟

المحلول

وزوجين من الأشياء أن تكون على علم.

والأول هو أن (كما أفهمها) وضع /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version 0 لا يعني "استخدام V3"، ولكن في الواقع يحدد أن "تلقائي". وأعتقد أنه يمكنك تعيين إلى 3 لإجبارها استخدام IGMP V3.

ومع ذلك، فإن الشيء الآخر أن تكون على علم هو أن سلوك المكدس IGMP يتم تحديدها من قبل البيئة التي يجد نفسه فيها إذا مربع لينكس الخاص بك تلقي الاستفسارات عضوية IGMP V2 من جهاز توجيه IGMP المنبع، ثم اعتقد أن السلوك لينكس الافتراضي (على النحو المطلوب من قبل V3 RFC IGMP) هو استخدام IGMP V2 الوحيد للتقارير.

وكما أفهم عند تعيين /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version 0 ويستخدم هذا السلوك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top