...
1
2
3 package modules
4
5 import (
6 "bufio"
7 "fmt"
8 "os"
9 "strings"
10
11 "github.com/pmorjan/kmod"
12 )
13
14 func IsLoaded(name string) (bool, error) {
15 file, err := os.Open("/proc/modules")
16 if err != nil {
17 return false, fmt.Errorf("failed to read proc modules: %w", err)
18 }
19 defer file.Close()
20
21 scanner := bufio.NewScanner(file)
22 for scanner.Scan() {
23 s := strings.Split(scanner.Text(), " ")
24 if name == s[0] {
25 return true, nil
26 }
27 }
28
29 return false, scanner.Err()
30 }
31
32 func Load(name string) error {
33 k, err := kmod.New()
34 if err != nil {
35 return err
36 }
37 if err := k.Load(name, "", 0); err != nil {
38 return fmt.Errorf("failed to load module %w", err)
39 }
40 return nil
41 }
42
43 func LoadIfNotLoaded(name string) error {
44 if loaded, err := IsLoaded(name); err != nil || loaded {
45 return err
46 }
47 return Load(name)
48 }
49
View as plain text