@ -108,6 +108,15 @@ struct etcp_cbk_entry {
struct etcp_cbk_entry * next ;
} ;
/**
* @ brief Р а с с ы л к а per - connection с о б ы т и я
*
* @ param conn ETCP с о е д и н е н и е
* @ param event Б и т о в а я м а с к а с о б ы т и я ( ETCP_CBK_EVENT_ * )
*
* @ note В ы з ы в а ю т с я в с е к о л л б э к и с о е д и н е н и я , у к о т о р ы х event_mask
* п е р е с е к а е т с я с п е р е д а н н ы м event
*/
void etcp_cbk_fire ( struct ETCP_CONN * conn , int event ) ;
// Instance-level callback types (separate from per-connection etcp_cbk_fn in etcp.h)
@ -119,12 +128,52 @@ struct etcp_inst_cbk_entry {
} ;
// ---- Per-connection unified callback API ----
/**
* @ brief З а р е г и с т р и р о в а т ь per - connection к о л л б э к с м а с к о й с о б ы т и й
*
* @ param conn ETCP с о е д и н е н и е
* @ param fn К о л л б э к ( с и г н а т у р а etcp_cbk_fn )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т , п е р е д а в а е м ы й в к о л л б э к
* @ param event_mask Б и т о в а я м а с к а и н т е р е с у ю щ и х с о б ы т и й ( ETCP_CBK_EVENT_ * )
*/
void etcp_conn_add_cbk ( struct ETCP_CONN * conn , etcp_cbk_fn fn , void * arg , int event_mask ) ;
/**
* @ brief У д а л и т ь per - connection к о л л б э к
*
* @ param conn ETCP с о е д и н е н и е
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т ( д л я и д е н т и ф и к а ц и и з а п и с и )
*/
void etcp_conn_remove_cbk ( struct ETCP_CONN * conn , etcp_cbk_fn fn , void * arg ) ;
/**
* @ brief О б н о в и т ь м а с к у с о б ы т и й у у ж е з а р е г и с т р и р о в а н н о г о к о л л б э к а
*
* @ param conn ETCP с о е д и н е н и е
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
* @ param event_mask Н о в а я б и т о в а я м а с к а с о б ы т и й ( ETCP_CBK_EVENT_ * )
*/
void etcp_conn_update_cbk_mask ( struct ETCP_CONN * conn , etcp_cbk_fn fn , void * arg , int event_mask ) ;
// ---- Instance-level callbacks ----
/**
* @ brief З а р е г и с т р и р о в а т ь instance - level к о л л б э к « с о з д а н о н о в о е с о е д и н е н и е »
*
* @ param inst UTUN instance
* @ param fn К о л л б э к ( с и г н а т у р а etcp_inst_cbk_fn )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_add_new_conn_cbk ( struct UTUN_INSTANCE * inst , etcp_inst_cbk_fn fn , void * arg ) ;
/**
* @ brief У д а л и т ь instance - level к о л л б э к « с о з д а н о н о в о е с о е д и н е н и е »
*
* @ param inst UTUN instance
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_remove_new_conn_cbk ( struct UTUN_INSTANCE * inst , etcp_inst_cbk_fn fn , void * arg ) ;
// ---- Link status change callback (instance-level) ----
@ -137,8 +186,34 @@ struct etcp_link_status_cbk_entry {
struct etcp_link_status_cbk_entry * next ;
} ;
/**
* @ brief З а р е г и с т р и р о в а т ь instance - level к о л л б э к с м е н ы с о с т о я н и я л и н к а
*
* @ param inst UTUN instance
* @ param fn К о л л б э к ( с и г н а т у р а etcp_link_status_cbk_fn )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_add_link_status_cbk ( struct UTUN_INSTANCE * inst , etcp_link_status_cbk_fn fn , void * arg ) ;
/**
* @ brief У д а л и т ь instance - level к о л л б э к с м е н ы с о с т о я н и я л и н к а
*
* @ param inst UTUN instance
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_remove_link_status_cbk ( struct UTUN_INSTANCE * inst , etcp_link_status_cbk_fn fn , void * arg ) ;
/**
* @ brief В н у т р е н н я я ф у н к ц и я : р а с с ы л к а с о б ы т и я с м е н ы с о с т о я н и я л и н к а
*
* @ param link Л и н к , с о с т о я н и е к о т о р о г о и з м е н и л о с ь
* @ param old_state П р е д ы д у щ е е link_state ( 0 - init , 1 - handshake , 2 - try_reconnect , 3 - connected )
* @ param old_status П р е д ы д у щ е е link_status ( 1 - up , 0 - down )
*
* @ note В ы з ы в а е т с я а в т о м а т и ч е с к и и з etcp_connections . c п р и и з м е н е н и и
* link_state / link_status ; н е п р е д н а з н а ч е н д л я в ы з о в а и з в н е
*/
void etcp_fire_link_status_cbk ( struct ETCP_LINK * link , int old_state , int old_status ) ;
// ---- Background connection initialization ----
@ -148,6 +223,21 @@ void etcp_fire_link_status_cbk(struct ETCP_LINK* link, int old_state, int old_st
typedef void ( * etcp_connect_callback_t ) ( void * arg , struct ETCP_CONN * conn , int type ) ;
/**
* @ brief Ф о н о в а я и н и ц и а л и з а ц и я с о е д и н е н и я к у з л у
*
* @ param instance UTUN instance
* @ param node У з е л и з node registry ( TOPO_GROUP_NODE )
* @ param cb К о л л б э к з а в е р ш е н и я ( с и г н а т у р а etcp_connect_callback_t )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
* @ param flags Б и т о в а я м а с к а э т а п о в ( ETCP_CONNECT_EARLY / LATE / BGP_READY )
* @ return 0 п р и у с п е х е , - 1 п р и о ш и б к е
*
* @ note К о л л б э к в ы з ы в а е т с я н а к а ж д о м з а п р о ш е н н о м э т а п е с п а р а м е т р о м
* type = ETCP_CONNECT_EARLY / ETCP_CONNECT_LATE / ETCP_CONNECT_BGP_READY
* ( и л и 0 п р и т а й м а у т е / н е у д а ч е ) . П р и у ж е г о т о в о м с о е д и н е н и и EARLY + LATE
* д о с т а в л я ю т с я н е м е д л е н н о .
*/
int etcp_connect ( struct UTUN_INSTANCE * instance , struct TOPO_GROUP_NODE * node ,
etcp_connect_callback_t cb , void * arg , uint8_t flags ) ;
@ -195,7 +285,24 @@ int etcp_bind(struct UTUN_INSTANCE* inst, uint8_t id, etcp_recv_fn callback);
*/
int etcp_unbind ( struct UTUN_INSTANCE * inst , uint8_t id ) ;
/**
* @ brief З а р е г и с т р и р о в а т ь instance - level к о л л б э к с т а т у с а с о е д и н е н и я
*
* @ param inst UTUN instance
* @ param fn К о л л б э к ( с и г н а т у р а etcp_conn_status_fn )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*
* @ note status = ETCP_CONN_STATUS_NEW / UP / DOWN / DELETE
*/
void etcp_add_conn_status_cbk ( struct UTUN_INSTANCE * inst , etcp_conn_status_fn fn , void * arg ) ;
/**
* @ brief У д а л и т ь instance - level к о л л б э к с т а т у с а с о е д и н е н и я
*
* @ param inst UTUN instance
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_remove_conn_status_cbk ( struct UTUN_INSTANCE * inst , etcp_conn_status_fn fn , void * arg ) ;
/* Socket property change events (instance-level) */
@ -210,10 +317,44 @@ struct etcp_socket_cbk_entry {
struct etcp_socket_cbk_entry * next ;
} ;
/**
* @ brief З а р е г и с т р и р о в а т ь instance - level к о л л б э к с о б ы т и й с о к е т а
*
* @ param inst UTUN instance
* @ param fn К о л л б э к ( с и г н а т у р а etcp_socket_cbk_fn )
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
* @ param event_mask Б и т о в а я м а с к а с о б ы т и й ( ETCP_SOCKET_EVENT_ADDR_CHANGED / STATUS_CHANGED )
*/
void etcp_add_socket_cbk ( struct UTUN_INSTANCE * inst , etcp_socket_cbk_fn fn , void * arg , int event_mask ) ;
/**
* @ brief У д а л и т ь instance - level к о л л б э к с о б ы т и й с о к е т а
*
* @ param inst UTUN instance
* @ param fn К о л л б э к
* @ param arg П о л ь з о в а т е л ь с к и й а р г у м е н т
*/
void etcp_remove_socket_cbk ( struct UTUN_INSTANCE * inst , etcp_socket_cbk_fn fn , void * arg ) ;
/**
* @ brief В н у т р е н н я я ф у н к ц и я : р а с с ы л к а с о б ы т и я с о к е т а
*
* @ param sock С о к е т , у к о т о р о г о п р о и з о ш л о с о б ы т и е
* @ param event Б и т о в а я м а с к а с о б ы т и я ( ETCP_SOCKET_EVENT_ * )
*
* @ note В ы з ы в а ю т с я к о л л б э к и , у к о т о р ы х event_mask п е р е с е к а е т с я с event
*/
void etcp_socket_cbk_fire ( struct ETCP_SOCKET * sock , int event ) ;
/**
* @ brief У с т а н о в и т ь с о с т о я н и е о б м е н а м а р ш р у т - т а б л и ц а м и ( BGP )
*
* @ param conn ETCP с о е д и н е н и е
* @ param new_state 0 - н е а к т и в е н , 1 - н а д о и н и ц и и р о в а т ь ( к л и е н т ) , 2 - о б м е н и д ё т ,
* 3 - з а в е р ш ё н , 4 - п р о п у щ е н ( н е т BGP )
*
* @ note П р и new_state > = 3 и н а л и ч и и bgp_ready_cbk в ы з ы в а е т с я э т о т к о л л б э к
*/
void etcp_set_routing_exchange_state ( struct ETCP_CONN * conn , uint8_t new_state ) ;
/**