Re: Comments on draft-ietf-l2vpn-pim-snooping-06
Olivier Dornon <olivier.dornon@alcatel-lucent.com> Tue, 19 August 2014 15:27 UTC
Return-Path: <olivier.dornon@alcatel-lucent.com>
X-Original-To: l2vpn@ietfa.amsl.com
Delivered-To: l2vpn@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1])
by ietfa.amsl.com (Postfix) with ESMTP id 19BEE1A045E
for <l2vpn@ietfa.amsl.com>; Tue, 19 Aug 2014 08:27:31 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.432
X-Spam-Level: *
X-Spam-Status: No, score=1.432 tagged_above=-999 required=5
tests=[BAYES_00=-1.9, GB_SUMOF=1, J_CHICKENPOX_24=0.6,
J_CHICKENPOX_31=0.6, J_CHICKENPOX_41=0.6, J_CHICKENPOX_51=0.6,
J_CHICKENPOX_81=0.6, RP_MATCHES_RCVD=-0.668] autolearn=no
Received: from mail.ietf.org ([4.31.198.44])
by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id f5kfIw8ocdTL for <l2vpn@ietfa.amsl.com>;
Tue, 19 Aug 2014 08:27:22 -0700 (PDT)
Received: from smtp-fr.alcatel-lucent.com (fr-hpida-esg-02.alcatel-lucent.com
[135.245.210.21])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by ietfa.amsl.com (Postfix) with ESMTPS id C5BE91A03A8
for <l2vpn@ietf.org>; Tue, 19 Aug 2014 08:27:20 -0700 (PDT)
Received: from fr712usmtp2.zeu.alcatel-lucent.com (unknown [135.239.2.42])
by Websense Email Security Gateway with ESMTPS id 6929C47E76C13
for <l2vpn@ietf.org>; Tue, 19 Aug 2014 15:27:16 +0000 (GMT)
Received: from FR712WXCHHUB03.zeu.alcatel-lucent.com
(fr712wxchhub03.zeu.alcatel-lucent.com [135.239.2.74])
by fr712usmtp2.zeu.alcatel-lucent.com (GMO) with ESMTP id s7JFRHrQ032435
(version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL)
for <l2vpn@ietf.org>; Tue, 19 Aug 2014 17:27:18 +0200
Received: from [138.203.14.185] (135.239.27.39) by
FR712WXCHHUB03.zeu.alcatel-lucent.com (135.239.2.74) with Microsoft SMTP
Server (TLS) id 14.2.247.3; Tue, 19 Aug 2014 17:27:17 +0200
Message-ID: <53F36CD4.8000404@alcatel-lucent.com>
Date: Tue, 19 Aug 2014 17:27:16 +0200
From: Olivier Dornon <olivier.dornon@alcatel-lucent.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64;
rv:24.0) Gecko/20100101 Thunderbird/24.5.0
MIME-Version: 1.0
To: <l2vpn@ietf.org>
Subject: Re: Comments on draft-ietf-l2vpn-pim-snooping-06
References: <31068.1408381967@erosen-lnx>
In-Reply-To: <31068.1408381967@erosen-lnx>
Content-Type: text/plain; charset="ISO-8859-1"; format=flowed
Content-Transfer-Encoding: 7bit
X-Originating-IP: [135.239.27.39]
Archived-At: http://mailarchive.ietf.org/arch/msg/l2vpn/Rq0unsLYD1i7MZXdrOdddk3mpWA
X-Mailman-Approved-At: Tue, 19 Aug 2014 08:33:38 -0700
X-BeenThere: l2vpn@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Layer 2 Virtual Private Networks <l2vpn.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/l2vpn>,
<mailto:l2vpn-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/l2vpn/>
List-Post: <mailto:l2vpn@ietf.org>
List-Help: <mailto:l2vpn-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/l2vpn>,
<mailto:l2vpn-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 19 Aug 2014 15:27:31 -0000
Eric, Thanks for your thorough review, please give us some time to process it all and we'll get you an updated version. Thanks, Olivier. On 08/18/2014 07:12 PM, erosen@cisco.com wrote: > I was asked to do a reivew of draft-ietf-l2vpn-vpls-pim-snooping-06; here > are my questions and comments. > > Overall I think the draft is in good shape, and I don't really see any > reason why it wouldn't work. I do think the procedures add complexity to > VPLS, as they really get into the details of the PIM state machines. The > advantage of the procedures is that they reduce bandwidth waste, by sending > multicast streams only where they need to go, rather than by flooding them > through the VPLS instance. This tradeoff will have to be evaluated by the > individual SPs. > > First, a couple of minor editorial comments: > > - The use of capitalization for the defined terms needs to be made > consistent. > > For example, mid-way through the data the term "RPort" becomes "rport", > and it wasn't obvious to me at first whether this difference was > intentional or not (I believe not). The RFC Editor generally finds these > issues, but it's better to get them fixed before the AUTH48 period. > > Also watch for "PIM" vs. "Pim". > > - There are a number of places where a rule for (S,G) is followed by a rule > for (*,G), and the two rules appear to be the same. It would be better to > give the rule once, and say it is for "(x,G), where x can be '*' or 'S'". > (Just a suggestion, I wouldn't consider this to be a blocking issue.) > > Now a comment on the exposition. The draft actually defines three closely > related schemes: "Snooping", "Proxy", and "Relay". It's a little tough to > figure out just what the difference is, especially the different between > "Proxy" and "Relay". "Relay" is said to be a "lightweight" version of > "Proxy", but you really have to dig into the details to see what that means. > > Let me test my understanding, and authors can correct me if I have > misunderstood something. In the following three bullet points, I am > assuming that we are in the context of a particular VPLS instance. > > 1. PIM Snooping does not interfere with the flooding (according to ordinary > VPLS procedures) of PIM control messages. However, it keeps track of > which ports have CEs that have expressed interest in a given multicast > stream ((S,G) or (*,G)) by sending a Join on that port. It also keeps > track of which ports are "upstream" and which are "downstream" for a > given flow. Multicast data traffic of a given flow is then transmitted > by a PE only when received from an upstream port, and is transmitted only > on downstream ports that have expressed interest. > > The problem with Snooping is the following. A Join from a downstream > port will be flooded to the other (potential) downstream ports. If a CE on > one of these other ports sees a Join(x,G), the CE may decide that it > doesn't have to send its own Join(x,G). This is "join suppression". > Thus the PE cannot tell which of the ports are attached CEs that have > interest in (x,G). > > Thus Snooping only works if Join Suppression is turned off in all the > CEs, and this is not necessarily possible to deploy (especially if the SP > doesn't manage the CEs, or the CEs don't have the ability to disable Join > Suppression.) > > Presumably, if there area multiple CEs per AC, the PE can receive a Join > per (x,G) from each CE, and will flood all these Joins. > > 2. PIM Relay avoids this by NOT flooding the Join messages. A Join message > from a given CE is only forwarded "upstream", as determined by the > "upstream neighbor" field of the Join. Other downstream CEs won't see > this Join, and hence they will not suppress their own Joins, even if Join > Suppression is enabled. > > So a PE will see a Join from each downstream port where there is interest > in a particular (x,G), and each of these Joins gets forwarded upstream. > If there are multiple CEs on a given AC, the CEs on the same AC will see > each others' Joins and can apply Join Suppression in that context. So > one would expect a PE to see no more than one Join per (x,G) per port. > Each of these Joins is forwarded upstream. > > 3. PIM Proxy is similar to PIM Relay, but different. The functional > difference is not clearly expressed in the narrative, but has to be > inferred from the details. I think the difference is the following. As > stated above, PIM Relay may forward upstream multiple Join(x,G) messages. > However, PIM Proxy will forward upstream only a single Join(x,G) message. > (I.e. it aggregates the (x,G) Joins from downstream, much as a PIM router > would do.) This requires maintaining more multicast control state than > is necessary for PIM Relay (hence the claim that Relay is a "lightweight" > version of Proxy), but reduces the upstream control plane load. > > If this is correct, it would be helpful to see section 2.4 expanded a bit to > explain the differences between the three schemes more clearly. > > (The best comparison of the three related schemes is actually in the > Abstract, but I think there should be more comparative detail in the body of > the draft.) > > I also think it is difficult to understand the interactions between PIM > Snooping/Proxy/Relay and IGMP snooping. Interactions are mentioned in > sections 1.1, 2.8, and 2.11; the draft doesn't really give a clear message > as to whether using them together is a good idea or not. Perhaps this draft > could benefit from a "Deployment Considerations" section that addressed this > sort of issue, as well as the issues about which variant of > Snooping/Proxy/Relay to choose under what circumstances. > > Additional comments in-line, look for lines beginning ****. > > > Layer 2 Virtual Private Networks O. Dornon > Internet-Draft J. Kotalwar > Intended status: Informational Alcatel-Lucent > Expires: October 31, 2014 V. Hemige > > R. Qiu > Z. Zhang > Juniper Networks, Inc. > April 29, 2014 > > > PIM Snooping over VPLS > draft-ietf-l2vpn-vpls-pim-snooping-06 > > Abstract > > This document describes the procedures and recommendations for VPLS > PEs to facilitate replication of multicast traffic to only certain > ports (behind which there are interested PIM routers and/or IGMP > hosts) via PIM Snooping and PIM Proxy. > > With PIM Snooping, PEs passively listen to certain PIM control > messages to build control and forwarding states while transparently > flooding those messages. With PIM Proxy, PEs do not flood PIM Join/ > Prune messages but only generate their own and send out of certain > ports, based on the control states built from downstream Join/Prune > messages. PIM Proxy is required when PIM Join suppression is enabled > on the CE devices and useful to reduce PIM control traffic in a VPLS > domain. > > The document also describes PIM Relay, which can be viewed as light- > weight proxy, where all downstream Join/Prune messages are simply > forwarded out of certain ports but not flooded to avoid triggering > PIM Join suppression on CE devices. > > > > Requirements Language > > 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]. > > Status of this Memo > > This Internet-Draft is submitted in full conformance with the > provisions of BCP 78 and BCP 79. > > Internet-Drafts are working documents of the Internet Engineering > Task Force (IETF). Note that other groups may also distribute > > > > Dornon, et al. Expires October 31, 2014 [Page 1] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > working documents as Internet-Drafts. The list of current Internet- > Drafts is at http://datatracker.ietf.org/drafts/current/. > > Internet-Drafts are draft documents valid for a maximum of six months > and may be updated, replaced, or obsoleted by other documents at any > time. It is inappropriate to use Internet-Drafts as reference > material or to cite them other than as "work in progress." > > This Internet-Draft will expire on October 31, 2014. > > Copyright Notice > > Copyright (c) 2014 IETF Trust and the persons identified as the > document authors. All rights reserved. > > This document is subject to BCP 78 and the IETF Trust's Legal > Provisions Relating to IETF Documents > (http://trustee.ietf.org/license-info) in effect on the date of > publication of this document. Please review these documents > carefully, as they describe your rights and restrictions with respect > to this document. Code Components extracted from this document must > include Simplified BSD License text as described in Section 4.e of > the Trust Legal Provisions and are provided without warranty as > described in the Simplified BSD License. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 2] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Table of Contents > > 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 > 1.1. Multicast Snooping in VPLS . . . . . . . . . . . . . . . . 5 > 1.2. Assumptions . . . . . . . . . . . . . . . . . . . . . . . 6 > 1.3. Definitions . . . . . . . . . . . . . . . . . . . . . . . 7 > 2. PIM Snooping for VPLS . . . . . . . . . . . . . . . . . . . . 7 > 2.1. PIM protocol background . . . . . . . . . . . . . . . . . 7 > 2.2. General Rules for PIM Snooping in VPLS . . . . . . . . . . 8 > 2.2.1. Preserving Assert Trigger . . . . . . . . . . . . . . 8 > 2.3. Some Considerations for PIM Snooping . . . . . . . . . . . 9 > 2.3.1. Scaling . . . . . . . . . . . . . . . . . . . . . . . 9 > 2.3.2. IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . 10 > 2.3.3. PIM-SM (*,*,RP) . . . . . . . . . . . . . . . . . . . 10 > 2.4. PIM Snooping vs PIM Proxy . . . . . . . . . . . . . . . . 10 > 2.4.1. Differences between PIM Snooping, Relay and Proxy . . 10 > 2.4.2. PIM Control Message Latency . . . . . . . . . . . . . 11 > 2.4.3. When to Snoop and When to Proxy . . . . . . . . . . . 12 > 2.5. Discovering PIM Routers . . . . . . . . . . . . . . . . . 13 > 2.6. PIM-SM and PIM-SSM . . . . . . . . . . . . . . . . . . . . 14 > 2.6.1. Building PIM-SM Snooping States . . . . . . . . . . . 14 > 2.6.2. Explanation for per (S,G,N) states . . . . . . . . . . 17 > 2.6.3. Receiving (*,G) PIM-SM Join/Prune Messages . . . . . . 17 > 2.6.4. Receiving (S,G) PIM-SM Join/Prune Messages . . . . . . 19 > 2.6.5. Receiving (S,G,rpt) Join/Prune Messages . . . . . . . 21 > 2.6.6. Sending Join/Prune Messages Upstream . . . . . . . . . 21 > 2.7. Bidirectional-PIM (PIM-BIDIR) . . . . . . . . . . . . . . 22 > 2.8. Interaction with IGMP Snooping . . . . . . . . . . . . . . 23 > 2.9. PIM-DM . . . . . . . . . . . . . . . . . . . . . . . . . . 23 > 2.9.1. Building PIM-DM Snooping States . . . . . . . . . . . 23 > 2.9.2. PIM-DM Downstream Per-Port PIM(S,G,N) State Machine . 24 > 2.9.3. Triggering ASSERT election in PIM-DM . . . . . . . . . 24 > 2.10. PIM Proxy . . . . . . . . . . . . . . . . . . . . . . . . 24 > 2.10.1. Upstream PIM Proxy behavior . . . . . . . . . . . . . 24 > 2.11. Directly Connected Multicast Source . . . . . . . . . . . 25 > 2.12. Data Forwarding Rules . . . . . . . . . . . . . . . . . . 25 > 2.12.1. PIM-SM Data Forwarding Rules . . . . . . . . . . . . . 26 > 2.12.2. PIM-DM Data Forwarding Rules . . . . . . . . . . . . . 27 > 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28 > 4. Security Considerations . . . . . . . . . . . . . . . . . . . 28 > 5. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 28 > 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 29 > 7. References . . . . . . . . . . . . . . . . . . . . . . . . . . 29 > 7.1. Normative References . . . . . . . . . . . . . . . . . . . 29 > 7.2. Informative References . . . . . . . . . . . . . . . . . . 29 > Appendix A. PIM-BIDIR Thoughts . . . . . . . . . . . . . . . . . 30 > A.1. PIM-BIDIR Data Forwarding Rules . . . . . . . . . . . . . 30 > Appendix B. Example Network Scenario . . . . . . . . . . . . . . 31 > > > > Dornon, et al. Expires October 31, 2014 [Page 3] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > B.1. Pim Snooping Example . . . . . . . . . . . . . . . . . . . 32 > B.2. PIM Proxy Example with (S,G) / (*,G) interaction . . . . . 34 > Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 40 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 4] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 1. Introduction > > In Virtual Private LAN Service (VPLS), the Provider Edge (PE) devices > provide a logical interconnect such that Customer Edge (CE) devices > belonging to a specific VPLS instance appear to be connected by a > single LAN. Forwarding Information Base for a VPLS instance is > populated dynamically by source MAC address learning. > > **** This sort of suggests (by the mention of SA learning) that this draft > **** does not apply to EVPN. Is that the intention? > > Once a unicast > MAC address is learned and associated with a particular Attachment > Circuit (AC) or PseudoWire (PW), a frame destined to that MAC address > only needs to be sent on that AC or PW. > > For a frame not addressed to a known unicast MAC address, flooding > > **** It might be useful here to say just what "flooding" means in the > **** context of VPLS, i.e., (a) if received from PW, send to all ACs, (b) if > **** received from AC, send to all other ACs and to all PWs. > > has to be used. This happen with the following so called BUM > traffic: > > o B: The destination MAC address is a broadcast address, > > o U: The destination MAC address is unknown (has not been learned), > > o M: The destination MAC address is a multicast address. > > Multicast frames are flooded because a PE cannot know where multicast > members reside. VPLS solutions (i.e., [VPLS-LDP] and [VPLS-BGP]) > perform replication for multicast traffic at the ingress PE devices. > As stated in the VPLS Multicast Requirements draft [VPLS-MCAST-REQ], > there are two issues with VPLS Multicast today: > > o A. Multicast traffic is replicated to non-member sites. > > o B. Replication of PWs on shared physical path. > > Issue A can be solved by Multicast Snooping - PEs learn sites with > multicast members by snooping multicast protocol control messages and > forward IP multicast traffic only to member sites. This documents > describes the procedures to achieve that when PIM is running between > the CE devices. > > **** "PIM is running between the CE devices" --> "the CE devices are PIM > **** adjacencies of each other" (well, I think that's less likely to be > **** misunderstood than "running between") > > **** A forward reference to the section discussing whether hosts and routers > **** can be on the same VPLS instance would be useful here. > > Issue B is outside the scope of this document and > discussed in[VPLS-MCAST-TREES]. > > While this document is in the context of VPLS, the procedures apply > to regular layer-2 switches interconnected by physical connections as > well. In that case, the PW related concept/procedures are not > applicable and that's all. > > 1.1. Multicast Snooping in VPLS > > IGMP Snooping procedures described in[IGMP-SNOOP] make sure that IP > > **** in[IGMP-SNOOP] --> in [IGMP-SNOOP] > > multicast traffic is only sent out of the following: > > **** perhaps: "out of the following" --> "on the following ports" > > > > > Dornon, et al. Expires October 31, 2014 [Page 5] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > o Attachment Circuits (ACs) connecting to hosts that report related > group membership > > o ACs connecting to routers > > o PseudoWires (PWs) connecting to remote PEs that have the above > described ACs > > Notice that traffic is always sent out of ports connecting to > > **** perhaps: "out of ports" --> "on ports" > > routers, > > **** "connecting to routers" --> "that have p2p connections to routers or > **** that attach to a LAN on which there is a router" > > even those on which there are no snooped group memberships, > because IGMP Snooping alone can not determine if there are interested > receivers beyond those routers. To further restrict traffic sent to > those routers, PIM Snooping can be used, and this document describes > the procedures, including the rules when both IGMP and PIM are active > in a VPLS instance. > > **** Please add a reference here to sections 2.8 and 2.11, which discuss the > **** issues that occur when one tries to do both IGMP and PIM Snooping. > > **** The paragraph above suggests that there is no problem using both > **** together, but section 2.11 seems to recommend not doing it. > > Note that for both IGMP and PIM, the term Snooping is used loosely, > referring to the fact that a layer-2 device peeks into layer-3 > routing protocol messages to build relevant control and forwarding > states. Depending on how the control messages are handled > (transparently flooded, selectively forwarded, or consumed and then > regenerated), the procedure/process may be called Snooping or Proxy > in different contexts. > > **** The difference between "selectively forwarded" and "consumed then > **** regenerated" is a bit difficult to understand. Presumably "selectively > **** forwarded" means "Relay", while "consumed then regenerated" means > **** "Proxy". But one could take this to mean that every Join is consumed > **** and regenerated, which would be a lot like Relay. I wonder if it would > **** be better to say "aggregated" rather than "consumed then regenerated". > > Unless explicitly noted, the procedures in this document are used for > either PIM Snooping or PIM Proxy, and we will largely refer to PIM > "Snooping" in this document. The PIM Proxy specific procedures are > described in Section 2.6.6. Differences that need to be observed > while implementing one or the other and recommendations on which > method to employ in different scenarios are noted in section > Section 2.4. > > This document also describes PIM Relay, which can be viewed as light- > weight Proxy. Unless explicitly noted, in the rest of the document > Proxy implicitly includes Relay as well. > > **** Very hard to understand from this text what the different between Proxy > **** and Relay is. > > > 1.2. Assumptions > > The document assumes that the reader has a good understanding of the > PIM protocols. The text in this draft is written in the same style > as the PIM RFCs to help correlate the concepts and to make it easier > to follow. > > In order to avoid replicating the text relating to PIM > protocol handling here, this draft cross references into definitions > of macros and procedures from the PIM RFCs, and assumes that the user > will infer such detail from those PIM RFCs. Deviations in protocol > handling specific to PIM Snooping are specified in this draft. > > **** The details are so specific to the PIM macros and state machines, that > **** that I have wonder whether a LC in the PIM WG would be appropriate. > > > > Dornon, et al. Expires October 31, 2014 [Page 6] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 1.3. Definitions > > There are several definitions referenced in this document that are > well described in the PIM RFCs [PIM-SM], PIM-BIDIR, PIM-DM]. The > > **** The use of brackets above seems incorrect. > > **** BTW, RFC 5015 uses the term "BIDIR-PIM" rather than "PIM-BIDIR". I've > **** never understood why, but perhaps it would be good to use the same term > **** here. > > following definitions and abbreviations are used throughout this > document: > > o A port is defined as either an attachment circuit (AC) or a > Pseudo-Wire (PW). > > o When we say a PIM message is 'received' on a port, it means that a > PIM Snooping PE snooped the PIM message. > > Abbreviations used in the document: > > o S: IP Address of the Multicast Source. > > o G: IP Address of the Multicast Group. > > o N: Upstream Neighbor field in a Join/Prune/Graft message. > > o Rport(N): Port on which neighbor N is learnt. > > **** The phrase "on which neighbor N is learnt" is not very clear. Does > **** this mean "the port over which N's Hellos are received?" Or something > **** else? > > Other definitions are explained in the sections where they are > introduced. > > > 2. PIM Snooping for VPLS > > 2.1. PIM protocol background > > PIM is a multicast routing protocol running between routers, which > are CE devices in a VPLS. PIM shares many of the common > characteristics of a routing protocol, such as discovery messages > (e.g., neighbor discovery using Hello messages), topology information > (e.g., multicast tree), > > **** Multicast tree as topology information?? PIM is more like a distance > **** vector routing algorithm than a LSA routing algorithm, decisions are > **** made based on input from neighbors rather than on topology info; not > **** really sure what is meant above by "topology information". > > and error detection and notification (e.g., > dead timer and designated router election). PIM does not participate > in exchange of unicast routing databases, but it uses the unicast > routing table to provide reverse path information for building > multicast trees. There are a few variants of PIM. In [PIM-DM], > multicast data is pushed towards the members similar to broadcast > mechanism but routers without attached receivers will prune back > towards the source. Unlike PIM-DM, other PIM flavors (PIM-SM > [PIM-SM], PIM-SSM [PIM-SSM], and PIM-BIDIR [PIM-BIDIR]) employs a > pull methodology via explicit joins instead of push technique. > > PIM routers periodically exchange Hello messages to discover and > maintain stateful sessions with neighbors. After neighbors are > > > > Dornon, et al. Expires October 31, 2014 [Page 7] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > discovered, PIM routers can signal their intentions to join or prune > specific multicast groups. This is accomplished by having downstream > routers send an explicit Join/Prune message (for the sake of > generalization, consider Graft messages for PIM-DM as Join messages) > to the upstream routers. > > **** "To the upstream routers", well each downstream router sends the J/P > **** messages for a particular tree to its parent node on that tree, not to > **** all upstream routers. Only with Snooping/Proxy/Relay do J/P messages > **** have to go to more than one upstream neighbor. > > The Join/Prune message can be group > specific (*,G) or group and source specific (S,G). > > 2.2. General Rules for PIM Snooping in VPLS > > The following rules for the correct operation of PIM snooping MUST be > followed. > > o PIM Snooping MUST NOT affect the operation of customer layer-2 > protocols (e.g., BPDUs) or layer-3 protocols. > > **** If this means that PIM Snooping/Proxy/Relay must be invisible to the > **** customer, then the requirement is violated by Proxy/Relay, as the > **** latter does not flood all the same messages as would be flooded > **** normally, and this affects the operation of PIM. You do mention this > **** below ("Proxy loses the transparency argument"), but I don't think you > **** want anyone to conclude that Proxy/Relay violates this requirement. > > o PIM messages and multicast data traffic forwarded by PEs MUST > follow the split-horizon rule for mesh PWs. > > o PIM snooping states in a PE MUST be per VPLS instance. > > o PIM assert triggers MUST be preserved to the extent necessary to > avoid sending duplicate traffic to the same PE (see > Section 2.2.1). > > 2.2.1. Preserving Assert Trigger > > In PIM-SM/DM, there are scenarios where multiple routers could be > forwarding the same multicast traffic on a LAN. When this happens, > using PIM Assert Election process by sending PIM Assert Messages, > routers ensure that only the Assert Winner forwards traffic on the > LAN. The Assert Election is a data driven event and happens only if > a router sees traffic on the interface to which it should be > forwarding the traffic. In the case of VPLS with snooping, two > routers may forward the same flow at the same time but each copy may > reach different set of PEs, and that is acceptable from the point of > view of avoiding duplicate traffic. If the two copies may reach the > same PE then the sending routers must be able to see each other's > traffic, in order to trigger Assert Election and stop duplicate > traffic. > > To achieve that, PIM-SM Snooping MUST not only forward multicast > > **** This capitalized "MUST" followed by lower case "not" will never make it > **** correctly through the review and editing process ;-) Either use lower > **** case "must", or change to "MUST forward multicast traffic for an (S,G) > **** not only on the ports ..." > > traffic for an (S,G) on the ports on which they snooped Joins(S,G)/ > Joins(*,G), but also towards the upstream neighbor(s)). In other > words, the ports on which the upstream neighbors are learnt must be > added to the outgoing port list along with the ports on which Joins > are snooped. > > **** Later on you say more precisely how to define "the upstream neighbors" > **** for a given (x,G). But at this point in the document it is not at all > **** clear what you mean. At the very least, you should add something like > **** "See section 2.6.1 for the rules that determine the set of 'upstream > **** neighbors' for a particular (x,G)." > > Similarly, PIM-DM Snooping SHOULD make sure that asserts can be > > > > Dornon, et al. Expires October 31, 2014 [Page 8] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > triggered (Section 2.9.3). > > **** Why "SHOULD" rather than "MUST"? Actually, it might be better to use > **** lower case words here since you are not actually describing > **** procedures at this point. > > The above logic needs to be facilitated without breaking VPLS Split > Horizon Rules. i.e. traffic should not be forwarded on the port on which > it was received, and traffic arriving on a PW MUST NOT be forwarded onto > other PW(s). > > **** Not clear that "the above logic" refers to. It could be interpreted as > **** referring only to PIM-DM snooping, but I don't think that's the > **** intention. Maybe it would be better just to say instead "The > **** procedures for PIM Snooping/Proxy/Relay do not violate the VPLS split > **** horizon rules. Traffic is never forwarded on the port over which it > **** was received, and traffic received from a PW is never forwarded to > **** other PWs." > > 2.3. Some Considerations for PIM Snooping > > The PIM Snooping solution described here requires a PE to examine and > operate on only PIM Hello and PIM Join/Prune packets. The PE does > not need to examine any other PIM packets. > > Most of the procedures in PIM Snooping in the handling of PIM Hellos > and PIM Join/Prune packets are very similar to that of a PIM Router. > > However, the PE does not need to have any routing tables like is > required in PIM Multicast Routing. It knows how to forward Join/ > Prunes by looking at the Upstream Neighbor field in the Join/Prune > packets. > > **** This would be a good place to say (or to have a reference to the place > **** that says) how the forwarding decision is made, depending on the > **** upstream neighbor field. I think the a J/P with a given upstream > **** neighbor is forwarded to the port from which a Hello from that upstream > **** neighbor was received. Is that correct? > > **** Are there any PIM deployments in which J/Ps will be forwarded to the > **** upstream neighbor even if a Hello from that neighbor hasn't yet been > **** received? (I think the answer is yes.) If so, using PIM snooping in > **** such a deployment would not be transparent to the customer. > > The PE does not need to know about Rendezvous Points (RP) and does > not have to maintain any RP Set. All that is transparent to a PIM > Snooping PE. > > In the following sub-sections, we list some considerations and > observations for the implementation of PIM Snooping in VPLS. > > 2.3.1. Scaling > > Snooping needs to be employed on ACs at the downstream PEs to prevent > traffic from being sent out of ACs unnecessarily. Snooping > techniques can also be employed on PWs at the upstream PEs to prevent > traffic from being sent to PEs unnecessarily. > > **** I was a bit puzzled by my first encounter with this paragraph. The > **** terms "upstream" and "downstream" are only meaningful in the context of > **** a particular Join, but "snooping" means (roughly) listening for Joins. > **** So a PE has to decide whether to snoop on a particular PW or AC before > **** it knows whether it is "upstream" or "downstream". Perhaps the point > **** is simply that (a) by snooping J/Ps and Hellos on a given port, one can > **** avoid sending multicast data traffic on a given port if there are no > **** receivers for that traffic reachable over that port, but (b) the cost > **** of gaining this data transmission efficiency is that the PE has to examine > **** the J/Ps and Hellos received over that port, and has to maintain > **** forwarding state derived from that examination. > > This may work well for > small to medium scale deployments. However, if there are a large > number of VPLS instances with a large number of PEs per instances, > then the amount of snooping required at the upstream PEs can > overwhelm the upstream PEs. > > **** This seems to say that "snooping load" of a given PE is proportional to > **** the number of PWs emanating from that PE (one PW per PE per VPLS > **** instance). But doesn't the load also depend on the number of ACs? > > **** Actually, if Snooping (rather than Proxy or Relay) is being used, then > **** Join Suppression is not being used by the CEs, and I think the load on > **** the PEs is then proportional to the total number of CEs over all the > **** VPLS instances of that PE. (The number of Joins to examine will be > **** proportional to the number of CEs, won't it?) > > There are two methods to reduce the burden on the upstream PEs. One > is to use PIM Proxy as described in Section 2.6.6, to reduce the > control messages forwarded by a PE. > > **** If Proxy is used, then the number of J/Ps a PE has to inspect seems to > **** be proportional to the sum of number of local ACs plus the number of > **** PWs. (If Relay is used, I think the maximum number of J/Ps a PE has to > **** inspect is proportional to the number of CEs in the VPLS instance.) > > The other is not to snoop on the > PWs at all, but PEs signal the snooped states to other PEs out of > band via BGP, as described in [VPLS-MCAST-TREES]. > > **** I'm not sure this sentence expresses its point clearly; if a PE doesn't > **** snoop, how does it signal the snooped states? > > In this document, > it is assumed that Snooping is performed on PWs. > > **** Does this sentence really mean "it is assumed that the snooped state is > **** not being signaled via BGP"? If so, is that meant to imply that if > **** [VPLS-MCAST-TREES] is used, this draft is not used? > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 9] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 2.3.2. IPv6 > > In VPLS, PEs forward Ethernet frames received from CEs and as such > are agnostic of the layer-3 protocol used by the CEs. However, as an > IGMP and PIM snooping PE, the PE would have to look deeper into the > IP and IGMP/PIM packets and build snooping state based on that. The > PIM Protocol specifications handle both IPv4 and IPv6. The > specification for PIM Snooping in this draft can be applied to both > IPv4 and IPv6 payloads. > > **** Are you willing to state that, at the time of this writing, there are > **** no IPv6-specific PIM extensions that are incompatible with the > **** procedures specified in this document? > > 2.3.3. PIM-SM (*,*,RP) > > This draft does not address (*,*,RP) states in the VPLS network. > Although [PIM-SM] specifies that routers MUST support (*,*,RP) > states, there are very few implementations that actually support it > in actual deployments, and it is being removed from the PIM protocol > in its ongoing advancement process in IETF. Given that, this draft > omits the specification relating to (*,*,RP) support. > > **** I have no problem with this. However, it might create an operational > **** problem for a SP if one of the SP's customers uses (*,*,RP). Does the > **** SP have to determine whether its customers use this, and if so, disable > **** PIM snooping/proxy. If a customer does use (*,*,RP), will something > **** break? The draft should probably answer these questions. > > > > > 2.4. PIM Snooping vs PIM Proxy > > The document has previously alluded to PIM Snooping/Relay/Proxy. > Details on the PIM Proxy/Relay solution are discussed in > Section 2.6.6. In this section, a brief description and comparison > are given. > > 2.4.1. Differences between PIM Snooping, Relay and Proxy > > Differences between PIM Snooping and Proxy/Relay can be summarized as > the following: > > > +----------------------+---------------------+-----------------------+ > | PIM Snooping | PIM Relay | PIM Proxy | > +======================|=====================|=======================+ > | Join/Prune messages | Join/Prune messages | Join/Prune messages | > | snooped and flooded | snooped; forwarded | consumed. Regenerated | > | everywhere | as is out of certain| ones sent out of | > | | upstream ports | certain upstream ports| > +----------------------+---------------------+-----------------------+ > | No PIM packets | No PIM packets | New Join/Prune | > | generated. | generated | messages generated | > +----------------------+---------------------+-----------------------+ > | CE Join Suppression | CE Join Suppression | CE Join Suppression | > | not allowed | allowed | allowed | > +----------------------+---------------------+-----------------------+ > > **** Re PIM snooping, instead of just saying "flooded everywhere", it might > **** be better to say "flooded according to VPLS flooding procedures". > > **** At this point in the document, I think it is really impossible to know > **** what the difference between Relay and Proxy is. > > Note that the differences apply only to PIM Join/Prune messages. PIM > > > > Dornon, et al. Expires October 31, 2014 [Page 10] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Hello messages are snooped and flooded in all cases. > > Other than the above differences, most of the procedures are common > to PIM Snooping and PIM Proxy/Relay, unless specifically stated > otherwise. > > Pure PIM Snooping PEs simply snoop on PIM packets as they are being > forwarded in the VPLS. As such they truly provide transparent LAN > services since no customer packets are modified or consumed or new > packets introduced in the VPLS. It is also simpler to implement than > PIM Proxy. However for PIM Snooping to work correctly, it is a > requirement that CE routers MUST disable Join suppression in the > VPLS. > > **** This should really be explained. Maybe something like "Otherwise, most > **** of the CE routers with interest in a given multicast data stream will > **** fail to send J/P messages for that stream, and the PEs will not be able > **** to tell which ACs and/or PWs have listeners for that stream". > > Given that a large number of existing CE deployments do not support > disabling of Join suppression and given the operational complexity > for a provider to manage disabling of Join suppression in the VPLS, > it becomes a difficult solution to deploy. > > **** Even worse, if the SP's customer happens to bring up a CE that does do > **** Join Suppression, the customer will experience intermittent problems > **** with multicast. Snooping really only seems applicable when the SP > **** manages all the CEs, and can ensure that Join Suppression is disabled > **** on all of them. > > Another disadvantage of > PIM Snooping is that it does not scale as well as PIM Proxy. If > there are a large number of CEs in a VPLS, then every CE will see > every other CE's Join/Prune messages. > > **** I think the point here (which I agree with) is that disabling Join > **** Suppression has a negative effect on CE scaling. You've already > **** pointed out that Proxy/Relay is better for PE scaling, now it appears > **** that it is also better for CE scaling. And it doesn't require careful > **** management of the CE deployments. Okay, I'm convinced, Snooping sounds > **** like a really bad alternative. > > PIM Proxy/Relay has the advantage that it does not require Join > suppression to be disabled in the VPLS. Multicast as a VPLS service > can be very easily provided without requiring any changes on the CE > routers. PIM Proxy/Relay helps scale VPLS Multicast since Join/Prune > messages are only sent to certain upstream ports instead of flooded, > and in case of full Proxy (vs. Relay) the PEs intelligently generate > only one Join/Prune message for a given flow. > > PIM Proxy however loses the transparency argument since Join/Prunes > could get modified or even consumed at a PE. > > **** I guess this is the other side of the coin. But some readers may not > **** know what "loses the transparency argument" means. I think the issue > **** is that if two CEs are PIM adjacencies of each other across the VPLS > **** backbone, the control packets that one CE sends are not necessarily the > **** control packets that the other one receives. Thus if anything goes > **** wrong there is a VPLS-specific (or PIM-Proxy-specific) component to the > **** troubleshooting procedures. It's not clear that the folks running the > **** enterprise network will be happy if they need to understand the SP's > **** PIM Proxy procedures. > > Also, new packets could > get introduced in the VPLS. However, this loss of transparency is > limited to PIM Join/Prune packets. It is in the interest of > optimizing multicast in the VPLS and helping a VPLS network scale > much better. > > **** I'd emphasize that Proxy/Relay helps scalability for both the SP AND > **** its customers. I.e., it's not one of those things that helps the SP > **** while costing the customers. So if customers insist on complete > **** transparency, they incur some extra cost. > > Data traffic will still be completely transparent. > > > 2.4.2. PIM Control Message Latency > > A PIM Snooping/Proxy/Relay PE snoops on PIM Hello packets while > transparently flooding them in the VPLS. As such there is no latency > introduced by the VPLS in the delivery of PIM Hello packets to remote > CEs in the VPLS. > > A PIM Snooping PE snoops on PIM Join/Prune packets while > transparently flooding them in the VPLS. There is no latency > introduced by the VPLS in the delivery of PIM Join/Prune packets when > PIM Snooping is employed. > > > > Dornon, et al. Expires October 31, 2014 [Page 11] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > A PIM Proxy/Relay PE does not simply flood PIM Join/Prune packets. > This can result in additional latency for a downstream CE to receive > multicast traffic after it has sent a Join. When a downstream CE > prunes a multicast stream, the traffic should stop flowing to the CE > with no additional latency introduced by the VPLS. > > **** I'm not sure I understand this latency issue. With Snooping, the > **** fastpath can flood the J/Ps, but they still need to be processed in > **** slowpath in order to make the requisite changes to the data forwarding > **** states. And isn't the latency till a Join takes effect more important > **** than the latency till a Prune takes effect? Also, there are a lot of > **** implementation-specific assumptions here. > > Performing only proxy of Join/Prune and not Hello messages keeps the > PE behavior very similar to that of a PIM router without introducing > too much additional complexity. It keeps the PIM Proxy solution > fairly simple. Since Join/Prunes are forwarded by a PE along the > slow-path and all other PIM packet types are forwarded along the > fast-path, it is very likely that packets forwarded along the fast- > path will arrive "ahead" of Join/Prune packets at a CE router (note > the stress on the fact that fast-path messages will never arrive > after Join/Prunes). Of particular importance are Hello packets sent > along the fast-path. We can construct a variety of scenarios > resulting in out of order delivery of Hellos and Join/Prune messages. > However, there should be no deviation from normal expected behavior > observed at the CE router receiving these messages out of order. > > **** But there will likely be an increased amount of this "normal expected > **** behavior", which typically would be rather unusual. The question > **** really is whether it is acceptable to increase this amount. I guess if > **** that's a problem, one could also "punt" the Hellos ;-) > > 2.4.3. When to Snoop and When to Proxy > > From the above descriptions, factors that affect the choice of > Snooping/Relay/Proxy include: > > o Whether CEs do Join Suppression or not > > **** If the SPs don't manage the CEs, evaluating this factor may be > **** difficult. > > o Whether Join/Prune latency is critical or not > > **** How does the SP know whether it is critical to provide minimum latency > **** for its customers J/Ps? > > o Whether the scale of PIM protocol message/states in a VPLS > requires the scaling benefit of Proxy > > Of the above factors, Join Suppression is the hard one - pure > Snooping can only be used when Join Suppression is disabled on all > CEs. The latency associated with Relay/Proxy is implementation > dependent and may not be a concern at all with a particular > implementation. The scaling benefit may not be important either, in > that on a real LAN with Explicit Tracking (ET) a PIM router will need > to receive and process all PIM Join/Prune messages as well. > > A PIM router indicates that Join Suppression is disabled if the T-bit > is set in the LAN Prune Delay option of its Hello message. If all > PIM routers on a LAN set the T-bit, Explicit Tracking is possible, > allowing an upstream router to track all the downstream neighbors > that have Join states for any (S,G) or (*,G). That has two benefits: > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 12] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > o No need for PrunePending process - the upstream router may > immediately stop forwarding data when it receives a Prune from the > last downstream neighbor, and immediately prune to its upstream if > that's for the last downstream interface. > > o For management purpose, the upstream router knows exactly which > downstream routers exist for a particular Join State. > > While full Proxy can be used with or without Join Suppression on CEs > and does not interfere with an upstream CE's bypass of PrunePending > process, it does proxy all its downstream CEs as a single one to the > upstream, removing the second benefit mentioned above. > > Therefore, the general rule is that if Join Suppression is enabled on > CEs then Proxy or Relay MUST be used and if Suppression is known to > be disabled on all CEs then either Snooping, Relay, or Proxy MAY be > used while Snooping or Relay SHOULD be used. > > **** I don't think anything above really makes it clear when to choose Proxy > **** and when to choose Relay. The discussion seems more focused on when to > **** use Snooping vs. when not to use Snooping. > > **** Since Relay is said to be a "lightweight" version of "Proxy", the big > **** unanswered question is why would someone ever want to use "Proxy" > **** instead of "Relay"? Yes, I see (I think) that Proxy reduces the > **** overhead through aggregation of the Joins, but this is never really > **** stated straightforwardly. > > **** Also, the paragraph above seems to imply that Proxy SHOULD not be used > **** if Join Suppression is known to be disabled. Is that the intention? > **** Why? > > An implementation MAY choose dynamic determination of which mode to > use, through the tracking of the above mentioned T-bit in all snooped > PIM Hello messages, or MAY simply require static provisioning. > > **** If you use the dynamic method, you may find yourself switching back and > **** forth between Snooping and Proxy/Relay; the condition of "all CEs on > **** the LAN set the T bit" may change if there are some CEs that set the T > **** bit and some that don't. (If a CE that doesn't set the T bit is > **** flapping, this could cause flapping between Snooping and Proxy/Relay.) > **** What are the implications of switching back and forth between Snooping > **** and Proxy/Relay? Will this cause any user-visible disruptions? > > **** Thus dynamic method seems somewhat imprudent, unless Snooping has a > **** really big advantage over Proxy/Relay. > > **** Although the above talks about looking at the T-bit in "all snooped PIM > **** Hello messages", I think the context is "all PIM Hello messages that > **** have been snooped by a given PE", rather than "all PIM Hello messages > **** in the entire VPLS". Is that right? Will there be any issues if some > **** PEs decide that Snooping is okay, but others decide to use Proxy/Relay? > > > 2.5. Discovering PIM Routers > > **** This section applies to Proxy/Relay as well as Snooping, doesn't it? > **** That's probably worth stating explicitly, given that the previous > **** section focuses on the differences between Snooping and Proxy/Relay. > > A PIM Snooping PE MUST snoop on PIM Hellos received on ACs and PWs. > i.e. the PE transparently floods the PIM Hello while snooping on it. > PIM Hellos are used by the snooping PE to discover PIM routers and > their characteristics. > > For each neighbor discovered by a PE, it includes an entry in the PIM > Neighbor Database with the following fields: > > o Layer 2 encapsulation for the Router sending the PIM Hello. > > o IP Address and address family of the Router sending the PIM Hello. > > o Port (AC / PW) on which the PIM Hello was received. > > o Hello TLVs > > The PE should be able to interpret and act on Hello TLVs currently > defined in the PIM RFCs. The TLVs of particular interest in this > document are: > > o Hello-Hold-Time > > o Tracking Support > > > > > Dornon, et al. Expires October 31, 2014 [Page 13] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > o DR Priority > > > Please refer to [PIM-SM] for a list of the Hello TLVs. When a PIM > Hello is received, the PE MUST reset the neighbor-expiry-timer to > Hello-Hold-Time. If a PE does not receive a Hello message from a > router within Hello-Hold-Time, the PE MUST remove that neighbor from > its PIM Neighbor Database. If a PE receives a Hello message from a > router with Hello-Hold-Time value set to zero, the PE MUST remove > that router from the PIM snooping state immediately. > > From the PIM Neighbor Database, a PE MUST be able to use the > procedures defined in [PIM-SM] to identify the PIM Designated Router > in the VPLS instance. It should also be able to determine if > Tracking Support is active in the VPLS instance. > > 2.6. PIM-SM and PIM-SSM > > The key characteristic of PIM-SM and PIM-SSM is explicit join > behavior. > > **** I'm not sure I'd identify any one characteristic as "the key > **** characteristic". This is perhaps the key differentiator between PIM-SM > **** and PIM-DM, but if you were comparing PIM-SM to, say, BGP, you might > **** say that the "key characteristic" is the use of datagrams and > **** timer-based refreshes. Maybe what you really want to say is just > **** "PIMS-SM and PIM-SSM have explicit join behavior". > > In this model, multicast traffic is only forwarded to > locations that specifically request it. The root node of a tree is > the Rendezvous Point (RP) in case of a shared tree (PIM-SM only) or > the first hop router that is directly connected to the multicast > source in the case of a shortest path tree. > > **** Of course, the FHR could be separated from the multicast source by an > **** entire VPLS backbone, rather than being "directly connected" to it. > **** Perhaps it would be more accurate just to say that the root of a PIM > **** source tree is the PIM router that is serving as the "first hop router" > **** for the source. > > All the procedures > described in this section apply to both PIM-SM and PIM-SSM, except > for the fact that there is no (*,G) state in PIM-SSM. > > 2.6.1. Building PIM-SM Snooping States > > **** Again, I'd mention explicitly that this applies to Proxy/Relay as well. > > PIM-SM and PIM-SSM Snooping states are built by snooping on the > PIM-SM Join/Prune messages received on AC/PWs. > > The downstream state machine of a PIM-SM snooping PE very closely > resembles the downstream state machine of PIM-SM routers. > > **** Many PIM implementations have knobs that can be used to modify the > **** protocol behavior in one respect or another. E.g., one deployment may > **** be very strict about not accepting a Join/Prune message from a router > **** that has not already established a PIM adjacency with Hellos; another > **** deployment may want to start the Join/Prune processing without waiting > **** for the adjacency to be established. I wonder if PIM > **** Snooping/Proxy/Relay will break if such knobs area used. Does the > **** document need a "Deployment Considerations" section cataloging the > **** various dependencies. > > The > downstream state consists of: > > Per downstream (Port, *, G): > > o DownstreamJPState: One of { "NoInfo" (NI), "Join" (J), "Prune > Pending" (PP) } > > Per downstream (Port, *, G, N): > > o Prune Pending Timer (PPT(N)) > > o Join Expiry Timer (ET(N)) > > Per downstream (Port, S, G): > > > > > Dornon, et al. Expires October 31, 2014 [Page 14] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > o DownstreamJPState: One of { "NoInfo" (NI), "Join" (J), "Prune > Pending" (PP) } > > Per downstream (Port, S, G, N): > > o Prune Pending Timer (PPT(N)) > > o Join Expiry Timer (ET(N)) > > Per downstream (Port, S, G, rpt): > > o DownstreamJPRptState: One of { "NoInfo" (NI), "Pruned" (P), "Prune > Pending" (PP) } > > Per downstream (Port, S, G, rpt, N): > > o Prune Pending Timer (PPT(N)) > > o Join Expiry Timer (ET(N)) > > Where S is the address of the multicast source, G is the Group > address and N is the upstream neighbor field in the Join/Prune > message. Notice that unlike on PIM-SM routers where PPT and ET are > per (Interface, S, G), PIM Snooping PEs have to maintain PPT and ET > per (Port, S, G, N). The reasons for this are explained in > Section 2.6.2. > > Apart from the above states, we define the following state > summarization macros. > > UpstreamNeighbors(*,G): If there is one or more Join(*,G) received on > any port with upstream neighbor N and ET(N) is active, then N is > added to UpstreamNeighbors(*,G). This set is used to determine if a > Join(*,G) or a Prune(*,G) with upstream neighbor N needs to be sent > upstream. > > UpstreamNeighbors(S,G): If there is one or more Join(S,G) received on > any port with upstream neighbor N and ET(N) is active, then N is > added to UpstreamNeighbors(S,G). This set is used to determine if a > Join(S,G) or a Prune(S,G) with upstream neighbor N needs to be sent > upstream. > > UpstreamPorts(*,G): This is the set of all Rport(N) ports where N is > in the set UpstreamNeighbors(*,G). Multicast Streams forwarded using > a (*,G) match MUST be forwarded to these ports in addition to > downstream ports. So UpstreamPorts(*,G) MUST be added to > OutgoingPortList(*,G). > > > > > Dornon, et al. Expires October 31, 2014 [Page 15] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > UpstreamPorts(S,G): This is the set of all Rport(N) ports where N is > in the set UpstreamNeighbors(S,G). UpstreamPorts(S,G) MUST be added > to OutgoingPortList(S,G). > > InheritedUpstreamPorts(S,G): This is the union of UpstreamPorts(S,G) > and UpstreamPorts(*,G). > > UpstreamPorts(S,G,rpt): If PruneDesired(S,G,rpt) becomes true, then > this set is set to UpstreamPorts(*,G). Otherwise, this set is empty. > UpstreamPorts(*,G) (-) UpstreamPorts(S,G,rpt) MUST be added to > OutgoingPortList(S,G). > > UpstreamPorts(G): This set is the union of all the UpstreamPorts(S,G) > and UpstreamPorts(*,G) for a given G. Proxy (S,G) Join/Prune and > (*,G) Join/Prune messages MUST be sent to a subset of > UpstreamPorts(G) as specified in Section 2.6.6.1. > > PWPorts: This is the set of all PWs. > > OutgoingPortList(*,G): This is the set of all ports to which traffic > needs to be forwarded on a (*,G) match. > > OutgoingPortList(S,G): This is the set of all ports to which traffic > needs to be forwarded on an (S,G) match. > > See Section 2.12 on Data Forwarding Rules for the specification on > how OutgoingPortList is calculated. > > NumETsActive(Port,*,G): Number of (Port,*,G,N) entries that have > Expiry Timer running. This macro keeps track of the number of > Join(*,G)s that are received on this Port with different upstream > neighbors. > > NumETsActive(Port,S,G): Number of (Port,S,G,N) entries that have > Expiry Timer running. This macro keeps track of the number of > Join(S,G)s that are received on this Port with different upstream > neighbors. > > RpfVectorTlvs(*,G): RPF Vectors [RPF-VECTOR] are TLVs that may be > present in received Join(*,G) messages. If present, they must be > copied to RpfVectorTlvs(*,G). > > RpfVectorTlvs(S,G): RPF Vectors [RPF-VECTOR] are TLVs that may be > present in received Join(S,G) messages. If present, they must be > copied to RpfVectorTlvs(S,G). > > Since there are a few differences between the downstream state > machines of PIM-SM Routers and PIM-SM snooping PEs, we specify the > > > > Dornon, et al. Expires October 31, 2014 [Page 16] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > details of the downstream state machine of PIM-SM snooping PEs at the > risk of repeating most of the text documented in [PIM-SM]. > > 2.6.2. Explanation for per (S,G,N) states > > In PIM Routing protocols, states are built per (S,G). On a router, > an (S,G) has only one RPF-Neighbor. However, a PIM Snooping PE does > not have the Layer 3 routing information available to the routers in > order to determine the RPF-Neighbor for a multicast flow. It merely > discovers it by snooping the Join/Prune message. A PE could have > snooped on two or more different Join/Prune messages for the same > (S,G) that could have carried different Upstream-Neighbor fields. > This could happen during transient network conditions or due to dual- > homed sources. A PE cannot make assumptions on which one to pick, > but instead must facilitate the CE routers decide which Upstream > Neighbor gets elected the RPF-Neighbor. > > **** "must facilitate the CE routers decide" --> "must allow the CE routers > **** to decide" (if I understand the intention correctly) > > And for this purpose, the PE > will have to track downstream and upstream Join/Prune per (S,G,N). > > 2.6.3. Receiving (*,G) PIM-SM Join/Prune Messages > > A Join(*,G) or Prune(*,G) is considered "received" if the following > conditions are met: > > o The port on which it arrived is not Rport(N) where N is the > upstream-neighbor N of the Join/Prune(*,G), or, > > o if both RPort(N) and the arrival port are PWs, then there exists > at least one other (*,G,Nx) or (Sx,G,Nx) state with an AC > UpstreamPort. > > **** Note that you suddenly switch below from "Rport" to "RPort". Please > **** search for these and make them consistent. > > For simplicity, the case where both RPort(N) and the arrival port are > PWs is referred to as PW-only Join/Prune in this document. The PW- > only Join/Prune handling is so that the RPort(N) PW can be added to > the related forwarding entries' OutgoingPortList to trigger Assert, > but that is only needed for those states with AC UpstreamPort. Note > that in PW-only case, it is OK for the arrival port and RPort(N) to > be the same. See Appendix Appendix B for examples. > > **** "Appendix Appendix". xml2frc artifact, I guess ;-) This occurs in > **** several places. > > When a router receives a Join(*,G) or a Prune(*,G) with upstream > neighbor N, it must process the message as defined in the state > machine below. Note that the macro computations of the various > macros resulting from this state machine transition is exactly as > specified in the PIM-SM RFC [PIM-SM]. > > We define the following per-port (*,G,N) macro to help with the state > machine below. > > > > > > Dornon, et al. Expires October 31, 2014 [Page 17] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Figure 1 : Downstream per-port (*,G) state machine in tabular form > +---------------++----------------------------------------+ > | || Previous State | > | ++------------+--------------+------------+ > | Event ||NoInfo (NI) | Join (J) | Prune-Pend | > +---------------++------------+--------------+------------+ > | Receive ||-> J state | -> J state | -> J state | > | Join(*,G) || Action | Action | Action | > | || RxJoin(N) | RxJoin(N) | RxJoin(N) | > +---------------++------------+--------------+------------+ > |Receive || - | -> PP state | -> PP state| > |Prune(*,G) and || | Start PPT(N) | | > |NumETsActive<=1|| | | | > +---------------++------------+--------------+------------+ > |Receive || - | -> J state | - | > |Prune(*,G) and || | Start PPT(N) | | > |NumETsActive>1 || | | | > +---------------++------------+--------------+------------+ > |PPT(N) expires || - | -> J state | -> NI state| > | || | Action | Action | > | || | PPTExpiry(N) |PPTExpiry(N)| > +---------------++------------+--------------+------------+ > |ET(N) expires || - | -> NI state | -> NI state| > |and || | Action | Action | > |NumETsActive<=1|| | ETExpiry(N) | ETExpiry(N)| > +---------------++------------+--------------+------------+ > |ET(N) expires || - | -> J state | - | > |and || | Action | | > |NumETsActive>1 || | ETExpiry(N) | | > +---------------++------------+--------------+------------+ > > Action RxJoin(N): > > If ET(N) is not already running, then start ET(N). Otherwise > restart ET(N). If N is not already in UpstreamNeighbors(*,G), > then add N to UpstreamNeighbors(*,G) and trigger a Join(*,G) with > upstream neighbor N to be forwarded upstream. If there are RPF > Vector TLVs in the received (*,G) message and if they are > different from the recorded RpfVectorTlvs(*,G), then copy them > into RpfVectorTlvs(*,G). > > Action PPTExpiry(N): > > Same as Action ETExpiry(N) below, plus Send a Prune-Echo(*,G) with > upstream-neighbor N on the downstream port. > > Action ETExpiry(N): > > > > > Dornon, et al. Expires October 31, 2014 [Page 18] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Disable timers ET(N) and PPT(N). Delete neighbor state > (Port,*,G,N). If there are no other (Port,*,G) states with > NumETsActive(Port,*,G) > 0, transition DownstreamJPState to > NoInfo. If there are no other (Port,*,G,N) state (different ports > but for the same N), remove N from UpstreamPorts(*,G) - this also > serves as a trigger for US FSM (JoinDesired(*,G,N) becomes FALSE). > > 2.6.4. Receiving (S,G) PIM-SM Join/Prune Messages > > A Join(S,G) or Prune(S,G) is considered "received" if the following > conditions are met: > > o The port on which it arrived is not Rport(N) where N is the > upstream-neighbor N of the Join/Prune(S,G), or, > > o if both RPort(N) and the arrival port are PWs, then there exists > at least one other (*,G,Nx) or (S,G,Nx) state with an AC > UpstreamPort. > > For simplicity, the case where both RPort(N) and the arrival port are > PWs is referred to as PW-only Join/Prune in this document. The PW- > only Join/Prune handling is so that the RPort(N) PW can be added to > the related forwarding entries' OutgoingPortList to trigger Assert, > but that is only needed for those states with AC UpstreamPort. See > Appendix Appendix B for examples. > > **** Appendix Appendix > > **** Doesn't this violate split horizon? > > When a router receives a Join(S,G) or a Prune(S,G) with upstream > neighbor N, it must process the message as defined in the state > machine below. Note that the macro computations of the various > macros resulting from this state machine transition is exactly as > specified in the PIM-SM RFC [PIM-SM]. > > > > > > > > > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 19] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Figure 2: Downstream per-port (S,G) state machine in tabular form > +---------------++----------------------------------------+ > | || Previous State | > | ++------------+--------------+------------+ > | Event ||NoInfo (NI) | Join (J) | Prune-Pend | > +---------------++------------+--------------+------------+ > | Receive ||-> J state | -> J state | -> J state | > | Join(S,G) || Action | Action | Action | > | || RxJoin(N) | RxJoin(N) | RxJoin(N) | > +---------------++------------+--------------+------------+ > |Receive || - | -> PP state | -> PP state| > |Prune (S,G) and|| | Start PPT(N) | | > |NumETsActive<=1|| | | | > +---------------++------------+--------------+------------+ > |Receive || - | -> J state | - | > |Prune(S,G) and || | Start PPT(N) | | > NumETsActive>1 || | | | > +---------------++------------+--------------+------------+ > |PPT(N) expires || - | -> J state | -> NI state| > | || | Action | Action | > | || | PPTExpiry(N) |PPTExpiry(N)| > +---------------++------------+--------------+------------+ > |ET(N) expires || - | -> NI state | -> NI state| > |and || | Action | Action | > |NumETsActive<=1|| | ETExpiry(N) | ETExpiry(N)| > +---------------++------------+--------------+------------+ > |ET(N) expires || - | -> J state | - | > |and || | Action | | > |NumETsActive>1 || | ETExpiry(N) | | > +---------------++------------+--------------+------------+ > > Action RxJoin(N): > > If ET(N) is not already running, then start ET(N). Otherwise, > restart ET(N). > > If N is not already in UpstreamNeighbors(S,G), then add N to > UpstreamNeighbors(S,G) and trigger a Join(S,G) with upstream > neighbor N to be forwarded upstream. If there are RPF Vector TLVs > in the received (S,G) message and if they are different from the > recorded RpfVectorTlvs(S,G), then copy them into > RpfVectorTlvs(S,G). > > Action PPTExpiry(N): > > Same as Action ETExpiry(N) below, plus Send a Prune-Echo(S,G) with > upstream-neighbor N on the downstream port. > > > > > Dornon, et al. Expires October 31, 2014 [Page 20] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Action ETExpiry(N): > > Disable timers ET(N) and PPT(N). Delete neighbor state > (Port,S,G,N). If there are no other (Port,S,G) states with > NumETsActive(Port,S,G) > 0, transition DownstreamJPState to > NoInfo. If there are no other (Port,S,G,N) state (different ports > but for the same N), remove N from UpstreamPorts(S,G) - this also > serves as a trigger for US FSM (JoinDesired(S,G,N) becomes FALSE). > > 2.6.5. Receiving (S,G,rpt) Join/Prune Messages > > A Join(S,G,rpt) or Prune(S,G,rpt) is "received" when the port on > which it was received is not also the port on which the upstream- > neighbor N of the Join/Prune(S,G,rpt) was learnt. > > While it is important to ensure that the (S,G) and (*,G) state > machines allow for handling per (S,G,N) states, it is not as > important for (S,G,rpt) states. It suffices to say that the > downstream (S,G,rpt) state machine is the same as what is defined in > section 4.5.4 of the PIM-SM RFC [PIM-SM]. > > 2.6.6. Sending Join/Prune Messages Upstream > > This section applies only to a PIM Proxy/Relay PE and not to a PIM > Snooping PE. > > **** I wonder if "Proxy/Relay" could be put into the section title, so it > **** will show up in the ToC. > > A full PIM Proxy (not Relay) PE MUST implement the Upstream FSM for > which the procedures are similar to what is defined in section 4.5.6 > of [PIM-SM]. > > For the purposes of the Upstream FSM, a Join or Prune message with > upstream neighbor N is "seen" on a PIM Snooping PE if the port on > which the message was received is also Rport(N), and the port is an > AC. The AC requirement is needed because a Join received on the > Rport(N) PW must not suppress this PE's Join on that PW. > > A PIM Relay PE does not implement the Upstream FSM. It simply > forwards received Join/Prune messages out of the same set of upstream > ports as in the PIM Proxy case. > > **** I'm still not following: what is the functional difference between > **** Proxy and Relay? Why would one choose to do Proxy over Relay? What > **** functionality does Proxy provide that Relay does not? > > In order to correctly facilitate assert among the CE routers, such > Join/Prunes need to sent not only towards the upstream neighbor, but > also on certain PWs as described below. > > If RpfVectorTlvs(*,G) is not empty, then it must be encoded in a > Join(*,G) message sent upstream. > > If RpfVectorTlvs(S,G) is not empty, then it must be encoded in a > > > > Dornon, et al. Expires October 31, 2014 [Page 21] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Join(S,G) message sent upstream. > > 2.6.6.1. Where to send Join/Prune messages > > The following rules apply, to both forwarded (in case of PIM Relay), > refresh and triggered (in case of PIM Proxy) (S,G)/(*,G) Join/Prune > messages. > > o The upstream neighbor field in the Join/Prune to be sent is set to > the N in the corresponding Upstream FSM. > > o if Rport(N) is an AC, send the message to Rport(N). > > o Additionally, if OutgoingPortList(X,G,N) contains at lease one AC, > > **** lease --> least > > then the message MUST be sent to at least all the PWs in > UpstreamPorts(G) (for (*,G)) or InheritedUpstreamPorts(S,G) (for > (S,G)). Alternatively, the message MAY be sent to all PWs. > > **** Is there any possibility of violating split horizon if the message is > **** sent to all PWs? > > Sending to a subset of PWs as described above guarantees that if > traffic (of the same flow) from two upstream routers were to reach > this PE, then the two routers will receive from each other, > triggering assert. > > Sending to all PWs guarantees that if two upstream routers both send > traffic for the same flow (even if it is to different sets of > downstream PEs), then they'll receive from each other, triggering > assert. > > **** Do all PEs in a given VPLS instance have to follow the same policy > **** (send to subset of PWs vs. send to all PWs)? > > 2.7. Bidirectional-PIM (PIM-BIDIR) > > PIM-BIDIR is a variation of PIM-SM. The main differences between > PIM-SM and Bidirectional-PIM are as follows: > > o There are no source-based trees, and source-specific multicast is > not supported (i.e., no (S,G) states) in PIM- BIDIR. > > o Multicast traffic can flow up the shared tree in PIM-BIDIR. > > o To avoid forwarding loops, one router on each link is elected as > the Designated Forwarder (DF) for each RP in PIM-BIDIR. > > The main advantage of PIM-BIDIR is that it scales well for many-to- > many applications. However, the lack of source-based trees means > that multicast traffic is forced to remain on the shared tree. > > As described in [PIM-BIDIR], parts of a PIM-BIDIR enabled network may > forward traffic without exchanging Join/Prune messages, for instance > between DF's and the RPL. > > **** First use of term "RPL", hasn't been defined in this draft. > > > > Dornon, et al. Expires October 31, 2014 [Page 22] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > As the described procedures for Pim snooping rely on the presence of > Join/Prune messages, enabling Pim snooping on PIM-BIDIR networks > could break the PIM-BIDIR functionality. Deploying Pim snooping on > PIM-BIDIR enabled networks will require some further study. Some > thoughts are gathered in Appendix A. > > **** Does this mean that the SP cannot use Snooping/Proxy/Relay at all if > **** its customer uses BIDIR? If a customer turns on BIDIR without > **** informing its SP, will the customer cause problems for itself? That > **** doesn't seem too good, especially if the customer thinks it is getting > **** a transparent L2 service. > > 2.8. Interaction with IGMP Snooping > > Whenever IGMP Snooping is enabled in conjunction with PIM Snooping in > the same VPLS instance the PE SHOULD follow these rules: > > o To maintain the list of multicast routers and ports on which they > are attached, the PE SHOULD NOT use the rules as described in > RFC4541 [IGMP-SNOOP] but SHOULD rely on the neighbors discovered > by PIM Snooping . This list SHOULD then be used to apply the > forwarding rule as described in 2.1.1.(1) of RFC4541 [IGMP-SNOOP]. > > o If the PE supports proxy-reporting, an IGMP membership learned > only on a port to which a PIM neighbor is attached but not > elsewhere SHOULD NOT be included in the summarized upstream report > sent to that port. > > 2.9. PIM-DM > > The characteristics of PIM-DM is flood and prune behavior. Shortest > path trees are built as a multicast source starts transmitting. > > **** Darn it, I was hoping to read that PIM-DM is "out of scope" ;-) > > 2.9.1. Building PIM-DM Snooping States > > PIM-DM Snooping states are built by snooping on the PIM-DM Join, > Prune, Graft and State Refresh messages received on AC/PWs and State- > Refresh Messages sent on AC/PWs. By snooping on these PIM-DM > messages, a PE builds the following states per (S,G,N) where S is the > address of the multicast source, G is the Group address and N is the > upstream neighbor to which Prunes/Grafts are sent by downstream CEs: > > Per PIM (S,G,N): > > Port PIM (S,G,N) Prune State: > > > > * DownstreamPState(S,G,N,Port): One of {"NoInfo" (NI), "Pruned" > (P), "PrunePending" (PP)} > > * Prune Pending Timer (PPT) > > > > > > Dornon, et al. Expires October 31, 2014 [Page 23] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > * Prune Timer (PT) > > * Upstream Port (valid if the PIM(S,G,N) Prune State is > "Pruned"). > > 2.9.2. PIM-DM Downstream Per-Port PIM(S,G,N) State Machine > > The downstream per-port PIM(S,G,N) state machine is as defined in > section 4.4.2 of [PIM-DM] with a few changes relevant to PIM > Snooping. When reading section 4.4.2 of [PIM-DM] for the purposes of > PIM-Snooping please be aware that the downstream states are built per > (S, G, N, Downstream-Port} in PIM-Snooping and not per {Downstream- > Interface, S, G} as in a PIM-DM router. As noted in the previous > Section 2.9.1, the states (DownstreamPState) and timers (PPT and PT) > are per (S,G,N,P). > > 2.9.3. Triggering ASSERT election in PIM-DM > > Since PIM-DM is a flood-and-prune protocol, traffic is flooded to all > routers unless explicitly pruned. Since PIM-DM routers do not prune > on non-RPF interfaces, PEs should typically not receive Prunes on > Rport(RPF-neighbor). So the asserting routers should typically be in > pim_oiflist(S,G). In most cases, assert election should occur > naturally without any special handling since data traffic will be > forwarded to the asserting routers. > > However, there are some scenarios where a prune might be received on > a port which is also an upstream port (UP). If we prune the port > from pim_oiflist(S,G), then it would not be possible for the > asserting routers to determine if traffic arrived on their downstream > port. This can be fixed by adding pim_iifs(S,G) to pim_oiflist(S,G) > so that data traffic flows to the UP ports. > > 2.10. PIM Proxy > > As noted earlier, PIM Snooping will work correctly only if Join > Suppression is disabled in the VPLS. If Join Suppression is enabled > in the VPLS, then PEs MUST do PIM Proxy/Relay for VPLS Multicast to > work correctly. This section applies specifically to the full Proxy > case and not Relay. > > 2.10.1. Upstream PIM Proxy behavior > > A PIM Proxy PE consumes Join/Prune messages and regenerates PIM Join/ > Prune messages to be sent upstream by implementing Upstream FSM as > specified in the PIM RFC. This is the only difference from PIM > Relay. > > **** Is the idea that Proxy aggregates all downstream Joins for (x,G), while > **** Relay does not? That's an interesting advantage over Relay (and > **** Snooping) that is never quite mentioned explicitly. > > > > Dornon, et al. Expires October 31, 2014 [Page 24] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > The source IP address in PIM packets sent upstream SHOULD be the > address of a PIM downstream neighbor in the corresponding join/prune > state. > > **** How do you choose which one, and when do you need to change it? > > The address picked MUST NOT be the upstream neighbor field to > be encoded in the packet. The layer 2 encapsulation for the selected > source IP address MUST be the encapsulation recorded in the PIM > Neighbor database for that IP address. > > > > 2.11. Directly Connected Multicast Source > > If there is a source in the CE network that connects directly into > the VPLS instance, then multicast traffic from that source MUST be > sent to all PIM routers on the VPLS instance apart from the IGMP > receivers in the VPLS. > > **** "apart from"? Why isn't it "in addition to"? > > **** Could you include an explanation of why the traffic from that source > **** must be sent to all the PIM routers? > > If there is already (S,G) or (*,G) snooping > state that is formed on any PE, this will not happen per the current > forwarding rules and guidelines. So, in order to determine if > traffic needs to be flooded to all routers, a PE must be able to > determine if the traffic came from a host on that LAN. There are > three ways to address this problem: > > o The PE would have to do ARP snooping to determine if a source is > directly connected. > > **** Are there any issues if a router is doing proxy ARP for a host behind > **** it? > > o Another option is to have configuration on all PEs to say there > are CE sources that are directly connected to the VPLS instance > and disallow snooping for the groups for which the source is going > to send traffic. This way traffic from that source to those > groups will always be flooded within the provider network. > > **** This would require customer/SP coordination on a per-group basis. > **** While such coordination is sometimes necessary, I think it would be > **** difficult if the customer is not going to get any added functionality > **** from it. > > o A third option is to require that sources of CE multicast traffic > must be behind a router. > > This document recommends the third option - sources traffic must be > behind a router. > > **** I agree. But this is an important applicability restriction, and it's > **** buried quite deep in the document. > > 2.12. Data Forwarding Rules > > First we define the rules that are common to PIM-SM and PIM-DM PEs. > Forwarding rules for each protocol type is specified in the sub- > sections. > > If there is no matching forwarding state, then the PE SHOULD discard > the packet, i.e., the UserDefinedPortList below SHOULD be empty. > > The following general rules MUST be followed when forwarding > multicast traffic in a VPLS: > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 25] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > o Traffic arriving on a port MUST NOT be forwarded back onto the > same port. > > o Due to VPLS Split-Horizon rules, traffic ingressing on a PW MUST > NOT be forwarded to any other PW. > > > 2.12.1. PIM-SM Data Forwarding Rules > > Per the rules in [PIM-SM] and per the additional rules specified in > this document, > > OutgoingPortList(*,G) = immediate_olist(*,G) (+) > UpstreamPorts(*,G) (+) > Rport(PimDR) > > OutgoingPortList(S,G) = inherited_olist(S,G) (+) > UpstreamPorts(S,G) (+) > (UpstreamPorts(*,G) (-) > UpstreamPorts(S,G,rpt)) (+) > Rport(PimDR) > > [PIM-SM] specifies how immediate_olist(*,G) and inherited_olist(S,G) > are built. PimDR is the IP address of the PIM DR in the VPLS. > > The PIM-SM Snooping forwarding rules are defined below in pseudocode: > > > > > > > > > > > > > > > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 26] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > BEGIN > iif is the incoming port of the multicast packet. > S is the Source IP Address of the multicast packet. > G is the Destination IP Address of the multicast packet. > > If there is (S,G) state on the PE > Then > OutgoingPortList = OutgoingPortList(S,G) > Else if there is (*,G) state on the PE > Then > OutgoingPortList = OutgoingPortList(*,G) > Else > OutgoingPortList = UserDefinedPortList > Endif > > If iif is an AC > Then > OutgoingPortList = OutgoingPortList (-) iif > Else > ## iif is a PW > OutgoingPortList = OutgoingPortList (-) PWPorts > Endif > > Forward the packet to OutgoingPortList. > END > > First if there is (S,G) state on the PE, then the set of outgoing > ports is OutgoingPortList(S,G). > > Otherwise if there is (*,G) state on the PE, the set of outgoing > ports is OutgoingPortList(*,G). > > The packet is forwarded to the selected set of outgoing ports while > observing the general rules above in Section 2.12 > > 2.12.2. PIM-DM Data Forwarding Rules > > The PIM-DM Snooping data forwarding rules are defined below in > pseudocode: > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 27] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > BEGIN > iif is the incoming port of the multicast packet. > S is the Source IP Address of the multicast packet. > G is the Destination IP Address of the multicast packet. > > If there is (S,G) state on the PE > Then > OutgoingPortList = olist(S,G) > Else > OutgoingPortList = UserDefinedPortList > Endif > > If iif is an AC > Then > OutgoingPortList = OutgoingPortList (-) iif > Else > ## iif is a PW > OutgoingPortList = OutgoingPortList (-) PWPorts > Endif > > Forward the packet to OutgoingPortList. > END > > If there is forwarding state for (S,G), then forward the packet to > olist(S,G) while observing the general rules above in section > Section 2.12 > > [PIM-DM] specifies how olist(S,G) is constructed. > > > 3. IANA Considerations > > This document makes no request of IANA. > > Note to RFC Editor: this section may be removed on publication as an > RFC. > > > 4. Security Considerations > > Security considerations provided in VPLS solution documents (i.e., > [VPLS-LDP] and [VPLS-BGP]) apply to this document as well. > > > 5. Contributors > > Yetik Serbest, Suresh Boddapati co-authored earlier versions. > > > > > Dornon, et al. Expires October 31, 2014 [Page 28] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > Karl (Xiangrong) Cai and Princy Elizabeth made significant > contributions to bring the specification to its current state, > especially in the area of Join forwarding rules. > > > 6. Acknowledgements > > Many members of the L2VPN and PIM working groups have contributed to > and provided valuable comments and feedback to this draft, including > Vach Kompella, Shane Amante, Sunil Khandekar, Rob Nath, Marc Lassere, > Yuji Kamite, Yiqun Cai, Ali Sajassi, Jozef Raets, Himanshu Shah > (Ciena), Himanshu Shah (Alcatel-Lucent). > > > 7. References > > 7.1. Normative References > > [PIM-BIDIR] > Handley, M., Kouvelas, I., Speakman, T., and L. Vicisano, > "Bidirectional Protocol Independent Multicast (BIDIR- > PIM)", RFC 5015, 2007. > > [PIM-DM] Adams, A., Nicholas, J., and W. Siadak, "Protocol > Independent Multicast Version 2 - Dense Mode > Specification", RFC 3973, 2005. > > [PIM-SM] Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas, > "Protocol Independent Multicast- Sparse Mode (PIM-SM): > Protocol Specification (Revised)", RFC 4601, 2006. > > [PIM-SSM] Holbrook, H. and B. Cain, "Source-Specific Multicast for > IP", RFC 4607, 2006. > > [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate > Requirement Levels", BCP 14, RFC 2119, 1997. > > [RPF-VECTOR] > Wijnands, I., Boers, A., and E. Rosen, "The Reverse Path > Forwarding (RPF) Vector TLV", RFC 5496, 2009. > > 7.2. Informative References > > [IGMP-SNOOP] > Christensen, M., Kimball, K., and F. Solensky, > "Considerations for IGMP and MLD Snooping PEs", RFC 4541, > 2006. > > > > > Dornon, et al. Expires October 31, 2014 [Page 29] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > [VPLS-BGP] > Kompella, K. and Y. Rekhter, "Virtual Private LAN Service > using BGP for Auto-Discovery and Signaling", RFC 4761, > 2007. > > [VPLS-LDP] > Lasserre, M. and V. Kompella, "Virtual Private LAN > Services using LDP Signaling", RFC 4762, 2007. > > [VPLS-MCAST-REQ] > Kamite, Y., Wada, Y., Serbest, Y., Morin, T., and L. Fang, > "Requirements for Multicast Support in Virtual Private LAN > Services", RFC 5501, 2009. > > [VPLS-MCAST-TREES] > Aggarwal, R., Kamite, Y., Fang, L., and Y. Rekhter, > "Multicast in VPLS", draft-ietf-l2vpn-vpls-mcast-11, Work > in Progress. > > > Appendix A. PIM-BIDIR Thoughts > > **** I don't understand the purpose of this Appendix. If the procedures > **** below work, why aren't they in the body of the draft? If they don't > **** work, why are they described here. > > This section describes some guidelines that may be used to preserve > PIM-BIDIR functionality in combination with Pim Snooping. > > In order to preserve PIM-BIDIR Pim snooping routers need to set up > forwarding states so that : > > o on the RPL all traffic is forwarded to all Rport(N) > > **** What about received on PW, sent on PW? > > o on any other interface traffic is always forwarded to the DF > > The information needed to setup these states may be obtained by : > > o determining the mapping between group(range) and RP > > o snooping and storing DF election information > > o determining where the RPL is, this could be achieved by static > configuration, or by combining the information mentioned in > previous bullets. > > A.1. PIM-BIDIR Data Forwarding Rules > > The PIM-BIDIR Snooping forwarding rules are defined below in > pseudocode: > > > > > > Dornon, et al. Expires October 31, 2014 [Page 30] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > BEGIN > iif is the incoming port of the multicast packet. > G is the Destination IP Address of the multicast packet. > > If there is forwarding state for G > Then > OutgoingPortList = olist(G) > Else > OutgoingPortList = UserDefinedPortList > Endif > > If iif is an AC > Then > OutgoingPortList = OutgoingPortList (-) iif > Else > ## iif is a PW > OutgoingPortList = OutgoingPortList (-) PWPorts > Endif > > Forward the packet to OutgoingPortList. > END > > If there is forwarding state for G, then forward the packet to > olist(G) while observing the general rules above in Section 2.12 > > [PIM-BIDIR] specifies how olist(G) is constructed. > > > Appendix B. Example Network Scenario > > Let us consider the scenario in Figure 3. > > > > > > > > > > > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 31] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > An Example Network for Triggering Assert > > +------+ AC3 +------+ > | PE2 |-----| CE3 | > /| | +------+ > / +------+ | > / | | > / | | > /PW12 | | > / | /---\ > / |PW23 | S | > / | \---/ > / | | > / | | > / | | > +------+ / +------+ | > +------+ | PE1 |/ PW13 | PE3 | +------+ > | CE1 |-----| |-------------| |-----| CE4 | > +------+ AC1 +------+ +------+ AC4 +------+ > | > |AC2 > +------+ > | CE2 | > +------+ > > In the examples below, JT(Port,S,G,N) is the downstream Join Expiry > Timer on the specified Port for the (S,G) with upstream neighbor N. > > B.1. Pim Snooping Example > > In the network depicted in Figure 3, S is the source of a multicast > stream (S,G). CE1 and CE2 both have two ECMP routes to reach the > source. > 1. CE1 Sends a Join(S,G) with Upstream Neighbor(S,G) = CE3. > 2. PE1 snoops on the Join(S,G) and builds forwarding states since it > is received on an AC. It also floods the Join(S,G) in the VPLS. PE2 > snoops on the Join(S,G) and builds forwarding state since the Join(S,G) > is targeting a neighbor residing on an AC. PE3 does not create > forwarding state for (S,G) because this is a PW-only join and there is > neither existing (*,G) state with an AC in UpstreamPorts(*,G) nor an > existing (S,G) state with an AC in UpstreamPorts(S,G). Both PE2 and PE3 > will also flood the Join(S,G) in the VPLS > > The resulting states at the PEs is as follows: > > At PE1: > JT(AC1,S,G,CE3) = JP_HoldTime > UpstreamNeighbors(S,G) = { CE3 } > > > > Dornon, et al. Expires October 31, 2014 [Page 32] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > UpstreamPorts(S,G) = { PW12 } > OutgoingPortList(S,G) = { AC1, PW12 } > > At PE2: > JT(PW12,S,G,CE3) = JP_HoldTime > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { AC3 } > OutgoingPortList(S,G) = { PW12, AC3 } > > At PE3: > No (S,G) state > > 3. The multicast stream (S,G) flows along CE3 -> PE2 -> PE1 -> CE1 > 4. Now CE2 sends a Join(S,G) with Upstream Neighbor(S,G) = CE4. > 5. All PEs snoop on the Join(S,G), build forwarding state and flood the > Join(S,G) in the VPLS. Note that for PE2 even though this is a PW-only > join, forwarding state is built on this Join(S,G) since PE2 has existing > (S,G) state with an AC in UpstreamPorts(S,G) > > The resulting states at the PEs: > > At PE1: > JT(AC1,S,G,CE3) = active > JT(AC2,S,G,CE4) = JP_HoldTime > UpstreamNeighbors(S,G) = { CE3, CE4 } > UpstreamPorts(S,G) = { PW12, PW13 } > OutgoingPortList(S,G) = { AC1, PW12, AC2, PW13 } > > At PE2: > JT(PW12,S,G,CE4) = JP_HoldTime > JT(PW12,S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3, CE4 } > UpstreamPorts(S,G) = { AC3, PW23 } > OutgoingPortList(S,G) = { PW12, AC3, PW23 } > > At PE3: > JT(PW13,S,G,CE4) = JP_HoldTime > UpstreamNeighbors(S,G) = { CE4 } > UpstreamPorts(S,G) = { AC4 } > OutgoingPortList(S,G) = { PW13, AC4 } > > 6. The multicast stream (S,G) flows into the VPLS from the two CEs > CE3 and CE4. PE2 forwards the stream received from CE3 to PW23 > and PE3 forwards the stream to AC4. This facilitates the CE > routers to trigger assert election. Let us say CE3 becomes the > assert winner. > 7. CE3 sends an Assert message to the VPLS. The PEs flood the > Assert message without examining it. > > > > Dornon, et al. Expires October 31, 2014 [Page 33] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 8. CE4 stops sending the multicast stream to the VPLS. > 9. CE2 notices an RPF change due to Assert and sends a Prune(S,G) > with Upstream Neighbor = CE4. CE2 also sends a Join(S,G) with > Upstream Neighbor = CE3. > 10. All the PEs start a prune-pend timer on the ports on which > they received the Prune(S,G). When the prune-pend timer expires, > all PEs will remove the downstream (S,G,CE4) states. > > Resulting states at the PEs: > > At PE1: > JT(AC1,S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW12 } > OutgoingPortList(S,G) = { AC1, AC2, PW12 } > > At PE2: > JT(PW12,S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { AC3 } > OutgoingPortList(S,G) = { PW12, AC3 } > > At PE3: > JT(PW13,S,G,CE3) = JP_HoldTime > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW23 } > OutgoingPortList(S,G) = { PW13, PW23 } > > Note that at this point at PE3, since there is no AC in > OutgoingPortList(S,G) and no (*,G) or (S,G) state with an AC in > UpstreamPorts(*,G) or UpstreamPorts(S,G) respectively, the existing > (S,G) state at PE3 can also be removed. So finally: > > At PE3: > No (S,G) state > > Note that at the end of the assert election, there should be no > duplicate traffic forwarded downstream and traffic should flow only > on the desired path. Also note that there are no unnecessary (S,G) > states on PE3 after the assert election. > > B.2. PIM Proxy Example with (S,G) / (*,G) interaction > > In the same network, let us assume CE4 is the Upstream Neighbor > towards the RP for G. > > JPST(S,G,N) is the JP sending timer for the (S,G) with upstream > neighbor N. > > > > Dornon, et al. Expires October 31, 2014 [Page 34] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 1. CE1 Sends a Join(S,G) with Upstream Neighbor(S,G) = CE3. > > 2. PE1 consumes the Join(S,G) and builds forwarding state since the > Join(S,G) is received on an AC. > > PE2 consumes the Join(S,G) and builds forwarding state since the > Join(S,G) is targeting a neighbor residing on an AC. > > PE3 consumes the Join(S,G) but does not create forwarding state for > (S,G) since this is a PW-only join and there is neither existing (*,G) > state with an AC in UpstreamPorts(*,G) nor an existing (S,G) state with > an AC in UpstreamPorts(S,G) > > The resulting states at the PEs is as follows: > > PE1 states: > JT(AC1,S,G,CE3) = JP_HoldTime > JPST(S,G,CE3) = t_periodic > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW12 } > OutgoingPortList(S,G) = { AC1, PW12 } > > PE2 states: > JT(PW12,S,G,CE3) = JP_HoldTime > JPST(S,G,CE3) = t_periodic > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { AC3 } > OutgoingPortList(S,G) = { PW12, AC3 } > > PE3 states: > No (S,G) state > > Joins are triggered as follows: > PE1 triggers a Join(S,G) targeting CE3. Since the Join(S,G) was received > on an AC and is targeting a neighbor that is residing across a PW, the > triggered Join(S,G) is sent on all PWs. > > PE2 triggers a Join(S,G) targeting CE3. Since the Joins(S,G) is > targeting a neighbor residing on an AC, it only sends the join on AC3. > > PE3 ignores the Join(S,G) since this is a PW-only join and there is > neither existing (*,G) state with an AC in UpstreamPorts(*,G) nor an > existing (S,G) state with an AC in UpstreamPorts(S,G) > > 3. The multicast stream (S,G) flows along CE3 -> PE2 -> PE1 -> CE1. > > 4. Now let us say CE2 sends a Join(*,G) with UpstreamNeighbor(*,G) = CE4. > > > > > Dornon, et al. Expires October 31, 2014 [Page 35] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > 5. PE1 consumes the Join(*,G) and builds forwarding state since the > Join(*,G) is received on an AC. > > PE2 consumes the Join(*,G) and though this is a PW-only join, forwarding > state is build on this Join(*,G) since PE2 has existing (S,G) state with > an AC in UpstreamPorts(S,G). However, since this is a PW-only join, PE2 > only adds the PW towards PE3 (PW23) into UpstreamPorts(*,G) and hence > into OutgoingPortList(*,G). It does not add the PW towards PE1 (PW12) > into OutgoingPortsList(*,G) > > PE3 consumes the Join(*,G) and builds forwarding state since the > Join(*,G) is targeting a neighbor residing on an AC. > > The resulting states at the PEs is as follows: > > PE1 states: > JT(AC1,*,G,CE4) = JP_HoldTime > JPST(*,G,CE4) = t_periodic > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { PW13 } > OutgoingPortList(*,G) = { AC2, PW13 } > > JT(AC1,S,G,CE3) = active > JPST(S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW12 } > OutgoingPortList(S,G) = { AC1, PW12, PW13 } > > PE2 states: > JT(PW12,*,G,CE4) = JP_HoldTime > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(G) = { PW23 } > OutgoingPortList(*,G) = { PW23 } > > JT(PW12,S,G,CE3) = active > JPST(S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { AC3 } > OutgoingPortList(S,G) = { PW12, AC3, PW23 } > > PE3 states: > JT(PW13,*,G,CE4) = JP_HoldTime > JPST(*,G,CE4) = t_periodic > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { AC4 } > OutgoingPortList(*,G) = { PW13, AC4 } > > Joins are triggered as follows: > > > > Dornon, et al. Expires October 31, 2014 [Page 36] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > PE1 triggers a Join(*,G) targeting CE4. Since the Join(*,G) was received > on an AC and is targeting a neighbor that is residing across a PW, the > triggered Join(S,G) is sent on all PWs. > > PE2 does not trigger a Join(*,G) based on this join since this is a > PW-only join. > > PE3 triggers a Join(*,G) targeting CE4. Since the Join(*,G) is targeting > a neighbor residing on an AC, it only sends the join on AC4. > > 6. In case traffic is not flowing yet (i.e. step 3 is delayed to come after > step 6) and in the interim JPST(S,G,CE3) on PE1 expires, causing it to > send a refresh Join(S,G) targeting CE3, since the refresh Join(S,G) is > targeting a neighbor that is residing across a PW, the refresh Join(S,G) > is sent on all PWs. > > 7. Note that PE1 refreshes its JT timer based on reception of refresh joins > from CE1 and CE2 > > PE2 consumes the Join(S,G) and refreshes the JT(PW12,S,G,CE3) timer. > > PE3 consumes the Join(S,G). It also builds forwarding state on this > Join(S,G), even though this is a PW-only join, since now PE2 has existing > (*,G) state with an AC in UpstreamPorts(*,G). However, since this is a > PW-only join, PE3 only adds the PW towards PE2 (PW23) into > UpstreamPorts(S,G) and hence into OutgoingPortList(S,G). It does not add > the PW towards PE1 (PW13) into OutgoingPortList(S,G). > > PE3 States: > JT(PW13,*,G,CE4) = active > JPST(S,G,CE4) = active > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { AC4 } > OutgoingPortList(*,G) = { PW13, AC4 } > > JT(PW13,S,G,CE3) = JP_HoldTime > UpstreamNeighbors(*,G) = { CE3 } > UpstreamPorts(*,G) = { PW23 } > OutgoingPortList(*,G) = { PW13, AC4, PW23 } > > Joins are triggered as follows: > PE2 already has (S,G) state, so it does not trigger a Join(S,G) > based on reception of this refresh join. > > PE3 does not trigger a Join(S,G) based on this join since this is a > PW-only join. > > 8. The multicast stream (S,G) flows into the VPLS from the two > > > > Dornon, et al. Expires October 31, 2014 [Page 37] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > CEs, CE3 and CE4. PE2 forwards the stream received from CE3 to > PW12 and PW23. At the same time PE3 forwards the stream > received from CE4 to PW13 and PW23. > > The stream received over PW12 and PW13 is forwarded by PE1 to > AC1 and AC2. > > The stream received by PE3 over PW23 is forwarded to AC4. The > stream received by PE2 over PW23 is forwarded to AC3. Either of > these facilitates the CE routers to trigger assert election. > > 9. CE3 and/or CE4 send(s) Assert message(s) to the VPLS. The PEs > flood the Assert message(s) without examining it. > > 10. CE3 becomes the (S,G) assert winner and CE4 stops sending the > multicast stream to the VPLS. > > 11. CE2 notices an RPF change due to Assert and sends a > Prune(S,G,rpt) with Upstream Neighbor = CE4. > > 12. PE1 consumes the Prune(S,G,rpt) and since PruneDesired(S,G,Rpt,CE4) is > TRUE, it triggers a Prune(S,G,rpt) to CE4. Since the prune is > targeting a neighbor across a PW, it is sent on all PWs. > > PE2 consumes the Prune(S,G,rpt) and does not trigger any prune > based on this Prune(S,G,rpt) since this was a PW-only prune. > > PE3 consumes the Prune(S,G,rpt) and since PruneDesired(S,G,rpt,CE4) > is TRUE it sends the Prune(S,G,rpt) on AC4. > > PE1 states: > JT(AC2,*,G,CE4) = active > JPST(*,G,CE4) = active > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { PW13 } > OutgoingPortList(*,G) = { AC2, PW13 } > > JT(AC2,S,G,CE4) = JP_Holdtime with FLAG sgrpt prune > JPST(S,G,CE4) = none, since this is sent along > with the Join(*,G) to CE4 based > on JPST(*,G,CE4) expiry > UpstreamPorts(S,G,rpt) = { PW13 } > UpstreamNeighbors(S,G,rpt) = { CE4 } > > JT(AC1,S,G,CE3) = active > JPST(S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW12 } > > > > Dornon, et al. Expires October 31, 2014 [Page 38] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > OutgoingPortList(S,G) = { AC1, PW12, AC2 } > > At PE2: > JT(PW12,*,G,CE4) = active > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { PW23 } > OutgoingPortList(*,G) = { PW23 } > > JT(PW12,S,G,CE4) = JP_Holdtime with FLAG sgrpt prune > JPST(S,G,CE4) = none, since this was created > off a PW-only prune > UpstreamPorts(S,G,rpt) = { PW23 } > UpstreamNeighbors(S,G,rpt) = { CE4 } > > JT(PW12,S,G,CE3) = active > JPST(S,G,CE3) = active > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { AC3 } > OutgoingPortList(*,G) = { PW12, AC3 } > > At PE3: > JT(PW13,*,G,CE4) = active > JPST(*,G,CE4) = active > UpstreamNeighbors(*,G) = { CE4 } > UpstreamPorts(*,G) = { AC4 } > OutgoingPortList(*,G) = { PW13, AC4 } > > JT(PW13,S,G,CE4) = JP_Holdtime with S,G,rpt prune flag > JPST(S,G,CE4) = none, since this is sent along > with the Join(*,G) to CE4 based > on JPST(*,G,CE4) expiry > UpstreamNeighbors(S,G,rpt) = { CE4 } > UpstreamPorts(S,G,rpt) = { AC4 } > > JT(PW13,S,G,CE3) = active > JPST(S,G,CE3) = none, since this state is > created by PW-only join > UpstreamNeighbors(S,G) = { CE3 } > UpstreamPorts(S,G) = { PW23 } > OutgoingPortList(S,G) = { PW23 } > > > Even in this example, at the end of the (S,G) / (*,G) assert > election, there should be no duplicate traffic forwarded downstream > and traffic should flow only to the desired CEs. > > However, the reason we don't have duplicate traffic is because one of > the CEs stops sending traffic due to assert, not because we don't > > > > Dornon, et al. Expires October 31, 2014 [Page 39] > > Internet-Draft l2vpn-pim-snooping April 2014 > > > have any forwarding state in the PEs to do this forwarding. > > > Authors' Addresses > > Olivier Dornon > Alcatel-Lucent > 50 Copernicuslaan > Antwerp, B2018 > > Email: olivier.dornon@alcatel-lucent.com > > > Jayant Kotalwar > Alcatel-Lucent > 701 East Middlefield Rd. > Mountain View, CA 94043 > > Email: jayant.kotalwar@alcatel-lucent.com > > > Venu Hemige > > Email: vhemige@gmail.com > > > Ray Qiu > Juniper Networks, Inc. > 1194 North Mathilda Avenue > Sunnyvale, CA 94089 > > > Email: rqiu@juniper.net > > > Jeffrey Zhang > Juniper Networks, Inc. > 10 Technology Park Drive > Westford, MA 01886 > > Email: zzhang@juniper.net > > > > > > > > > > > Dornon, et al. Expires October 31, 2014 [Page 40] > >
- Comments on draft-ietf-l2vpn-pim-snooping-06 erosen
- Re: Comments on draft-ietf-l2vpn-pim-snooping-06 Olivier Dornon