I know that it is normally not possible for a device to receive its own multicast stream on the same network interface where it transmitted said stream. I also understand why this is sensible, and useful.
However, I have not been able to find where this behavior is specified and/or documented. Also, I would like to understand whether it can be configured or circumvented.
Anecdotally, I know of at least one case where someone told me they saw it working (on an Arista switch), but that it stopped working when the Arista engineers installed and configured AMCS.
I will give an example use case where it might be desirable for a device to receive its own multicast stream. Imagine a gateway device that converts between some sort of non-IP signal (doesn't matter what it is) and an RTP multicast stream and vice-versa. As long as you only send signals between different devices, everything works fine. I can send a signal from A to any number of outputs of B, C, and D, and vice-versa. So, as long as I am using the network to bridge two separate locations, simply as a long "extension cable", everything works fine.
As soon as I want to treat the set of all devices as a distributed X/Y matrix, where I can send any input to any output, though, I am in trouble: it can sometimes happen that I want to send a signal from input 3 of A to output 5 of A. This means that device A needs to receive the multicast stream for its input 3 that it itself sent! And this is not possible.
I can only get around this by
- Strictly segregating inputs and outputs to separate network interfaces. This wastes 50% of the bandwidth, though.
- NATing the multicast streams. This requires complex coordination between the switch and the edge devices, since the address information provided by the sender to the receiver will actually not be correct, and "someone" needs to also rewrite the address information (for example provided via SDP) to match the rewritten addresses.
- Alternative NATing idea: every transmitter sends on a fixed address, every receiver receives a fixed address and the switch rewrites the addresses in such a way that the correct stream arrives at the correct receiver. This means that all signal assignment and signal changes are actually done purely in the switch without the receiver being aware. That means the receiver cannot "prepare" for the signal change (for example by muting the loudspeaker during the change).
- Adding an internal matrix to the devices, so that I can send signals either internally from input to output or from a multicast stream receiver to output. This adds complexity to the system because now every change in signal path potentially needs two steps: an IGMP LEAVE/JOIN in the network and a switch on the internal matrix. These two steps need to be coordinated such that they happen at the same time. It also means that switching latency and signal latency are no longer uniform because a switch that only happens inside an internal matrix is faster than an IGMP LEAVE/JOIN and a signal only traveling inside the device will have lower latency than one that travels over the network.
All 4 of those solutions have undesirable tradeoffs.
Because of this, it would be desirable to configure the network in such a way that a device can IGMP JOIN its own stream. This would effective turn "the network" into a giant matrix. All signal path changes would happen purely in the network. (There would technically still be complex multi-step routing e.g. with PIM, but that is transparent to the devices.) Switching latency and signal latency would be at least somewhat uniform, especially in a Spine/Leaf network.
As I mentioned above, I have unreliable second-hand anecdotal "evidence" of this working in at least one instance. What I would like to understand is whether it is possible to configure a switch (or a set of switches in a Spine/Leaf or Hub/Spoke network although this would only be relevant for each individual leaf/spoke anyway) in such a way to enable devices to receive their own multicast streams "reflected back" from the switch, and what undesirable consequences and tradeoffs this might have.
I'm mostly interested in answers for Arista (most platforms) or Cisco NX-OS (Nexus 9k series), but others are interesting, too. I've read through the Multicast Architecture documentation for Arista, browsed the EOS and NX-OS manuals, and played around in an Arista switch, but I did not clearly understand where the decision to not "reflect back" a multicast stream is made, and thus where to look if I wanted to configure/disable it.
The behavior I am observing is that the device sends an IGMP JOIN, the switch receives the IGMP JOIN, but the switch is not sending the multicast. That is the behavior I would expect, and I understand why this behavior makes sense. My question is: can I change this behavior to be the one I want?
Strictly segregating inputs and outputs to separate network interfaces
think: VLAN tagged subinterfaces on the end device (hosts), and switchports with (at least) two entries in "trunk allowed vlan ...". Host sends Multicast on on one VLAN-tagged subinterface, and joins same stream on second VLAN-Tagged subinterface. "Somewhere" in the network, there is a routing instance which provides routing (and PIM) between these two VLANs, suitable IGMP Snooping config might apply, too. There is no (additional) bandwidth race on the host's switch port, as "in" and "out" are in opposite directions.