Change v4 vivco-suboptions definition
Change the Vendor-Identifying Vendor class option (name "vivco-suboptions", code 124) from uint32 + binary to uint32 + uint8 + tuple array. Even if the RFC 3925 layout is more an array of records we have a trouble with multiple vendor id (the uint32 field): either a second vendor id is different and parsing uses the same value without reading it which is incorrect, or the second id is the same and it is not allowed by the RFC. See also #2520 about arrays and record types.
RFC 3925 layout is:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number1 |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data-len1 | |
+-+-+-+-+-+-+-+-+ |
/ vendor-class-data1 /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
| enterprise-number2 | ^
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| data-len2 | | optional
+-+-+-+-+-+-+-+-+ | |
/ vendor-class-data2 / |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
~ ... ~ V
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
...
The vendor-class-data comprises a series of separate items, each of
which describes some characteristic of the client's hardware
configuration or capabilities. Examples of vendor-class-data
instances might include the version of the operating system the
client is running or the amount of memory installed on the client.
Each instance of the vendor-class-data is formatted as follows:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data-len | |
+-+-+-+-+-+-+-+-+ opaque-data |
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note this includes a rewrite of the OptionVendorClass code in simpler (only one set of tuples, only the check of the data-len (uint8 / second field) to add) and must be considered when #1518 will be merged.