Subject: Re: [pcp] [I-D.ietf-pcp-upnp-igd-interworking] Issue #1: Get a Mapping

From: "Dan Wing" <[email-masked]>
Date: Fri, 2 Dec 2011 10:57:22 -0800

> -----Original Message-----
> From: [email-masked] [mailto:[email-masked]] On Behalf Of
> [email-masked]
> Sent: Tuesday, November 29, 2011 5:48 AM
> To: [email-masked]
> Subject: [pcp] [I-D.ietf-pcp-upnp-igd-interworking] Issue #1: Get a
> Mapping
> 
> Dear all,
> 
>    Context:  To list active mappings, an UPnP Control Point may issue
>       GetGenericPortMappingEntry(), GetSpecificPortMappingEntry() or
>       GetListOfPortMappings().
> 
>    Issue:  In the current version of the I-D, these methods are not
>       relayed to the PCP Server but are handled according to the
> content
>       of the local mapping table:
> 
>          Drawback: The answer to Get* may not be accurate since the IWF
>          has only a local knowledge of the global mapping table
.............................................^^^^^^
                              "home gateway's local", I think you meant?

>          Some applications issue first Get* to check whether a port is
>          in use or not before sending Add*. e.g., Microtorrent
>          (uTorrent) v2.2 calls GetSpecificPortMapping until it finds an
>          external available port, and then calls AddPortMapping().

To mimic that functionality, the UPnP IGD->PCP interworking function
can do a MAP request with the PREFER_FAILURE option.  Does that not
work?

>          Question for the WG: Do we allow relaying Get* to a PCP
>          request (MAP or GET)?
> 
>          +  No GET method is currently defined in the base PCP
> 
>          +  GET is an extension defined in I-D.boucadair-pcp-failure.

I don't see how GET solves the problem, especially considering
there is a race condition between when GET is issued and when
an actual subsequent mapping might be performed.  In that time,
which I admit is quite small, an implicit dynamic mapping (e.g.,
TCP SYN) or explicit dynamic mapping could occur, effectively
"stealing" the port that was available, just moments ago.

-d