Skip to content

Commit 4c89ecd

Browse files
committed
Add availability constants for network and port drivers in help text
Signed-off-by: fahed dorgaa <[email protected]>
1 parent 95cf9e5 commit 4c89ecd

File tree

16 files changed

+81
-17
lines changed

16 files changed

+81
-17
lines changed

cmd/rootlesskit/main.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,33 @@ Examples:
8383
Note: RootlessKit requires /etc/subuid and /etc/subgid to be configured by the real root user.
8484
See https://rootlesscontaine.rs/getting-started/common/ .
8585
`
86+
// Build the list of available network drivers for help text
87+
// Only compiled-in drivers will be shown here, so omitted drivers don't appear in --help.
88+
drivers := []string{"host", "none", "pasta(experimental)"}
89+
if slirp4netns.Available {
90+
drivers = append(drivers, "slirp4netns")
91+
}
92+
if vpnkit.Available {
93+
drivers = append(drivers, "vpnkit")
94+
}
95+
if lxcusernic.Available {
96+
drivers = append(drivers, "lxc-user-nic(experimental)")
97+
}
98+
if gvisortapvsock.Available {
99+
drivers = append(drivers, "gvisor-tap-vsock(experimental)")
100+
}
101+
netDriversHelp := strings.Join(drivers, ", ")
102+
103+
// Build the list of available port drivers for help text
104+
portDrivers := []string{"none", "implicit (for pasta)", "builtin"}
105+
if slirp4netns_port.Available {
106+
portDrivers = append(portDrivers, "slirp4netns")
107+
}
108+
if gvisortapvsock_port.Available {
109+
portDrivers = append(portDrivers, "gvisor-tap-vsock(experimental)")
110+
}
111+
portDriversHelp := strings.Join(portDrivers, ", ")
112+
86113
app.Flags = []cli.Flag{
87114
Categorize(&cli.BoolFlag{
88115
Name: "debug",
@@ -99,7 +126,7 @@ See https://rootlesscontaine.rs/getting-started/common/ .
99126
}, CategoryState),
100127
Categorize(&cli.StringFlag{
101128
Name: "net",
102-
Usage: "network driver [host, none, pasta(experimental), slirp4netns, vpnkit, lxc-user-nic(experimental), gvisor-tap-vsock(experimental)]",
129+
Usage: fmt.Sprintf("network driver [%s]", netDriversHelp),
103130
Value: "host",
104131
}, CategoryNetwork),
105132
Categorize(&cli.StringFlag{
@@ -169,7 +196,7 @@ See https://rootlesscontaine.rs/getting-started/common/ .
169196
}, CategoryMount),
170197
Categorize(&cli.StringFlag{
171198
Name: "port-driver",
172-
Usage: "port driver for non-host network. [none, implicit (for pasta), builtin, slirp4netns, gvisor-tap-vsock]",
199+
Usage: fmt.Sprintf("port driver for non-host network. [%s]", portDriversHelp),
173200
Value: "none",
174201
}, CategoryPort),
175202
Categorize(&cli.StringSliceFlag{

docs/network.md

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -271,25 +271,13 @@ The child command can enter `$ROOTLESSKIT_STATE_DIR/netns` by itself to create n
271271

272272
## Build tags to omit drivers
273273

274-
To exclude specific drivers at compilation time, use Go build tags:
274+
Build-time driver selection is documented in BUILDING.md.
275275

276-
- Tag no_vpnkit: omits the VPNKit network driver implementation.
277-
- Tag no_gvisortapvsock: omits the gvisor-tap-vsock network driver implementation and its port driver.
278-
- Tag no_slirp4netns: omits the slirp4netns network driver implementation and its port driver.
279-
- Tag no_lxcusernic: omits the lxc-user-nic network driver implementation.
280-
281-
Examples:
276+
Example:
282277

283278
- Build without VPNKit support:
284279
go build -tags no_vpnkit ./cmd/rootlesskit
285280

286-
- Build without gvisor-tap-vsock support (also disables the gvisor-tap-vsock port driver):
287-
go build -tags no_gvisortapvsock ./cmd/rootlesskit
288-
289-
- Build without slirp4netns support (also disables the slirp4netns port driver):
290-
go build -tags no_slirp4netns ./cmd/rootlesskit
291-
292-
- Build without lxc-user-nic support:
293-
go build -tags no_lxcusernic ./cmd/rootlesskit
281+
Note: CI should test all supported combinations of these build tags.
294282

295283
If a disabled driver is selected at runtime (e.g., --net=vpnkit when built with -tags no_vpnkit), RootlessKit returns an error indicating that the driver was disabled at build time.

docs/port.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,14 @@ To specify IPv6 explicitly, use `tcp6`, e.g., `[::]:8080:80/tcp6`.
5959

6060
The `tcp4` and `tcp6` forms were introduced in RootlessKit v0.14.0.
6161
The `tcp6` is currently supported only for `builtin` port driver.
62+
63+
## Build tags to omit port drivers
64+
65+
Build-time driver selection is documented in BUILDING.md.
66+
67+
Example:
68+
69+
- Building with `-tags no_slirp4netns` disables both the slirp4netns network driver and its port driver.
70+
- Building with `-tags no_gvisortapvsock` disables both the gvisor-tap-vsock network driver and its port driver.
71+
72+
Note: CI should test supported combinations of these build tags.

pkg/network/gvisortapvsock/gvisortapvsock.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ const (
3535
DriverName = "gvisor-tap-vsock"
3636
// Default buffer size for packet reading/writing
3737
defaultBufferSize = 65536
38+
// Available indicates whether this driver is compiled in (used for generating help text)
39+
Available = true
3840
)
3941

4042
// NewParentDriver instantiates a new parent driver

pkg/network/gvisortapvsock/gvisortapvsock_disabled.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,6 @@ func (d *disabledChild) ChildDriverInfo() (*network.ChildDriverInfo, error) {
4343
func (d *disabledChild) ConfigureNetworkChild(netmsg *messages.ParentInitNetworkDriverCompleted, detachedNetNSPath string) (string, error) {
4444
return "", errors.New("gvisor-tap-vsock network driver disabled by build tag no_gvisortapvsock")
4545
}
46+
47+
// Available indicates whether this driver is compiled in (used for generating help text)
48+
const Available = false

pkg/network/lxcusernic/lxcusernic.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,6 @@ func dhcpRenewRoutine(c *client4.Client, dev string, initialIP net.IP, lease tim
217217
lease = p.IPAddressLeaseTime(lease)
218218
}
219219
}
220+
221+
// Available indicates whether this driver is compiled in (used for generating help text)
222+
const Available = true

pkg/network/lxcusernic/lxcusernic_disabled.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,6 @@ func (d *disabledChild) ChildDriverInfo() (*network.ChildDriverInfo, error) {
4141
func (d *disabledChild) ConfigureNetworkChild(netmsg *messages.ParentInitNetworkDriverCompleted, detachedNetNSPath string) (string, error) {
4242
return "", errors.New("lxc-user-nic network driver disabled by build tag no_lxcusernic")
4343
}
44+
45+
// Available indicates whether this driver is compiled in (used for generating help text)
46+
const Available = false

pkg/network/slirp4netns/slirp4netns.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,6 @@ func (d *childDriver) ConfigureNetworkChild(netmsg *messages.ParentInitNetworkDr
356356
// and they are up to the child.
357357
return tap, nil
358358
}
359+
360+
// Available indicates whether this driver is compiled in (used for generating help text)
361+
const Available = true

pkg/network/slirp4netns/slirp4netns_disabled.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,6 @@ func (d *disabledChild) ChildDriverInfo() (*network.ChildDriverInfo, error) {
4343
func (d *disabledChild) ConfigureNetworkChild(netmsg *messages.ParentInitNetworkDriverCompleted, detachedNetNSPath string) (string, error) {
4444
return "", errors.New("slirp4netns network driver disabled by build tag no_slirp4netns")
4545
}
46+
47+
// Available indicates whether this driver is compiled in (used for generating help text)
48+
const Available = false

pkg/network/vpnkit/vpnkit.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,3 +291,6 @@ func vif2tap(w io.Writer, vif *vmnet.Vif) {
291291
}
292292
}
293293
}
294+
295+
// Available indicates whether this driver is compiled in (used for generating help text)
296+
const Available = true

0 commit comments

Comments
 (0)