go-ndn / nfd

NDN forwarder
GNU General Public License v2.0
6 stars 0 forks source link

rib/register: incorrect response format #5

Closed yoursunny closed 9 years ago

yoursunny commented 9 years ago

Steps to reproduce:

  1. start go-nfd
  2. in $HOME/.ndn/client.conf, write transport=tcp4://127.0.0.1:6363
  3. ndnpingserver /A

Expected: ndnpingserver registers a prefix on go-nfd, and continues running Actual:

ERROR: Failed to register prefix in local hub's daemon
REASON: expecting TLV-TYPE ControlParameters
yoursunny commented 9 years ago

Diagnostic:

  1. change nfd.json to make go-nfd listen on port 6362
  2. run socat TCP-LISTEN:6363 SYSTEM:'tee l2r | socat - "TCP:localhost:6362" | tee r2l' to log communication between application and go-nfd to a file
  3. performs the steps above
  4. inspect l2r and r2l log files with tlvdump

It's revealed that the reply Data from go-nfd is:

6 (Data) (size: 440)
  7 (Name) (size: 384)
    8 (NameComponent) (size: 9) [[localhost]]
    8 (NameComponent) (size: 3) [[nfd]]
    8 (NameComponent) (size: 3) [[rib]]
    8 (NameComponent) (size: 8) [[register]]
    8 (NameComponent) (size: 16)
      104 (RESERVED_1) (size: 14)
        7 (Name) (size: 9)
          8 (NameComponent) (size: 1) [[A]]
          8 (NameComponent) (size: 4) [[ping]]
        108 (RESERVED_1) (size: 1) [[%01]]
    8 (NameComponent) (size: 8) [[%00%00%01MUv%22%BD]]
    8 (NameComponent) (size: 8) [[%8E%1BV%ED%3BP%EE%A2]]
    8 (NameComponent) (size: 49)
      22 (SignatureInfo) (size: 47)
        27 (SignatureType) (size: 1) [[%01]]
        28 (KeyLocator) (size: 42)
          7 (Name) (size: 40)
            8 (NameComponent) (size: 5) [[hello]]
            8 (NameComponent) (size: 3) [[KEY]]
            8 (NameComponent) (size: 17) [[ksk-1431635096594]]
            8 (NameComponent) (size: 7) [[ID-CERT]]
    8 (NameComponent) (size: 260)
      23 (SignatureValue) (size: 256) [[%12%F9h%E1%CE%3A%89y%08%B5h%0E%AD5%27%96%27%8D%8A%29%C5%97%CF%0A%F7%8Fd%B3%1CX6%3C%1F%B9%3F%0D%18%EEaz%E88%01pP%A7%89%10%D5%D4%3C%0C6%1E%EC%1D%3A%DC%9DC%D2%19%9B%1D%B1i%C2%D1%5D%7C%C2%91%85%F8%E2%81rF%FC%5C%04R%F4%D6%F0C%92c%9D%18%B3%A5%A6l%3B%2FH%9AqA%28%D2%85%93%A2%8F%DB%95%3B%F4t%D9%1C%F1%3Dt%15%96R%7E%92%D8%0D%F6%3AM%2A8%B2%FAgx%BD%CD%A5%E8v%CD%A3%8B%92%A8JF%12A-%1B%BA%B9%5C%0Cn%D0%10%B3%25%3AC%FE%25%DF%B1r%3AJ%D0%94%06%16%E2%07%C4Z%99%E21%FC%5B%5CA%F1V%E2%8A%8F%2A%C8%BF%A5%B7%21%CB%5BA%CD%15%E8%A27c%05%8F%1AX%DC%96%C9%159cl%03F%B3%28%1F%92%B6%5B%10%28Vn%0D%C7%97%FC%2A%F4%BB%81B%D1%F2%C6%08%C1%FE%FA%25%0C%BE6%BAV%83%E7%05%3D%3A%BA%E2%0E%F8%7E]]
  20 (MetaInfo) (size: 0) [[...]]
  21 (Content) (size: 9)
    101 (RESERVED_1) (size: 7)
      102 (RESERVED_1) (size: 1) [[%C8]]
      103 (RESERVED_1) (size: 2) [[OK]]
  22 (SignatureInfo) (size: 3)
    27 (SignatureType) (size: 1) [[%00]]
  23 (SignatureValue) (size: 32) [[%D2%B9%A2Y%BD%CC%EF19%D5%9C%C3%D9%BC%EA%F3%CA%D7%D1%80%27%C9%0A%0D%16%9E%F2n%8A%84%C88]]

From rib/register spec of NFD Management protocol:

If the command succeeds, in ControlResponse block contains updated ControlParameters:

  • Name: Name prefix
  • FaceId: nexthop FaceId (not zero)
  • Route: route origin
  • Cost: route cost
  • Flags: inclusive OR of route inheritance flags
  • ExpirationPeriod: remaining lifetime (in milliseconds), or omitted if it's Infinity

go-nfd returns empty for , which violates this protocol.

taylorchu commented 9 years ago

Should be fixed now. I don't have that ndnpingserver on my system, so please verify the fix. Thanks.

On Thu, May 14, 2015 at 7:51 PM, yoursunny notifications@github.com wrote:

Diagnostic:

  1. change nfd.json to make go-nfd listen on port 6362
  2. run socat TCP-LISTEN:6363 SYSTEM:'tee l2r | socat - "TCP:localhost:6362" | tee r2l'
  3. performs the steps above
  4. inspect l2r and r2l log files with tlvdump

It's revealed that the reply Data from go-nfd is:

6 (Data) (size: 440) 7 (Name) (size: 384) 8 (NameComponent) (size: 9) [[localhost]] 8 (NameComponent) (size: 3) [[nfd]] 8 (NameComponent) (size: 3) [[rib]] 8 (NameComponent) (size: 8) [[register]] 8 (NameComponent) (size: 16) 104 (RESERVED_1) (size: 14) 7 (Name) (size: 9) 8 (NameComponent) (size: 1) [[A]] 8 (NameComponent) (size: 4) [[ping]] 108 (RESERVED_1) (size: 1) [[%01]] 8 (NameComponent) (size: 8) [[%00%00%01MUv%22%BD]] 8 (NameComponent) (size: 8) [[%8E%1BV%ED%3BP%EE%A2]] 8 (NameComponent) (size: 49) 22 (SignatureInfo) (size: 47) 27 (SignatureType) (size: 1) [[%01]] 28 (KeyLocator) (size: 42) 7 (Name) (size: 40) 8 (NameComponent) (size: 5) [[hello]] 8 (NameComponent) (size: 3) [[KEY]] 8 (NameComponent) (size: 17) [[ksk-1431635096594]] 8 (NameComponent) (size: 7) [[ID-CERT]] 8 (NameComponent) (size: 260) 23 (SignatureValue) (size: 256) [[%12%F9h%E1%CE%3A%89y%08%B5h%0E%AD5%27%96%27%8D%8A%29%C5%97%CF%0A%F7%8Fd%B3%1CX6%3C%1F%B9%3F%0D%18%EEaz%E88%01pP%A7%89%10%D5%D4%3C%0C6%1E%EC%1D%3A%DC%9DC%D2%19%9B%1D%B1i%C2%D1%5D%7C%C2%91%85%F8%E2%81rF%FC%5C%04R%F4%D6%F0C%92c%9D%18%B3%A5%A6l%3B%2FH%9AqA%28%D2%85%93%A2%8F%DB%95%3B%F4t%D9%1C%F1%3Dt%15%96R%7E%92%D8%0D%F6%3AM%2A8%B2%FAgx%BD%CD%A5%E8v%CD%A3%8B%92%A8JF%12A-%1B%BA%B9%5C%0Cn%D0%10%B3%25%3AC%FE%25%DF%B1r%3AJ%D0%94%06%16%E2%07%C4Z%99%E21%FC%5B%5CA%F1V%E2%8A%8F%2A%C8%BF%A5%B7%21%CB%5BA%CD%15%E8%A27c%05%8F%1AX%DC%96%C9%159cl%03F%B3%28%1F%92%B6%5B%10%28Vn%0D%C7%97%FC%2A%F4%BB%81B%D1%F2%C6%08%C1%FE%FA%25%0C%BE6%BAV%83%E7%05%3D%3A%BA%E2%0E%F8%7E]] 20 (MetaInfo) (size: 0) [[...]] 21 (Content) (size: 9) 101 (RESERVED_1) (size: 7) 102 (RESERVED_1) (size: 1) [[%C8]] 103 (RESERVED_1) (size: 2) [[OK]] 22 (SignatureInfo) (size: 3) 27 (SignatureType) (size: 1) [[%00]] 23 (SignatureValue) (size: 32) [[%D2%B9%A2Y%BD%CC%EF19%D5%9C%C3%D9%BC%EA%F3%CA%D7%D1%80%27%C9%0A%0D%16%9E%F2n%8A%84%C88]]

The payload is not a valid ControlResponse, as defined in NFD Management protocol, Control Command, Response Format section.

— Reply to this email directly or view it on GitHub https://github.com/go-ndn/nfd/issues/5#issuecomment-102234254.

yoursunny commented 9 years ago

The scenario is still failing. You should install ndnpingserver (from ndn-tools repository) and try it yourself.

taylorchu commented 9 years ago

=== Ping Server /A ===

it is working!

On Fri, May 15, 2015 at 8:54 PM, yoursunny notifications@github.com wrote:

The scenario is still failing. You should install ndnpingserver (from ndn-tools repository) and try it yourself.

— Reply to this email directly or view it on GitHub https://github.com/go-ndn/nfd/issues/5#issuecomment-102569376.