(logf logger.Logf)
| 16 | ) |
| 17 | |
| 18 | func ethtoolImpl(logf logger.Logf) error { |
| 19 | et, err := ethtool.NewEthtool() |
| 20 | if err != nil { |
| 21 | logf("could not create ethtool: %v", err) |
| 22 | return nil |
| 23 | } |
| 24 | defer et.Close() |
| 25 | |
| 26 | netmon.ForeachInterface(func(iface netmon.Interface, _ []netip.Prefix) { |
| 27 | ilogf := logger.WithPrefix(logf, iface.Name+": ") |
| 28 | features, err := et.Features(iface.Name) |
| 29 | if err == nil { |
| 30 | enabled := []string{} |
| 31 | for feature, value := range features { |
| 32 | if value { |
| 33 | enabled = append(enabled, feature) |
| 34 | } |
| 35 | } |
| 36 | sort.Strings(enabled) |
| 37 | ilogf("features: %v", enabled) |
| 38 | } else { |
| 39 | ilogf("features: error: %v", err) |
| 40 | } |
| 41 | |
| 42 | stats, err := et.Stats(iface.Name) |
| 43 | if err == nil { |
| 44 | printStats(ilogf, stats) |
| 45 | } else { |
| 46 | ilogf("stats: error: %v", err) |
| 47 | } |
| 48 | }) |
| 49 | |
| 50 | return nil |
| 51 | } |
| 52 | |
| 53 | // Stats that should be printed if non-zero |
| 54 | var nonzeroStats = set.SetOf([]string{ |
no test coverage detected
searching dependent graphs…