<div dir="ltr">Dear folks<div><br></div><div>Back in <a href="https://redmine.named-data.net/issues/1515">Apr 2014</a>, we introduced <b>implicit face creation</b> to nfdc. This feature allows an operator to type a command:<br><font face="monospace, monospace">nfdc register / udp://<a href="http://hobo.cs.arizona.edu">hobo.cs.arizona.edu</a></font></div><div>to perform two actions: (1) create a face to the specified router if it does not exist (2) register a route toward the specified face.</div><div><br></div><div>However, there has been some problems in this feature:</div><div><br></div><div>1.</div><div>Only unicast UDP and TCP faces can be used in the FaceUri. Multicast UDP faces and Ethernet faces cannot be written as FaceUri, but must be specified as FaceId. This has led to user confusions. To name a few:</div><div><a href="http://www.lists.cs.ucla.edu/pipermail/nfd-dev/2016-June/001839.html">http://www.lists.cs.ucla.edu/pipermail/nfd-dev/2016-June/001839.html</a></div><div><a href="https://redmine.named-data.net/issues/3276">https://redmine.named-data.net/issues/3276</a><br></div><div><a href="http://www.lists.cs.ucla.edu/pipermail/nfd-dev/2015-April/001013.html">http://www.lists.cs.ucla.edu/pipermail/nfd-dev/2015-April/001013.html</a><br></div><div><br></div><div>2.</div><div><font face="monospace, monospace">nfdc register</font> can implicitly create a face, but <font face="monospace, monospace">nfdc unregister</font> cannot.</div><div><br></div><div>3.</div><div>When creating a face, it's necessary to specify its persistency. This isn't currently possible with implicit face creation, although there is a feature request:</div><div><a href="https://redmine.named-data.net/issues/3229">https://redmine.named-data.net/issues/3229</a><br></div><div><br></div><div>4.</div><div>If the operator mistypes a FaceUri in <font face="monospace, monospace">nfdc register</font> command, there would be no warning.</div><div><a href="https://redmine.named-data.net/issues/1515#note-10">https://redmine.named-data.net/issues/1515#note-10</a> argues against implicitly creating a face in <font face="monospace, monospace">nfdc unregister</font> command because of that, but the same argument applies to <font face="monospace, monospace">nfdc register</font> as well.</div><div><br></div><div><br></div><div>I propose dropping implicit face creation feature during nfdc refactoring:</div><div>(1) <font face="monospace, monospace">nfdc face create</font> is the only subcommand that can create a face.</div><div>(2) <font face="monospace, monospace">nfdc route add</font> and <font face="monospace, monospace">nfdc route remove</font> (replacements of <font face="monospace, monospace">nfdc register</font> and <font face="monospace, monospace">nfdc unregister</font>) do not implicitly create faces. They can accept either FaceId or FaceUri. When specifying FaceUri, we query the existing faces whose RemoteUri matches the specified FaceUri. If one exact match is found, that face is used. If no face with that RemoteUri is found, an error message is printed. If two or more matches are found, an error message is printed with the list of matched faces, and the operator can re-run the command with one of the FaceIds from that list.</div><div><br></div><div>This is consistent with iproute2 programs, where you must explicitly create an interface before using it in IP routing tables.</div><div><br></div><div><br></div><div>Yours, Junxiao</div></div>