[Nfd-dev] YaNFD cannot create TCP face

XINYU MA ma.xinyu.26a at kyoto-u.jp
Mon Sep 26 01:28:57 PDT 2022


Hello, Guangyu,

Thank you for the report.
The reason seems to be the remote YaNFD side. The TCP listener considers
the remote URI of the new face as an UDP face (with
RemoteURI=udp4://XX:6363, LocalUI=tcp4://XX:6363), and thus it is unable to
maintain the connection.
I will investigate this problem but I'm not sure when I can fix it. If you
are willing to, please open an issue on GitHub
<https://github.com/named-data/YaNFD/issues>.

Best regards,
Xinyu Ma.

2022年9月26日(月) 0:05 郝广宇 <haoguangyu at chorustek.com>:

> Hello,
> We get the error when create the remote face between yanfd and yanfd, the
> following is the info about the error.
>
> from the intranet:
> nfdc face create remote tcp://120.53.13.74:6363
> Error 406 when creating face: Transport error
>
> the remote yanfd log:
> WARN[0481] [FaceMgmt] Unable to create unicast TCP face with URI
> tcp4://120.53.13.74:6363:Unable to connect to remote endpoint: dial tcp4
> :6363->120.53.13.74:6363: bind: address already in use
>
> Thanks a lot.
>
> Guangyu Hao
>
> ------------------ Original ------------------
> *From: * "XINYU MA"<ma.xinyu.26a at kyoto-u.jp>;
> *Date: * Thu, Sep 22, 2022 04:22 PM
> *To: * "郝广宇"<haoguangyu at chorustek.com>;
> *Cc: * "nfd-dev"<nfd-dev at lists.cs.ucla.edu>;
> *Subject: * Re: [Nfd-dev] YaNFD cannot create TCP face
>
> Hello,
> Thank you for reporting this bug.
> It should be fixed by
> https://github.com/named-data/YaNFD/commit/f7767468f3d4540e468bc0bd5a195066eb2a20d4
> Best wishes,
> Xinyu Ma.
>
> 2022年9月21日(水) 3:00 郝广宇 <haoguangyu at chorustek.com>:
>
>> I have a YaNFD issue of that failed with "nfdc face create remote
>> tcp4://X.X.X.X:6363", I read the source code that not tcp supported, the
>> following is the code.
>> No case of tcpURI?
>>
>> // Canonize attempts to canonize the URI, if not already canonical.
>> func (u *URI) Canonize() error {
>>  switch u.uriType {
>>  case devURI, fdURI:
>>   // Nothing to do to canonize these
>>  case ethernetURI:
>>   mac, err := net.ParseMAC(strings.Trim(u.path, "[]"))
>>   if err != nil {
>>    return core.ErrNotCanonical
>>   }
>>   u.scheme = "ether"
>>   u.path = mac.String()
>>   u.port = 0
>>  case udpURI:
>>   path := u.path
>>   zone := ""
>>   if strings.Contains(u.path, "%") {
>>    // Has zone, so separate out
>>    path = u.PathHost()
>>    zone = "%" + u.PathZone()
>>   }
>>   ip := net.ParseIP(strings.Trim(path, "[]"))
>>   if ip == nil {
>>    // Resolve DNS
>>    resolvedIPs, err := net.LookupHost(path)
>>    if err != nil || len(resolvedIPs) == 0 {
>>     return core.ErrNotCanonical
>>    }
>>    ip = net.ParseIP(resolvedIPs[0])
>>    if ip == nil {
>>     return core.ErrNotCanonical
>>    }
>>   }
>>
>>   if ip.To4() != nil {
>>    u.scheme = "udp4"
>>    u.path = ip.String() + zone
>>   } else if ip.To16() != nil {
>>    u.scheme = "udp6"
>>    u.path = ip.String() + zone
>>   } else {
>>    return core.ErrNotCanonical
>>   }
>>  case unixURI:
>>   u.scheme = "unix"
>>   testPath := "/" + u.path
>>   if runtime.GOOS == "windows" {
>>    testPath = u.path
>>   }
>>   fileInfo, err := os.Stat(testPath)
>>   if err != nil && !os.IsNotExist(err) {
>>    // File couldn't be opened, but not just because it doesn't exist
>>    return core.ErrNotCanonical
>>   } else if err == nil && fileInfo.IsDir() {
>>    // File is a directory
>>    return core.ErrNotCanonical
>>   }
>>   u.port = 0
>>  default:
>>   return core.ErrNotCanonical
>>  }
>>
>>  return nil
>> }
>> _______________________________________________
>> Nfd-dev mailing list
>> Nfd-dev at lists.cs.ucla.edu
>> https://www.lists.cs.ucla.edu/mailman/listinfo/nfd-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/nfd-dev/attachments/20220926/b5a73f33/attachment.html>


More information about the Nfd-dev mailing list