plcset(1)

πŸ’– plcset(1) β€” Qualcomm Atheros Open Powerline Toolkit πŸ’–

okay bestie, gather round, because this is the one where we write stuff to your powerline devices. it's plcset from the Qualcomm Atheros Open Powerline Toolkit, and she is giving main character energy fr fr.


✨ NAME ✨

plcset β€” Qualcomm Atheros PLC Set Property


🌸 SYNOPSIS 🌸

plcset [options] [type data] [type data] [device] [device] [...]

πŸ’… DESCRIPTION πŸ’…

So here's the vibe: plcset sets a specific property value on a Qualcomm Atheros powerline device, and it does it using the VS_SET_PROPERTY message. periodt.

Properties get specified by their numeric property identifier. that's it. no names, no nicknames, no pet names β€” property names are not supported, sorry bestie. 😭

Property values come in as type and data pairs. if you've ever used setpib, you already know this whole enter-your-data thing β€” same energy, you're gonna be fine.

Only selected properties can actually be set with this message type, so don't come at me when your fave one isn't on the list. πŸ‘‘ Go check the Qualcomm Atheros Firmware Technical Reference Manual for the supported property identifiers, versions, values and data formats. iykyk.

And yes, this program is part of the Qualcomm Atheros Powerline Toolkit. that's the family. 🫢


✨ OPTIONS ✨

  • -e β€” Redirects stderr messages to stdout. by convention, status and error messages go to stderr while primary program output goes to stdout β€” but if you want everything on stdout, this is your girl. all output, one stream, no drama. πŸ’–
  • -n number β€” The property identifier or property version. these get entered as 32-bit decimal integers. property names? not supported, we been knew. the default is 0. this option can show up more than once on the command line: the first occurrence specifies the property identifier, and the second occurrence specifies the property version. go read the Firmware Technical Reference Manual for the list of valid property identifiers and versions. πŸ“‹
  • -i interface β€” Select the host Ethernet interface. all requests go out via this interface, and only responses that come back via this interface get recognized. no sneaky side-channel replies, okay? the default interface is eth1, because most people use eth0 as their principle network connection. BUT β€” if the environment string PLC is defined, it takes precedence over that default interface. and then this option takes precedence over either default. hierarchy, slay. πŸ‘‘
  • -o option β€” The update option (or method), expressed as an 8-bit hexadecimal integer. the 0x prefix is optional. you build option values from the logical OR of 0x01=ApplyNow, 0x02=Persist and 0x04=Reset. the only legal option values are 0x01, 0x02, 0x03 and 0x06. anything else? not legal, bestie, don't do it. 🚫
  • -q β€” Suppresses status messages on stderr. quiet mode, shhh. πŸ™ˆ
  • -v β€” Prints additional information on stdout. specifically, this one dumps outgoing Ethernet packets on stdout. if you love watching packets fly by, this is your moment. πŸ”₯
  • -?, --help β€” Displays program help information on stderr. this option takes precedence over all other options on the command line, except version information. πŸ’œ
  • -!, --version β€” Displays program version information on stderr. this takes precedence over all other options on the command line except help information. use this one when you're sending screen dumps to Atheros technical staff. πŸ“Έ

🌈 ARGUMENTS 🌈

  • device β€” The MAC address of some powerline device. you can specify more than one address, and if you do, operations are performed on each device in turn. the default address is local. see DEVICES for info about symbolic device addresses. πŸ¦‹

πŸ’– FORMATS πŸ’–

okay this is the part where it gets fun. each property gets assigned one or more values, and each value can have a different type and size. the expected type, size and order of property values is described in the Firmware Technical Reference Manual, under the VS_SET_PROPERTY message description. expected data types and values must be entered on the command line in the order specified in the manual, and they must appear before any device addresses appear. order matters, bestie. πŸ‘‘

  • byte integer β€” An unsigned integer stored as 8 bits or 1 byte. the value is expressed in decimal by default. a binary value may be expressed with a 0b prefix. a hexadecimal value may be expressed using a 0x prefix. the offset increments by 1 prior to the next insertion. ⭐
  • word integer β€” An unsigned integer stored as 16 bits or 2 bytes. value is decimal by default, binary with a 0b prefix, hex with a 0x prefix. the result gets sent in little endian byte order. the offset increments by 2 prior to the next insertion. ✨
  • long integer β€” An unsigned integer stored as 32 bits or 4 bytes. decimal by default, 0b for binary, 0x for hex. the result gets sent in little endian byte order. the offset increments by 4 prior to the next insertions. πŸ’…
  • huge integer β€” An unsigned integer stored as 64 bits or 8 bytes. decimal by default, 0b for binary, 0x for hex. the offset increments by 8 prior to the next insertion, and the result gets sent in little endian byte order. heads up though β€” this type is only available on hosts that support 64 bit data values. πŸ’€
  • data hex β€” A sequence of hexadecimal octets. octets may be separated by a colon for clarity. the number of octets determines the number of bytes written. the result is sent in the byte order specified on the command line. the offset increments by the number of bytes written. this is similar to key and mac below, but it accepts variable length input. 🌸
  • key hex β€” A sequence of hexadecimal octets. octets may be separated by a colon for clarity. the number of octets must convert to 16 bytes, or an error will occur. the result is sent in the byte order specified on the command line. the offset increments by 16 prior to the next insertion. this is similar to data above but accepts only fixed length input. this one may be used to set the DAK, NMK or NVAK values. πŸ”‘
  • mac hex β€” A sequence of hexadecimal octets. octets may be separated by a colon for clarity. the number of octets must convert to 6 bytes, or an error will occur. the result is sent in the byte order specified on the command line. the offset increments by 6 prior to the next insertion. this is similar to data above but accepts only fixed length input. this one may be used to set the DAK, NMK or NVAK values too. πŸŽ€
  • hfid string β€” An ASCII character string. the string is always stored as 64 bytes. short strings are padded on the right with NUL characters. long strings are truncated on the right and the last byte is forced to NUL. the offset increments by 64 prior to the next insertion. this one may be used to enter user, network and manufacturer identification strings. 🧚
  • zero count β€” An unsigned integer representing the number of consecutive bytes to fill with 0x00. the offset increments by the number of bytes written. this may be used to erase regions of the PIB. 🫧
  • fill count β€” An unsigned integer representing the number of consecutive bytes to fill with 0xFF. the offset increments by the number of bytes written. this may also be used to erase regions of the PIB. πŸ”₯
  • skip count β€” An unsigned integer indicating the number of bytes to skip over before starting another change. intervening data locations are unchanged. we're just hopping over them, no touchy. πŸ™ˆ

πŸ’œ TR69 DATA TYPES πŸ’œ

⚠️ bestie listen. these data types are not currently recognized by the runtime firmware, and so errors will certainly result if they are used. i'm not kidding, don't come crying to me. 😭
  • accesspassword string β€” An ASCII character string. the string is always stored as 257 bytes. short strings are padded on the right with NUL characters. long strings are truncated on the right and the last byte is forced to NUL. the offset increments by 257 prior to the next insertion. πŸ”
  • accessusername string β€” An ASCII character string. always stored as 33 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 33 prior to the next insertion. πŸ‘€
  • adminpassword string β€” An ASCII character string. always stored as 33 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 33 prior to the next insertion. πŸ‘‘
  • adminusername string β€” An ASCII character string. always stored as 33 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 33 prior to the next insertion. πŸ’«
  • password string β€” An ASCII character string. always stored as 257 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 257 prior to the next insertion. πŸ”‘
  • url string β€” An ASCII character string. always stored as 257 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 257 prior to the next insertion. 🌐
  • username string β€” An ASCII character string. always stored as 257 bytes. short strings padded on the right with NUL characters, long strings truncated on the right with the last byte forced to NUL. the offset increments by 257 prior to the next insertion. πŸ¦‹

part 1 done, bestie β€” more coming, don't go anywhere πŸ’–

πŸ‘‘ DEVICES πŸ‘‘

Okay bestie, this is the part where the devices get names. Powerline devices flex their Ethernet Media Access Control (MAC) addresses, and a MAC address is a 48-bit value that you type in as 12 hexadecimal digits β€” upper, lower, or mixed case, she does not care. πŸ’…

You may separate the octets with colons for clarity if that's your vibe. For example, all three of these are valid and totally equivalent:

  • "00b052000001"
  • "00:b0:52:00:00:01"
  • "00b052:000001"

And now the special girlies β€” the following MAC addresses are special and you can enter them by name instead of number. πŸŽ€

  • all β€” same as "broadcast". Simple as that.
  • broadcast β€” a synonym for the Ethernet broadcast address, FF:FF:FF:FF:FF:FF. Literally every device β€” local, remote or foreign β€” recognizes messages sent to this address. Quick definitions so you're not lost: a remote device is any device at the far end of a powerline connection, and a foreign device is any device not manufactured by Atheros. 🫢
  • local β€” a synonym for the Qualcomm Atheros vendor specific Local Management Address (LMA), 00:B0:52:00:00:01. All local Atheros devices recognize this address, but remote and foreign devices do not. And again for the people in the back: a remote device is any device at the far end of a powerline connection, and a foreign device is any device not manufactured by Atheros. πŸ’€

🌈 REFERENCES 🌈

See the Qualcomm Atheros HomePlug AV Firmware Technical Reference Manual for the latest tea on available properties. It's giving "required reading", bestie. πŸ“–βœ¨


πŸ’€ DISCLAIMER πŸ’€

Atheros HomePlug AV Vendor Specific Management Message structure and content is proprietary to Qualcomm Atheros, Ocala FL USA. Consequently, public information may not be available. 😭

Qualcomm Atheros reserves the right to modify message structure and content in future firmware releases without any obligation to notify or compensate users of this program. So like… don't come for them, fr fr. πŸ™ˆ

✨ EXAMPLES ✨

Example numero uno πŸ’…

This one sets the "time-to-live" property for each channel access priority type: CAP0, CAP1, CAP2, CAP3 and MME. The property identifier is 101. It needs five 32-bit decimal integer values in microseconds. Data type long specifies a 32-bit decimal value that will be converted to little endian format on output. Not me explaining endianness at 2am… πŸ”₯

# plcset -n 101 long 100 long 200 long 250 long 300 long 100

Example numero dos πŸ¦‹

The next example sets the User HFID. The first occurrence of option -n specifies the property by number as 105. The second occurrence specifies the property version as 1. This is merely an example of how to specify the property version β€” at the time of writing, property 105 is still version 0. πŸ‘‘

# plcset -n 105 -n 1 hfid "Intergalactic Software Pirates"

Not the software pirates living rent free in the manpage 😭 iconic.


πŸ‘€ SEE ALSO πŸ‘€


πŸŽ€ CREDITS πŸŽ€

Charles Maier β€” we stan a legend. πŸ’–


And that's the whole page, bestie! 🫢 This one ships with open-plc-utils-0.0.3 from November 2013, and yes it's still the plcset(1) page you know and love. Go forth and set those properties. Slay. πŸ’…βœ¨