RFC 6807

Population Count Extensions to Protocol Independent Multicast (PIM)

๐Ÿ“… published December 2012, from ietf

Population Count Extensions to Protocol Independent Multicast (PIM) ๐ŸŽ€

okay bestie, this one is RFC 6807, and it's giving experimental energy ๐Ÿงชโœจ It was written by D. Farinacci, G. Shepherd, and S. Venaas (all from Cisco Systems), plus Y. Cai from Microsoft ๐Ÿ’– It came out in December 2012, it's an Experimental document (ISSN 2070-1721), and the header doesn't list anything it obsoletes or updates ๐Ÿฆ‹


Abstract ๐ŸŒธ

okay so the whole point is giving multicast distribution trees some accounting data ๐Ÿ“Š It adds small extensions to the Protocol Independent Multicast (PIM) protocol so you can get a rough approximation of tree-based data, and it does it in a scalable way ๐Ÿซถ

Status of This Memo โœจ

so this isn't an Internet Standards Track spec, lowkey. It's published so people can look at it, try implementing it, and evaluate it ๐Ÿ”

this is an Experimental Protocol for the Internet community ๐Ÿงช It's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved doc is a candidate for any level of Internet Standard, so check Section 2 of RFC 5741 if you want the details ๐Ÿ’…

if you want the current status, any errata, or a way to send feedback, go to http://www.rfc-editor.org/info/rfc6807 ๐Ÿ’Œ

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. ๐Ÿ”’

this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they were on the date of publication. Please read those carefully, bestie, because they explain your rights and restrictions for this document ๐Ÿ“œ Code Components pulled out of this document have to include the Simplified BSD License text described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Simplified BSD License describes ๐Ÿซถ

Table of Contents ๐Ÿ“‘

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
  1.1.  Requirements Notation  . . . . . . . . . . . . . . . . . .  4
  1.2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . .  4
2.  Pop-Count-Supported Hello Option . . . . . . . . . . . . . . .  4
3.  New Pop-Count Join Attribute Format  . . . . . . . . . . . . .  5
  3.1.  Options  . . . . . . . . . . . . . . . . . . . . . . . . .  8
    3.1.1.  Link Speed Encoding  . . . . . . . . . . . . . . . . . 10
  3.2.  Example Message Layouts  . . . . . . . . . . . . . . . . . 10
4.  How to Use Pop-Count Encoding  . . . . . . . . . . . . . . . . 11
5.  Implementation Approaches  . . . . . . . . . . . . . . . . . . 12
6.  Caveats  . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 13
8.  Security Considerations  . . . . . . . . . . . . . . . . . . . 13
9.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 14
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  10.1. Normative References . . . . . . . . . . . . . . . . . . . 14
  10.2. Informative References . . . . . . . . . . . . . . . . . . 14

1. Introduction โœจ

okay so this document specifies a way to send accounting info using the Protocol Independent Multicast (PIM) protocol [RFC4601] [RFC5015] ๐Ÿฆ‹ Putting the mechanism inside PIM means the accounting info can be shared and kept up to date really efficiently ๐Ÿš€ The old ways needed data to be correlated from a bunch of different router sources, which is a whole mess ngl ๐Ÿ’€

with this mechanism, you can query a single router and get accounting and statistic info for a multicast distribution tree as a whole, or for any distribution sub-tree downstream from the router you queried ๐ŸŒณ The amount of info is fixed, so it doesn't grow as multicast membership, tree diameter, or branching goes up. Iconic, right? ๐Ÿ‘‘

the accounting data this spec gives you, per multicast route, is:

  1. The number of branches in a distribution tree.
  2. The membership type of the distribution tree, that is, Source-Specific Multicast (SSM) or Any-Source Multicast (ASM).
  3. Routing domain and time zone boundary information.
  4. On-tree node and tree diameter counters.
  5. Effective MTU and bandwidth.

this doc defines a new PIM Join Attribute type [RFC5384] for the Join/Prune message, plus a new Hello option ๐ŸŽ€ The mechanism works for both IPv4 and IPv6 multicast ๐ŸŒˆ

now the honest part ๐Ÿฅน This is a brand-new extension to PIM, and nobody fully knows what collecting info through PIM would do to PIM's operation. It's an entirely new concept, fr fr. A lot of PIM features, including the core protocols, first showed up in Experimental RFCs too, so it makes sense to put this one out as Experimental as well ๐Ÿงช Reports of implementation and deployment across whole distribution trees, or within sub-trees (see Section 6), will let people judge how desirable and stable this spec is ๐Ÿ“ˆ After that, the PIM Working Group will decide whether to move it to the Standards Track ๐Ÿ’œ

this document doesn't say how an administrator or user gets to this info. An implementation might have a command-line interface or some other way to request and display it ๐Ÿ’ป Since this is currently an Experimental doc, defining a MIB module hasn't been considered. If the PIM Working Group decides it should move to the Standards Track, a MIB module should be considered ๐Ÿ“

1.1. Requirements Notation

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. ๐Ÿง โœจ

1.2. Terminology

this section defines the terms used in this document ๐Ÿ“–

Multicast Route: An (S,G) or (*,G) entry regardless of whether the route is in ASM, SSM, or BIDIR mode of operation. ๐Ÿฆ‹

Stub Link: A link with members joined to the group via IGMP or Multicast Listener Discovery (MLD). ๐ŸŒธ

Transit Link: A link put in the oif-list (outgoing interface list) for a multicast route because it was joined by PIM routers. ๐ŸšŒ

note that a link can be both a Stub Link and a Transit Link at the same time ๐Ÿซถ


2. Pop-Count-Supported Hello Option ๐Ÿงš

okay so a PIM router tells everyone it supports the mechanism in this document by including the Pop-Count-Supported Hello option in its PIM Hello message ๐Ÿ’… Note that it also needs to include the Join-Attribute Hello option from [RFC5384], so don't forget that one, bestie ๐Ÿ™ˆ The format of the Pop-Count-Supported Hello option is defined as:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          OptionType           |         OptionLength          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

OptionType = 29, OptionLength = 0. Note that there is no option value included. ๐ŸŽ€ So future updates of this spec might add an option value, and implementations of this document MUST accept and process this option even if the length is non-zero ๐Ÿ”ฎ Implementations of this specification MUST accept and process the option while ignoring any option value that may be included ๐Ÿซถ

โš ๏ธ bestie, the big takeaway: even if an option comes with a non-zero length, you still have to accept and process it, and you ignore any value tucked inside. no exceptions ๐Ÿ’€

3. New Pop-Count Join Attribute Format โœจ

okay so bestie, here's the fun part ๐Ÿ’… A PIM router can send Join/Prune messages that MAY include a Pop-Count Join Attribute ๐Ÿฆ‹, but only after two things check out. First, it has to have decided from a received Hello that the neighbor supports this mechanism. Second, all the neighbors on the interface have to support join attributes. The way a PIM Join Attribute gets processed is described in [RFC5384], so go read that for the processing side. Here's the shape of the new attribute ๐ŸŽ€:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|E| Attr_Type |    Length     |        Effective MTU          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |             Flags             |        Options Bitmap         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            Options                            |
   .                               .                               .
   .                               .                               .
   .                               .                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

This format is only used for entries in the join-list section of the Join/Prune message, so don't go putting it anywhere else ๐Ÿ™…โ€โ™€๏ธ.

Here's the breakdown, bestie:

  • F bit: 0, which means it's a Non-Transitive Attribute ๐ŸŒธ.
  • E bit: Whatever [RFC5384] says it is.
  • Attr_Type: 3.
  • Length: The minimum length is 6.
  • Effective MTU: This is the minimum MTU for any link in the oif-list. The sender of a Join/Prune message takes the minimum MTU in bytes from each link in the oif-list ๐Ÿงš. If that value is less than the value stored for the multicast route (the one received from downstream joiners), the value should be reset and sent in a Join/Prune message. Otherwise, it should stay unchanged.

This tells you the MTU the multicast distribution tree supports, whether you look at it from the first-hop router(s) or from the sub-tree of any router on the tree. Iconic ๐Ÿ‘‘.

  • Flags: The flags field looks like this ๐Ÿ’œ:
        0                   1
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Unalloc/Reserved   |P|a|t|A|S|
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Unallocated/Reserved Flags: These are the flags nobody has defined yet ๐ŸŒˆ. If a new flag gets defined and a new implementation uses it, an old implementation should preserve the bit settings. Which means a router MUST preserve the settings of all Unallocated/Reserved Flags in PIM Join messages it receives from downstream routers, in any PIM Join it sends upstream. Non-negotiable, periodt ๐Ÿ’….
  • S flag: This gets set if an IGMPv3 or MLDv2 report with an INCLUDE mode group record was received on any oif-list entry, or if the bit was set from any PIM Join message. It should only be cleared once the above stops being true ๐Ÿซถ.
  • A flag: This gets set if an IGMPv3 or MLDv2 report with an EXCLUDE mode group record, or an IGMPv1, IGMPv2, or MLDv1 report, was received on any oif-list entry, or if the bit was set from any PIM Join message. It should only be cleared once the above stops being true ๐Ÿ˜ญ.

The combos of the A and S bits tell you what's going on:

  A flag   S flag   Description
  ------   ------   --------------------------------------
    0        0      There are no members for the group.
                    ('Stub Oif-List Count' is 0)
    0        1      All group members are using SSM.
    1        0      All group members are using ASM.
    1        1      A mixture of SSM and ASM group members.
  • t flag: This gets set if there are any manually configured tunnels on the distribution tree. That means any tunnel that is not an auto-tunnel. If a manually configured tunnel is in the oif-list, the router sets this bit in its Join/Prune messages. Otherwise, it passes along the bit setting from its downstream joiners ๐Ÿ“.
  • a flag: This gets set if there are any auto-tunnels on the distribution tree. If an auto-tunnel is in the oif-list, the router sets this bit in its Join/Prune messages. Otherwise, it passes along the bit setting from its downstream joiners. An example of an auto-tunnel is one set up by the Automatic Multicast Tunneling [AMT] protocol โœจ.
  • P flag: A router sets this flag if all its downstream routers support this specification, meaning they're all PIM Pop-Count capable. If a downstream router doesn't support this specification, the flag MUST be cleared ๐Ÿ™ˆ. This is how you can tell whether the entire sub-tree is completely accounting capable.
  • Options Bitmap: This is a bitmap that shows which options are present. It looks like this ๐Ÿงšโ€โ™€๏ธ:
       0                   1
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |T|s|m|M|d|n|D|z| Unalloc/Rsrvd |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Each of the bits T, s, m, M, d, n, D, and z is tied to one option, and that option is included if and only if its bit is set. The included options MUST show up in the same order as those bits are listed ๐Ÿ“‹. Here's what each bit means:

  bit     Option
 -----   ------------------------
   T      Transit Oif-List Count
   s      Stub Oif-List Count
   m      Minimum Speed Link
   M      Maximum Speed Link
   d      Domain Count
   n      Node Count
   D      Diameter Count
   z      TZ Count

See Section 3.1 for the details on each option. The unallocated bits are reserved. Any unknown bits MUST be set to 0 when a message is sent, and they're treated as 0 (ignored) when received. So unknown options that hang off unknown bits just get ignored, no drama ๐Ÿ’–.

By using this bitmap, you can specify at most 16 options. If you ever need more than 16, someone can define a new option that holds a bitmap, which can then specify further options. The last bit in the current bitmap could be used for that option. The exact definition of this is left for future documents ๐Ÿ”ฎ.

  • Options: This field holds the options, and the flag bits decide which ones are present. New flags and options may be defined in the future, so any unknown or reserved flags MUST be ignored, and any additional trailing options MUST be ignored too ๐Ÿซง. See Section 3.1 for the options defined in this document.

3.1. Options

There are several options defined in this document ๐ŸŒŸ. Each one has a related flag that shows whether it's present, and the Options Bitmap above lists them along with their bits. Every option has a fixed size. There are no alignment requirements for the options, so an implementation cannot assume they're aligned. Babe, don't assume alignment ๐Ÿ™…โ€โ™€๏ธ.

  • Transit Oif-List Count: A router sending a Join/Prune message fills this in with the number of transit links on the multicast distribution tree. The value is the number of oifs (outgoing interfaces) for the multicast route that PIM has joined, plus the sum of the values each downstream PIM router advertised after joining on that oif. Length is 4 octets ๐Ÿฐ.
  • Stub Oif-List Count: A router sending a Join/Prune message fills this in with the number of stub links on the multicast distribution tree. Stub links are the ones with host members on them. The value is the number of oifs for the multicast route that have been joined by IGMP or MLD, plus the sum of the values each downstream PIM router advertised after joining on that oif. Length is 4 octets ๐Ÿซถ.
  • Minimum Speed Link: This holds the minimum bandwidth rate for any link in the oif-list, encoded as specified in Section 3.1.1. The sender of a Join/Prune message takes the minimum value for each link in the oif-list for the multicast route. If that value is less than the value stored for the multicast route (the smallest value received from downstream joiners), the value should be reset and sent in a Join/Prune message. Otherwise, it should stay unchanged. Together with the Maximum Speed Link option, this gives you a way to find the lowest- and highest-speed links on the multicast distribution tree ๐ŸŽ๏ธ. Length is 2 octets.
  • Maximum Speed Link: This holds the maximum bandwidth rate for any link in the oif-list, encoded as specified in Section 3.1.1. The sender of a Join/Prune message takes the maximum value for each link in the oif-list for the multicast route. If that value is greater than the value stored for the multicast route (the largest value received from downstream joiners), the value should be reset and sent in a Join/Prune message. Otherwise, it should stay unchanged. Together with the Minimum Speed Link option, this gives you the lowest- and highest-speed links on the tree too ๐Ÿš€. Length is 2 octets.
  • Domain Count: This shows how many routing domains the distribution tree goes through. A router should increment this value if it's sending a Join/Prune message over a link that crosses a domain boundary. For this to work, an implementation needs a way to know that a neighbor or an interface is in a different domain. There's no standard way of doing that yet, sadly ๐Ÿ˜ค. Length is 1 octet.
  • Node Count: This shows how many routers are on the distribution tree. Each router adds up all the Node Counts from all joiners on all oifs, then adds 1 before putting this value into the Join/Prune message ๐Ÿงฎ. Length is 1 octet.
  • Diameter Count: This shows the longest branch of the tree, measured in router hops. Each router that sends a Join increments the max value it received from all downstream joiners by 1 ๐ŸŒณ. Length is 1 octet.
  • TZ Count: This shows how many time zones the distribution tree goes through. A router should increment this value if it's sending a Join/Prune message over a link that crosses a time zone. This can be a configured link attribute, or the router can use other means to decide a time zone is acceptable ๐ŸŒ. Length is 1 octet.

okay so the speed gets squished into 2 octets ๐Ÿงš like this:

            0                   1
            0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           | Exponent  |    Significand    |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

the link speed is Significand * 10 ^ Exponent kbps ๐Ÿ’…. this gives you up to 3 decimal digits of precision and speeds anywhere from 1 kbps all the way up to 10 ^ 67 kbps ๐Ÿคฏ. a computed speed of 0 kbps just means the link is < 1 kbps ๐Ÿ™ˆ

here are some examples bestie:

 Link Speed     Exponent     Significand
------------   ----------   -------------
 500 kbps       0            500
 500 kbps       2              5
 155 Mbps       3            155
  40 Gpbs       6             40
 100 Gpbs       6            100
 100 Gpbs       8              1

3.2. Example Message Layouts โœจ

let's look at a few examples so you can see the flags and options in action ๐Ÿฆ‹

a minimum-size message has no option flags set and looks like this, iconic ๐Ÿ‘‘:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|E| Attr_Type |  Length = 6   |        Effective MTU          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Unalloc/Reserved   |P|a|t|A|S|0|0|0|0|0|0|0|0| Unalloc/Rsrvd |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

a message with all the options defined in this document would look like this ๐Ÿ˜ญ๐Ÿ”ฅ:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|E| Attr_Type |  Length = 18  |        Effective MTU          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Unalloc/Reserved   |P|a|t|A|S|1|1|1|1|1|1|1|1| Unalloc/Rsrvd |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Transit Oif-List Count                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Stub Oif-List Count                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Minimum Speed Link       |      Maximum Speed Link       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Domain Count |  Node Count   | Diameter Count|    TZ Count   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

and a message containing only Stub Oif-List Count and Node Count would look like this ๐Ÿง:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |F|E| Attr_Type |  Length = 9   |        Effective MTU          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Unalloc/Reserved   |P|a|t|A|S|0|1|0|0|0|1|0|0| Unalloc/Rsrvd |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Stub Oif-List Count                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Node count   |
   +-+-+-+-+-+-+-+-+

4. How to Use Pop-Count Encoding ๐Ÿ’–

okay this part is the rules ๐Ÿซถ. a router that supports this mechanism MUST, unless administratively disabled, include the PIM Join Attribute option in its PIM Hellos. check out [RFC5384] and "PIM-Hello Options" on [PIM-REG] for the details ๐Ÿ’…

It is RECOMMENDED that implementations let admins choose whether to use this mechanism at all ๐ŸŽ€. implementations MAY also let you control further what information gets stored and sent upstream โœจ

it is very important (like, the most important) that any changes to the values maintained by this mechanism MUST NOT trigger a new Join/Prune message ๐Ÿšจ. because PIM is periodic, the values can be accurately obtained at 1-minute intervals (or whatever Join/Prune interval is being used) โฐ

when a router removes a link from an oif-list, it needs to be able to reevaluate the values it will advertise upstream ๐Ÿ”„. this happens when an oif-list entry times out or a Prune is received

it is RECOMMENDED that the Join Attribute defined in this document be used only for entries in the join-list part of the Join/Prune message. if the attribute shows up in the prune-list, an implementation MUST ignore it and process the Prune as if the attribute were not present ๐Ÿ™…โ€โ™€๏ธ

the Join Attribute only belongs in the join-list. in the prune-list it gets ignored, so the Prune is handled like it was never there.

it is also RECOMMENDED that join suppression be disabled on a LAN when Pop-Count is used ๐ŸŒธ

it is RECOMMENDED that, when triggered Join/Prune messages are sent by a downstream router, the accounting information not be included in the message ๐Ÿƒโ€โ™€๏ธ. this way, when convergence is important, skipping the time to build an accounting record downstream and the time to parse it upstream helps cut down convergence time โšก. if an upstream router gets a Join/Prune message with no accounting data, it SHOULD NOT interpret that message as a trigger to clear or reset the accounting data it has cached ๐Ÿ’œ


5. Implementation Approaches ๐ŸŒˆ

this section is full of non-normative suggestions for how Pop-Count may be implemented, so think of it as brainstorming ๐Ÿง 

an implementation decides how the accounting attributes get maintained ๐Ÿ—‚๏ธ. one option is storing the values as part of the multicast route data structure, combining the local info with the joined info on a per-oif basis. then when it's time to send a Join/Prune message, the values stored in the multicast route can just be copied into the message ๐Ÿ“จ

or, an implementation could store the accounting values per oif. when a Join/Prune message is sent, it combines the oifs with its local info, and then that combined info gets copied into the message ๐Ÿงฉ

when a downstream joiner stops joining, the cached accounting values need to be evaluated ๐Ÿง. there are two approaches. the first is to keep the values learned from each joiner, so when that joiner leaves, the count/max/min values are known and the combined value can be adjusted. the second is to set the value to 0 for the oif, then start accumulating new values as subsequent Joins come in ๐ŸŒฑ

the same issue shows up when an oif is removed from the oif-list ๐Ÿซ . keeping per-oif values lets you adjust the per-route values when an oif goes away. or, alternatively, reporting the new set of values from the route can be delayed while all oif values get zeroed. accumulating new values from subsequent Joins repopulates them, and a new max/min/count can be reevaluated for the route ๐Ÿ”


6. Caveats โญ

this one is important, bestie ๐Ÿ‘€

this specification requires each router on a multicast distribution tree to support this specification, or else the accounting attributes for the tree won't be known ๐Ÿ˜ฌ

however, if there's a contiguous set of routers downstream in the distribution tree, they can maintain accounting information for the sub-tree ๐ŸŒณ

if there's a set of contiguous routers supporting this specification upstream on the multicast distribution tree, accounting information will be available. but it won't be an accurate picture of the entire tree ๐Ÿ™ƒ. also, it won't be clear how much of the distribution tree the accounting information covers ๐Ÿคทโ€โ™€๏ธ


7. IANA Considerations ๐Ÿงš

a new PIM-Hello Option type, 29, has been assigned by IANA ๐ŸŽ‰. even though the length is specified as 0 in this specification, a non-zero length is allowed, so IANA listed the length as variable ๐Ÿ”ข

a new PIM Join Attribute type, 3, has been assigned by IANA ๐Ÿฆ‹


8. Security Considerations ๐Ÿ’€

this one's serious, okay ๐Ÿ™ˆ. using this specification requires some additional processing of PIM Join/Prune messages. however, the extra processing is fairly limited, so it's not believed to be a significant concern ๐Ÿง˜โ€โ™€๏ธ

the mechanism includes information like the number of receivers. this information is assumed to not be sensitive ๐Ÿคซ. but if an operator is worried about revealing it to upstream routers, or to other routers/hosts that might inspect it, there should be a way to disable the mechanism. or, alternatively, there should be more detailed control of what information gets included ๐Ÿ›ก๏ธโœจ


9. Acknowledgments ๐Ÿซถ

the authors want to thank John Zwiebel, Amit Jain, and Clayton Wagar for their review comments on the initial versions of this document ๐Ÿ’œ. Adrian Farrel did a detailed review and proposed textual changes that have been incorporated ๐Ÿ‘‘. further review and comments came from Thomas Morin and Zhaohui (Jeffrey) Zhang ๐ŸŒŸ


10. References ๐Ÿ“š

10.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC4601]  Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas,
           "Protocol Independent Multicast - Sparse Mode (PIM-SM):
           Protocol Specification (Revised)", RFC 4601, August 2006.

[RFC5015]  Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano,
           "Bidirectional Protocol Independent Multicast (BIDIR-
           PIM)", RFC 5015, October 2007.

[RFC5384]  Boers, A., Wijnands, I., and E. Rosen, "The Protocol
           Independent Multicast (PIM) Join Attribute Format",
           RFC 5384, November 2008.

10.2. Informative References

[AMT]      Bumgardner, G., "Automatic Multicast Tunneling", Work
           in Progress, June 2012.

[PIM-REG]  IANA, "Protocol Independent Multicast (PIM) Parameters",
           <http://www.iana.org/assignments/pim-parameters>.

Authors' Addresses โœจ

Dino Farinacci
Cisco Systems
Tasman Drive
San Jose, CA  95134
USA

EMail: dino@cisco.com


Greg Shepherd
Cisco Systems
Tasman Drive
San Jose, CA  95134
USA

EMail: gjshep@gmail.com


Stig Venaas
Cisco Systems
Tasman Drive
San Jose, CA  95134
USA

EMail: stig@cisco.com


Yiqun Cai
Microsoft
1065 La Avenida
Mountain View, CA  94043
USA

EMail: yiqunc@microsoft.com

that's the whole thing, bestie ๐ŸŒˆ๐Ÿ’–

๐Ÿ“ฆ where this page comes from