package main import ( "fmt" "io" "net" "os" "strings" ) func (i *iface) ProcMAC() (err error) { var ( sb strings.Builder file *os.File cbytes []byte ) macpath := strings.Join([]string{i.netpath, "address"}, "/") if file, err = os.Open(macpath); err != nil { err = fmt.Errorf("Failed to open file: %w", err) return } defer file.Close() if cbytes, err = io.ReadAll(file); err != nil { err = fmt.Errorf("Failed to read file: %w", err) return } var ( strmac string ok bool ) if strmac, ok = strings.CutSuffix(string(cbytes), "\n"); !ok { err = ErrParseMac return } var addr net.HardwareAddr if addr, err = net.ParseMAC(strmac); err != nil { err = fmt.Errorf("%w: %w", ErrParseMac, err) return } _, err = sb.WriteString(i.pfx) _, err = sb.WriteString("x") for _, v := range addr { _, err = sb.WriteString(fmt.Sprintf("%02x", v)) } i.names[IfNameMAC] = sb.String() return }