11566bc34SRobert Mustacchi /*
21566bc34SRobert Mustacchi * This file and its contents are supplied under the terms of the
31566bc34SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
41566bc34SRobert Mustacchi * You may only use this file in accordance with the terms of version
51566bc34SRobert Mustacchi * 1.0 of the CDDL.
61566bc34SRobert Mustacchi *
71566bc34SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this
81566bc34SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at
91566bc34SRobert Mustacchi * http://www.illumos.org/license/CDDL.
101566bc34SRobert Mustacchi */
111566bc34SRobert Mustacchi
121566bc34SRobert Mustacchi /*
131566bc34SRobert Mustacchi * Copyright (c) 2018, Joyent, Inc.
14*064d431aSRobert Mustacchi * Copyright 2024 Oxide Computer Company
151566bc34SRobert Mustacchi */
161566bc34SRobert Mustacchi
171566bc34SRobert Mustacchi /*
181566bc34SRobert Mustacchi * Primordial SMBIOS test suite. At the moment, the purpose of this is just to
191566bc34SRobert Mustacchi * test the recent SMBIOS 3.2 additions specific to the variable length slots.
201566bc34SRobert Mustacchi * This should be evolved into a much fuller test suite.
211566bc34SRobert Mustacchi */
221566bc34SRobert Mustacchi
231566bc34SRobert Mustacchi #include <umem.h>
24d53cdfabSRobert Mustacchi #include <sys/types.h>
25d53cdfabSRobert Mustacchi #include <sys/stat.h>
26d53cdfabSRobert Mustacchi #include <fcntl.h>
27d53cdfabSRobert Mustacchi #include <limits.h>
28d53cdfabSRobert Mustacchi #include <unistd.h>
29176a9270SRobert Mustacchi #include "smbios_test.h"
301566bc34SRobert Mustacchi
31d53cdfabSRobert Mustacchi static int test_dirfd = -1;
32d53cdfabSRobert Mustacchi
331566bc34SRobert Mustacchi const char *
_umem_debug_init(void)341566bc34SRobert Mustacchi _umem_debug_init(void)
351566bc34SRobert Mustacchi {
361566bc34SRobert Mustacchi return ("default,verbose");
371566bc34SRobert Mustacchi }
381566bc34SRobert Mustacchi
391566bc34SRobert Mustacchi const char *
_umem_logging_init(void)401566bc34SRobert Mustacchi _umem_logging_init(void)
411566bc34SRobert Mustacchi {
421566bc34SRobert Mustacchi return ("fail,contents");
431566bc34SRobert Mustacchi }
441566bc34SRobert Mustacchi
45176a9270SRobert Mustacchi smbios_test_table_t *
smbios_test_table_init(smbios_entry_point_t type,uint_t version)461566bc34SRobert Mustacchi smbios_test_table_init(smbios_entry_point_t type, uint_t version)
471566bc34SRobert Mustacchi {
481566bc34SRobert Mustacchi smbios_test_table_t *table;
491566bc34SRobert Mustacchi
501566bc34SRobert Mustacchi if (type != SMBIOS_ENTRY_POINT_30) {
511566bc34SRobert Mustacchi abort();
521566bc34SRobert Mustacchi }
531566bc34SRobert Mustacchi
541566bc34SRobert Mustacchi table = umem_zalloc(sizeof (smbios_test_table_t), UMEM_DEFAULT);
551566bc34SRobert Mustacchi if (table == NULL) {
561566bc34SRobert Mustacchi return (NULL);
571566bc34SRobert Mustacchi }
581566bc34SRobert Mustacchi
591566bc34SRobert Mustacchi table->stt_data = umem_zalloc(SMBIOS_TEST_ALLOC_SIZE, UMEM_DEFAULT);
601566bc34SRobert Mustacchi if (table->stt_data == NULL) {
611566bc34SRobert Mustacchi umem_free(table, sizeof (smbios_test_table_t));
621566bc34SRobert Mustacchi return (NULL);
631566bc34SRobert Mustacchi }
641566bc34SRobert Mustacchi table->stt_buflen = SMBIOS_TEST_ALLOC_SIZE;
651566bc34SRobert Mustacchi table->stt_type = type;
661566bc34SRobert Mustacchi table->stt_version = version;
671566bc34SRobert Mustacchi table->stt_nextid = 1;
681566bc34SRobert Mustacchi
691566bc34SRobert Mustacchi return (table);
701566bc34SRobert Mustacchi }
711566bc34SRobert Mustacchi
721566bc34SRobert Mustacchi static void *
smbios_test_table_append_common(smbios_test_table_t * table,const void * buf,size_t len)731566bc34SRobert Mustacchi smbios_test_table_append_common(smbios_test_table_t *table, const void *buf,
741566bc34SRobert Mustacchi size_t len)
751566bc34SRobert Mustacchi {
761566bc34SRobert Mustacchi void *start;
771566bc34SRobert Mustacchi
781566bc34SRobert Mustacchi if (SIZE_MAX - table->stt_offset < len)
791566bc34SRobert Mustacchi abort();
801566bc34SRobert Mustacchi
811566bc34SRobert Mustacchi if (len + table->stt_offset >= table->stt_buflen) {
821566bc34SRobert Mustacchi void *newbuf;
831566bc34SRobert Mustacchi size_t newlen = table->stt_buflen + SMBIOS_TEST_ALLOC_SIZE;
841566bc34SRobert Mustacchi
851566bc34SRobert Mustacchi while (len + table->stt_offset >= newlen) {
861566bc34SRobert Mustacchi newlen += SMBIOS_TEST_ALLOC_SIZE;
871566bc34SRobert Mustacchi }
881566bc34SRobert Mustacchi
891566bc34SRobert Mustacchi newbuf = umem_zalloc(newlen, UMEM_DEFAULT);
901566bc34SRobert Mustacchi if (newbuf == NULL) {
918d195583SRobert Mustacchi err(EXIT_FAILURE, "failed to umem_zalloc for %zu bytes",
921566bc34SRobert Mustacchi newlen);
931566bc34SRobert Mustacchi }
941566bc34SRobert Mustacchi
951566bc34SRobert Mustacchi (void) memcpy(newbuf, table->stt_data, table->stt_buflen);
961566bc34SRobert Mustacchi umem_free(table->stt_data, table->stt_buflen);
971566bc34SRobert Mustacchi table->stt_data = newbuf;
981566bc34SRobert Mustacchi table->stt_buflen = newlen;
991566bc34SRobert Mustacchi }
1001566bc34SRobert Mustacchi
1011566bc34SRobert Mustacchi start = (void *)((uintptr_t)table->stt_data + table->stt_offset);
1021566bc34SRobert Mustacchi (void) memcpy(start, buf, len);
1031566bc34SRobert Mustacchi table->stt_offset += len;
1041566bc34SRobert Mustacchi
1051566bc34SRobert Mustacchi return (start);
1061566bc34SRobert Mustacchi }
1071566bc34SRobert Mustacchi
108176a9270SRobert Mustacchi void
smbios_test_table_append_raw(smbios_test_table_t * table,const void * buf,size_t len)1091566bc34SRobert Mustacchi smbios_test_table_append_raw(smbios_test_table_t *table, const void *buf,
1101566bc34SRobert Mustacchi size_t len)
1111566bc34SRobert Mustacchi {
1121566bc34SRobert Mustacchi (void) smbios_test_table_append_common(table, buf, len);
1131566bc34SRobert Mustacchi }
1141566bc34SRobert Mustacchi
115176a9270SRobert Mustacchi void
smbios_test_table_append_string(smbios_test_table_t * table,const char * str)1161566bc34SRobert Mustacchi smbios_test_table_append_string(smbios_test_table_t *table, const char *str)
1171566bc34SRobert Mustacchi {
1181566bc34SRobert Mustacchi size_t len = strlen(str) + 1;
1191566bc34SRobert Mustacchi (void) smbios_test_table_append_common(table, str, len);
1201566bc34SRobert Mustacchi }
1211566bc34SRobert Mustacchi
122d53cdfabSRobert Mustacchi void
smbios_test_table_str_fini(smbios_test_table_t * table)123d53cdfabSRobert Mustacchi smbios_test_table_str_fini(smbios_test_table_t *table)
124d53cdfabSRobert Mustacchi {
125d53cdfabSRobert Mustacchi const uint8_t endstring = 0;
126d53cdfabSRobert Mustacchi
127d53cdfabSRobert Mustacchi smbios_test_table_append_raw(table, &endstring, sizeof (endstring));
128d53cdfabSRobert Mustacchi }
129d53cdfabSRobert Mustacchi
130176a9270SRobert Mustacchi uint16_t
smbios_test_table_append(smbios_test_table_t * table,const void * buf,size_t len)1311566bc34SRobert Mustacchi smbios_test_table_append(smbios_test_table_t *table, const void *buf,
1321566bc34SRobert Mustacchi size_t len)
1331566bc34SRobert Mustacchi {
1341566bc34SRobert Mustacchi smb_header_t *hdr;
1351566bc34SRobert Mustacchi uint16_t id;
1361566bc34SRobert Mustacchi
1371566bc34SRobert Mustacchi hdr = smbios_test_table_append_common(table, buf, len);
1381566bc34SRobert Mustacchi table->stt_nents++;
1391566bc34SRobert Mustacchi
1401566bc34SRobert Mustacchi id = table->stt_nextid;
1411566bc34SRobert Mustacchi hdr->smbh_hdl = htole16(table->stt_nextid);
1421566bc34SRobert Mustacchi table->stt_nextid++;
1431566bc34SRobert Mustacchi
1441566bc34SRobert Mustacchi return (id);
1451566bc34SRobert Mustacchi }
1461566bc34SRobert Mustacchi
147176a9270SRobert Mustacchi void
smbios_test_table_append_eot(smbios_test_table_t * table)148176a9270SRobert Mustacchi smbios_test_table_append_eot(smbios_test_table_t *table)
149176a9270SRobert Mustacchi {
150176a9270SRobert Mustacchi smb_header_t eot;
151176a9270SRobert Mustacchi uint8_t endstring = 0;
152176a9270SRobert Mustacchi
153176a9270SRobert Mustacchi bzero(&eot, sizeof (eot));
154176a9270SRobert Mustacchi eot.smbh_type = SMB_TYPE_EOT;
155176a9270SRobert Mustacchi eot.smbh_len = 4;
156176a9270SRobert Mustacchi (void) smbios_test_table_append(table, &eot, sizeof (eot));
157176a9270SRobert Mustacchi (void) smbios_test_table_append_raw(table, &endstring,
158176a9270SRobert Mustacchi sizeof (endstring));
159176a9270SRobert Mustacchi smbios_test_table_append_raw(table, &endstring,
160176a9270SRobert Mustacchi sizeof (endstring));
161176a9270SRobert Mustacchi smbios_test_table_append_raw(table, &endstring,
162176a9270SRobert Mustacchi sizeof (endstring));
163176a9270SRobert Mustacchi
164176a9270SRobert Mustacchi }
165176a9270SRobert Mustacchi
1661566bc34SRobert Mustacchi static uint8_t
smbios_test_table_checksum(const uint8_t * buf,size_t len)1671566bc34SRobert Mustacchi smbios_test_table_checksum(const uint8_t *buf, size_t len)
1681566bc34SRobert Mustacchi {
1691566bc34SRobert Mustacchi uint8_t sum;
1701566bc34SRobert Mustacchi size_t i;
1711566bc34SRobert Mustacchi
1721566bc34SRobert Mustacchi for (i = 0, sum = 0; i < len; i++) {
1731566bc34SRobert Mustacchi sum += buf[i];
1741566bc34SRobert Mustacchi }
1751566bc34SRobert Mustacchi
1761566bc34SRobert Mustacchi if (sum == 0)
1771566bc34SRobert Mustacchi return (0);
1781566bc34SRobert Mustacchi
1791566bc34SRobert Mustacchi return ((uint8_t)(0x100 - sum));
1801566bc34SRobert Mustacchi }
1811566bc34SRobert Mustacchi
1821566bc34SRobert Mustacchi static void
smbios_test_table_snapshot(smbios_test_table_t * table,smbios_entry_t ** entryp,void ** bufp,size_t * lenp)1831566bc34SRobert Mustacchi smbios_test_table_snapshot(smbios_test_table_t *table, smbios_entry_t **entryp,
1841566bc34SRobert Mustacchi void **bufp, size_t *lenp)
1851566bc34SRobert Mustacchi {
1861566bc34SRobert Mustacchi smbios_30_entry_t *ent30;
1871566bc34SRobert Mustacchi
1881566bc34SRobert Mustacchi switch (table->stt_type) {
1891566bc34SRobert Mustacchi case SMBIOS_ENTRY_POINT_30:
1901566bc34SRobert Mustacchi ent30 = &table->stt_entry.ep30;
1911566bc34SRobert Mustacchi
1921566bc34SRobert Mustacchi (void) memcpy(ent30->smbe_eanchor, SMB3_ENTRY_EANCHOR,
1931566bc34SRobert Mustacchi sizeof (ent30->smbe_eanchor));
1941566bc34SRobert Mustacchi ent30->smbe_ecksum = 0;
1951566bc34SRobert Mustacchi ent30->smbe_elen = sizeof (*ent30);
1961566bc34SRobert Mustacchi ent30->smbe_major = (table->stt_version >> 8) & 0xff;
1971566bc34SRobert Mustacchi ent30->smbe_minor = table->stt_version & 0xff;
1981566bc34SRobert Mustacchi ent30->smbe_docrev = 0;
1991566bc34SRobert Mustacchi ent30->smbe_revision = 1;
2001566bc34SRobert Mustacchi ent30->smbe_reserved = 0;
2011566bc34SRobert Mustacchi ent30->smbe_stlen = htole32(table->stt_offset);
2021566bc34SRobert Mustacchi ent30->smbe_staddr = htole64(P2ROUNDUP(sizeof (*ent30), 16));
2031566bc34SRobert Mustacchi
2041566bc34SRobert Mustacchi ent30->smbe_ecksum = smbios_test_table_checksum((void *)ent30,
2051566bc34SRobert Mustacchi sizeof (*ent30));
2061566bc34SRobert Mustacchi break;
2071566bc34SRobert Mustacchi default:
2081566bc34SRobert Mustacchi abort();
2091566bc34SRobert Mustacchi }
2101566bc34SRobert Mustacchi
2111566bc34SRobert Mustacchi *entryp = &table->stt_entry;
2121566bc34SRobert Mustacchi *bufp = table->stt_data;
2131566bc34SRobert Mustacchi *lenp = table->stt_offset;
2141566bc34SRobert Mustacchi }
2151566bc34SRobert Mustacchi
2161566bc34SRobert Mustacchi static void
smbios_test_table_fini(smbios_test_table_t * table)2171566bc34SRobert Mustacchi smbios_test_table_fini(smbios_test_table_t *table)
2181566bc34SRobert Mustacchi {
2191566bc34SRobert Mustacchi if (table == NULL) {
2201566bc34SRobert Mustacchi return;
2211566bc34SRobert Mustacchi }
2221566bc34SRobert Mustacchi
2231566bc34SRobert Mustacchi if (table->stt_data != NULL) {
2241566bc34SRobert Mustacchi umem_free(table->stt_data, table->stt_buflen);
2251566bc34SRobert Mustacchi }
2261566bc34SRobert Mustacchi
2271566bc34SRobert Mustacchi umem_free(table, sizeof (smbios_test_table_t));
2281566bc34SRobert Mustacchi }
2291566bc34SRobert Mustacchi
230176a9270SRobert Mustacchi static const smbios_test_t smbios_tests[] = {
231176a9270SRobert Mustacchi {
232d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
233d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
234d53cdfabSRobert Mustacchi .st_libvers = 0xffff,
235d53cdfabSRobert Mustacchi .st_mktable = smbios_test_badvers_mktable,
236d53cdfabSRobert Mustacchi .st_desc = "bad library version"
237d53cdfabSRobert Mustacchi }, {
238d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
239d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
240d53cdfabSRobert Mustacchi .st_libvers = 0,
241d53cdfabSRobert Mustacchi .st_mktable = smbios_test_badvers_mktable,
242d53cdfabSRobert Mustacchi .st_desc = "bad library version (zeros)"
243d53cdfabSRobert Mustacchi }, {
244d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
245d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
246d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
247d53cdfabSRobert Mustacchi .st_mktable = smbios_test_slot_mktable,
248d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
249d53cdfabSRobert Mustacchi .st_verify = smbios_test_verify_badids,
250d53cdfabSRobert Mustacchi .st_desc = "smbios_info_* with bad id"
251d53cdfabSRobert Mustacchi }, {
252d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
253d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
254d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
255d53cdfabSRobert Mustacchi .st_mktable = smbios_test_slot_mktable,
256d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
257d53cdfabSRobert Mustacchi .st_verify = smbios_test_verify_strings,
258d53cdfabSRobert Mustacchi .st_desc = "smbios string functions"
259d53cdfabSRobert Mustacchi }, {
260176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
261176a9270SRobert Mustacchi .st_tvers = SMB_VERSION_32,
262176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
263176a9270SRobert Mustacchi .st_mktable = smbios_test_slot_mktable,
264176a9270SRobert Mustacchi .st_canopen = B_TRUE,
265176a9270SRobert Mustacchi .st_verify = smbios_test_slot_verify,
266c6795799SRobert Mustacchi .st_desc = "slot 3.2"
267c6795799SRobert Mustacchi }, {
268c6795799SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
269c6795799SRobert Mustacchi .st_tvers = SMB_VERSION_34,
270c6795799SRobert Mustacchi .st_libvers = SMB_VERSION,
271c6795799SRobert Mustacchi .st_mktable = smbios_test_slot_mktable_34_nopeers,
272c6795799SRobert Mustacchi .st_canopen = B_TRUE,
273c6795799SRobert Mustacchi .st_verify = smbios_test_slot_verify_34_nopeers,
274c6795799SRobert Mustacchi .st_desc = "slot 3.4 without peers"
275c6795799SRobert Mustacchi }, {
276c6795799SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
277c6795799SRobert Mustacchi .st_tvers = SMB_VERSION_34,
278c6795799SRobert Mustacchi .st_libvers = SMB_VERSION,
279c6795799SRobert Mustacchi .st_mktable = smbios_test_slot_mktable_34_peers,
280c6795799SRobert Mustacchi .st_canopen = B_TRUE,
281c6795799SRobert Mustacchi .st_verify = smbios_test_slot_verify_34_peers,
282c6795799SRobert Mustacchi .st_desc = "slot 3.4 with peers"
283176a9270SRobert Mustacchi }, {
284176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
285d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION_35,
286d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION_34,
287d53cdfabSRobert Mustacchi .st_mktable = smbios_test_slot_mktable_35,
288d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
289d53cdfabSRobert Mustacchi .st_verify = smbios_test_slot_verify_34_overrun,
290d53cdfabSRobert Mustacchi .st_desc = "slot 3.5 against 3.4 lib"
291d53cdfabSRobert Mustacchi }, {
292d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
293d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION_35,
294d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
295d53cdfabSRobert Mustacchi .st_mktable = smbios_test_slot_mktable_35,
296d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
297d53cdfabSRobert Mustacchi .st_verify = smbios_test_slot_verify_35,
298d53cdfabSRobert Mustacchi .st_desc = "slot 3.5"
299176a9270SRobert Mustacchi }, {
300176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
301176a9270SRobert Mustacchi .st_tvers = SMB_VERSION_32,
302176a9270SRobert Mustacchi .st_libvers = SMB_VERSION_32,
303176a9270SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
304176a9270SRobert Mustacchi .st_canopen = B_TRUE,
305176a9270SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_32,
306d53cdfabSRobert Mustacchi .st_desc = "memory device 3.2 % 3.2"
307176a9270SRobert Mustacchi }, {
308176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
309176a9270SRobert Mustacchi .st_tvers = SMB_VERSION_32,
310176a9270SRobert Mustacchi .st_libvers = SMB_VERSION_33,
311176a9270SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
312176a9270SRobert Mustacchi .st_canopen = B_TRUE,
313176a9270SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_32_33,
314d53cdfabSRobert Mustacchi .st_desc = "memory device 3.2 % 3.3"
3156bc074b1SRobert Mustacchi }, {
3166bc074b1SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
3176bc074b1SRobert Mustacchi .st_tvers = SMB_VERSION_32,
3186bc074b1SRobert Mustacchi .st_libvers = SMB_VERSION_37,
3196bc074b1SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
3206bc074b1SRobert Mustacchi .st_canopen = B_TRUE,
3216bc074b1SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_32_37,
3226bc074b1SRobert Mustacchi .st_desc = "memory device 3.2 % 3.7"
323176a9270SRobert Mustacchi }, {
324176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
325176a9270SRobert Mustacchi .st_tvers = SMB_VERSION_33,
326176a9270SRobert Mustacchi .st_libvers = SMB_VERSION_33,
327176a9270SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_33,
328176a9270SRobert Mustacchi .st_canopen = B_TRUE,
329176a9270SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_33,
330176a9270SRobert Mustacchi .st_desc = "memory device 3.3"
331176a9270SRobert Mustacchi }, {
332176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
333176a9270SRobert Mustacchi .st_tvers = SMB_VERSION_33,
334176a9270SRobert Mustacchi .st_libvers = SMB_VERSION_33,
335176a9270SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_33ext,
336176a9270SRobert Mustacchi .st_canopen = B_TRUE,
337176a9270SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_33ext,
3386bc074b1SRobert Mustacchi .st_desc = "memory device 3.3 with extended data"
3396bc074b1SRobert Mustacchi }, {
3406bc074b1SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
3416bc074b1SRobert Mustacchi .st_tvers = SMB_VERSION_37,
3426bc074b1SRobert Mustacchi .st_libvers = SMB_VERSION_37,
3436bc074b1SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_37,
3446bc074b1SRobert Mustacchi .st_canopen = B_TRUE,
3456bc074b1SRobert Mustacchi .st_verify = smbios_test_memdevice_verify_37,
3466bc074b1SRobert Mustacchi .st_desc = "memory device 3.7"
347176a9270SRobert Mustacchi }, {
348176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
349176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
350176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
351176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_amd64,
352176a9270SRobert Mustacchi .st_canopen = B_TRUE,
353176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_amd64,
354176a9270SRobert Mustacchi .st_desc = "processor additional information - amd64"
355176a9270SRobert Mustacchi }, {
356176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
357176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
358176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
359176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_riscv,
360176a9270SRobert Mustacchi .st_canopen = B_TRUE,
361176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_riscv,
362176a9270SRobert Mustacchi .st_desc = "processor additional information - riscv"
363176a9270SRobert Mustacchi }, {
364176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
365176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
366176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
367176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_invlen1,
368176a9270SRobert Mustacchi .st_canopen = B_TRUE,
369176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_invlen1,
370176a9270SRobert Mustacchi .st_desc = "processor additional information - bad table length 1"
371176a9270SRobert Mustacchi }, {
372176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
373176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
374176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
375176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_invlen2,
376176a9270SRobert Mustacchi .st_canopen = B_TRUE,
377176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_invlen2,
378176a9270SRobert Mustacchi .st_desc = "processor additional information - bad table length 2"
379176a9270SRobert Mustacchi }, {
380176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
381176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
382176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
383176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_invlen3,
384176a9270SRobert Mustacchi .st_canopen = B_TRUE,
385176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_invlen3,
386176a9270SRobert Mustacchi .st_desc = "processor additional information - bad table length 3"
387176a9270SRobert Mustacchi }, {
388176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
389176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
390176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
391176a9270SRobert Mustacchi .st_mktable = smbios_test_pinfo_mktable_invlen4,
392176a9270SRobert Mustacchi .st_canopen = B_TRUE,
393176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_invlen4,
394176a9270SRobert Mustacchi .st_desc = "processor additional information - bad table length 4"
395176a9270SRobert Mustacchi }, {
396176a9270SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
397176a9270SRobert Mustacchi .st_tvers = SMB_VERSION,
398176a9270SRobert Mustacchi .st_libvers = SMB_VERSION,
399176a9270SRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
400176a9270SRobert Mustacchi .st_canopen = B_TRUE,
401176a9270SRobert Mustacchi .st_verify = smbios_test_pinfo_verify_badtype,
402176a9270SRobert Mustacchi .st_desc = "processor additional information - bad type"
403d53cdfabSRobert Mustacchi }, {
404d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
405d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
406d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
407d53cdfabSRobert Mustacchi .st_mktable = smbios_test_strprop_mktable_invlen1,
408d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
409d53cdfabSRobert Mustacchi .st_verify = smbios_test_strprop_verify_invlen1,
410d53cdfabSRobert Mustacchi .st_desc = "string property - bad table length 1"
411d53cdfabSRobert Mustacchi }, {
412d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
413d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
414d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
415d53cdfabSRobert Mustacchi .st_mktable = smbios_test_strprop_mktable_invlen2,
416d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
417d53cdfabSRobert Mustacchi .st_verify = smbios_test_strprop_verify_invlen2,
418d53cdfabSRobert Mustacchi .st_desc = "string property - bad table length 2"
419d53cdfabSRobert Mustacchi }, {
420d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
421d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
422d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
423d53cdfabSRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
424d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
425d53cdfabSRobert Mustacchi .st_verify = smbios_test_strprop_verify_badtype,
426d53cdfabSRobert Mustacchi .st_desc = "string property - bad type"
427d53cdfabSRobert Mustacchi }, {
428d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
429d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
430d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
431d53cdfabSRobert Mustacchi .st_mktable = smbios_test_strprop_mktable_basic,
432d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
433d53cdfabSRobert Mustacchi .st_verify = smbios_test_strprop_verify_basic,
434d53cdfabSRobert Mustacchi .st_desc = "string property - basic"
435d53cdfabSRobert Mustacchi }, {
436d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
437d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
438d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
439d53cdfabSRobert Mustacchi .st_mktable = smbios_test_strprop_mktable_badstr,
440d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
441d53cdfabSRobert Mustacchi .st_verify = smbios_test_strprop_verify_badstr,
442d53cdfabSRobert Mustacchi .st_desc = "string property - bad string"
443d53cdfabSRobert Mustacchi }, {
444d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
445d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
446d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
447d53cdfabSRobert Mustacchi .st_mktable = smbios_test_fwinfo_mktable_invlen_base,
448d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
449d53cdfabSRobert Mustacchi .st_verify = smbios_test_fwinfo_verify_invlen_base,
450d53cdfabSRobert Mustacchi .st_desc = "firmware inventory - bad base length"
451d53cdfabSRobert Mustacchi }, {
452d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
453d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
454d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
455d53cdfabSRobert Mustacchi .st_mktable = smbios_test_fwinfo_mktable_invlen_comps,
456d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
457d53cdfabSRobert Mustacchi .st_verify = smbios_test_fwinfo_verify_invlen_comps,
458d53cdfabSRobert Mustacchi .st_desc = "firmware inventory - bad comp length"
459d53cdfabSRobert Mustacchi }, {
460d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
461d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
462d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
463d53cdfabSRobert Mustacchi .st_mktable = smbios_test_memdevice_mktable_32,
464d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
465d53cdfabSRobert Mustacchi .st_verify = smbios_test_fwinfo_verify_badtype,
466d53cdfabSRobert Mustacchi .st_desc = "firmware inventory - bad type"
467d53cdfabSRobert Mustacchi }, {
468d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
469d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
470d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
471d53cdfabSRobert Mustacchi .st_mktable = smbios_test_fwinfo_mktable_nocomps,
472d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
473d53cdfabSRobert Mustacchi .st_verify = smbios_test_fwinfo_verify_nocomps,
474d53cdfabSRobert Mustacchi .st_desc = "firmware inventory - no components"
475d53cdfabSRobert Mustacchi }, {
476d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
477d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
478d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
479d53cdfabSRobert Mustacchi .st_mktable = smbios_test_fwinfo_mktable_comps,
480d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
481d53cdfabSRobert Mustacchi .st_verify = smbios_test_fwinfo_verify_comps,
482d53cdfabSRobert Mustacchi .st_desc = "firmware inventory - components"
483d53cdfabSRobert Mustacchi }, {
484d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
485d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION_24,
486d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
487d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_invlen_base,
488d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
489d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_invlen,
490d53cdfabSRobert Mustacchi .st_desc = "chassis - bad length (2.4 table)"
491d53cdfabSRobert Mustacchi }, {
492d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
493d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
494d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
495d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_invlen_base,
496d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
497d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_invlen,
498d53cdfabSRobert Mustacchi .st_desc = "chassis - bad length (latest version)"
499d53cdfabSRobert Mustacchi }, {
500d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
501d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
502d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
503d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_base,
504d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
505d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_invlen,
506d53cdfabSRobert Mustacchi .st_desc = "chassis - bad length, expect sku"
507d53cdfabSRobert Mustacchi }, {
508d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
509d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION_24,
510d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
511d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_base,
512d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
513d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_base,
514d53cdfabSRobert Mustacchi .st_desc = "chassis - basic 2.4 version"
515d53cdfabSRobert Mustacchi }, {
516d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
517d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
518d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
519d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_sku_nocomps,
520d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
521d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_sku_nocomps,
522d53cdfabSRobert Mustacchi .st_desc = "chassis - sku, but no components"
523d53cdfabSRobert Mustacchi }, {
524d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
525d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION_24,
526d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
527d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_comps,
528d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
529d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_comps,
530d53cdfabSRobert Mustacchi .st_desc = "chassis - 2.4 version with comps"
531d53cdfabSRobert Mustacchi }, {
532d53cdfabSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
533d53cdfabSRobert Mustacchi .st_tvers = SMB_VERSION,
534d53cdfabSRobert Mustacchi .st_libvers = SMB_VERSION,
535d53cdfabSRobert Mustacchi .st_mktable = smbios_test_chassis_mktable_sku_nocomps,
536d53cdfabSRobert Mustacchi .st_canopen = B_TRUE,
537d53cdfabSRobert Mustacchi .st_verify = smbios_test_chassis_verify_sku_nocomps,
538d53cdfabSRobert Mustacchi .st_desc = "chassis - sku + comps"
5391d1fc316SRobert Mustacchi }, {
5401d1fc316SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
5411d1fc316SRobert Mustacchi .st_tvers = SMB_VERSION_25,
5421d1fc316SRobert Mustacchi .st_libvers = SMB_VERSION,
5431d1fc316SRobert Mustacchi .st_mktable = smbios_test_proc_mktable_25,
5441d1fc316SRobert Mustacchi .st_canopen = B_TRUE,
5451d1fc316SRobert Mustacchi .st_verify = smbios_test_proc_verify_25,
5461d1fc316SRobert Mustacchi .st_desc = "SMBIOS 2.5 processor"
5471d1fc316SRobert Mustacchi }, {
5481d1fc316SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
5491d1fc316SRobert Mustacchi .st_tvers = SMB_VERSION_36,
5501d1fc316SRobert Mustacchi .st_libvers = SMB_VERSION,
5511d1fc316SRobert Mustacchi .st_mktable = smbios_test_proc_mktable_36,
5521d1fc316SRobert Mustacchi .st_canopen = B_TRUE,
5531d1fc316SRobert Mustacchi .st_verify = smbios_test_proc_verify_36,
5541d1fc316SRobert Mustacchi .st_desc = "SMBIOS 3.6 processor"
5551d1fc316SRobert Mustacchi }, {
5561d1fc316SRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
5571d1fc316SRobert Mustacchi .st_tvers = SMB_VERSION_36,
5581d1fc316SRobert Mustacchi .st_libvers = SMB_VERSION_25,
5591d1fc316SRobert Mustacchi .st_mktable = smbios_test_proc_mktable_36,
5601d1fc316SRobert Mustacchi .st_canopen = B_TRUE,
5611d1fc316SRobert Mustacchi .st_verify = smbios_test_proc_verify_36_25,
5621d1fc316SRobert Mustacchi .st_desc = "SMBIOS 3.6 processor, 2.5 client"
563679a141eSToomas Soome }, {
564679a141eSToomas Soome .st_entry = SMBIOS_ENTRY_POINT_30,
565679a141eSToomas Soome .st_tvers = SMB_VERSION,
566679a141eSToomas Soome .st_libvers = SMB_VERSION,
567679a141eSToomas Soome .st_mktable = smbios_test_extmem_mktable_cs,
568679a141eSToomas Soome .st_canopen = B_TRUE,
569679a141eSToomas Soome .st_verify = smbios_test_extmem_verify_cs,
570679a141eSToomas Soome .st_desc = "SMBIOS Sun extended memory device with cs"
571679a141eSToomas Soome }, {
572679a141eSToomas Soome .st_entry = SMBIOS_ENTRY_POINT_30,
573679a141eSToomas Soome .st_tvers = SMB_VERSION,
574679a141eSToomas Soome .st_libvers = SMB_VERSION,
575679a141eSToomas Soome .st_mktable = smbios_test_extmem_mktable_nocs,
576679a141eSToomas Soome .st_canopen = B_TRUE,
577679a141eSToomas Soome .st_verify = smbios_test_extmem_verify_nocs,
578679a141eSToomas Soome .st_desc = "SMBIOS Sun extended memory device with no cs"
579679a141eSToomas Soome }, {
580679a141eSToomas Soome .st_entry = SMBIOS_ENTRY_POINT_30,
581679a141eSToomas Soome .st_tvers = SMB_VERSION,
582679a141eSToomas Soome .st_libvers = SMB_VERSION,
583679a141eSToomas Soome .st_mktable = smbios_test_extmem_mktable_invlen_cs,
584679a141eSToomas Soome .st_canopen = B_TRUE,
585679a141eSToomas Soome .st_verify = smbios_test_extmem_verify_invlen_cs,
586679a141eSToomas Soome .st_desc = "SMBIOS Sun extended memory device invalid cs length"
587*064d431aSRobert Mustacchi },
588*064d431aSRobert Mustacchi {
589*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
590*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
591*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
592*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_noent,
593*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
594*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_noent,
595*064d431aSRobert Mustacchi .st_desc = "additional information - no entries"
596*064d431aSRobert Mustacchi }, {
597*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
598*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
599*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
600*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_ents,
601*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
602*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_ents,
603*064d431aSRobert Mustacchi .st_desc = "additional information - multiple entries"
604*064d431aSRobert Mustacchi }, {
605*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
606*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
607*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
608*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_invlen_base,
609*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
610*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_invlen_base,
611*064d431aSRobert Mustacchi .st_desc = "additional information - invalid length: base"
612*064d431aSRobert Mustacchi }, {
613*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
614*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
615*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
616*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_invlen_ent,
617*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
618*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_invlen_ent,
619*064d431aSRobert Mustacchi .st_desc = "additional information - invalid length: base entry"
620*064d431aSRobert Mustacchi }, {
621*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
622*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
623*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
624*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_invlen_multient,
625*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
626*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_invlen_multient,
627*064d431aSRobert Mustacchi .st_desc = "additional information - invalid length: multiple "
628*064d431aSRobert Mustacchi "entries"
629*064d431aSRobert Mustacchi }, {
630*064d431aSRobert Mustacchi .st_entry = SMBIOS_ENTRY_POINT_30,
631*064d431aSRobert Mustacchi .st_tvers = SMB_VERSION,
632*064d431aSRobert Mustacchi .st_libvers = SMB_VERSION,
633*064d431aSRobert Mustacchi .st_mktable = smbios_test_addinfo_mktable_invlen_entdata,
634*064d431aSRobert Mustacchi .st_canopen = B_TRUE,
635*064d431aSRobert Mustacchi .st_verify = smbios_test_addinfo_verify_invlen_entdata,
636*064d431aSRobert Mustacchi .st_desc = "additional information - invalid length: entry data"
637d53cdfabSRobert Mustacchi }
638*064d431aSRobert Mustacchi /* XXX Missing an addinfo ent call with the wrong type to verify */
639176a9270SRobert Mustacchi };
640176a9270SRobert Mustacchi
641176a9270SRobert Mustacchi static boolean_t
smbios_test_run_one(const smbios_test_t * test)642176a9270SRobert Mustacchi smbios_test_run_one(const smbios_test_t *test)
6431566bc34SRobert Mustacchi {
644176a9270SRobert Mustacchi smbios_test_table_t *table = NULL;
645176a9270SRobert Mustacchi smbios_hdl_t *hdl = NULL;
646176a9270SRobert Mustacchi void *buf;
647176a9270SRobert Mustacchi size_t len;
648176a9270SRobert Mustacchi smbios_entry_t *entry;
649176a9270SRobert Mustacchi int err = 0;
650176a9270SRobert Mustacchi boolean_t ret = B_FALSE;
6511566bc34SRobert Mustacchi
652176a9270SRobert Mustacchi table = smbios_test_table_init(test->st_entry, test->st_tvers);
653176a9270SRobert Mustacchi if (!test->st_mktable(table)) {
654176a9270SRobert Mustacchi goto out;
6551566bc34SRobert Mustacchi }
6561566bc34SRobert Mustacchi
657176a9270SRobert Mustacchi smbios_test_table_snapshot(table, &entry, &buf, &len);
658176a9270SRobert Mustacchi hdl = smbios_bufopen(entry, buf, len, test->st_libvers, SMB_FL_DEBUG,
659176a9270SRobert Mustacchi &err);
660176a9270SRobert Mustacchi if (test->st_canopen) {
661176a9270SRobert Mustacchi if (hdl == NULL) {
662176a9270SRobert Mustacchi warnx("failed to create table for test %s: %s",
663176a9270SRobert Mustacchi test->st_desc, smbios_errmsg(err));
664176a9270SRobert Mustacchi goto out;
665176a9270SRobert Mustacchi }
666176a9270SRobert Mustacchi } else {
667176a9270SRobert Mustacchi if (hdl != NULL) {
668176a9270SRobert Mustacchi warnx("accidentally created table for test %s, "
669176a9270SRobert Mustacchi "expected failure", test->st_desc);
670176a9270SRobert Mustacchi } else {
671176a9270SRobert Mustacchi ret = B_TRUE;
672176a9270SRobert Mustacchi }
673176a9270SRobert Mustacchi goto out;
6741566bc34SRobert Mustacchi }
6751566bc34SRobert Mustacchi
676176a9270SRobert Mustacchi if (test->st_verify(hdl)) {
677176a9270SRobert Mustacchi ret = B_TRUE;
6781566bc34SRobert Mustacchi }
6791566bc34SRobert Mustacchi
680d53cdfabSRobert Mustacchi if (hdl != NULL && test_dirfd > -1) {
681d53cdfabSRobert Mustacchi int fd;
682d53cdfabSRobert Mustacchi char fname[PATH_MAX];
683d53cdfabSRobert Mustacchi
684d53cdfabSRobert Mustacchi (void) snprintf(fname, sizeof (fname), "%s.smbios",
685d53cdfabSRobert Mustacchi test->st_desc);
686d53cdfabSRobert Mustacchi fd = openat(test_dirfd, fname, O_RDWR | O_CREAT, 0644);
687d53cdfabSRobert Mustacchi if (fd < 0) {
688d53cdfabSRobert Mustacchi warn("failed to dump test %s, failed to open output "
689d53cdfabSRobert Mustacchi "file", test->st_desc);
690d53cdfabSRobert Mustacchi } else {
691d53cdfabSRobert Mustacchi if (smbios_write(hdl, fd) != 0) {
692d53cdfabSRobert Mustacchi warnx("failed to dump test %s: %s",
693d53cdfabSRobert Mustacchi test->st_desc,
694d53cdfabSRobert Mustacchi smbios_errmsg(smbios_errno(hdl)));
695d53cdfabSRobert Mustacchi } else {
696d53cdfabSRobert Mustacchi (void) close(fd);
697d53cdfabSRobert Mustacchi }
698d53cdfabSRobert Mustacchi }
699d53cdfabSRobert Mustacchi }
700176a9270SRobert Mustacchi out:
701176a9270SRobert Mustacchi if (hdl != NULL) {
702176a9270SRobert Mustacchi smbios_close(hdl);
7031566bc34SRobert Mustacchi }
7041566bc34SRobert Mustacchi
705176a9270SRobert Mustacchi if (table != NULL) {
706176a9270SRobert Mustacchi smbios_test_table_fini(table);
7071566bc34SRobert Mustacchi }
7081566bc34SRobert Mustacchi
709176a9270SRobert Mustacchi if (ret) {
710176a9270SRobert Mustacchi (void) printf("TEST PASSED: %s\n", test->st_desc);
711176a9270SRobert Mustacchi } else {
712176a9270SRobert Mustacchi (void) printf("TEST FAILED: %s\n", test->st_desc);
7131566bc34SRobert Mustacchi }
7141566bc34SRobert Mustacchi
715176a9270SRobert Mustacchi return (ret);
7161566bc34SRobert Mustacchi }
7171566bc34SRobert Mustacchi
7181566bc34SRobert Mustacchi int
main(int argc,char * argv[])719d53cdfabSRobert Mustacchi main(int argc, char *argv[])
7201566bc34SRobert Mustacchi {
721d53cdfabSRobert Mustacchi int ret = 0, c;
722176a9270SRobert Mustacchi size_t i;
723d53cdfabSRobert Mustacchi const char *outdir = NULL;
724d53cdfabSRobert Mustacchi
725d53cdfabSRobert Mustacchi while ((c = getopt(argc, argv, ":d:")) != -1) {
726d53cdfabSRobert Mustacchi switch (c) {
727d53cdfabSRobert Mustacchi case 'd':
728d53cdfabSRobert Mustacchi outdir = optarg;
729d53cdfabSRobert Mustacchi break;
730d53cdfabSRobert Mustacchi case '?':
731d53cdfabSRobert Mustacchi errx(EXIT_FAILURE, "unknown option: -%c", optopt);
732d53cdfabSRobert Mustacchi case ':':
733d53cdfabSRobert Mustacchi errx(EXIT_FAILURE, "-%c requires an operand", optopt);
734d53cdfabSRobert Mustacchi }
735d53cdfabSRobert Mustacchi }
736d53cdfabSRobert Mustacchi
737d53cdfabSRobert Mustacchi if (outdir != NULL) {
738d53cdfabSRobert Mustacchi if ((test_dirfd = open(outdir, O_RDONLY)) < 0) {
739d53cdfabSRobert Mustacchi err(EXIT_FAILURE, "failed to open %s", outdir);
740d53cdfabSRobert Mustacchi }
741d53cdfabSRobert Mustacchi }
7421566bc34SRobert Mustacchi
743176a9270SRobert Mustacchi for (i = 0; i < ARRAY_SIZE(smbios_tests); i++) {
744176a9270SRobert Mustacchi if (!smbios_test_run_one(&smbios_tests[i])) {
745d53cdfabSRobert Mustacchi ret = 1;
746176a9270SRobert Mustacchi }
7471566bc34SRobert Mustacchi }
7481566bc34SRobert Mustacchi
749d53cdfabSRobert Mustacchi if (ret == 0) {
750d53cdfabSRobert Mustacchi (void) printf("All tests passed successfully\n");
751d53cdfabSRobert Mustacchi }
752d53cdfabSRobert Mustacchi
753d53cdfabSRobert Mustacchi return (ret);
7541566bc34SRobert Mustacchi }
755