Workaround

I’m not sure what was going wrong with what I was doing initially, but, thanks to @[email protected], as suggested, I disabled the tftp server system service, and, instead, started it with the following command:

sudo in.tftpd -L /srv/tftp --verbose --permissive -s

and it then flashed successfully.

Original Post

I’m trying to flash firmware to a router (Archer C7) using TFTP, but, when the router makes the request for the firmware file over TFTP, the TFTP server responds with the following error

Error code: Access violation (2)
Error message: Only absolute filenames allowed

This is the config for tftpd in /etc/conf.d/tftpd:

TFTP_OPTIONS="-s"
TFTP_DIRECTORY="/srv/tftp"
TFTP_USERNAME="tftp"
TFTP_ADDRESS="192.168.0.66:69"

I have the firmware file in /srv/tftp, and both the firmware file, and /srv/tftp have chmod 777 permissions.

The TFTP server is running on Archlinux, and is installed as tftp-hpa from the arch repos.


If I test as a client, I can get it to download if I specify the full (absolute) path to the file /srv/tftp/filename, so it seems that the config isn’t pointing the server to /srv/tftp as the relative path… How would I go about fixing that?

  • @scholar
    link
    English
    211 months ago

    Is it asking you to specify /srv/tftp/filename even though you’re in the directory?

    • KalciferOP
      link
      fedilink
      English
      2
      edit-2
      11 months ago

      That’s what seems to be happening. The directory is specified in the config file, but it appears that it is being ignored? It should be able to accept a non-absolute path, and then map relative to the specified directory in the config file.

      • @scholar
        link
        English
        211 months ago

        It probably won’t help, but have you tried mapping tftp to / and going to the absolute path from there?

        • KalciferOP
          link
          fedilink
          English
          211 months ago

          I set TFTP_DIRECTORY="/", and then restarted the service, but, unfortunately, it didn’t work.