I have reviewed this this draft and think it needs more work before it
is ready to proceed.
I have a few general questions and comments - as well as text- specific ones.

Thanks for the thorough review Alia, it is appreciated. See responses in line. Sorry it took over a month to get back to you on this.

I hope this leads to fruitful discussion on the list.  I am also happy
to add all of these to
the Issue Tracker if necessary.

1) Can an EID and an RLOC have the same value? They are different namespaces,
 but assumptions in the various drafts imply not.  Could this please
be explicitly stated?

See my explanation below.

2) Where is the explicit text saying what EID-prefixes an ETR can
register or reply authoritatively?  E.g. Can an ETR advertise a prefix
(10.1/16) with holes (10.1.1/24)?  Answer should be no, of course, but
extremely clear
rules on this are needed.

If the site has an EID-prefix of the /16 that is the one it Map- Replies for. We have rules in section 6.1.5 "EID-to-RLOC UDP Map-Reply Message" on how to send Map-Replies when there are overlapping EID- prefixes and there has been much discussion on this mailing list about it.

3) Generally, a section specifying ETR behavior in regard to packets
is missing.   What is specified is scattered widely.

"in regard to packets" is not clear what you are asking for. Do you mean for decapsulation purposes? If so, in section 5.3 starting with text "When doing ETR/PETR decapsulation:" will explain it.

  i) For instance, if an ETR receives a LISP encapsulated packet and
decapsulates it,
     but does not have EID locally, what should the ETR do?

Drop the packet. When decapsulation occurs, the inner header is inspected and what an IP router does today is what it does post decapsulation.

  ii) Does an ETR have to do packet fragment reassembly?  If an ETR
does not support
     fragment reassembly, should it send an ICMP Too Big message and
drop the fragment?
     What should an ETR do with a fragment directed to its RLOC?

The ETR follows the IP and IPv6 specification in regards to reassemly of fragments. However, we try to avoid fragmentation. See section 5.4 "Dealing with Large Encapsulated Packets" for solutions.

4) Generally, a section specifying ITR behavior in regard to packets
is missing.
 i) For instance, if an ITR receives a Negative Map Reply indicated
 "drop", should the ITR send an ICMP Destination Unreachable with
 Host Unreachable?

We did not want to specify this because in practice when this is done either the ICMP messages are either rate-limited or filtered so ICMP is not a reliable mechanism.

Experimentation will tell us more on what to do.

 ii) If an ITR receives an ICMP packet (other than TTL exceeded) to
 its RLOC, how does it properly handle or forward it?

Just like an IP router does today.

5) Are interfaces inside the LISP site explicitly configured on the
xTR or is there a way for the ITR to identify them?

That is up to the implementation, but the 3 cisco implementations do not have this explicit configuration.

Here are my questions tied specifically to the points in the text (and
some typos):

Consider these done. I will comment for which comments we will make a change and when you don't see that, we did not make a change for your comment.

a) On p 8 in EID-prefix:
 "A globally routed address block may be used by its assignee as an
 EID block."

There are comments in other drafts also being last-called that imply
it is possible to tell is a value is an EID or an RLOC - but other
places, such as this, where it is clear that a value may be both an
EID and an RLOC.

An address is an EID for sake of encapsulation when it is found in the mapping database. Since EID namespace and RLOC namespace *architecturally* are different spaces, an EID and an RLOC can have the same value. In practice, we believe when a prefix is not in the BGP DFZ core routing tables and registered to the mapping database is when the personality of an IP address changes from an locator prefix to an EID-prefix.

In practice, we have to deal with interworking, so we will find that EID-prefixes will be in the DFZ for transition purposes. And an EID- prefix and a regular route-prefix do not have to match, one can be a more-specific of the other which does complicate things. In any event, using more specific lookup matches, as we have been doing for decades in the routing system, will continue to happen. So if a destination address in a packet matches a more specific prefix in the mapping database, then the destination is considered an EID. If the more specific route is in the DFZ, then the destination is not considered an EID and is routed natively.

I like to call the addresses we use today as locators or RLOCs. Not everyone agrees with this thinking because things are more complicated than that. But I would like to think the addresses that are in the DFZ routing table today are "topological locations" and when a locator or RLOC is used in LISP, it is exactly this same routable address that is used.

Clarification of this is important

b) p. 10 Reencapsulating Tunnels: I do not see any references or
suggestions on how these would be used.  I am also concerned about how
routing/forwarding loops are prevented.

The rules for TTL decrement occur across these re-encapsulating boundaries.

Could this be explicitly set as for future study & experimentation?

The use-cases are cropping up and yes we are experimenting with solutions for them.

I can see ways to make it work and ways that might fail - but nothing
providing details or mechanisms to avoid, detect, handle, or manage
problems.

c) p. 13: 3rd paragraph from bottom: The discussion about prepending
additional LISP headers for TE doesn't give any indications or ideas
of how an ISP transit might identify that it needs to prepend a TE-ETR
RLOC or how it would find such an RLOC.  Given the complete lack of
detail about this in this draft and the others being last-called,
please explicitly specify this as experimental and for future study.

Please when you make comments, provide the text from the spec, so others reading this can understand the context. So for others, here is the paragraph that Alia is referring to:

   An additional LISP header may be prepended to packets by a TE-ITR
   when re-routing of the path for a packet is desired.  An obvious
instance of this would be an ISP router that needs to perform traffic
   engineering for packets flowing through its network.  In such a
   situation, termed Recursive Tunneling, an ISP transit acts as an
   additional ingress tunnel router and the RLOC it uses for the new
   prepended header would be either a TE-ETR within the ISP (along
intra-ISP traffic engineered path) or a TE-ETR within another ISP (an inter-ISP traffic engineered path, where an agreement to build such a
   path exists).

It was mentioned at a working group meeting that a Traffic Engineering draft needs to be written, but since that is out of charter, it has not been assigned. Perhaps, when the working group changes charter after posting of the experimental RFCs, we can do this work.

Also, please change "An obvious instance of this would be..." to "A
potential use-case would be..."

Consider this changed.

d) p. 13: 2nd paragraph from bottom: What is the appropriate behavior
for an ITR to do when it receives a packet that it would normally
prepend a LISP header to but cannot?  Could you please add a "SHOULD
drop and SHOULD send back an ICMP message"? I don't see an appropriate
code point defined yet...

Here is the 2nd paragraph from the bottom of page 13:

   In order to avoid excessive packet overhead as well as possible
   encapsulation loops, this document mandates that a maximum of two
   LISP headers can be prepended to a packet.  It is believed two
   headers is sufficient, where the first prepended header is used at a
   site for Location/Identity separation and second prepended header is
   used inside a service provider for Traffic Engineering purposes.

To contradict the idea that 2 headers is sufficient, just look at the
deployment draft where a LISP site is dangling off another LISP site -
causing 2 LISP headers and then the possibility of a Service Provider
wanting to prepend one for TE purposes.

Right, when we go off and do the TE spec, we will decide if this should be lifted. We want this to be strict now because hardware engineers want a hard limit. My feedback from doing MPLS in hardware was that having it variable length and limitless was a huge problem. So most hardware implementations of MPLS ship with just 2 label stacks.

Third, please rephrase the "It is believed..." to something like "The
LISP experiment will presume..." or "LISP experimentation will start
with the assumption that..."

I changed the text to "For initial LISP deployments, is is assumed two headers is sufficient".

e) Sec 5, first paragraph: How does an ITR that wants to encapsulate a
LISP-encapsulated packet for TE send back an ICMP Too Big message?

You didn't get to section 5.4 yet. When you get there, you should have your answers. ;-)

f) Sec 5: There is no indication in the packet formats that IPv4 in
IPv6 or IPv6 in IPv4 SHOULD be supported.  I don't care about long
format sections - but at a minimum, there should be a paragraph that
specifies the encapsulation possibilities:

  "A LISP packet consists of an outer header, a UDP header, and an
  inner header.  The following combinations MUST be supported:
    i) IPv4 outer header and IPv4 inner header (in Sec. 5.1)
    ii) IPv6 outer header and IPv4 inner header
    iii) IPv6 outer header and IPv6 inner header (in Sec 5.2)
    iv) IPv4 outer header and IPv6 inner header "

I don't understand this comment. The summary is in the table of contents section names:

5. LISP Encapsulation Details . . . . . . . . . . . . . . . . . . 16 5.1. LISP IPv4-in-IPv4 Header Format . . . . . . . . . . . . . 17 5.2. LISP IPv6-in-IPv6 Header Format . . . . . . . . . . . . . 17 5.3. Tunnel Header Field Descriptions . . . . . . . . . . . . . 19

g) An explicit statement that a LISP data packet appears as a UDP
packet destined to port 4341 and a LISP control packet appears as a
UDP packet destined to port 4342 would help for those who skim packet
formats.

You can find that here in section 5.3:

   UDP Header:  The UDP header contains a ITR selected source port when
      encapsulating a packet.  See Section 6.5 for details on the hash
algorithm used to select a source port based on the 5-tuple of the
      inner header.  The destination port MUST be set to the well-known
      IANA assigned port value 4341.

and here for control packets:

   The LISP UDP-based messages are the Map-Request and Map-Reply
   messages.  When a UDP Map-Request is sent, the UDP source port is
   chosen by the sender and the destination UDP port number is set to
   4342.  When a UDP Map-Reply is sent, the source UDP port number is
   set to 4342 and the destination UDP port number is copied from the
   source port of either the Map-Request or the invoking data packet.
   Implementations MUST be prepared to accept packets when either the
   source port or destination UDP port is set to 4342 due to NATs
   changing port number values.

h) p.19: When is it desirable to not have a Nonce value in a packet?
The Map-Version seems rather useful; which is required for support for
the initial LISP experimentation?

When doing the echo-nonce Locator Reachability Algorithm.

Also, the Nonce field could use similar description to that on p.29
for the Nonce value - at least as far as how to produce one and
what it is protecting against.

It says it here:

   Nonce:  An 8-byte random value created by the sender of the Map-
      Request.  This nonce will be returned in the Map-Reply.  The
      security of the LISP mapping protocol depends critically on the
      strength of the nonce in the Map-Request message.  The nonce
      SHOULD be generated by a properly seeded pseudo-random (or strong



Farinacci, et al.       Expires December 8, 2011               [Page 29]
Internet-Draft    Locator/ID Separation Protocol (LISP)        June 2011


      random) source.  See [RFC4086] for advice on generating security-
      sensitive random data.

i) p. 20 L: The diagram indicates that the 2nd 32 bits are only
Locator Status Bits, but the description under the I bit indicates
that the I and L bit could be set at the same time - in which case the
2nd 32 bits aren't just Locator Status Bits.  Please align the diagram
and description to better match the existence of the I bit.

I think you misread this. The text and the diagrams are consistent. And you must note the binary settings (with the notation of "x" as don't care bits). See here:

L: The L bit is the Locator-Status-Bits field enabled bit. When this
      bit is set to 1, the Locator-Status-Bits in the second 32-bits of
      the LISP header are in use.


     x 1 x x 0 x x x
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |N|L|E|V|I|flags|            Nonce/Map-Version                  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                      Locator Status Bits                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

j) typo: p. 20 V
  "This bit indicates that the first 4 bytes of the LISP header is
   encoded as:"
but it show the 8 bytes of the LISP header and the second 4 are shown
as being "Instance ID/Locator Status Bits"

Right, the description wants to show the entire LISP header but wants you, the reader, to focus on the ulong that the V-bit is pertaining to.

Also, for the I bit, the last 4 bytes are referred to, but all 8 are
shown.

Same as above comment.

k) p. 21 flags: I think this should be a "It MUST be set to 0 on
transmit and MUST be ignored on receipt" - if we want it to be really
available for the future...

Same for the Reserved field on p.29, p.33

Consider text updated for all 3 places.

l) typo p. 21, end of LISTP Locator Status Bits:
  "with that address taht the ETR is considered 'up'" -> ITR
I think the ITR is the one who decides and sets the LSBs...

Fixed typo. No it is ETR.

m) p. 21/22: The TTL copying from inner to outer should be a MUST not
a SHOULD on encapsulation.  The TTL copying from outer to inner should
be a MUST not a SHOULD on decapsulation.

It was agreed on by the working group to be SHOULD.

Why does the draft say "when the Time to Live field of the outer
header is less than the Time to Live of the inner header"? How could
that not be the case if copying the TTL from inner to outer is
required?  Please remove the text:

Because there can be a bug on the ITR/PITR where it is violating the spec.

 ", when the Time to Live field of the outer header is less than the
 Time to Live of the inner header.  Failing to perform this check can
 cause the Time to Live of the inner header to increment across
 encapsulation/decapsulation cycle.  This check is also performed
 when doing initial encapsulation when a packet comes to an ITR or
 PITR destined for a LISP site."

n) Sec 5.4: This says that both, either or neither of the mechanisms
can be implemented.  However, in Sec 5.4.1, it says:
 "An implementation MAY set the DF bit in such headers to 0 if it has
 good reason to believe there are unresolvable path MTU issues
 between the sending ITR and the receiving ETR."

This transforms the requirement from being imposed just on the ITR to
something that the ETR has to deal with.  If a LISP-encapsulated
packet is fragmented, then the ETR needs to do the reassembly.

Right, and the ITR has violated the spec. The spec is saying that fragmentation is done first and encapsulation second so the end-system reassembles and not the ETR.

o) Sec 5.5: While an Instance ID allows disambiguation of addresses, I
do not see any means of requesting or obtaining a EID-to-RLOC mapping.
There is no such field in the Map-Request or Map-Reply messages.  It
doesn't work with [ALT].  Please add a paragraph such as:

 "While a LISP header can contain an Instance ID, there are currently
 no provisions for requesting or receiving an EID-to-RLOC mapping
 that considers Instance-IDs.  A LISP-NAT (described in [INTWRK]) may
 provide a better solution for private addresses.  The use of
 Instance-ID as described here is provided for future study."

The AFI encoded addresses can carry different address formats. Once AFI is called LCAF. See draft-farinacci-lisp-lcaf-05.txt for details.

p) Sec 6.1: "The following new UDP packet types are used to retrieve
EID-to-RLOC mappings"

Please change to the more accurate:

 "The following new UDP packet formats are used for LISP control
 packets. The different packet types are listed in Sec. 6.1.1."

I changed to the first sentence. Thanks.

Please move Sec 6.1.1 to before Sec 6.1 - so that readers know the
allocated packet types before reading the descriptive text.

This part introduces UDP. We go the the LISP header in the next sub- section. That is why it was sequenced that way. Note in section 6 there is no details of the format of the "LISP Message".

After the packet formats, please change:
 "The LISP UDP-based messages are the Map-Request and Map-Reply
  messages.  When a UDP Map-Request is sent, the UDP source port is
  chosen by the sender and the destination UDP port number is set to
  4342.  When a UDP Map-Reply is sent, the source UDP port number is
  set to 4342 and the destination UDP port number is copied from the
  source port of either the Map-Request or the invoking data packet."

to

 "When a Map-Request or a Map-Register, encapsulated or not, is sent,
 the UDP source port is chosen by the sender and the destination UDP
 port number is set to 4342.  When a Map-Reply or Map-Notify is sent,
 the source UDP port number is set to 4342 and the destination UDP
 port number is copied from the source port of either the Map-Request
 or the invoking data packet."

I prefer to not change it to what you suggest. Because you could imply from your text that a Map-Register message is encapsulated.

And each section indicates how each packet is sent.

q) Sec 6.1.2:  Is the A bit ever non-zero for a Map-Request?

We did not want to specify it but we were thinking of an option where the Map-Request sender could request an authoritative request so if there were cachers of a matching mapping, that the cachers would send to the ETRs.

r) Sec 6.1.2: Why is the p bit needed?  What does a ETR do based upon
the Map-Request coming from a PITR (or not)?

It is useful for debugging. The ETR could cache the number of PITRs that have sent Map-Requests to it.

s) Sec 6.1.3 first paragraph: Without LISP encapsulation and a
Map Server, there isn't a way for an ITR to send a Map-Request to a
destination-EID.

If the ITR is connected to the ALT, it can send the Map-Request to a destination EID. It assumes that the ALT carries EID-prefixes in its routing system.

The Mapping Service is required for operation - so it should be ok for

Not true.

the draft to mention the interfaces to it!  How about replacing this
first paragraph with the below:

 "An ITR can need to send a Map-Request for numerous reasons (e.g. to
 get a mapping for an EID, testing an RLOC for reachability, or
 refreshing a mapping before TTL expiry).  When the ITR knows an RLOC
 for the relevant ETR (e.g. from the map-cache entry), the ITR can
 create a Map-Request destined directly to that RLOC.  If the ITR
 does not know the relevant ETR to query, then the Mapping Service
 [LISP-MS] must be used.  To do this, the ITR creates a Map-Request
 destined to the destination-EID and LISP encapsulates it as an
 "Encapsulated Control Message" that is destined to the Mapping
 Service [LISP-MS].  When an ITR receives a successful Map-Reply, the
 ITR updates the cached set of RLOCs associated with the EID prefix
 range."

We don't want to say this right here because there are too many options and if we reduce the set, we don't want to rewrite this text.

The API to the mapping system that xTRs use are the Map-Request, Map- Reply, and Map-Register messages. That we don't want to change if we change the mapping system. Right now, the mapping system is pretty modular and it is easy to change in and out without modifications to ITRs and ETRs.

t) p.33 Record TTL:
 "Record TTL: The time in minutes the recipient of the Map-Reply will
 store the mapping.  If the TTL is 0, the entry SHOULD be removed
 from the cache immediately.  If the value is 0xffffffff, the
 recipient can decide locally how long to store the mapping."

Since the ITR controls its own cache and cache entries, what I think
you meant and would be more clear is:

 "Record TTL: The maximum time in minutes that the recipient of the
 Map-Reply may store the mapping.  If the TTL is 0, the entry MUST
 be removed from the cache immediately.  IF the value is 0xFFFFFFFF,
 the mapping does not expire and may be stored indefinitely."

You changed "will" to "may". We wanted stronger language than what you provided. We don't want ITRs to ignore TTL values.

u) p. 33 No-Action: What packet encapsulation can happen!??!!  There's
no RLOC to send the packet to!  Please clarify.

I will fix and say, the packet is dropped. Thanks.

v) p. 33 Drop: On dropping the packet, is the sender ever notified?
What about some ICMP for troubleshooting?

Up to the implementation.

w) p. 34 Weight: Why is the ETR specifying that all locators get equal
weight used for the ITR getting to decide?  This seems like a valid
decision by the ETR!  Why not use weight=0 means ITR gets to decide as
clearly specified on p.44 first full bullet?

The ETR allows the ITR to decide *within the highest priority* set of locators.

x) p. 36 Mapping Protocol Data: [ALT] does not use this field.  Please
remove the reference.

Agree, will remove.

y) p.46: What happens when two ITRs send different LSB information
(e.g. in the case of a partitioned LISP site)?

The ETR can note the fact and decide to probe each one to find out what is going on. If the LSBs are in conflict, the ETR can conclude that the site is partitioned.

z) p.53 2nd paragraph from end: Unsolicited SMR-based Map-Requests
MUST be sent to the mapping database system seems like an easy way to
do a DDoS on the mapping database system - and have them all look
valid and authenticated.

That is not what the 2nd paragraph on page 53 says. Again, this is confusing to parse since you don't sight the exact text.

Map-Requests of all kind need to be rate-limited if the implementation is spec compliant. If not, then the MR should rate-limit accepting them. We did not specify this since there are all sorts of ways to mitigate this and more experimentation will be necessary to understand solutions better.

aa) Sec 7: How is a tunnel encapsulated packet received by an ETR with
an EID in the destination?  Do you mean a non-LISP-tunnel encapsulated
packet??

Years ago we used a concept of data-probes. That was a map-request in the form of an encapsulated data packet where the inner destination and outer destination were the same value. This assumed the core carried EID-prefixes. This is still in the spec because there are people who believe packets should not be dropped while waiting for a Map-Reply to be returned to an ITR.

ab) Sec 8 last bullet:
 "The technique of re-encapsulation ensures that packets only require
 one tunnel header.  So if a packet needs to be rerouted, it is first
 decapsulated by the ETR and then re-encapsulated with a new tunnel
 header using a new RLOC."

When would this legitimately happen?  It seems like risking looping...

When you want to redirect your encapsulation to an intermediate point for TE purposes, packet scrubbing purposes, to go through a stateful firewall, etc. And the TTL copying rules make it not loop forever.

ac) Sec 14: The list of LISP Control Packet types (Sec 6.1.1) should
also be an IANA registry...

That has not been decided by the working group.

Looking forward to your responses,
Alia

Thanks again,
Dino/Vince/Darrel/Dave

_______________________________________________
lisp mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/lisp

Reply via email to