KNET_LINK_GET_STATUS(3)
π KNET_LINK_GET_STATUS π
okay bestie, so this is knet_link_get_status from the Kronosnet Programmer's Manual β section 3, the library functions section, iykyk β¨
β¨ NAME β¨
knet_link_get_status β get the status (and the statistics, because we love receipts π) for a link.
πΈ SYNOPSIS πΈ
#include <libknet.h>
int knet_link_get_status(
knet_handle_t knet_h,
knet_node_id_t host_id,
uint8_t link_id,
struct knet_link_status *status,
size_t struct_size
);
π¦ DESCRIPTION π¦
knet_link_get_status β yes that's the whole first line, she's the main character and she knows it π
here's the cast of characters, one by one:
knet_hβ pointer toknet_handle_tπ«Άhost_idβ go peek atknet_host_add(3)for this onelink_idβ and this one lives over inknet_link_set_config(3)statusβ pointer to aknet_link_statusstruct (the good stuff goes in here β¨)struct_sizeβ max size ofknet_link_status. this is the sneaky-genius part: it lets the library add fields later without an ABI change. the returned structure gets truncated to this length, and the.sizemember tells you the full size. iconic behaviour honestly π
π STRUCTURES π
this is the status of a knet link, exactly as it comes back from knet_link_get_status():
struct knet_link_status {
/*
* Size of the structure for ABI checking, set this to
* sizeof(knet_link_status) before calling knet_link_get_status()
*/
size_t size;
char src_ipaddr[KNET_MAX_HOST_LEN]; /* Local IP address as a string */
char src_port[KNET_MAX_PORT_LEN]; /* Local IP port as a string */
char dst_ipaddr[KNET_MAX_HOST_LEN]; /* Remote IP address as a string */
char dst_port[KNET_MAX_PORT_LEN]; /* Remote IP port as a string */
uint8_t enabled; /* Link is configured and admin enabled for traffic */
uint8_t connected; /* Link is connected for data (local view) */
uint8_t dynconnected; /* Link has been activated by remote dynip */
unsigned long long latency; /* average latency computed by fix/exp */
struct timespec pong_last; /* Timestamp of the past pong received */
unsigned int mtu; /* Currently detected MTU on this link */
/*
* Contains the size of the IP protocol, knet headers and crypto headers
* (if configured). This value is filled in ONLY after the first PMTUd run on
* that given link, and can change if link configuration or crypto configuration
* changes at runtime. WARNING: in general mtu + proto_overhead might or might not
* match the output of ifconfig mtu due to crypto requirements to pad packets to
* some specific boundaries.
*/
unsigned int proto_overhead;
struct stats; /* Link statistics */
};
β οΈ bestie listen to me aboutproto_overhead: it is filled in ONLY after the first PMTUd run on that given link, and it can change if the link config or the crypto config changes at runtime. and here's the warning, no cap β in generalmtu + proto_overheadmight or might not match the output ofifconfig mtu, because crypto has requirements to pad packets to some specific boundaries. so don't come for her when the numbers don't line up π
β RETURN VALUE β
knet_link_get_status returns 0 on success, -1 on error, and errno is set. that's it, that's the deal π«Ά
π SEE ALSO π
the whole girl gang, in order, exactly as she listed them:
knet_handle_remove_datafd(3),knet_handle_get_stats(3),knet_host_add(3),knet_handle_pmtud_setfreq(3),knet_handle_pmtud_get(3),knet_handle_crypto_use_config(3),knet_host_get_id_by_host_name(3),knet_host_get_status(3),knet_link_add_acl(3),knet_link_get_pong_count(3),knet_link_get_priority(3),knet_handle_free(3),knet_handle_enable_sock_notify(3),knet_handle_get_datafd(3),knet_recv(3),knet_link_get_ping_timers(3),knet_log_get_subsystem_id(3),knet_host_remove(3),knet_host_enable_status_change_notify(3),knet_strtoaddr(3),knet_link_rm_acl(3),knet_send(3),knet_handle_enable_pmtud_notify(3),knet_get_crypto_cipher_list(3),knet_handle_get_transport_reconnect_interval(3),knet_link_get_enable(3),knet_link_set_priority(3),knet_log_set_loglevel(3),knet_handle_get_channel(3),knet_link_get_config(3),knet_link_get_link_list(3),knet_get_crypto_hash_list(3),knet_get_transport_list(3),knet_get_transport_id_by_name(3),knet_log_get_loglevel_id(3),knet_handle_new_ex(3),knet_host_set_name(3),knet_addrtostr(3),knet_handle_setfwd(3),knet_get_compress_list(3),knet_host_set_policy(3),knet_get_transport_name_by_id(3),knet_handle_enable_filter(3),knet_handle_crypto_rx_clear_traffic(3),knet_handle_compress(3),knet_handle_add_datafd(3),knet_send_sync(3),knet_log_get_loglevel_name(3),knet_handle_enable_access_lists(3),knet_host_get_host_list(3),knet_host_get_policy(3),knet_link_set_enable(3),knet_link_set_pong_count(3),knet_log_get_subsystem_name(3),knet_host_get_name_by_host_id(3),knet_link_clear_config(3),knet_log_get_loglevel(3),knet_handle_new(3),knet_handle_pmtud_getfreq(3),knet_handle_pmtud_set(3),knet_handle_clear_stats(3),knet_link_set_config(3),knet_handle_crypto_set_config(3),knet_handle_crypto(3),knet_get_crypto_list(3),knet_handle_set_transport_reconnect_interval(3),knet_link_clear_acl(3),knet_link_set_ping_timers(3),knet_handle_setprio_dscp(3),knet_link_insert_acl(3)
likeβ¦ that's a whole friend group π they all showed up to the function call, obsessed with them fr fr π
π COPYRIGHT π
Copyright (C) 2010-2026 Red Hat, Inc. All rights reserved.
and that's the tea, bestie π this whole page is from the kronosnet manual, dated 2026-07-20, and yeah she's filed under KNET_LINK_GET_STATUS(3) β go read the whole thing again, you ate it up π
β¨π¦
π¦ where this page comes from
- fedora 43: libknet1-devel 1.35-1.fc43 Β· LGPL-2.1-or-later
- fedora 43: libknet1-devel 1.35-1.fc43 Β· LGPL-2.1-or-later
- fedora 44: libknet1-devel 1.35-1.fc44 Β· LGPL-2.1-or-later
- fedora 44: libknet1-devel 1.35-1.fc44 Β· LGPL-2.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms