/* libhw_generic/net.c - Device-independent utilities * * Copyright (C) 2024-2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #include #define NET_EOTHER 1 #define NET_EARP_TIMEOUT 2 #define NET_EACK_TIMEOUT 3 #define NET_ERECV_TIMEOUT 4 #define NET_ETHREAD 5 #define NET_ECLOSED 6 #define NET_EMSGSIZE 7 const char *net_strerror(int net_errno) { switch (net_errno) { case NET_EOTHER: return "unknown error"; case NET_EARP_TIMEOUT: return "ARP timeout"; case NET_EACK_TIMEOUT: return "TCP ACK timeout"; case NET_ERECV_TIMEOUT: return "receive timeout"; case NET_ETHREAD: return "thread error"; case NET_ECLOSED: return "already closed"; case NET_EMSGSIZE: return "message too long"; default: assert_notreached("invalid net_errno"); } } void fmt_print_net_ip4_addr(lo_interface fmt_dest w, struct net_ip4_addr addr) { fmt_print(w, addr.octets[0], ".", addr.octets[1], ".", addr.octets[2], ".", addr.octets[3]); } void fmt_print_net_eth_addr(lo_interface fmt_dest w, struct net_eth_addr addr) { fmt_print(w, (base16_u8_, addr.octets[0]), ":", (base16_u8_, addr.octets[1]), ":", (base16_u8_, addr.octets[2]), ":", (base16_u8_, addr.octets[3]), ":", (base16_u8_, addr.octets[4]), ":", (base16_u8_, addr.octets[5])); }