so i went to goodwill the other day and picked up an arista ap-c200 for $6.50. i figured it might be worth playing with a bit and it had wifi 6. there were like 4 or 5 of them, but i unfortunately only bought one.

it supports wifi 6, uses poe (or a dc jack, but that's lame) and more importantly has a serial console port.

default software

the default system is basically worthless without a really expensive arista cloud subscription. i thought the serial cli might be usable but it basically only provided troubleshooting utilities and nothing you could actually use to configure the thing. so that was a dead end

openwrt

luckily i found a post on reddit about a different arista ap where somebody mentioned getting openwrt onto a c200 in the comments. having just spent like an hour digging through the base cli with no luck this was pretty exciting. i was able to get it to work (thanks to posts from redditors CitroBoi and dosdude1, and forum user sanketnaik08) but had to cobble together a lot of information from disparate sources to get it going, so i'm going to make an effort to compile it here.

starting out

first, reset the ap by depowering it, pressing the reset button (hole near the console port) and repowering it, then hold the button for another like 10 seconds or so and release.

once you do this you can connect to the serial console. the settings are 115200.8.N.1 and a generic rj45-usb-serial adapter worked fine for me. the default username and password will both be 'config'

next you'll need to update the ap to a vulnerable firmware (13.0.0, citrioboi provided files for this which i've mirrored here. download the files into some directory on your machine and start up an http server on port 80 (since the ap's update command doesn't support alternative ports) to serve them. the upgrade_bundle.tgz.enc and upgrade_bundle.tgz.enc.sig need to be in the same directory, which can be the root of the webserver.

run the update command in the ap cli, say yes to everything, and set the "version string" to 13.0.0-67 and the "vendor build version" to 10. you'll also want to set a full custom url for the update server to http://<server ip>/path/to/upgrade_bundles

wait for this update to complete, if everything succeeds (and maybe even if it doesn't) the ap will reboot. once it does, log in with the same username and password and check the version with get version or show version or version (depending on what version it is, obnoxiously)

if you see a 13.0.0 version you're ready to go. execute the command radartool params ;sh; radio 0 and you'll get dropped out of the restricted config-shell into a normal user shell as the user config. you can now just run su to get into a root shell with no password.

from the root shell, we'll need to set a few u-boot variables in order to get ourselves into the bootloader. run these commands:

fw_setenv bootdelaykey n
fw_setenv bootstopkey n
fw_setenv bootdelay 6

then reboot the ap and start mashing the n key until you get dropped into a u-boot prompt: IPQ6018#

get images

next we'll need some openwrt images. due to great work by citrioboi and sanketnaik08 there is some support for this board. unfortunately this support is for a slightly different product (evidence from some incorrect LED pin assignments) but it will work for all networking purposes as far as i can tell.

building your own

you can build an image from my fork which i might have kept in pace with upstream, or you can merge in upstream if i didn't.

make sure you select 'Qualcomm Atheros 802.11ax WiSoC-s' for the target and 'Qualcomm Atheros ipq60xx' as the subtarget, then 'Arista ap-cp01-c3' for target profile. you will also need to extract the kernel from the built ubi image manually, using a tool like ubidump to save volume 0 (which will show as an unsupported volume type)

otherwise just follow the openwrt image building guide.

prebuilt images

you can use the ubi file and kernel.bin from here

flashing

you'll need to set up a tftp server on your machine. that's out of scope of this guide. once you do that, put the ubi image file and kernel.bin file in the tftp server root. i'd recommend renaming the ubi image to a shorter name.

back in the u-boot console we got to earlier, set the ip address of the ap and the ip address of the tftp server using commands setenv ipaddr <ap's ip> and setenv serverip <server's ip>. make sure that they can see each other.

then, run tftpboot <name of your ubi file> to download the file into ram on the ap. once this completes, run flash rootfs to flash the rootfs (wow).

next tftpboot kernel.bin. we need to flash this kernel image to the spi flash, so do these commands to finish that:

sf probe
sf erase ${kernel} ${kernel_size}
sf write ${fileaddr} ${kernel} ${filesize}

finally, we need to tell uboot how to boot our new system and set the kernel command line:

setenv bootargs "console=ttyMSM0,115200n8·rootfstype=squashfs·ubi.mtd=0·ubi.block=0,rootfs·root=/dev/ubiblock0_1"
setenv ubootscript "sf·probe;·sf·read·${fileaddr}·${kernel}·${kernel_size};·bootm·${fileaddr};"

and actually finally: saveenv to ensure everything gets written to storage.

you should now be able to bootm ${fileaddr} and get into your new openwrt system!

next steps

configure openwrt as normal, i guess. out of scope of this post. hopefully this was helpful.