I know the theory, but one example should solve my problem. Any example, not necessarily using curls. Generally, I don’t know how to “pass” the file that will be used to test the upload speed.
Thats specified by InternetGatewayDevice.UploadDiagnostics.UploadURL.
The URL can be either FTP or HTTP, depending on value(s) in InternetGatewayDevice.Capabilities.PerformanceDiagnostic.UploadTransports. If you do FTP, the receiving FTP server has to either allow anonymous writes, or your CPE has to support FTP auth. FTP authentication is not part of the spec so it would require vendor support. If you choose FTP, I recommend you limit uploads to within your IP space and run a cron job every minute which purges all files older than 10 minutes. This will limit the attack surface and hopefully prevent your FTP server from being used as a drop for illicit files.