Here is a quick rundown of how other clients handle this.

* [odhcp6c][1] passes a single `PREFIXES` variable that contains a space separated list of prefixes in the form: `<prefix>/<length>,preferred,valid[,excluded=<excluded-prefix>/<length>][,class=<prefix class #>]`
* [Dibbler][2] passes a numbered set of variables for each prefix, e.g. `PREFIX1`, `PREFIX1LEN`, `PREFIX1PREF`, `PREFIX1VALID`, `PREFIX2`...
* [ISC DHCP][3] The best I can tell can't handle multiple prefixes, they just get overwritten. The variables used are `ip6_prefix`, `life_starts`, `preferred_life` and `max_life`. Each is prefixed with `new_`, `old_` or `cur_` depending on why the script was called (bind, rebind, expire). Although this doesn't seem to be documented anywhere.

Personally, I like the approach odhcp6c uses. It also fits in with my changes to support prefixes other than /64, see saintdev@8888e7f. Although keeping the lifetimes as separate variables would make parsing a little easier. Maybe somewhere in between odhcp6c and Dibbler?
```
new_iapd_prefix="<prefix1>/<len1> <prefix2>/<len2>"
new_valid_lifetime="<lifetime1> <lifetime2>"
new_preferred_lifetime="<lifetime1> <lifetime2>"
```

Also, as I was typing that out, I remembered you can have both prefix (IA_PD) lifetimes and address (IA_NA) lifetimes. So it should be clear which lifetimes these are.

[1]: https://github.com/sbyx/odhcp6c
[2]: http://klub.com.pl/dhcpv6/
[3]: https://www.isc.org/downloads/dhcp/