Subject: question regarding rfc 1112

From: Armon Assulin <[email-masked]>
Date: Tue, 20 Feb 2001 13:43:20 +0200

hello to IDMR working group.

first I want to thanks the people at IDMR for quick answer to my question
few days ago.
second, I have few more questions regarding RFC 1112:

RFC 1112 - 7.3 and 7.4
1) is it true that the IP Module informed the Local Network Module which
multicast address packet to accept? 
2) and how he did it? (is the IP Module send a list to the Local Network
Module and updates this list?)
3) is the answer from Question 2 is per interface? it's not mention in the
RFC).
4) When the IP module sending ip multicast packets to his connected hosts: 
	- is the IP module duplicates the packet and send to each member
unicast or the Ethernet layer do it?

thanks a lot 

Armon.

---

From: Wilbert de Graaf <[email-masked]>
Date: Wed, 21 Feb 2001 09:49:42 +0100

Armon,

The answers to your questions are implementation specific, but if I look at
the code that came with RFC1112 (and is described to some extend in TCP/IP

>multicast address packet to accept?

Yes.

>Module and updates this list?)

When a new groups is added or removed, the IP module calls the network
module (if_addmulti()) and the network module keps track of this list. The
network module calls the NIC driver and that driver knows if the NIC
supports multicast yes or no. If no, the NIC accepts all multicast packets.

>3) is the answer from Question 2 is per interface? it's not mention in the

Yes. The IP module (IGMP code) has a record for every (interface, group). So
if a host is subscribed on some group on 2 interfaces, there are 2 records.

>unicast or the Ethernet layer do it?

No, not on shared media. If you want to know specifically about ethernet:
In the BSD code ether_output() function calls 'arp' to translate the
destination ip address (a group address in this case) into an ethernet
address.
This mapping is specified in RFC1112 and implemented in FreeBSD in the macro
ETHER_MAP_IP_MULTICAST() (/usr/src/sys/netinet/if_ether.h)

Wilbert