code: func DiscoverNAT(ctx context.Context) (*NAT, error) {
  	var (
  		natInstance nat.NAT
  		err         error
  	)
  
  	done := make(chan struct{})
  	go func() {
  		defer close(done)
  		// This will abort in 10 seconds anyways.
  		natInstance, err = nat.DiscoverGateway()
  	}()
  
  	select {
  	case <-done:
  	case <-ctx.Done():
  		return nil, ctx.Err()
  	}
  
  	if err != nil {
  		return nil, err
  	}
  
  	// Log the device addr.
  	addr, err := natInstance.GetDeviceAddress()
  	if err != nil {
  		log.Debug("DiscoverGateway address error:", err)
  	} else {
  		log.Debug("DiscoverGateway address:", addr)
  	}
  
  	return newNAT(natInstance), nil
  }
docs: // DiscoverNAT looks for a NAT device in the network and
  // returns an object that can manage port mappings.