Files
Odin/core/net/interface.odin
Colin Davidson 2ca30e3acd more test cleanup
2023-03-01 08:27:07 -08:00

69 lines
1.7 KiB
Odin

/*
Copyright 2022 Tetralux <tetraluxonpc@gmail.com>
Copyright 2022 Colin Davidson <colrdavidson@gmail.com>
Copyright 2022 Jeroen van Rijn <nom@duclavier.com>.
Made available under Odin's BSD-3 license.
List of contributors:
Tetralux: Initial implementation
Colin Davidson: Linux platform code, OSX platform code, Odin-native DNS resolver
Jeroen van Rijn: Cross platform unification, code style, documentation
*/
/*
Package net implements cross-platform Berkeley Sockets, DNS resolution and associated procedures.
For other protocols and their features, see subdirectories of this package.
*/
package net
import "core:strings"
/*
`destroy_interfaces` cleans up a list of network interfaces retrieved by e.g. `enumerate_interfaces`.
*/
destroy_interfaces :: proc(interfaces: []Network_Interface, allocator := context.allocator) {
context.allocator = allocator
for i in interfaces {
delete(i.adapter_name)
delete(i.friendly_name)
delete(i.description)
delete(i.dns_suffix)
delete(i.physical_address)
delete(i.unicast)
delete(i.multicast)
delete(i.anycast)
delete(i.gateways)
}
delete(interfaces, allocator)
}
/*
Turns a slice of bytes (from e.g. `get_adapters_addresses`) into a "XX:XX:XX:..." string.
*/
physical_address_to_string :: proc(phy_addr: []u8, allocator := context.allocator) -> (phy_string: string) {
context.allocator = allocator
MAC_HEX := "0123456789ABCDEF"
if len(phy_addr) == 0 {
return ""
}
buf: strings.Builder
for b, i in phy_addr {
if i > 0 {
strings.write_rune(&buf, ':')
}
hi := rune(MAC_HEX[b >> 4])
lo := rune(MAC_HEX[b & 15])
strings.write_rune(&buf, hi)
strings.write_rune(&buf, lo)
}
return strings.to_string(buf)
}