Multicast HowTo

Introduction This HowTo attempts to give some insight into the basics of setting up multicast routing. Both static multicast routing, with SMCRoute, and dynamic multicast routing, with mrouted and pimd. For some use-cases, in particular link-local multicast, it may not be possible to use multicast routing, then I recommend trying out: Bridging networks, see bridge(8) or Linux bridge - how it works igmproxy, mcproxy, or OpenVPN in Layer-2, bridged mode Make sure to check out the FAQ for the most common problems. [Read More]

Multicast routing with PIM-SM over GRE

GRE tunnels are useful in many ways. This blog post shows how to set up multicast routing with pimd over a GRE tunnel. To achieve this we will also set up OSPF over GRE with Quagga, because PIM, unlike DVMRP (mrouted), require unicast routing rules to be established.

       .----{ Intranet }----.
      /    192.168.1.0/24    \
     /                        \
.10 /                          \.20
.--'---. .1  GRE Tunnel  .2 .---`--.
|      |====================|      |
|  R1  |   172.16.16.0/30   |  R2  |
|      |                    |      |
'--.---'                    '------'
   | .1                        | .1 
   |    10.0.1.0/24            |    10.0.2.0/24
   | .2                        | .2 
.--'---.                    .--'---.
|      |                    |      |
|  C1  |                    |  C2  |
|      |                    |      |
'------'                    '------'

In this post we are using the home WiFi network, 192.168.1.0/24, to hook up the GRE tunnel. It is just as easy to extend this to a big corporate Intranet with more routers between R1 and R2. As long as that IT department takes care of the unicast routing between R1 and R2 so that the GRE tunnel can be established.

[Read More]

Testing multicast with Docker

Recently issue #70 was reported to pimd. That number of issues reported is cool in itself, but this was a question about Docker and pimd.

Up until that point I had only read about this new fad, and played around with it a bit at work for use as a stable build environment for cross-compiling. I had no idea people would want to use a Docker container as a multicast sink. Basically I was baffled.

The reporter used a Java based tool but simply couldn’t get things to work properly with pimd running on the host:

                eth0
 MC sender ---> [ Server host ]    <--- router running pimd
                       |
               ________|________
              /     docker0     \   <--- bridge    ______
             /         |         \                |      |   <--- MC receiver
  __________/          |          \_______________|______|_____
 \                     |                            /         /
  \                     `------------------>-------'         /
   \________________________________________________________/
      Container ship
[Read More]

Multicast testing, made easy!

For the better part of the last ten years I have been working with multicast in one way or another. I’ve used many different tools for testing, but on most systems I usually resort to ping(1) and tcpdump(1), which are quite sufficient. However, you often need to tell bridges (switches) to open up multicast in your general direction for your pings to get through, so you need to send an IGMP “join” first.

Way back in 2006 I stumbled upon a neat tool called mcjoin, written by David Stevens and announced in this posting to LKML. I started improving and adding features to it over the years.

[Read More]

HowTo run pimd on FreeBSD

This is not a proper HowTo, more of a “note to self” after having created a setup to test pimd issue #57. For these notes the following virtual topology, running on Ubuntu 15.10 with Linux 4.2 and Qemu 2.3.0, is used: .--------. net1 .----. net2 .----. net3 .----------. | Sender |------| R2 |------| R3 |------| Receiver | '--------' '----' '----' '----------' The networks between the boxes are actually Linux bridge devices (br), on which you may have to disable IGMP/MLD snooping to get pimd to run smoothly. [Read More]

HowTo run pimd on OpenBSD

This is an introduction to HowTo run pimd on OpenBSD. I keep it around mostly as a reminder to myself when testing new pimd releases, maybe someone else can make use of it as well. First of all, my sincere thanks to the OpenBSD team for, not just an awesome UNIX distribution, but also for their good taste in shipping a MULTICAST enabled kernel in the base distribution! On both NetBSD and FreeBSD there is a bit of work to get multicast support, which is one of the reasons for my not writing a HowTo for either of them atm. [Read More]

pimd v2.2.0 -- The last release of pimd?

On one of the last days of 2014 I release pimd v2.2.0, which is an awesome release with a lot of new features and bug fixes!

However, it could very well be the last release I do. Even though its one of my most popular projects on GitHub I have not had enough time to dedicate to it over the years. I will continue to do fixes and merge pull requests until someone else steps up to take over. There is also the distinct possibility that the Xorp PIM-SM or the new Quagga PIM-SSM implementations will (finally) make good old pimd completely redundant.

At work we will likely start using the Quagga PIM rather than pimd in WeOS.

For now though, enjoy pimd v2.2.0. It’s been tested in both my Qemu based virtual testbed and a few setups using Linux’ netns feature in CORE – awesome little proggy! :-)

[Read More]

HowTo: Add Multicast Routing to FreeBSD kernel

This is a very short blog post, mostly intended as a reminder to myself. Basically, there are two methods of adding multicast routing support to the FreeBSD kernel: Rebuild the kernel with options MROUTING Load the kernel module: kldload ip_mroute The kernel rebuild assumes the src.txz set was installed previously. cd /usr/src cd sys/amd64/conf cat GENERIC | sed 's/GENERIC$/MULTICAST/' > MULTICAST echo 'options MROUTING # Multicast routing' >> MULTICAST echo 'options PIM # Enable for pimd' >> MULTICAST cd - make kernel KERNCONF=MULTICAST reboot That’s it. [Read More]

HowTo: Add Multicast Routing to FreeBSD kernel

This is a very short blog post, mostly intended as a reminder to myself. Basically, there are two methods of adding multicast routing support to the FreeBSD kernel: Rebuild the kernel with options MROUTING Load the kernel module: kldload ip_mroute The kernel rebuild assumes the src.txz set was installed previously. cd /usr/src cd sys/amd64/conf cat GENERIC | sed 's/GENERIC$/MULTICAST/' > MULTICAST echo 'options MROUTING # Multicast routing' >> MULTICAST echo 'options PIM # Enable for pimd' >> MULTICAST cd - make kernel KERNCONF=MULTICAST reboot That’s it. [Read More]