Subject: [pcp] base-02 feedback

From: Francis Dupont <[email-masked]>
Date: Mon, 27 Dec 2010 15:36:11 +0100

I am implementing PCP for DS-Lite, I found some issues:
 - we need an error code for too short packets:
  * packets smaller than 8 bytes should be simply ignored
  * packets smaller than the corresponding OpCode should raise an
   'malformed request' fatal error code.

 - we need a maximal size (I propose 1024 bytes: enough for everything
  and in general avoiding fragmentation) and a behavior for too large
  requests (simply ignoring them is not enough).
  BTW the 'malformed request' error code is usable for this too,
  the error response should be truncated to 1024.
  IMHO we need a new tracker item for this point.

 - HONOR_EXTERNAL_PORT must be a mandatory (code >= 128) option.
  I understand the reasons to make it optional (code == 6) but this means
  a positive response could be generated without a successfully processing.

 - what to do when a mandatory option is in a request where it makes
  no sense, for instance (mandatory) HONOR_EXTERNAL_PORT in a delete request?
  I propose to use MALFORMED_OPTION or a new fatal error code.

 - I'd like to extended the AMBIGUOUS error code to cases where a dynamic
  mapping conflicts with a requested pinhole. The difference with
  the current meaning is a REMOTE_PEER option won't be enough to solve it.
  BTW the error stays transcient.

 - I strongly disagree with the client port text (6.1.1 page 13):
  * there is no reason to require port randomization
  * to bind for port randomization is a heavy requirement for client
   implementations
  * the 'single UDP port' wording is bad: we should only recommend
   a client uses the same source UDP port to (re)transmit a request
   to a server (BTW this means the UDP socket should be connected).

 - same text, minor concerns
  * The 'repeat 4 times' wording is ambiguous: does it mean there
   should be up to 4 retransmits or up to 4 transmits?
  * there is nothing about what to do with transient errors
   (try another server, restart the whole procedure after XX (I propose 60)
    seconds, etc)

Regards

[email-masked]