getAddrsInfo returns interface name, address, scope and netmask for all interfaces.
(interfaces []net.Interface, filter *deviceFilter, logger *slog.Logger)
| 179 | |
| 180 | // getAddrsInfo returns interface name, address, scope and netmask for all interfaces. |
| 181 | func getAddrsInfo(interfaces []net.Interface, filter *deviceFilter, logger *slog.Logger) []addrInfo { |
| 182 | var res []addrInfo |
| 183 | |
| 184 | for _, ifs := range interfaces { |
| 185 | if filter.ignored(ifs.Name) { |
| 186 | logger.Debug("Ignoring device", "device", ifs.Name) |
| 187 | continue |
| 188 | } |
| 189 | addrs, _ := ifs.Addrs() |
| 190 | for _, addr := range addrs { |
| 191 | ip, ipNet, err := net.ParseCIDR(addr.String()) |
| 192 | if err != nil { |
| 193 | continue |
| 194 | } |
| 195 | size, _ := ipNet.Mask.Size() |
| 196 | |
| 197 | res = append(res, addrInfo{ |
| 198 | device: ifs.Name, |
| 199 | addr: ip.String(), |
| 200 | scope: scope(ip), |
| 201 | netmask: strconv.Itoa(size), |
| 202 | }) |
| 203 | } |
| 204 | } |
| 205 | |
| 206 | return res |
| 207 | } |
| 208 | |
| 209 | // https://github.com/torvalds/linux/blob/master/net/core/net-procfs.c#L75-L97 |
| 210 | func legacy(metrics map[string]uint64) { |