Skip to content

Commit 2fd8bde

Browse files
committedMay 12, 2024··
chore(pkg/wireguard): remove duplicate link syncing, and cleanup
Fixes: #166
1 parent a11b890 commit 2fd8bde

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed
 

‎pkg/wireguard/wireguard.go

+16-39
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package wireguard
22

33
import (
4+
"errors"
45
"fmt"
56
"net"
67
"os/exec"
@@ -88,7 +89,7 @@ func createLinkUsingUserspaceImpl(iface string, wgUserspaceImplementationFallbac
8889

8990
}
9091

91-
func createLinkUsingKernalModule(iface string) error {
92+
func createLinkUsingKernelModule(iface string) error {
9293
// link not created
9394
wgLink := &netlink.GenericLink{
9495
LinkAttrs: netlink.LinkAttrs{
@@ -104,49 +105,25 @@ func createLinkUsingKernalModule(iface string) error {
104105
return nil
105106
}
106107

107-
func SyncLink(_ agent.State, iface string, wgUserspaceImplementationFallback string, wgUseUserspaceImpl bool) error {
108-
_, err := netlink.LinkByName(iface)
108+
func SyncLink(state agent.State, iface string, wgUserspaceImplementationFallback string, wgUseUserspaceImpl bool) error {
109+
link, err := netlink.LinkByName(iface)
109110
if err != nil {
110-
if _, ok := err.(netlink.LinkNotFoundError); !ok {
111-
return err
112-
}
113-
}
111+
if errors.As(err, &netlink.LinkNotFoundError{}) {
112+
if wgUseUserspaceImpl {
113+
if err := createLinkUsingUserspaceImpl(iface, wgUserspaceImplementationFallback); err != nil {
114+
return fmt.Errorf("create link using user space impl: %w", err)
115+
}
114116

115-
if _, ok := err.(netlink.LinkNotFoundError); ok {
116-
if wgUseUserspaceImpl {
117-
err = createLinkUsingUserspaceImpl(iface, wgUserspaceImplementationFallback)
117+
} else if err := createLinkUsingKernelModule(iface); err != nil {
118+
fmt.Printf("could not create link using kernel module, will attempt to fallback to user space implementation: %v\n", err)
118119

119-
if err != nil {
120-
return err
120+
// Fallback to user space implementation.
121+
wgUseUserspaceImpl = true
121122
}
122123

123-
} else {
124-
err = createLinkUsingKernalModule(iface)
125-
126-
if err != nil {
127-
err = createLinkUsingUserspaceImpl(iface, wgUserspaceImplementationFallback)
128-
129-
if err != nil {
130-
return err
131-
}
132-
}
133-
}
134-
135-
// TODO: Can this be removed?
136-
link, err := netlink.LinkByName(iface)
137-
if err != nil {
138-
return err
139-
}
140-
if err := netlink.LinkSetUp(link); err != nil {
141-
return err
142-
}
143-
}
144-
145-
link, err := netlink.LinkByName(iface)
146-
if err != nil {
147-
if _, ok := err.(netlink.LinkNotFoundError); !ok {
148-
return err
124+
return SyncLink(state, iface, wgUserspaceImplementationFallback, wgUseUserspaceImpl)
149125
}
126+
return fmt.Errorf("link by name: %w", err)
150127
}
151128

152129
addresses, err := netlink.AddrList(link, syscall.AF_INET)
@@ -165,7 +142,7 @@ func SyncLink(_ agent.State, iface string, wgUserspaceImplementationFallback str
165142
}
166143

167144
if err := netlink.LinkSetUp(link); err != nil {
168-
return err
145+
return fmt.Errorf("link set up: %w", err)
169146
}
170147
return nil
171148
}

0 commit comments

Comments
 (0)
Please sign in to comment.