Skip to content

Commit 175a9a5

Browse files
committed
incusd/ip/tuntap: Switch to netlink
Signed-off-by: Gwendolyn <[email protected]>
1 parent 8d1945d commit 175a9a5

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

internal/server/ip/tuntap.go

+23-14
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package ip
22

33
import (
4-
"github.com/lxc/incus/v6/shared/subprocess"
4+
"fmt"
5+
6+
"github.com/vishvananda/netlink"
57
)
68

79
// Tuntap represents arguments for tuntap manipulation.
@@ -14,22 +16,29 @@ type Tuntap struct {
1416

1517
// Add adds new tuntap interface.
1618
func (t *Tuntap) Add() error {
17-
cmd := []string{"tuntap", "add", "name", t.Name, "mode", t.Mode}
18-
if t.MultiQueue {
19-
cmd = append(cmd, "multi_queue")
20-
}
19+
var mode netlink.TuntapMode
2120

22-
_, err := subprocess.RunCommand("ip", cmd...)
23-
if err != nil {
24-
return err
21+
switch t.Mode {
22+
case "tun":
23+
mode = netlink.TUNTAP_MODE_TUN
24+
case "tap":
25+
mode = netlink.TUNTAP_MODE_TAP
26+
default:
27+
return fmt.Errorf("invalid tuntap mode %q", t.Mode)
2528
}
2629

27-
if t.Master != "" {
28-
_, err := subprocess.RunCommand("ip", "link", "set", t.Name, "master", t.Master)
29-
if err != nil {
30-
return err
31-
}
30+
// TODO: there is TUNTAP_DEFAULTS and TUNTAP_MULTI_QUEUE_DEFAULTS in the netlink package, I don't know if these should be used
31+
var flags netlink.TuntapFlag
32+
33+
if t.MultiQueue {
34+
flags |= netlink.TUNTAP_MULTI_QUEUE
3235
}
3336

34-
return nil
37+
return netlink.LinkAdd(&netlink.Tuntap{
38+
LinkAttrs: netlink.LinkAttrs{
39+
Name: t.Name,
40+
},
41+
Mode: mode,
42+
Flags: flags,
43+
})
3544
}

0 commit comments

Comments
 (0)