Skip to content

Commit be85579

Browse files
committed
Separate T6 and (optional) K.2 NIC setup for compliance images.
1 parent 6f48603 commit be85579

File tree

9 files changed

+155
-51
lines changed

9 files changed

+155
-51
lines changed

image/templates/files/compliance-postboot.sh renamed to image/templates/files/compliance-net-setup.sh

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,38 @@
11
#!/bin/bash
22
#
3-
# Copyright 2024 Oxide Computer Company
3+
# Copyright 2025 Oxide Computer Company
44
#
55

66
set -o errexit
77
set -o pipefail
88
set -o xtrace
99

10+
. /lib/svc/share/smf_include.sh
11+
12+
if (( $# != 1 )); then
13+
echo "usage: compliance-net-setup.sh <NIC dev>" >&2
14+
exit $SMF_EXIT_ERR_FATAL
15+
fi
16+
nicdev=$1
17+
18+
fail_not_found=$(svcprop -p 'config/fail_not_found' $SMF_FMRI)
19+
1020
#
1121
# Find the NICs we want to bring up for IPv6:
1222
#
1323
nics=()
1424
for try in $(dladm show-ether -po link); do
15-
if [[ $try == igb* ]] || [[ $try == cxgbe* ]]; then
25+
if [[ $try == $nicdev* ]]; then
1626
nics+=( $try )
1727
fi
1828
done
1929

2030
if (( ${#nics[@]} == 0 )); then
21-
exit 1
31+
if [[ "$fail_not_found" = "true" ]]; then
32+
exit $SMF_EXIT_ERR_FATAL
33+
else
34+
exit $SMF_EXIT_OK
35+
fi
2236
fi
2337

2438
#
@@ -65,7 +79,7 @@ for (( i = 0; i < ${#nics[@]}; i++ )); do
6579
done
6680

6781
if [[ $fail == yes ]]; then
68-
exit 1
82+
exit $SMF_EXIT_ERR_FATAL
6983
fi
7084

71-
exit 0
85+
exit $SMF_EXIT_OK
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
3+
<!--
4+
Copyright 2025 Oxide Computer Company
5+
-->
6+
7+
<service_bundle type='manifest' name='site-compliance-net-setup'>
8+
9+
<service name='site/compliance/net-setup' type='service' version='1'>
10+
<create_default_instance enabled='false' />
11+
12+
<!-- File systems should all be mounted before we begin: -->
13+
<dependency name='fs-root' grouping='require_all' restart_on='none'
14+
type='service'>
15+
<service_fmri value='svc:/system/filesystem/root' />
16+
</dependency>
17+
<dependency name='fs-minimal' grouping='require_all' restart_on='none'
18+
type='service'>
19+
<service_fmri value='svc:/system/filesystem/minimal' />
20+
</dependency>
21+
22+
<!-- We are going to manipulate the network configuration, but it should
23+
be in the expected state (with all management daemons running) before
24+
we try to do that. -->
25+
<dependency name='loopback' grouping='require_all' restart_on='none'
26+
type='service'>
27+
<service_fmri value='svc:/network/loopback' />
28+
</dependency>
29+
<dependency name='physical' grouping='require_all' restart_on='none'
30+
type='service'>
31+
<service_fmri value='svc:/network/physical' />
32+
</dependency>
33+
34+
<exec_method
35+
type='method'
36+
name='start'
37+
exec='/usr/lib/compliance-net-setup %i'
38+
timeout_seconds='3600' />
39+
40+
<exec_method type='method' name='stop' exec=':true' timeout_seconds='30' />
41+
42+
<property_group name='startd' type='framework'>
43+
<propval name='duration' type='astring' value='transient' />
44+
</property_group>
45+
46+
<!-- Whether to fail service start if the instance-specific NIC type
47+
isn't present. The Chelsio NICs not showing up is a problem whereas
48+
a K.2 NIC isn't required. -->
49+
<property_group name='config' type='application'>
50+
<propval name='fail_not_found' type='boolean' value='false' />
51+
</property_group>
52+
53+
<instance name='igb' enabled='false' />
54+
<instance name='e1000g' enabled='false' />
55+
<instance name='cxgbe' enabled='false'>
56+
<!-- Chelsio NICs require waiting until the T6 has been configured.-->
57+
<dependency name='t6init' grouping='require_all' restart_on='none'
58+
type='service'>
59+
<service_fmri value='svc:/system/t6init' />
60+
</dependency>
61+
<property_group name='config' type='application'>
62+
<propval name='fail_not_found' type='boolean' value='true' />
63+
</property_group>
64+
</instance>
65+
66+
<stability value='Unstable' />
67+
68+
<template>
69+
<common_name>
70+
<loctext xml:lang='C'>compliance network setup</loctext>
71+
</common_name>
72+
<description>
73+
<loctext xml:lang='C'>brings network up for compliance testing
74+
</loctext>
75+
</description>
76+
</template>
77+
</service>
78+
79+
</service_bundle>

image/templates/files/compliance-postboot.xml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?xml version="1.0"?>
22
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
3+
<!--
4+
Copyright 2025 Oxide Computer Company
5+
-->
36

47
<service_bundle type='manifest' name='postboot'>
58

@@ -15,12 +18,11 @@
1518
<!-- ... and make sure we run after the T6 has been configured. -->
1619
<dependency name='t6init' grouping='require_all' restart_on='none'
1720
type='service'>
18-
<service_fmri value='svc:/system/t6init' />
21+
<service_fmri value='svc:/site/compliance/net-setup:cxgbe' />
1922
</dependency>
2023

21-
<exec_method type='method' name='start'
22-
exec='/usr/lib/postboot' timeout_seconds='3600' />
23-
24+
<!-- Compliance postboot is just a milestone service. -->
25+
<exec_method type='method' name='start' exec=':true' timeout_seconds='30' />
2426
<exec_method type='method' name='stop' exec=':true' timeout_seconds='30' />
2527

2628
<property_group name='startd' type='framework'>
@@ -34,7 +36,7 @@
3436
<loctext xml:lang='C'>compliance postboot</loctext>
3537
</common_name>
3638
<description>
37-
<loctext xml:lang='C'>brings network up for compliance testing
39+
<loctext xml:lang='C'>milestone indicating we started successfully
3840
</loctext>
3941
</description>
4042
</template>

image/templates/files/mfg.sh

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,26 @@
11
#!/bin/bash
22
#
3-
# Copyright 2024 Oxide Computer Company
3+
# Copyright 2025 Oxide Computer Company
44
#
55

66
set -o pipefail
77

88
#
99
# Find the PCI NIC we want; it will either use driver igb or e1000g.
10-
# If we don't see one yet, we'll sleep and wait for one to be inserted.
1110
#
12-
while :; do
13-
nic=
14-
for try in $(dladm show-ether -po link); do
15-
if [[ $try != igb* ]] && [[ $try != e1000g* ]]; then
16-
continue
17-
fi
18-
19-
nic=$try
20-
break
21-
done
22-
23-
if [[ -n $nic ]]; then
24-
break
11+
nic=
12+
for try in $(dladm show-ether -po link); do
13+
if [[ $try != igb* ]] && [[ $try != e1000g* ]]; then
14+
continue
2515
fi
2616

27-
28-
printf 'ERROR: no PCI NIC?\n' >&2
29-
sleep 5
17+
nic=$try
18+
break
3019
done
3120

32-
#
33-
# Bring an IPv6 link local address up on the NIC we have selected:
34-
#
35-
if ! ipadm show-if "$nic" >/dev/null 2>&1; then
36-
printf 'creating interface %s\n' "$nic"
37-
if ! ipadm create-if -t "$nic"; then
38-
exit 1
39-
fi
40-
fi
41-
if ! ipadm show-addr "$nic/v6" >/dev/null 2>&1; then
42-
printf 'creating address %s/v6\n' "$nic"
43-
if ! ipadm create-addr -T addrconf -t "$nic/v6"; then
44-
exit 1
45-
fi
21+
if [[ -z $nic ]]; then
22+
printf 'ERROR: no PCI NIC?\n' >&2
23+
exit 1
4624
fi
4725

4826
#

image/templates/files/mfg.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,18 @@
88
<service name="site/mfg" type="service" version="1">
99
<create_default_instance enabled="true" />
1010

11-
<dependency name="dep0" grouping="require_all" restart_on="error"
11+
<dependency name="multi-user" grouping="require_all" restart_on="error"
1212
type="service">
1313
<service_fmri value="svc:/milestone/multi-user:default" />
1414
</dependency>
1515

16+
<!-- Make sure we have an appropriate NIC setup: -->
17+
<dependency name='net' grouping='require_any' restart_on='none'
18+
type='service'>
19+
<service_fmri value='svc:/site/compliance/net-setup:igb' />
20+
<service_fmri value='svc:/site/compliance/net-setup:e1000' />
21+
</dependency>
22+
1623
<exec_method type="method" name="start" timeout_seconds="30"
1724
exec="/lib/svc/method/mfg" />
1825

image/templates/files/site-compliance.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version='1.0'?>
22
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
33
<!--
4-
Copyright 2024 Oxide Computer Company
4+
Copyright 2025 Oxide Computer Company
55
-->
66

77
<service_bundle type='profile' name='helios'
@@ -16,6 +16,13 @@
1616
<instance name='default' enabled='true' />
1717
</service>
1818

19+
<!-- Setup networking: -->
20+
<service name='site/compliance/net-setup' version='1' type='service'>
21+
<instance name='igb' enabled='true' />
22+
<instance name='e1000g' enabled='true' />
23+
<instance name='cxgbe' enabled='true' />
24+
</service>
25+
1926
<!-- See: https://www.illumos.org/issues/14006 -->
2027
<service name='network/routing/route' version='1' type='service'>
2128
<instance name='default' enabled='false' />

image/templates/files/site-mfg.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version='1.0'?>
22
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
33
<!--
4-
Copyright 2024 Oxide Computer Company
4+
Copyright 2025 Oxide Computer Company
55
-->
66

77
<service_bundle type='profile' name='helios'
@@ -16,6 +16,12 @@
1616
<instance name='default' enabled='false' />
1717
</service>
1818

19+
<!-- Setup networking: -->
20+
<service name='site/compliance/net-setup' version='1' type='service'>
21+
<instance name='igb' enabled='true' />
22+
<instance name='e1000g' enabled='true' />
23+
</service>
24+
1925
<!-- See: https://www.illumos.org/issues/14006 -->
2026
<service name='network/routing/route' version='1' type='service'>
2127
<instance name='default' enabled='false' />

image/templates/files/site.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version='1.0'?>
22
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
33
<!--
4-
Copyright 2024 Oxide Computer Company
4+
Copyright 2025 Oxide Computer Company
55
-->
66

77
<service_bundle type='profile' name='helios'
@@ -11,6 +11,12 @@
1111
<instance name='default' enabled='true' />
1212
</service>
1313

14+
<!-- Setup networking: -->
15+
<service name='site/compliance/net-setup' version='1' type='service'>
16+
<instance name='igb' enabled='true' />
17+
<instance name='e1000g' enabled='true' />
18+
</service>
19+
1420
<!-- See: https://www.illumos.org/issues/14006 -->
1521
<service name='network/routing/route' version='1' type='service'>
1622
<instance name='default' enabled='false' />

image/templates/include/compliance-common.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
{
22
"steps": [
3-
{ "t": "ensure_file",
4-
"file": "/usr/lib/postboot",
5-
"src": "compliance-postboot.sh",
6-
"owner": "root", "group": "bin", "mode": "0755" },
7-
{ "t": "ensure_file",
3+
{ "t": "ensure_file", "with": "compliance",
84
"file": "/lib/svc/manifest/site/postboot.xml",
95
"src": "compliance-postboot.xml",
106
"owner": "root", "group": "bin", "mode": "0644" },
@@ -44,6 +40,15 @@
4440
{ "t": "ensure_file",
4541
"file": "/lib/svc/manifest/site/compliance-dump.xml",
4642
"src": "compliance-dump.xml",
43+
"owner": "root", "group": "bin", "mode": "0644" },
44+
45+
{ "t": "ensure_file",
46+
"file": "/usr/lib/compliance-net-setup",
47+
"src": "compliance-net-setup.sh",
48+
"owner": "root", "group": "bin", "mode": "0755" },
49+
{ "t": "ensure_file",
50+
"file": "/lib/svc/manifest/site/compliance-net-setup.xml",
51+
"src": "compliance-net-setup.xml",
4752
"owner": "root", "group": "bin", "mode": "0644" }
4853
]
4954
}

0 commit comments

Comments
 (0)