From nobody Wed Oct 26 08:27:46 2022
Return-Path: <warren@kumari.net>
X-Original-To: idr@ietfa.amsl.com
Delivered-To: idr@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id F01B1C14F732
 for <idr@ietfa.amsl.com>; Wed, 26 Oct 2022 08:27:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.106
X-Spam-Level: 
X-Spam-Status: No, score=-2.106 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, HTML_MESSAGE=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01,
 URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001]
 autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key)
 header.d=kumari.net
Received: from mail.ietf.org ([50.223.129.194])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id O3tu6BnTWVGY for <idr@ietfa.amsl.com>;
 Wed, 26 Oct 2022 08:27:40 -0700 (PDT)
Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com
 [IPv6:2a00:1450:4864:20::232])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 7B429C14F74B
 for <idr@ietf.org>; Wed, 26 Oct 2022 08:27:40 -0700 (PDT)
Received: by mail-lj1-x232.google.com with SMTP id a15so17840611ljb.7
 for <idr@ietf.org>; Wed, 26 Oct 2022 08:27:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kumari.net; s=google; 
 h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=TumsC0e2vGO+w4yoOle1/728zyxSsUabIFI7EvTB32Y=;
 b=PoF7EAalHhEBhmwIU8g8ELSJyDwVpktrMvHwsFtN1GEQPwefOQPy83TqhfC/EPsJe4
 FnksymJyZJ0NwUQPHSV7jBGH9iVdrS1aj+YuccXM3ZdeJZeWvuiJ3K2nexhrBKlEAlTs
 kXMHx10yEfPfQ6EPRH+aCSW/TSDqNV39BTtYHL6W7kPBTUrjAdcnH5mpdCwPAkDRWxvF
 tqrR6ZjZXWJTi2VvkfIXgX97xLP3mjS7cy/l+8vAZvt5og29QT/2zXyTCWjCtQM+v6PY
 Q0LCDfd0TGYI1LyhMQDnqN1k1/oIMNe37TDiPb2kSwo8XrdzhcobboVCk8GJW+SL1U+B
 CJAQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=TumsC0e2vGO+w4yoOle1/728zyxSsUabIFI7EvTB32Y=;
 b=yHb/mV6JLvdmg6Iy8ZrrpJlORnKwH69qWB4qG/82yteG124Z85pCnnu1nhGmf1jbEq
 4Oj14eMZZwTkn0J9S539eyN0wvgb3hrtNroPdY8s+GnoWsByfU2byeJ2Rkmf+b9Z7Db7
 IR6jgNT7rTg2ypv0dA5lPsIFV7YcmTsNug0E6SwSDhG2K9ESYBQ7LbjC+4ed/0/yWc8M
 Gf6PaqlsQ1RcmWDbTSgQqA5vhA/eZZzGIN/SwbM1tBT/nt+2Qvm2dY5K5574/9kDJl6S
 DNemhXIooGyQRjp0ZiCulHBko6kMOrxAysKuvbnfgTFj2WgqV6O3v1wFV+x3PUPXV0wP
 4KPQ==
X-Gm-Message-State: ACrzQf2OnHNFcT9m2F/fyYL/RRo19k1JGMT379YULi6xNjAoH9Z/PvT8
 Q0IIIHe4u84Ji0HZJFFr999dVqmbm/dE1UTvU598eA==
X-Google-Smtp-Source: AMsMyM4njB+tSXv9TdYo4KwGqZZgX/AnJv35vqbyCRMKKPy3A2lz+pd+utrjw4TzSMdLiPZGKvplqG6nW3Qcrj6b28I=
X-Received: by 2002:a2e:b60a:0:b0:26e:8ae7:3d42 with SMTP id
 r10-20020a2eb60a000000b0026e8ae73d42mr15782019ljn.175.1666798057953; Wed, 26
 Oct 2022 08:27:37 -0700 (PDT)
Received: from 649336022844 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 26 Oct 2022 08:27:37 -0700
Mime-Version: 1.0
X-Superhuman-ID: l9psijq1.72e2453d-8db7-4372-bb3d-c88d4dae8016
X-Superhuman-Thread-ID: draft00ba8f65bc9b32ef
X-Mailer: Superhuman Desktop (2022-10-25T22:06:00Z)
X-Superhuman-Draft-ID: draft005d6e1f6ff36c21
From: Warren Kumari <warren@kumari.net>
Date: Wed, 26 Oct 2022 08:27:37 -0700
Message-ID: <CAHw9_i+Wp6zyM35UDT19jamofs6xCpberBz=LwV=7vrGwijzRw@mail.gmail.com>
To: draft-ietf-idr-wide-bgp-communities.all@ietf.org, 
 "idr@ietf. org" <idr@ietf.org>, Alvaro Retana <aretana.ietf@gmail.com>
Content-Type: multipart/alternative; boundary="00000000000028328a05ebf1aaf5"
Archived-At: <https://mailarchive.ietf.org/arch/msg/idr/aW8XfPljF0YlrptpXPWf9bj96w4>
Subject: [Idr] Initial review of draft-ietf-idr-wide-bgp-communities
X-BeenThere: idr@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Inter-Domain Routing <idr.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/idr>,
 <mailto:idr-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/idr/>
List-Post: <mailto:idr@ietf.org>
List-Help: <mailto:idr-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/idr>,
 <mailto:idr-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Oct 2022 15:27:45 -0000

--00000000000028328a05ebf1aaf5
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi all,

<no-hats>
I have reviewed draft-ietf-idr-wide-bgp-communities, and wrote up something
similar to a directorate-style review; Alvaro suggested that I send it to
the authors and WG.

Apologies in advance if these questions have already been discussed in the
WG - I haven't been following IDR particularly closely lately.

W
</no-hats>
--------
Document: draft-ietf-idr-wide-bgp-communities
Reviewer: Warren Kumari
Review Date: 2022-10-25
Intended Status: Standards Track
Link: https://datatracker.ietf.org/doc/draft-ietf-idr-wide-bgp-communities/



Meta comment:
There are 6 authors listed. This exceeds our standard 5 (just mentioning,
but the reason should be noted in the writeup or during balloting).

The only mentions of Large BGP Communities are in the Operational
Considerations ("Having multiple ways [...] - via the use of Standard,
Extended or Large BGP Communities versus the use of BGP Wide Communities
=E2=80=A6") and Security Considerations ("All the security considerations f=
or BGP
Communities [RFC1997], BGP  Extended Communities [RFC4360], and BGP Large
Communities [RFC8092] apply to BGP Community Containers."). This isn't
really a problem, and I understand that these are somewhat competing
documents, but it did feel a little odd...


Questions and concerns:
Section 2.1 - BGP Community Container Common Header:
O: "The BGP Community Container Common Header is defined in Section 3.1 and
contains following encoding:"
C: The document would be much easier to understand if Section 3 ("BGP
Community Container Attribute"), 3.1 ("BGP Community Container Attribute
Common Header"), etc were to be moved here (and also if it included an
example early). Section 2.1 defines part of the BGP Community format, but
does it somewhat poorly, and confusingly. The actual definition is in 3.1,
and it repeats a bunch of Section 2.1. This makes is somewhat confusing -
there isn't really enough information in 2.1 to get a handle on how the
protocol works, and so the reader is somewhat confused (or has to flip to
3.1 and then come back). A simple reorganization and removal of duplicates
would make this all much much simpler to read (and would avoid having to
figure if things have changed between the sections, etc.).

Section 2.3.  BGP Community Container Atoms
O: "Atoms provide data types that can be used to encode contents of BGP
Community Containers.  They are in the format of TLVs and are defined later
in this document in Section 5."

C: This is the entirety of Section 2.3 - it's just a forward reference to
Section 5. This illustrates my above point -- reorganizing the document to
be either "this is the purpose and here are some examples. This is the
protocol=E2=80=A6", or better yet "These are the primitives/foundation (for=
mat &
header, definitions, etc), here is an example of why you might use it,  and
this is how you assemble the parts into Wide Communities" would be much
more understandable.


Section 3.  BGP Community Container Attribute

"This document defines a BGP Path Attribute, the BGP Community Container.
The attribute type code is 34.

   The BGP Community Container attribute is an optional, transitive BGP
   attribute, and may be present only once in the BGP UPDATE message."

Okey dokey=E2=80=A6 but, what do I do if there are multiple BGP Community C=
ontainer
attributes? This is only somewhat answered in Section 8.1 ("General Error
Handling for BGP Community Containers"), which says:
"[RFC7606] "treat as withdraw" behavior is expected for any malformed
Community Containers or malformation of their contents.". I'm *assuming*
that the right behavior in this case is treat as withdraw, but I'll point
out that more than one isn't actually a "malformed Community Container".
The behavior here should be made more explicit.


Section 3.1.  BGP Community Container Attribute Common Header
The table list 2 flags (T and C), and then says that bits 3..7 are
reserved. AFAICT (and I may just be dumb at this point) it should either
say bits "2..7" (if they are counting from 0 which is what I'd assume), or
"3..8" (if counting from 1).

For the definition of the flags. For the T (Transitivity bit) it says:
"When not set (value 0), the community in the container is transitive
across AS boundaries, but not across an administrative boundary.

When set (value 1), the community in the container is transitive across all
ASes.  An administrative boundary, in this sense, is an arbitrary set of
connected ASes, possibly under control of a single entity.  How such an
administrative boundary is determined is out of the scope of this document.=
"

Is this OK? If the document specifies the behavior for a bit, and
especially one that is presumably important like this, is this level of
vagueness around "possibly under control of a single entity" acceptable?
Note: This may already be well known / understood in the IDR group, but it
certainly wasn't clear to me exactly how far I would expect this to
propagate, nor, if I managed multiple ASes, how I would delineate "this AS
is part of my admin group, but *this* is the boundary, don't propagate past
here". Or, is the intent that
operators are expected to manually write route policy filters which match
on this bit and manually filter them? I'm *assuming* that the default
behavior on an eBGP session (to some other network) is to filter on this
bit, but that means that I need a way to override this to say "Nah, AS42 is
also me, so don't filter these".
It seems that more text is needed here...



Section 4.1.  Community Value
O: "When the high order bit of the Community Value field - I - is set, the
value is IANA Registered and has a well defined meaning with underlying
semantics."
C: It seems like it would be nice to have a link to the registry here --
I'm *assuming** this is meaning the  "Border Gateway Protocol (BGP)
Well-known Communities" (
https://www.iana.org/assignments/bgp-well-known-communities/bgp-well-known-=
communities.xhtml
)?


Section 4.4.1.  Sub-Type 1, BGP Wide Community Target(s) TLV
O: "Thus, if any given target matches per the semantics of that Atom for
the community, the community is considered to match and the action defined
by the community should be executed."
C: This is probably fine, especially because this is a lowercase 'should',
but it also feels like it should be something like "the action defined by
the community is requested to be executed", or some "subject to
administrative/operator policy" or similar. Not really a bit issue, but...


4.4.2.  Sub-Type 2, BGP Wide Community Exclude Target(s) TLV
O: "The semantic of the BGP Wide Community Exclude Target(s) is to match
all specified Target(s) with the exception of those listed in this TLV." an=
d
"If the BGP Wide Community Target(s) TLV and the BGP Wide Community Exclude
Target(s) TLV have conflicting semantics, priority MUST be given to the
Wide Community Exclude Target(s) TLV."

C: It seems like this section needs a fair bit more explanation of the
semantics.
Let's pretend that the "include" set (Target) contains [1,2,3,4] and
"exclude" contains [3] - I'm *assuming* that the result should be the set
difference of include\exclude ([1,2,4]), but this isn't stated as
unambiguously as it could be...

Or, if the "include" set contains [1,2,3,4] and "exclude" contains [10], is
this OK? Presumably yes, but... =C2=AF\_(=E3=83=84)_/=C2=AF

Section 8.2 ("BGP Wide Community Container Error Handling") If any Atom in
a BGP Wide Community container's Exclude Targets TLV is unrecognized, that
Wide Community MUST NOT be considered a match and no actions for that
community should be processed.", but this doesn't actually cover the above
case -- I might "recognize" (this is actually not very well defined in the
document) [1..20], but is a value outside the "include" set acceptable?



Section 5.1.  Atom Type 1, The Autonomous System Number List

O: " Two special values are reserved for the Autonomous System Atoms:

     0x00000000 - to indicate "No Autonomous Systems".
     0xFFFFFFFF - to indicate "All Autonomous Systems"."

C: I'm not actually sure why we need a "No Autonomous Systems" value.
AFAICT, wherever you would you this you could just leave out the option -
not really important, but I'm wondering if this means that I missed
something?


Section 5.4.  Atom Type 5, The IEEE Floating Point Number List
C: I don't really understand the use-case for this, and it makes me a
little worried what the expectation is, but, well, meh...


Section 5.7.  Atom Type 8, the UTF-8 String
O: "Implementations MUST be prepared for truncated/improperly formed
   UTF-8 strings.  When detecting such a string, the implementation
   should remove trailing octets of a multi-octet sequence in order to
   have a well-formed string.

   Implementations MUST be prepared to receive empty (zero-length) UTF-8
   String Atoms as they may be used as Parameters."

C: I'm really not sure if this is an issue, but what if I get a string of
length 4, and the last octet makes it not-well formed, so I drop it=E2=80=
=A6 and
then the 3rd octet makes it not well formed, so I drop it as well=E2=80=A6 =
and then
the second octet makes it not well formed, so I drop it, and then the last
octet makes it not well formed, so I drop it, and now the string is empty.
This *might* not be a problem because I think that all 1 octet UTF-8
strings are, by definition, valid, but I don't actually know. Also, the
"... String Atoms as they may be used as Parameters" text also makes me a
little worried about the expected use case and what exactly is being
created  here -- do people expect that I could sent a community to e.g NTT
with the UTF-8 string "Make me a sandwich"? Or "request system zeroize"?
ASCII art pictures of a cat? What's the use-case?


Section 6.  Well Known Standard BGP Communities

O: "According to RFC 1997, as well as IANA's Well-Known BGP Communities
registry, the following BGP communities are defined to have global
significance:"
P: "At the time of this writing, the IANA's Well-Known BGP Communities
registry lists the following BGP communities as having have global
significance:"
C: What if someone adds e.g 0xFFFFFF42 to the IANA registry? I don't really
understand why the document is copying and pasting values, but if there is
a reason, it should allow for future changes...



Section 7.  Operational Considerations
C: This section feels quite short (but, I'm biased!)
Are operators *expected* to use these? Or just if they want to? If they
define local use ones, should they be documented?

Presumably if e.g Telefonica sends NTT a Wide community saying "Please set
localpref to 1", NTT can choose to ignore this, yes? What if *I* send this
to NTT and I'm not one of their customers, presumably they should ignore it
as well, yes? (Some of the above can be handled with something like
"Operators should apply the same policies to Wide Communities that they
apply to regular communities" or similar).

However, this still leaves the whole "transitive" but and the not very well
defined "what is an administrative boundary?" question. Perhaps the intent
is that the T bit is used just like "normal" BGP transitive vs
non-transitive logic? If so, that's not really clear, especially because of
the new admin text.



Section 8.1.  General Error Handling for BGP Community Containers

O: "[RFC7606] "treat as withdraw" behavior is expected for any malformed
Community Containers or malformation of their contents."
C: 'malformation' doesn't seem right here - perhaps "for any malformed
Community Containers or with malformed contents."


Section 8.2.  BGP Wide Community Container Error Handling

O: "If any Atom in a BGP Wide Community container's Exclude Targets TLV is
unrecognized, that Wide Community MUST NOT be considered a match and no
actions for that community should be processed.  While the Targets TLV is
meant to be inclusive, the Exclude Targets TLV is meant to be proscriptive
of applying the action."
C: As mentioned above, this isn't especially clear -- I think that if I
only recognize targets [1, 2, 3] and I get an include (Targets TLV) of
[1,2,3,4] I should still process this and only apply the ones I recognize,
but if I get an exclude of [17] I should ignore the whole thing? But, there
is a fair bit of guessing going on here...
Also, why is "include" inclusive and "exclude" proscriptive?



Section 9.2.  Example Type 1 BGP Wide Community Encoding
O: "The T Flag (transitive) is unset to prevent propagation of this
community outside of the provider's administrative domain."
C: I'm uncomfortable with "prevent propagation" without better text around
how a provider is expected to set the administrative domain. From what I
can tell, this doesn't mean "AS", so it's not actually clear how far it
should propagate. I'd assume it is "AS or some set of ASs which are acting
as one", but the Section 3.1 description is sufficiently vague that I don't
know what would happen if I sent this to e.g AS209 should I expect it to
propagate to AS3356? AS3561?







Editorial and Nits:
Abstract:
O: "It is also a very common best practice for operators ..."
P: "It is also a very common practice for operators..." or maybe "It is
also a common best practice for operators ..."
C: "very common best practice" feels redundant / reads oddly. Very much
just a nit though.


Section 1:
O: "the encoding of community values mandates that the first two octets
contain the Autonomous System number, with the next two octets containing
some locally defined value."
P: "... some locally defined opaque value.""
C: Also a nit, but it seems like this helps clarify the scope / expected
understandability of the value.


Section 2.1:
O: "This provides hierarchy for future Community-like features."
P: "This provides a hierarchy for future Community-like features."
C: Nit - missing 'a'


Section 4.1:
O: "When the high order bit of the Community Value field is clear, the
value is Locally defined"
P: "When the high order bit of the Community Value field is clear, the
value is locally defined"
C: Uppercase 'L' in 'Locally'

--00000000000028328a05ebf1aaf5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<html><head></head><body><div><div><div class=3D"">Hi all,<br></div><div cl=
ass=3D""><br></div><div class=3D"">&lt;no-hats&gt;<br></div><div class=3D""=
>I have reviewed draft-ietf-idr-wide-bgp-communities, and wrote up somethin=
g similar to a directorate-style review; Alvaro suggested that I send it to=
 the authors and WG.<br></div><div class=3D""><br></div><div class=3D"">Apo=
logies in advance if these questions have already been discussed in the WG =
- I haven&#39;t been following IDR particularly closely lately.<br></div><d=
iv class=3D""><br></div><div class=3D"">W<br></div><div class=3D"">&lt;/no-=
hats&gt;</div><div class=3D"">--------<br></div><div>Document:=C2=A0draft-i=
etf-idr-wide-bgp-communities</div><div>Reviewer: Warren Kumari<br></div><di=
v>Review Date:=C2=A02022-10-25<br></div><div>Intended Status: Standards Tra=
ck<br></div><div>Link:=C2=A0<a href=3D"https://datatracker.ietf.org/doc/dra=
ft-ietf-idr-wide-bgp-communities/">https://datatracker.ietf.org/doc/draft-i=
etf-idr-wide-bgp-communities/</a><br></div><div><br></div><div><br></div><d=
iv class=3D""><br></div><div class=3D"">Meta comment:<br></div><div class=
=3D"">There are 6 authors listed. This exceeds our standard 5 (just mention=
ing, but the reason should be noted in the writeup or during balloting).<br=
></div><div class=3D""><br></div><div class=3D"">The only mentions of Large=
 BGP Communities are in the Operational Considerations (&quot;Having multip=
le ways [...] - via the use of Standard, Extended or Large BGP Communities =
versus the use of BGP Wide Communities =E2=80=A6&quot;) and Security Consid=
erations (&quot;All the security considerations for BGP Communities [RFC199=
7], BGP=C2=A0 Extended Communities [RFC4360], and BGP Large Communities [RF=
C8092] apply to BGP Community Containers.&quot;). This isn&#39;t really a p=
roblem, and I understand that these are somewhat competing documents, but i=
t did feel a little odd...<br></div><div class=3D""><br></div><div class=3D=
""><br></div><div class=3D"">Questions and concerns:<br></div><div class=3D=
"">Section 2.1 - BGP Community Container Common Header:<br></div><div class=
=3D"">O: &quot;The BGP Community Container Common Header is defined in Sect=
ion 3.1 and contains following encoding:&quot;<br></div><div class=3D"">C: =
The document would be much easier to understand if Section 3 (&quot;BGP Com=
munity Container Attribute&quot;), 3.1 (&quot;BGP Community Container Attri=
bute Common Header&quot;), etc were to be moved here (and also if it includ=
ed an example early). Section 2.1 defines part of the BGP Community format,=
 but does it somewhat poorly, and confusingly. The actual definition is in =
3.1, and it repeats a bunch of Section 2.1. This makes is somewhat confusin=
g - there isn&#39;t really enough information in 2.1 to get a handle on how=
 the protocol works, and so the reader is somewhat confused (or has to flip=
 to 3.1 and then come back). A simple reorganization and removal of duplica=
tes would make this all much much simpler to read (and would avoid having t=
o figure if things have changed between the sections, etc.).<br></div><div =
class=3D""><br></div><div class=3D"">Section 2.3.=C2=A0 BGP Community Conta=
iner Atoms<br></div><div class=3D"">O: &quot;Atoms provide data types that =
can be used to encode contents of BGP Community Containers.=C2=A0 They are =
in the format of TLVs and are defined later in this document in Section 5.&=
quot;<br></div><div class=3D""><br></div><div class=3D"">C: This is the ent=
irety of Section 2.3 - it&#39;s just a forward reference to Section 5. This=
 illustrates my above point -- reorganizing the document to be either &quot=
;this is the purpose and here are some examples. This is the protocol=E2=80=
=A6&quot;, or better yet &quot;These are the primitives/foundation (format =
&amp; header, definitions, etc), here is an example of why you might use it=
,=C2=A0 and this is how you assemble the parts into Wide Communities&quot; =
would be much more understandable.<br></div><div class=3D""><br></div><div =
class=3D""><br></div><div class=3D"">Section 3.=C2=A0 BGP Community Contain=
er Attribute<br></div><div class=3D""><br></div><div class=3D"">&quot;This =
document defines a BGP Path Attribute, the BGP Community Container.=C2=A0 T=
he attribute type code is 34.<br></div><div class=3D""><br></div><div class=
=3D"">=C2=A0=C2=A0 The BGP Community Container attribute is an optional, tr=
ansitive BGP<br></div><div class=3D"">=C2=A0=C2=A0 attribute, and may be pr=
esent only once in the BGP UPDATE message.&quot;<br></div><div class=3D""><=
br></div><div class=3D"">Okey dokey=E2=80=A6 but, what do I do if there are=
 multiple BGP Community Container attributes? This is only somewhat answere=
d in Section 8.1 (&quot;General Error Handling for BGP Community Containers=
&quot;), which says:<br></div><div class=3D"">&quot;[RFC7606] &quot;treat a=
s withdraw&quot; behavior is expected for any malformed Community Container=
s or malformation of their contents.&quot;. I&#39;m *assuming* that the rig=
ht behavior in this case is treat as withdraw, but I&#39;ll point out that =
more than one isn&#39;t actually a &quot;malformed Community Container&quot=
;.<br></div><div class=3D"">The behavior here should be made more explicit.=
<br></div><div class=3D""><br></div><div class=3D""><br></div><div class=3D=
"">Section 3.1.=C2=A0 BGP Community Container Attribute Common Header<br></=
div><div class=3D"">The table list 2 flags (T and C), and then says that bi=
ts 3..7 are reserved. AFAICT (and I may just be dumb at this point) it shou=
ld either say bits &quot;2..7&quot; (if they are counting from 0 which is w=
hat I&#39;d assume), or &quot;3..8&quot; (if counting from 1).<br></div><di=
v class=3D""><br></div><div class=3D"">For the definition of the flags. For=
 the T (Transitivity bit) it says:<br></div><div class=3D"">&quot;When not =
set (value 0), the community in the container is transitive across AS bound=
aries, but not across an administrative boundary.<br></div><div class=3D"">=
<br></div><div class=3D"">When set (value 1), the community in the containe=
r is transitive across all ASes.=C2=A0 An administrative boundary, in this =
sense, is an arbitrary set of connected ASes, possibly under control of a s=
ingle entity.=C2=A0 How such an administrative boundary is determined is ou=
t of the scope of this document.&quot;<br></div><div class=3D""><br></div><=
div class=3D"">Is this OK? If the document specifies the behavior for a bit=
, and especially one that is presumably important like this, is this level =
of=C2=A0 vagueness around &quot;possibly under control of a single entity&q=
uot; acceptable?=C2=A0<br></div><div class=3D"">Note: This may already be w=
ell known / understood in the IDR group, but it certainly wasn&#39;t clear =
to me exactly how far I would expect this to propagate, nor, if I managed m=
ultiple ASes, how I would delineate &quot;this AS is part of my admin group=
, but *this* is the boundary, don&#39;t propagate past here&quot;. Or, is t=
he intent that<br></div><div class=3D"">operators are expected to manually =
write route policy filters which match on this bit and manually filter them=
? I&#39;m *assuming* that the default behavior on an eBGP session (to some =
other network) is to filter on this bit, but that means that I need a way t=
o override this to say &quot;Nah, AS42 is also me, so don&#39;t filter thes=
e&quot;.<br></div><div class=3D"">It seems that more text is needed here...=
<br></div><div class=3D"">=C2=A0<br></div><div class=3D""><br></div><div cl=
ass=3D""><br></div><div class=3D"">Section 4.1.=C2=A0 Community Value<br></=
div><div class=3D"">O: &quot;When the high order bit of the Community Value=
 field - I - is set, the value is IANA Registered and has a well defined me=
aning with underlying semantics.&quot;<br></div><div class=3D"">C: It seems=
 like it would be nice to have a link to the registry here -- I&#39;m *assu=
ming** this is meaning the=C2=A0 &quot;Border Gateway Protocol (BGP) Well-k=
nown Communities&quot; (<a href=3D"https://www.iana.org/assignments/bgp-wel=
l-known-communities/bgp-well-known-communities.xhtml" class=3D"">https://ww=
w.iana.org/assignments/bgp-well-known-communities/bgp-well-known-communitie=
s.xhtml</a>)?<br></div><div class=3D""><br></div><div class=3D""><br></div>=
<div class=3D"">Section 4.4.1.=C2=A0 Sub-Type 1, BGP Wide Community Target(=
s) TLV<br></div><div class=3D"">O: &quot;Thus, if any given target matches =
per the semantics of that Atom for the community, the community is consider=
ed to match and the action defined by the community should be executed.&quo=
t;<br></div><div class=3D"">C: This is probably fine, especially because th=
is is a lowercase &#39;should&#39;, but it also feels like it should be som=
ething like &quot;the action defined by the community is requested to be ex=
ecuted&quot;, or some &quot;subject to administrative/operator policy&quot;=
 or similar. Not really a bit issue, but...<br></div><div class=3D""><br></=
div><div class=3D""><br></div><div class=3D"">4.4.2.=C2=A0 Sub-Type 2, BGP =
Wide Community Exclude Target(s) TLV<br></div><div class=3D"">O: &quot;The =
semantic of the BGP Wide Community Exclude Target(s) is to match all specif=
ied Target(s) with the exception of those listed in this TLV.&quot; and<br>=
</div><div class=3D"">&quot;If the BGP Wide Community Target(s) TLV and the=
 BGP Wide Community Exclude Target(s) TLV have conflicting semantics, prior=
ity MUST be given to the Wide Community Exclude Target(s) TLV.&quot;<br></d=
iv><div class=3D""><br></div><div class=3D"">C: It seems like this section =
needs a fair bit more explanation of the semantics.<br></div><div class=3D"=
">Let&#39;s pretend that the &quot;include&quot; set (Target) contains [1,2=
,3,4] and &quot;exclude&quot; contains [3] - I&#39;m *assuming* that the re=
sult should be the set difference of include\exclude ([1,2,4]), but this is=
n&#39;t stated as unambiguously as it could be...<br></div><div class=3D"">=
<br></div><div class=3D"">Or, if the &quot;include&quot; set contains [1,2,=
3,4] and &quot;exclude&quot; contains [10], is this OK? Presumably yes, but=
... =C2=AF\_(=E3=83=84)_/=C2=AF<br></div><div class=3D""><br></div><div cla=
ss=3D"">Section 8.2 (&quot;BGP Wide Community Container Error Handling&quot=
;) If any Atom in a BGP Wide Community container&#39;s Exclude Targets TLV =
is unrecognized, that Wide Community MUST NOT be considered a match and no =
actions for that community should be processed.&quot;, but this doesn&#39;t=
 actually cover the above case -- I might &quot;recognize&quot; (this is ac=
tually not very well defined in the document) [1..20], but is a value outsi=
de the &quot;include&quot; set acceptable?<br></div><div class=3D""><br></d=
iv><div class=3D""><br></div><div class=3D""><br></div><div class=3D"">Sect=
ion 5.1.=C2=A0 Atom Type 1, The Autonomous System Number List<br></div><div=
 class=3D""><br></div><div class=3D"">O: &quot; Two special values are rese=
rved for the Autonomous System Atoms:<br></div><div class=3D""><br></div><d=
iv class=3D"">=C2=A0=C2=A0=C2=A0=C2=A0 0x00000000 - to indicate &quot;No Au=
tonomous Systems&quot;.<br></div><div class=3D"">=C2=A0=C2=A0=C2=A0=C2=A0 0=
xFFFFFFFF - to indicate &quot;All Autonomous Systems&quot;.&quot;<br></div>=
<div class=3D""><br></div><div class=3D"">C: I&#39;m not actually sure why =
we need a &quot;No Autonomous Systems&quot; value. AFAICT, wherever you wou=
ld you this you could just leave out the option - not really important, but=
 I&#39;m wondering if this means that I missed something?<br></div><div cla=
ss=3D""><br></div><div class=3D""><br></div><div class=3D"">Section 5.4.=C2=
=A0 Atom Type 5, The IEEE Floating Point Number List<br></div><div class=3D=
"">C: I don&#39;t really understand the use-case for this, and it makes me =
a little worried what the expectation is, but, well, meh...<br></div><div c=
lass=3D""><br></div><div class=3D""><br></div><div class=3D"">Section 5.7.=
=C2=A0 Atom Type 8, the UTF-8 String<br></div><div class=3D"">O: &quot;Impl=
ementations MUST be prepared for truncated/improperly formed<br></div><div =
class=3D"">=C2=A0=C2=A0 UTF-8 strings.=C2=A0 When detecting such a string, =
the implementation<br></div><div class=3D"">=C2=A0=C2=A0 should remove trai=
ling octets of a multi-octet sequence in order to<br></div><div class=3D"">=
=C2=A0=C2=A0 have a well-formed string.<br></div><div class=3D""><br></div>=
<div class=3D"">=C2=A0=C2=A0 Implementations MUST be prepared to receive em=
pty (zero-length) UTF-8<br></div><div class=3D"">=C2=A0=C2=A0 String Atoms =
as they may be used as Parameters.&quot;<br></div><div class=3D""><br></div=
><div class=3D"">C: I&#39;m really not sure if this is an issue, but what i=
f I get a string of length 4, and the last octet makes it not-well formed, =
so I drop it=E2=80=A6 and then the 3rd octet makes it not well formed, so I=
 drop it as well=E2=80=A6 and then the second octet makes it not well forme=
d, so I drop it, and then the last octet makes it not well formed, so I dro=
p it, and now the string is empty. This *might* not be a problem because I =
think that all 1 octet UTF-8 strings are, by definition, valid, but I don&#=
39;t actually know. Also, the &quot;... String Atoms as they may be used as=
 Parameters&quot; text also makes me a little worried about the expected us=
e case and what exactly is being created=C2=A0 here -- do people expect tha=
t I could sent a community to e.g NTT with the UTF-8 string &quot;Make me a=
 sandwich&quot;? Or &quot;request system zeroize&quot;? ASCII art pictures =
of a cat? What&#39;s the use-case?<br></div><div class=3D""><br></div><div =
class=3D""><br></div><div class=3D"">Section 6.=C2=A0 Well Known Standard B=
GP Communities<br></div><div class=3D""><br></div><div class=3D"">O: &quot;=
According to RFC 1997, as well as IANA&#39;s Well-Known BGP Communities reg=
istry, the following BGP communities are defined to have global significanc=
e:&quot;<br></div><div class=3D"">P: &quot;At the time of this writing, the=
 IANA&#39;s Well-Known BGP Communities registry lists the following BGP com=
munities as having have global significance:&quot;<br></div><div class=3D""=
>C: What if someone adds e.g 0xFFFFFF42 to the IANA registry? I don&#39;t r=
eally understand why the document is copying and pasting values, but if the=
re is a reason, it should allow for future changes...<br></div><div class=
=3D""><br></div><div class=3D""><br></div><div class=3D""><br></div><div cl=
ass=3D"">Section 7.=C2=A0 Operational Considerations<br></div><div class=3D=
"">C: This section feels quite short (but, I&#39;m biased!)<br></div><div c=
lass=3D"">Are operators *expected* to use these? Or just if they want to? I=
f they define local use ones, should they be documented?<br></div><div clas=
s=3D""><br></div><div class=3D"">Presumably if e.g Telefonica sends NTT a W=
ide community saying &quot;Please set localpref to 1&quot;, NTT can choose =
to ignore this, yes? What if *I* send this to NTT and I&#39;m not one of th=
eir customers, presumably they should ignore it as well, yes? (Some of the =
above can be handled with something like &quot;Operators should apply the s=
ame policies to Wide Communities that they apply to regular communities&quo=
t; or similar).<br></div><div class=3D""><br></div><div class=3D"">However,=
 this still leaves the whole &quot;transitive&quot; but and the not very we=
ll defined &quot;what is an administrative boundary?&quot; question. Perhap=
s the intent is that the T bit is used just like &quot;normal&quot; BGP tra=
nsitive vs non-transitive logic? If so, that&#39;s not really clear, especi=
ally because of the new admin text.=C2=A0<br></div><div class=3D""><br></di=
v><div class=3D""><br></div><div class=3D""><br></div><div class=3D"">Secti=
on 8.1.=C2=A0 General Error Handling for BGP Community Containers<br></div>=
<div class=3D""><br></div><div class=3D"">O: &quot;[RFC7606] &quot;treat as=
 withdraw&quot; behavior is expected for any malformed Community Containers=
 or malformation of their contents.&quot;<br></div><div class=3D"">C: &#39;=
malformation&#39; doesn&#39;t seem right here - perhaps &quot;for any malfo=
rmed Community Containers or with malformed contents.&quot;<br></div><div c=
lass=3D""><br></div><div class=3D""><br></div><div class=3D"">Section 8.2.=
=C2=A0 BGP Wide Community Container Error Handling<br></div><div class=3D""=
><br></div><div class=3D"">O: &quot;If any Atom in a BGP Wide Community con=
tainer&#39;s Exclude Targets TLV is unrecognized, that Wide Community MUST =
NOT be considered a match and no actions for that community should be proce=
ssed.=C2=A0 While the Targets TLV is meant to be inclusive, the Exclude Tar=
gets TLV is meant to be proscriptive of applying the action.&quot;<br></div=
><div class=3D"">C: As mentioned above, this isn&#39;t especially clear -- =
I think that if I only recognize targets [1, 2, 3] and I get an include (Ta=
rgets TLV) of [1,2,3,4] I should still process this and only apply the ones=
 I recognize, but if I get an exclude of [17] I should ignore the whole thi=
ng? But, there is a fair bit of guessing going on here...<br></div><div cla=
ss=3D"">Also, why is &quot;include&quot; inclusive and &quot;exclude&quot; =
proscriptive?<br></div><div class=3D""><br></div><div class=3D""><br></div>=
<div class=3D""><br></div><div class=3D"">Section 9.2.=C2=A0 Example Type 1=
 BGP Wide Community Encoding<br></div><div class=3D"">O: &quot;The T Flag (=
transitive) is unset to prevent propagation of this community outside of th=
e provider&#39;s administrative domain.&quot;<br></div><div class=3D"">C: I=
&#39;m uncomfortable with &quot;prevent propagation&quot; without better te=
xt around how a provider is expected to set the administrative domain. From=
 what I can tell, this doesn&#39;t mean &quot;AS&quot;, so it&#39;s not act=
ually clear how far it should propagate. I&#39;d assume it is &quot;AS or s=
ome set of ASs which are acting as one&quot;, but the Section 3.1 descripti=
on is sufficiently vague that I don&#39;t know what would happen if I sent =
this to e.g AS209 should I expect it to propagate to AS3356? AS3561?<br></d=
iv><div class=3D""><br></div><div class=3D""><br></div><div class=3D""><br>=
</div><div class=3D""><br></div><div class=3D""><br></div><div class=3D""><=
br></div><div class=3D""><br></div><div class=3D"">Editorial and Nits:<br><=
/div><div class=3D"">Abstract:<br></div><div class=3D"">O: &quot;It is also=
 a very common best practice for operators ...&quot;<br></div><div class=3D=
"">P: &quot;It is also a very common practice for operators...&quot; or may=
be &quot;It is also a common best practice for operators ...&quot;<br></div=
><div class=3D"">C: &quot;very common best practice&quot; feels redundant /=
 reads oddly. Very much just a nit though.<br></div><div class=3D""><br></d=
iv><div class=3D""><br></div><div class=3D"">Section 1:<br></div><div class=
=3D"">O: &quot;the encoding of community values mandates that the first two=
 octets contain the Autonomous System number, with the next two octets cont=
aining some locally defined value.&quot;<br></div><div class=3D"">P: &quot;=
... some locally defined opaque value.&quot;&quot;<br></div><div class=3D""=
>C: Also a nit, but it seems like this helps clarify the scope / expected u=
nderstandability of the value.<br></div><div class=3D""><br></div><div clas=
s=3D""><br></div><div class=3D"">Section 2.1:<br></div><div class=3D"">O: &=
quot;This provides hierarchy for future Community-like features.&quot;<br><=
/div><div class=3D"">P: &quot;This provides a hierarchy for future Communit=
y-like features.&quot;<br></div><div class=3D"">C: Nit - missing &#39;a&#39=
;<br></div><div class=3D""><br></div><div class=3D""><br></div><div class=
=3D"">Section 4.1:<br></div><div class=3D"">O: &quot;When the high order bi=
t of the Community Value field is clear, the value is Locally defined&quot;=
<br></div><div class=3D"">P: &quot;When the high order bit of the Community=
 Value field is clear, the value is locally defined&quot;<br></div><div cla=
ss=3D"">C: Uppercase &#39;L&#39; in &#39;Locally&#39;<br></div><div class=
=3D""><br></div><div class=3D""><br></div><div class=3D""><br></div><div cl=
ass=3D""><br></div><div class=3D""><br></div><div class=3D""><br></div></di=
v><div></div><br><div class=3D"gmail_signature"></div></div></body></html>

--00000000000028328a05ebf1aaf5--

