[Bier] AD Review of draft-ietf-bier-pim-signaling-12

Alvaro Retana <aretana.ietf@gmail.com> Thu, 05 August 2021 22:12 UTC

Return-Path: <aretana.ietf@gmail.com>
X-Original-To: bier@ietfa.amsl.com
Delivered-To: bier@ietfa.amsl.com
Received: from localhost (localhost []) by ietfa.amsl.com (Postfix) with ESMTP id 48EC13A0CE8; Thu, 5 Aug 2021 15:12:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id OAnUdSJbkYc7; Thu, 5 Aug 2021 15:12:46 -0700 (PDT)
Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id E09F23A0CE9; Thu, 5 Aug 2021 15:12:45 -0700 (PDT)
Received: by mail-ej1-x633.google.com with SMTP id x11so11987931ejj.8; Thu, 05 Aug 2021 15:12:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:mime-version:date:message-id:subject:to:cc :content-transfer-encoding; bh=UXHkrTYtgy8IMGMC3RVNM1cBNppj+1BYS1MnJvILlBs=; b=ZyHiJJHCZ90pNEfSMPdYj8EWcUAwQzRXoXW1G3gF75vVyn04NYivPt028rWmwiGb6x An00mI5V043X8kEbF5MPi31lK7CTVf2ebWXLZz6YmPVVjaY8DvFZiTNmy+lfE53dPiAL BL3284TGGoisxojLLMlGALNw23+a41GAuAf+YZdh63TjTvzGxX3lAbB8/M8RY4PmJwZJ IfxuIrJZZAFgArPQRitaC8FpAc7Z4o4iDUc7w/kB5h8ByaULEzP24MRf+D7QCZOKyrjd mz2yMObH+Ft+sbghqK0AFwFYgSgV4WF8oiJ+zmeFOrfESVRie+Sn14EpMoWP/MXSpMa5 shyQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:mime-version:date:message-id:subject:to:cc :content-transfer-encoding; bh=UXHkrTYtgy8IMGMC3RVNM1cBNppj+1BYS1MnJvILlBs=; b=o+8Qf7wJF/wcm9/MgtrXS5jjBDpKqzQhRVic4zLJoXCgIjX9ayBAxxdcEPQRvEmvKY UvbL9eCKrtXe4WfHVP0BVHOL9YfeuVu6ZAMFP5Ps7UVvn3Q24N5d5H41r8/C2NpS1B5X LZFrAZJUz5A+cxz1H3K5cCbcHwjoOF6cY1AiXa9Tlz3MFfCYpJIKP9lExa9EmE0BCqTO tyQPuIo0aCMZmlkEE0kKvzuj4t0l1MtoSQ8mhvvhpRghU7gBDr8QU+japMzIewafCO+s laCLIL+/+MwdHLdtEnLe84o8F+8n2UBHMr9cRXoxXorbXna0rBU9wLz/khoC6a2au3JL mZpA==
X-Gm-Message-State: AOAM530inKN6ZDx2r+RlTJbw8Xj9Hd3sjRwzEZnpwIvd51Z0n//B1VqH nMkyvIJ2agWpSO/fBY6mN/ckp7CXeeVFG6eHDKpDVsV7Fhw=
X-Google-Smtp-Source: ABdhPJyUqIQGbvWszWqLK3ER14dcHgF5yIfuQaxV2b70NVpBHYTEsRofwQShSSY5xrUaSJMFp8ERjXhaYirlyRzQY8I=
X-Received: by 2002:a17:906:c342:: with SMTP id ci2mr7040981ejb.122.1628201561803; Thu, 05 Aug 2021 15:12:41 -0700 (PDT)
Received: from 1058052472880 named unknown by gmailapi.google.com with HTTPREST; Thu, 5 Aug 2021 22:12:40 +0000
From: Alvaro Retana <aretana.ietf@gmail.com>
MIME-Version: 1.0
Date: Thu, 5 Aug 2021 22:12:40 +0000
Message-ID: <CAMMESszXovXDs_-psvfktR0yEv_La+g=hHs0cj8_UFdp32btbQ@mail.gmail.com>
To: draft-ietf-bier-pim-signaling@ietf.org, "Bidgoli, Hooman (Nokia - CA/Ottawa)" <hooman.bidgoli@nokia.com>
Cc: Nabeel Cocker <nabeel.cocker@gmail.com>, bier-chairs@ietf.org, BIER WG <bier@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/bier/P1eMkoEWk8981SNeu5J3FeGpwUw>
Subject: [Bier] AD Review of draft-ietf-bier-pim-signaling-12
X-BeenThere: bier@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "\"Bit Indexed Explicit Replication discussion list\"" <bier.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/bier>, <mailto:bier-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/bier/>
List-Post: <mailto:bier@ietf.org>
List-Help: <mailto:bier-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/bier>, <mailto:bier-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 05 Aug 2021 22:12:51 -0000

Dear authors:

Thanks for the document update.  Instead of replying to the
-11-related thread, I am providing an updated review of -12.

When addressing the comments below, I expect an inline reply to this
message, especially to any points/comments that you might not agree
with or want to discuss further.  That will make my review of any
changes easier/faster.  Note that there wasn't a detailed reply to my
previous review so I ended up repeating some comments below.

My main issue with this document remains the compliance with rfc7761
-- or lack of it.  In short, this document can't rely on parts of
rfc7761 and not others without explicitly changing the behavior, even
if it is for BIER-specific cases only.

On one hand...  I understand that a PIM adjacency is not formed over
the BIER domain.  *But* PIM packets and processes are used.  For
example, §3.1 talks about sending a PIM packet encapsulated in BIER --
if it is a PIM packet then it must follow rfc7761.  This includes
defining a new PIM Join Attribute.

On the other hand...  Because you're not really running PIM through
the BIER domain, then the information only needs to "look like" a
Join/Prune + BIER Information.  IOW, if it's not PIM then we don't
need it to be PIM (i.e. comply with rfc7761).   As I understand it,
this is the intent: reuse some of the packet formats so it looks like

However, as written, the document says: "we're using PIM, but we
really aren't".  The exceptions to the behavior (see my
rfc7761-related questions) are not clearly defined -- except for a
non-normative mention of the fact that no adjacency is formed.  One
way forward is to be explicit about the changes/exceptions of running
PIM (sending Join/Prune) across a BIER domain: for example, consider
this a "new interface" (the "BIER interface") that has specific
characteristics/requirements/exceptions.  You would also need to
specify that the new Join Attribute can only be used on this type of
interface.  With these exceptions, an IP packet with a protocol/next
header of PIM can be used.

[My comments below are based on how the document is currently written.]

The other way forward would be to specify the information to be
carried, which would *look like* a Join/Prune + BIER Information (but
not be PIM, as in rfc7761), and how it is carried over the BIER
domain.  Instead of the Proto field in the BIER Header pointing at IP
(and then at PIM), you can define a new Next Protocol Id called "Group
Information".  This gets you away from having to comply with rfc7761.

In summary, you can't reuse rfc7761 without complying with it.

I hope that my concerns are clearer.

We should plan a call to talk this over.  It would be nice to have the
Shepherd + Authors, but any combination works for me.  Please find a
time that works for you -- here's my calendar:



[Line numbers from idnits.]

18	Abstract
27	   This draft specifies the procedure to signal PIM join/prune messages
28	   through a BIER Domain, as such enabling the provisioning of
29	   traditional PIM services through a BIER Domain.  These procedures are
30	   valid for forwarding PIM join/prune messages to the Source (SSM) or
31	   Rendezvous Point (ASM).

[] "join/prune messages"

The name of the messages (from rfc7761) is "Join/Prune", not
"join/prune", "join and prune", or any other variation.  Please be
consistent with existing terminology throughout the whole document!

[minor] SSM should be expanded -- but this is the only place where it
is used, so perhaps you don't need it at all.

[minor] ASM should be expanded -- there are other mentions, but it may
not be necessary at this point.

[minor] Please be consistent about how you refer to the source.  To be
aligned with rfc7761: s/Source/source/g

94	1.  Introduction

96	   It might be desirable to simplify/upgrade some part of an existing
97	   network to BIER technology, removing any legacy multicast protocols
98	   like PIM.  This simplification should be done with minimum
99	   interruption or disruption to the other parts of the network from
100	   singling, services and software upgrade point of view.  To do so this
101	   draft is specifies procedures for signaling multicast join and prune
102	   messages over the BIER domain, this draft is not trying to create
103	   FULL PIM adjacency over a BIER domain between two PIM nodes.  The PIM
104	   adjacency is terminated at BIER edge routers and only join/prune
105	   signaling messages are transported over the BIER network.  It just so
106	   happened that this draft chose signaling messages to be in par with
107	   PIM join/prune messages.  These signaling messages are forwarded
108	   upstream toward the BIER edge router on path to the Source or
109	   Rendezvous point.  These signaling messages are encapsulated in a
110	   BIER header.

[nit] s/draft is specifies/draft specifies

[minor] s/this draft is not trying to create FULL PIM adjacency over a
BIER domain between two PIM nodes./while not creating a PIM adjacency
through the BIER domain.

[?] "It just so happened that this draft chose signaling messages to
be in par with PIM join/prune messages."

I don't understand what you're trying to convey here, but it's
probably related to the fact that you're using PIM and not using
PIM... (see above)

[minor] Suggestion:

   These signaling messages are forwarded upstream toward the BIER edge
   router on path to the Source or Rendezvous point.  These signaling
   messages are encapsulated in a BIER header.

   The signaling messages are encapsulated in a BIER header and forwarded
   towards the BIER edge router on the path to the Source or Rendezvous
   Point (RP).

120	2.1.  Definitions
126	   BBR:

128	   BIER Boundary router.  A router between the PIM domain and BIER
129	   domain.  Maintains PIM adjacency for all routers attached to it on
130	   the PIM domain and terminates the PIM adjacency toward the BIER
131	   domain.

133	   IBBR:

135	   Ingress BIER Boundary Router.  An ingress router from signaling point
136	   of view.  It maintains PIM adjacency toward the PIM domain and
137	   signals join/prune messages across the BIER domain to EBBR as needed.

139	   EBBR:

141	   Egress BIER Boundary Router.  An egress router in BIER domain from
142	   signaling point of view.  It maintains PIM adjacency to all upstream
143	   PIM routers.  It terminates the BIER signaling packets and creates
144	   necessary PIM join/prune messages into PIM Domain.

[] Suggestion>


   BIER Boundary Router.  A router between the PIM domain and the BIER
   domain.  Maintains a PIM adjacency with the all the attached PIM


   Ingress BBR.  An ingress router from the signaling point of view.  It
   signals Join/Prune messages across the BIER domain to the EBBR, as


   Egress BBR.  An egress router from the signaling point of view.  It
   originates any needed PIM Join/Prune messages into the PIM Domain.

146	3.  PIM Signaling Through BIER domain

[nit] s/Through BIER/Through the BIER

161	   Figure 1 illustrates the operation of the BIER Boundary router (BBR).
162	   BBRs are connected to PIM routers in the PIM domain and BIER routers
163	   in the BIER domain.  PIM routers in PIM domain continue to send PIM
164	   state messages to the BBR.  The BBR will create PIM adjacency between
165	   all the PIM routers attached to it on the PIM domain.  Each BBR
166	   determines if a BIER Signaling Join or Prune message needs to be
167	   transmitted through the BIER domain.  This draft has chosen these
168	   BIER signaling messages to be PIM join/prune message, as such an
169	   implementation could chose to tunnel actual PIM join/prune messages
170	   through BIER network.  This tunneling is only done for signaling
171	   purposes and not for creating a PIM adjacency between the two
172	   disjoint PIM domains through the BIER domain.

[nit] s/in PIM domain/in the PIM domain

[nit] s/BBR will create PIM adjacency between/BBR creates a PIM adjacency to

There are several places where you write in the future tense.  Given
that this is a specification, please do it in the present: the BBR
creates.  I think I may have caught most of the instances in other
comments below, but please take a look.

[major] "This draft has chosen these BIER signaling messages to be PIM
join/prune message, as such an implementation could chose to tunnel
actual PIM join/prune messages through BIER network."

If an implementation chooses to do anything other than what is
specified here then it won't be compliant with this document.  If
you're going to mention other options then we'll need to have
operational guidance on when to use this new mechanism if others are

I realize I asked the question -- and to be honest, simply tunneling
the actual PIM messages seems easier to me -- but I also have no
issues with the WG taking this path.

In summary, I would remove mention of other options to keep the
document to the point.  If asked later in the process be ready to
answer. :-)

177	   The egress BBR will determine if the arriving BIER packet is a
178	   signaling packet and if so it will generate a PIM join/prune packet
179	   toward its attached PIM domain.

[nit] s/egress BBR will determine...and if so it will generate/egress
BBR determines...and if so it generates

[minor] s/packet/message

181	   The new procedures in this draft are only applicable to signaling and
182	   there are no changes from datapath point of view.

[nit] s/from datapath point of view/from the datapath point of view

184	3.1.  Ingress BBR procedure
189	   When a PIM Join or Prune message is received, the IBBR determines
190	   whether the Source or RP is reachable through the BIER domain.  The
191	   EBBR is the BFR through which the Source or RP is reachable.  In PIM
192	   terms [RFC7761], the EBBR is the RPF Neighbor, and the RPF Interface
193	   is the BIER "tunnel" used to reach it.  The mechanisms used to find
194	   the EBBR are outside the scope of this document and there can be many
195	   mechanism depending on if the source or RP are in same area or
196	   autonomous system (AS) or in different area or AS -- some examples
197	   are provided in Appendix A.

[] "and there can be many mechanism depending on if...area or AS"  I
think that this piece of text is superfluous because the mechanisms
were just declared out of scope, so it may raise more questions...

199	   If the lookup for source or rendezvous point results into multiple
200	   EBBRs, different IBBRs could choose different EBBRs for the same
201	   flow.  As long as a unique IBBR chooses a unique EBBR for the same
202	   flow.  On downstream these EBBRs will send traffic to their
203	   corresponding IBBRs.

[nit] s/for source/for the source

[nit] s/rendezvous point/RP/g

For consistency and simplicity.

[nit] s/results into multiple/results in multiple

[] Suggestion>
   If the lookup for the source or RP results in multiple EBBRs, an IBBR
   must chose a single EBBR for a specific flow.  Different IBBRs may choose
   different EBBRs for the same flow.  The EBBRs will send downstream traffic
   to their corresponding IBBRs.

205	   After discovering the EBBR and its BFR-id, the IBBR MUST use the BIER
206	   Information Vector (Section 3.1.1) which is a PIM Join Attribute type
207	   [RFC5384].  The EBBR uses this attribute to obtain the necessary BIER
208	   information to build its multicast state.  The signaling packet, in
209	   this case a PIM Join/Prune message, is encapsulated in the BIER
210	   Header and forwarded through the BIER domain to the EBBR.  The source
211	   address of the PIM packets MUST be set to IBBR local BFR-prefix.  The
212	   destination address MUST be set to ALL-PIM-ROUTERS [RFC7761].

[nit] s/IBBR local BFR-prefix/the IBBR's local BFR-prefix

220	3.1.1.  New Pim Join Attribute, BIER Information Vector

[] No need to keep repeating "new": this document specifies it and it
will not be new soon. ;-)

Suggestion>   BIER Information Vector PIM Join Attribute

222	   The new PIM Join Attribute " BIER Information Vector" is defined as
223	   follow based on [RFC5384]

[] Suggestion>
   The BIER Information Vector PIM Join Attribute [rfc5384] is defined as

225	      0                   1                   2                   3
226	      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
227	     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
228	     |F|E|Attr_Type  |     Length  |  Addr Family    | BIER info
229	     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...

231	                        Figure 2: PIM Join Attribute

[minor] s/PIM Join Attribute/BIER Information Vector

233	   F bit: Transitive Attribute, as specified in [RFC5384].  MUST be set
234	   to zero as this attribute is always non-transitive.  If EBBR receives
235	   this attribute type with the F bit set it must discard the Attribute.

[major] s/If EBBR receives this attribute type with the F bit set it
must discard the Attribute./If the F bit is set, the receiving EBBR
MUST discard the attribute.

241	   Length: Length of the value field, as specified in [RFC5384].  MUST
242	   be set to the length of the BIER Info field + 1.  For IPv4 the length
243	   is 8, and 20 for IPv6.  Incorrect length value compare to the Addr
244	   Family must be discarded.

[major] s/Incorrect length value compare to the Addr Family must be
discarded./If the value doesn't correspond to the Addr Family the
receiving EBBR MUST discard the attribute.

246	   Addr Family: PIM address family as specified in [RFC7761].
247	   Unrecognized Address Family must be discarded.

[major] "Unrecognized Address Family must be discarded."  The registry
contains many more AFs beyond IPv4/IPv6 what the router may recognize.
rfc7761 doesn't restrict the use to IPv4/IPv6.  Is there any use for
an AF that is not IPv4/IPv6?  I don't think there is one.  This
document then has to specify any constraints.

249	      0                   1                   2                   3
250	      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
251	     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
252	     ~                 IBBR Prefix IPv4 or IPv6                      ~
253	     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
254	     | sub-domain-id |        BFR-id                 |
255	     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

257	                    Figure 3: PIM Join Attribute detail

[minor] s/PIM Join Attribute detail/BIER Info field detail

259	   BIER Info: IBBR's BFR-prefix (IPv4 or IPv6), sub-domain-id, BFR-id

[major] Please describe (as above) these additional fields.

[] The flow of the text worked better with the figure *after* the Bier
Info is introduced.

[major] What should the receiver do if multiple instances of this
attribute are received?

261  BIER packet construction at the IBBR

263	   The BIER header will be encoded with the BFR-id of the IBBR(with
264	   appropriate bit set in the BitString) and the PIM signaling packet is
265	   then encapsulated in the packet.

[minor] I think the whole process can be summarized in a single
paragraph -- no need for the figure or the definitions below.  You
should also be able to remove §3.2.

   The BIER Header is used according to the specification in [rfc8296] for
   a BIER packet to be sent from the IBBR to the EBBR.  The PIM Join/Prune
   message is encapsulated in it including the BIER Info Vector PIM Join
   Attribute (Section 3.1.3).

284	   BIERHeader.Proto = PIM Addrress Family

[] The nomenclature BIERHeader.* may be obvious, but it is not defined
anywhere.  It is not used in rfc8296, etc.

[major] There is no value for Proto that corresponds to "PIM Address
Family".  Are you trying to indicate that the Proto value has to match
the Addr Family value in the attribute?  Why?  What if they don't?
Note that rfc7761 doesn't require that.

285	   BIERHeader.BitString= Bit corresponding to the BFR-id of the EBBR

[major] This is not how rfc8296 defines the BitString: it is not a
bit, it is a field...

[major] Also (and this is repeated in 3.2), it sounds as if the intent
is for the BitString to identify a single EBBR.  If the IBBR includes
multiple destinations then the packet will be replicated, and no
possible action can be taken.  While the expected EBBR will still
receive the information, there is no way to prevent replication.

[related] With BIER-TE, the BitString may have more than one bit set
and still represent a single EBBR.

290	   Rest of the values in the BIER header are determined based on the
291	   network (MPLS/non-MPLS), capabilities (BSL), and network
292	   configuration.

[major] The issue of the MTU of the BIER tunnel was brought up during
WGLC [1], but I didn't see a resolution.  FWIW, I agree with Stig's
observation that if a significant amount of state is to be carried in
the Join/Prune, then it is important to be aware of the effective MTU
through the BIER domain.

There's some text in §4.4.1/rfc7761 that could be repurposed here.

[1] https://mailarchive.ietf.org/arch/msg/bier/-YBAPXTXOKXfkOqcD36_54F1_Bo

306	3.3.  EBBR procedure

308	   EBBR removes the BIER Header and determine this is a signaling
309	   packet.  The Received signaling packet, PIM join/prune message, is
310	   processed as if it were received from neighbors on a virtual
311	   interface, (i.e. as if the pim adjacency was present, regardless of
312	   the fact that there is no adjacency).

[nit] s/EBBR removes...determine/The EBBR removes...determines

314	   The EBBR will build a forwarding table for the arriving (S,G) using
315	   the obtained BFIR-id and the Sub-Domain information from BIER Header
316	   and/or the PIM join Attributes added to the signaling packet.  In
317	   short it tracks all IBBRs interested in this (S,G).  For a specific
318	   Source and Group, EBBR SHOULD track all the interested IBBRs via
319	   signaling messages arriving from the BIER Domain.  BFER builds its
320	   (s,g) forwarding state with incoming interface (IIF) as the Reverse
321	   Path Forwarding (RPF) interface (in attached PIM domain) towards the
322	   source or rendezvous point.  The outgoing interfaces include a
323	   virtual interface that represent BIER forwarding to tracked IBBRs.

[nit] s/The EBBR will build/The EBBR builds

[major] "forwarding table"  rfc7761 refers to the state process using
a TIB (indirectly referring to a multicast forwarding table); please
use consistent explanations with the existing RFCs.

[minor] "arriving (S,G)"  Maybe something like "membership
information" from the PIM Join/Prune messages.

[major] "using the obtained BFIR-id...from BIER Header and/or the PIM
join Attributes"    What does "and/or" indicate?  Does it mean that
either is ok?  What if the values are different?   I had asked this
before, and the answer was this:

[major] What should a receiver do if the BFR-id doesn't match the BFIR-id in
the BIER Header?

HB> not much can be done here, the reason we added the PIM information vector
HB> was because some HW couldn’t read into the BIER header. Ideally this
HB> attribute is not needed but we agreed on it because of explained reason.

I don't understand how a BIER router is not able to read the BIER
Header.  It it a necessary operation to support/implement BIER.  What
am I not understanding?

The specification should be deterministic, using "and/or" leaves the
door open to inconsistent implementations.  Please be specific about
the value to be used.


[major] "EBBR SHOULD track all the interested IBBRs"   When is it ok
for the EBBR to not track?  Why is this recommended and not required?

[minor] "track all the interested IBBRs via signaling messages
arriving from the BIER Domain"  Should a Holdtime of 0xffff be

[minor] s/BFER builds/The EBBR builds

[nit] s/(s,g) forwarding state/forwarding state

[nit] s/with incoming interface/with the incoming interface

[nit] s/in attached PIM domain/in the attached PIM domain

[minor] s/include a virtual interface that represent BIER forwarding
to tracked IBBRs./include all virtual interfaces in the BIER domain
towards the tracked IBBRs.

[minor] The text is written for an (S,G), what about (*,G)?  The text
seems to apply, but it should be specific about it.

329	4.  Datapath Forwarding
330	4.1.  Datapath traffic flow

[nit] Add a space.

338	5.  PIM-SM behavior

[] Now that the text has been updated to include "source or RP", I
don't think this section is needed.

360	6.  Applicability to MVPN

[] This section starts by saying that "With just minor changes, the
above procedures apply to MVPN", but the description goes into more
that "minor changes" (including a potential "more complicated label
allocation scheme") and points at other details not properly
specified.  If you want to include the MVPN case, then this section
will need more details, references, etc.

Personally I would suggest removing it.

399	8.  Security Considerations

401	   The procedures of this document do not, in themselves, provide
402	   privacy, integrity, or authentication for the control plane or the
403	   data plane.  For a discussion of the security considerations
404	   regarding the use of BIER, please see [RFC8279] and [RFC8296].  The
405	   security consideration for [RFC7761] aslso apply.

[nit] s/consideration for [RFC7761] aslso/considerations in [RFC7761] also

[major] Some of the risks introduced in this document are not new
(forging a Join/Prune, for example), but can now be exploited in a
different way (across a BIER domain).  The effect may be more
significant as it may result in traffic forwarded through the network
without need; think congestion, use of resources, etc.  The Prune may
have the exact opposite effect.

Note that you don't need to provide a solution, just mention that as
in rfc7761 forging is an issue (but with the BIER domain increased

407	9.  Acknowledgments

409	   The authors would like to thank Eric Rosen, Stig Venaas for thier
410	   reviews and comments.

[nit] s/thier/their

453	A.1.  Link-State Protocols

455	   On IBBR SPF procedures can be used to find the EBBR closest to the
456	   source.

[minor] source or RP...  You updated all other mentions of "source" to
make it clear that the same applies to the RP, except for this
Appendix.  This is a minor point, but consistency would be very nice.

475	A.2.2.  Interior Border Gateway Protocol (iBGP)
485	   Suppose BGP is enable between EBBR (B) and IBBR (D) and the PIM
486	   Domain routes are redistributed to the BIER domain via BGP,
487	   performing next-hop-self for these routes.  This would include the
488	   Multicast Source IP address (S).  In such case BGP should use the
489	   same next-hop as the EBBR BIER prefix.  This will ensure that all PIM
490	   domain routes, including the Multicast Source IP address (S) are
491	   resolve via EBBR's BIER prefix address.  When the host (h) triggers a
492	   PIM join message to IBBR (D), IBBR tries to resolve (S).  It resolves
493	   (S) via BGP installed route and realizes its next-hop is EBBR (B).

[major] Where is "next-hop-self" specified/defined?   I know what it
is, I've configured the knob many times, but it is not specified in
any document that can be referenced here, as far as I know.  Even if
this is an example (in the Appendix), please be specific in what you
mean -- don't assume people know what you mean.

[nit] s/are resolve via EBBR's/are resolved via the EBBR's

[nit] s/IBBR tries to resolve (S).  It resolves (S) via BGP installed
route and realizes its next-hop is EBBR (B)./the IBBR resolves (S) via
the BGP installed route and realizes its next-hop is the EBBR (B).

[End of Review -12]