Sebastian Wölke <>


Mcproxy is an IGMP/MLD Proxy daemon for Linux.

IGMP/MLD proxies offer the possibility to combine local multicast networks with a larger multicast infrastructure. In contrast to multicast routers, proxies are lightweight and do not require the support of a multicast routing protocols such as PIM or DVMRP. A common use case are local stub networks that interconnect with a remote multicast routing domain, possibly via a tunnel. Another usage example is in the Proxy Mobile IPv6 (PMIPv6 - RFC 5213) domains that want to provide transparent multicast services for mobile nodes. The mcproxy meets the requirements of the IGMP/MLD proxy standard (RFC 4605) and has additional functionalities. The multicast proxy can be instantiated multiple times and is dynamically configurable at runtime.


The mcproxy is divided into the modules Receiver, Routing, Timer, Sender and an arbitrary number of Proxy-Instances.
The module Proxy reads the configuration file on startup. It then configures and starts all other modules, acquire the mrt-flag on a socket for manipulating the multicast routing tables of the Linux kernel.
A Proxy Instance represents a full multicast proxy. Each instance has access to the modules Receiver, Routing, Sender and Timer.
The module Sender generates and sends Membership Queries to the downstreams and Membership Reports to the upstreams.
The module Receiver uses the socket with the mrt-flag to receive Membership Reports and Cache Miss messages. Cache Miss messages are sent from the Linux kernel in order to inform proxies about new multicast sources.
The module Routing sets and deletes virtual interfaces and multicast forwarding rules.
The module Timer organizes the temporal behavior of the Proxy-Instances.

Communication between the modules

The modules communicate via synchronized message queues with the Proxy-Instances.
Proxy-Instances register their interfaces at the module Receiver. If a Membership Report or a Cache Miss massage arrives at on of this regestrated interafaces, the module Receiver sends a message to the relevant Proxy-Instance.
Proxy-Instances add reminders to the module Timer. A reminder contains a time and a message. If the predefined time expires for a reminder, the module Timer retun the reminder to the relevant Proxy-Instance. In this way, the temporal behavior of the Proxy-Instances is controlled.
All other modules only waits for instructions from the Proxy-Instances.

Related RFCs