...

Source file src/edge-infra.dev/pkg/lib/kernel/modules/modules.go

Documentation: edge-infra.dev/pkg/lib/kernel/modules

     1  //go:build linux
     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