code: func (s *SimAdapter) Dial(dest *enode.Node) (conn net.Conn, err error) {
  	node, ok := s.GetNode(dest.ID())
  	if !ok {
  		return nil, fmt.Errorf("unknown node: %s", dest.ID())
  	}
  	srv := node.Server()
  	if srv == nil {
  		return nil, fmt.Errorf("node not running: %s", dest.ID())
  	}
  	// SimAdapter.pipe is net.Pipe (NewSimAdapter)
  	pipe1, pipe2, err := s.pipe()
  	if err != nil {
  		return nil, err
  	}
  	// this is simulated 'listening'
  	// asynchronously call the dialed destination node's p2p server
  	// to set up connection on the 'listening' side
  	go srv.SetupConn(pipe1, 0, nil)
  	return pipe2, nil
  }
docs: // Dial implements the p2p.NodeDialer interface by connecting to the node using
  // an in-memory net.Pipe