// etcp_loadbalancer.h - Load Balancer for ETCP Channels #ifndef ETCP_LOADBALANCER_H #define ETCP_LOADBALANCER_H #include "etcp.h" #ifdef __cplusplus extern "C" { #endif // Constants (moved here for visibility) #define TIMEBASE_NS 100000ULL // 0.1ms base #define SUB_MODULO 1000000ULL // Sub-nanotime modulo #define DELTA_TIME_NS 10000ULL // Delta for inactivity #define SHAPER_BURST_DELAY_TB 10ULL // 10 = 1ms burst allowance // при формировании пакета - выбрать линк для передачи // должен либо возвращать линк который готов забрать пакет, либо возвратить NULL если все линки заняты. struct ETCP_LINK* etcp_loadbalancer_select_link(struct ETCP_CONN* etcp); // Когда линк снова ready (timer или link_ready) - loadbalancer должен вызвать ETCP_CONN->packet_request_fn(etcp) //void etcp_loadbalancer_update_after_send(struct ETCP_LINK* link, size_t pkt_size); - это надо заменить на: void etcp_loadbalancer_send(struct ETCP_DGRAM* dgram); // сообщаем в loadbalancer о готовности линка (вызывается из таймера, ACK, изменения лимита) void loadbalancer_link_ready(struct ETCP_LINK* link); // проверяет все условия блокировки отправки (включая inflight_bytes) int loadbalancer_link_can_send(struct ETCP_LINK* link); // Получить состояние связи ETCP: 1 - есть живой линк, 0 - все недоступны int etcp_loadbalancer_get_link_status(struct ETCP_CONN* etcp); #ifdef __cplusplus } #endif #endif // ETCP_LOADBALANCER_H