//go:build linux package modules import ( "bufio" "fmt" "os" "strings" "github.com/pmorjan/kmod" ) func IsLoaded(name string) (bool, error) { file, err := os.Open("/proc/modules") if err != nil { return false, fmt.Errorf("failed to read proc modules: %w", err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { s := strings.Split(scanner.Text(), " ") if name == s[0] { return true, nil } } return false, scanner.Err() } func Load(name string) error { k, err := kmod.New() if err != nil { return err } if err := k.Load(name, "", 0); err != nil { return fmt.Errorf("failed to load module %w", err) } return nil } func LoadIfNotLoaded(name string) error { if loaded, err := IsLoaded(name); err != nil || loaded { return err } return Load(name) }