Multicast testing with Ostinato (3/3)

Ostinato is a great open source traffic generation tool, lately I have been using it for some virtual labs using GNS3 with Nokia SROS based routers, however there is no reason what I am doing here cannot be adapted to any routing system that supports PIM and IGMP.

This post should be the final in the my current series on using Ostinato to generate and received multicast traffic flows.

So a quick recap of the network topology:

5 Router Multicast Topology
5 Router Multicast Topology

Test Scenario

We shall be transmitting multicast IP packets (destination 239.0.0.9) from the Ostinato Drone Port1 (Connected to R5), while Ostinato Drone Port2 (Connected to R4) and Port3 (Connected to R3) shall use IGMP to request reception of that multicast stream.

The previous blog two posts described constructing the multicast router network and the initial part of the Ostinato where I created IP hosts that connect to the network

Now that the precursors have been done, lets continue on by crafting the multicast stream that will be transmitted from Ostinato Port1 to R5:

In Ostinato, in the Ports and Streams window pane select Port1. Make sure the streams tab is visible and right Click to create a new stream – Stream 1 will be created with a blank name. If you click in that area you can give the stream a name (I will use MC-239.0.0.9)

Ostinato Port 1 - New Stream

Right Click on Stream 1 and select edit stream. There are multiple tabs available, pick the protocol selection tab and Select:

  • L1 – Mac
  • VLAN – untagged
  • L2 – Ethernet II
  • L3 – IPv4
  • L4 – UDP
  • L5 – None
Protocol Options to Create IP Multicast stream
Protocol Options to Create IP Multicast stream

Then select the Protocol Data Tab and populate the following information

  • Media Access Protocol
    • Destination: 01:00:5e:00:00:09 Mode:Fixed (For IP Multicast Group 239.0.0.9)
    • Source: 48:00:01:2E:10:83 Mode:Fixed (From the device configuration ToR5-OST-e1)

    Stream Protocol Data Tab - MAC
    Stream Protocol Data Tab – MAC
  • Internet Protocol Version 4
    • Source: 10.0.5.1
    • Destination: 239.0.0.9

    Stream Protocol Data Tab - IP
    Stream Protocol Data Tab – IP
  • User Datagram Protocol
    • Override Source Port – 222
    • Override Desination Port – 222

    Stream Protocol Data Tab - UDP
    Stream Protocol Data Tab – UDP

Now we create the Stream Control Options:

  • Send 100 Packets
  • Rate 10 Packets/Second
  • After this stream: Stop
Multicast Source 100 packets at 10 packets/second
Multicast Source 100 packets at 10 packets/second

What this means is when we run this stream, it will attempt to send 10 multicast IP packets encapsulated in multicast Ethernet Frames each second for a period of 10 seconds and then it shall stop.

  • We apply the configuration (click the Apply button in the upper right hand corner of the window)
  • Click on Port 0
  • Select Resolve Device Neighbors
  • Click on start packet capture (looks like a speaker icon)
  • Select clear statistics (this port or all ports)
  • Then click start
Packet Stats Multicast Transmission
Packet Stats Multicast Transmission

After 10 seconds, we should have seen around 100 packets transmitted (it could be slightly more if ARP or other processes were active)

Click on stop packet capture (looks like a speaker icon with a line through it)
Click on view packet capture (looks like a magnifying glass)

Wireshark Capture - Ostinato Drone (Multicast)
Wireshark Capture – Ostinato Drone (Multicast)

If we look at R5, we can see that it is aware that there is multicast traffic entering from Ostinato:

A:R5# show router pim group

===============================================================================
Legend:  A = Active   S = Standby
===============================================================================
PIM Groups ipv4
===============================================================================
Group Address               Type                Spt Bit  Inc Intf       No.Oifs
   Source Address              RP                  State    Inc Intf(S)
-------------------------------------------------------------------------------
239.0.0.9                   (S,G)                        OST-e1         0
   10.0.5.1                    10.10.10.2
-------------------------------------------------------------------------------
Groups : 1
===============================================================================

This appears to be working – so we shall proceed to configuring the other Ostinato ports to send IGMPv2 Group Reports for 239.0.0.9 and see if they will receive the multicast traffic.

Ostinato Port2 to R4 (Multicast Receiver):

Following the same concept as what was done for Port1, we will focus primarily on the differences. In Ostinato, in the Ports and Streams window pane select Port2. Make sure the streams tab is visible and right Click to create a new stream – Stream 1 will be created with a blank name. If you click in that area you can give the stream a name (I will use MJ-239.0.0.9)

Right Click on Stream 1 and select edit stream. There are multiple tabs available, pick the protocol selection tab and Select:

  • L1 – Mac
  • VLAN – untagged
  • L2 – Ethernet II
  • L3 – IPv4
  • L4 – IGMP
  • L5 – None

Then select the Protocol Data Tab and populate the following information

  • Media Access Protocol
    • Destination: 01:00:5e:00:00:02 Mode:Fixed (For IP Multicast Group 224.0.0.2)
    • Source: 34:00:02:BF:69:5B Mode:Fixed (From the device configuration ToR4-OST-e2)
    • Source: 10.0.4.1
    • Destination: 224.0.0.2
    • TTL: 1
  • Internet Group Management Protocol
    • Message Type – 22 IGMPv2 Report
    • Group Address 239.0.0.9

Now we create the Stream Control Options:

  • Send 1 Packets
  • Rate 0.1 Packets/Second
  • After this stream: Goto First

What this means is when we run this stream, it will attempt to send 1 IGMP Join every 10 seconds continuously.

  • We apply the configuration (click the Apply button in the upper right hand corner of the window)Click on Port 2
  • Click on start packet capture (looks like a speaker icon)
  • Select clear statistics (this port or all ports)
  • Select Resolve Device Neighbors
  • Then click start

After 10 seconds, we should have seen a few packets transmitted (it could be slightly more if ARP or other processes were active) we probably would be receiving very little as well assuming the multicast source is not currently transmitting.

Click on stop packet capture (looks like a speaker icon with a line through it)
Click on view packet capture (looks like a magnifying glass)

Wireshark Capture - Ostinato Drone (IGMP)
Wireshark Capture – Ostinato Drone (IGMP)
A:R4# show router igmp group
===============================================================================
IGMP Interface Groups
===============================================================================

(*,239.0.0.9)                                             UpTime: 0d 00:01:44
    Fwd List  : OST-e2
-------------------------------------------------------------------------------
Entries : 1
===============================================================================
IGMP Host Groups
===============================================================================
No Matching Entries
===============================================================================
IGMP SAP Groups
===============================================================================
No Matching Entries
===============================================================================

This looks good, we shall configure a similar stream for Port 3 on the drone.

Ostinato Port3 to R3 (Multicast Receiver)::

Following the same concept as what was done for Port2, on Port3 create stream MJ-239.0.0.9.

Right Click on Stream 1 and select edit stream. There are multiple tabs available, pick the protocol selection tab and Select:

  • L1 – Mac
  • VLAN – untagged
  • L2 – Ethernet II
  • L3 – IPv4
  • L4 – IGMP
  • L5 – None

Then select the Protocol Data Tab and populate the following information

  • Media Access Protocol
    • Destination: 01:00:5e:00:00:02 Mode:Fixed (For IP Multicast Group 224.0.0.2)
    • Source: 10:00:03:29:03:98 Mode:Fixed (From the device configuration ToR3-OST-e3)
    • Source: 10.0.3.1
    • Destination: 224.0.0.2
    • TTL: 1
  • Internet Group Management Protocol
    • Message Type – 22 IGMPv2 Report
    • Group Address 239.0.0.9

Now we create the Stream Control Options:

  • Send 1 Packets
  • Rate 0.1 Packets/Second
  • After this stream: Goto First

What this means is when we run this stream, it will attempt to send 1 IGMP Join every 10 seconds continuously.

  • We apply the configuration (click the Apply button in the upper right hand corner of the window)
  • Click on Port 3
  • Select clear statistics (this port or all ports)
  • Select Resolve Device Neighbors
  • Then click start

After a few seconds, we should be able to see if R3 has an IGMP member for group 239.0.0.9

A:R3# show router igmp group
===============================================================================
IGMP Interface Groups
===============================================================================

(*,239.0.0.9)                                             UpTime: 0d 00:00:03
    Fwd List  : OST-e3
-------------------------------------------------------------------------------
Entries : 1
===============================================================================
IGMP Host Groups
===============================================================================
No Matching Entries
===============================================================================
IGMP SAP Groups
===============================================================================
No Matching Entries
===============================================================================

Full End to End Test – Multicast Sender and Receivers

The sequence of events will be:

  • Resolve Device Neighbors on Ports 1/2/3
  • Start Ports 2 and 3 so they are waiting to receive multicast traffic.
  • Start Port 1 which should send 100 Packets to Group 239.0.0.9 in 10 seconds
  • Look at the stats to verify that Ports 2 and 3 receive 100 packets.
Port 1 Transit 100 Frames, Port 2 and 3 Receive 100 Frames
Port 1 Transit 100 Frames, Port 2 and 3 Receive 100 Frames

Multicast Forwarding Topology:

A:R5# show router pim group 239.0.0.9 source 10.0.5.1 detail | match Intf
Incoming Intf      : OST-e1
Outgoing Intf List : R1, R2
A:R1# show router pim group 239.0.0.9 source 10.0.5.1 detail | match Intf
Incoming Intf      : R5
Outgoing Intf List : R3
A:R2# show router pim group 239.0.0.9 source 10.0.5.1 detail | match Intf
Incoming Intf      : R5
Outgoing Intf List : R4
A:R3# show router pim group 239.0.0.9 source 10.0.5.1 detail | match Intf
Incoming Intf      : R1
Outgoing Intf List : OST-e3
A:R4# show router pim group 239.0.0.9 source 10.0.5.1 detail | match Intf
Incoming Intf      : R2
Outgoing Intf List : OST-e2

Individual Streams, or the entire test session can be saved so you don’t need to recreate the test scenario each time.

This was a somewhat long example as to what you can do with Ostinato, however being able to do multicast testing using more than igmp static joins on routers and pings to multicast addresses on a virtual environment is quite helpful.

I am by no means an expert with this tool and I am sure that there are ways to optimise my workflow to achieve similar results.  Working through this example was fun – as I find having a particular problem to solve is usually a good way to try to learn how to use a tool and now I am better armed for other situations.

As a note – from my preliminary investigations, unicast traffic flows seems to be generally more straight forward as Ostinato allows you to populate some stream layer information (such as MAC addresses) via ARP (this is using mode resolved instead of mode fixed – however this is dependant on defining the appropriate end devices)