@ -100,11 +100,11 @@ static void t1(void* arg) {
fprintf ( stderr , " \n === P1: two opens before poll === \n " ) ; fflush ( stderr ) ;
g_a - > etcp_connect_timeout_tb = TIMEOUT_TB ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 0 , & gh [ 0 ] ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 0 , & gh [ 0 ] , NULL ) ;
fprintf ( stderr , " open#0 → %s \n " , r = = NCD_NEW ? " NCD_NEW " : r = = NCD_REUSED ? " NCD_REUSED " : " ERR " ) ;
if ( r ! = NCD_NEW ) { fail ( " expected NCD_NEW " ) ; return ; }
r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 1 , & gh [ 1 ] ) ;
r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 1 , & gh [ 1 ] , NULL ) ;
fprintf ( stderr , " open#1 → %s \n " , r = = NCD_NEW ? " NCD_NEW " : r = = NCD_REUSED ? " NCD_REUSED " : " ERR " ) ;
if ( r ! = NCD_REUSED ) { fail ( " expected NCD_REUSED " ) ; return ; }
@ -125,7 +125,7 @@ static void t2(void* arg) {
static void t3 ( void * arg ) {
( void ) arg ; g_phase = 3 ;
fprintf ( stderr , " \n === P3: open on ready conn === \n " ) ; fflush ( stderr ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 2 , & gh [ 2 ] ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 2 , & gh [ 2 ] , NULL ) ;
fprintf ( stderr , " open#2 → %s \n " , r = = NCD_REUSED ? " NCD_REUSED " : " ? " ) ;
if ( r ! = NCD_REUSED ) { fail ( " expected NCD_REUSED " ) ; return ; }
uasync_call_soon ( ua , NULL , t4 ) ;
@ -135,7 +135,7 @@ static void t4(void* arg) {
( void ) arg ; g_phase = 4 ;
if ( g_up [ 2 ] = = 0 ) { uasync_set_timeout ( ua , POLL_MS , NULL , ( timeout_callback_t ) t4 , " t4 " ) ; return ; }
fprintf ( stderr , " \n === P4: async cb OK, open h3 === \n " ) ; fflush ( stderr ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 3 , & gh [ 3 ] ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 3 , & gh [ 3 ] , NULL ) ;
fprintf ( stderr , " open#3 → %s \n " , r = = NCD_REUSED ? " NCD_REUSED " : " ? " ) ;
if ( r ! = NCD_REUSED ) { fail ( " expected NCD_REUSED " ) ; return ; }
uasync_call_soon ( ua , NULL , t5 ) ;
@ -158,10 +158,10 @@ static void t5(void* arg) {
static void t6a ( void * arg ) {
( void ) arg ; g_phase = 16 ;
fprintf ( stderr , " \n === P6a: bidirectional — B opens handle to A === \n " ) ; fflush ( stderr ) ;
int r = node_conn_direct_open ( g_b , nid_a , ncd_cb_b , ( void * ) 0 , & gh_b [ 0 ] ) ;
int r = node_conn_direct_open ( g_b , nid_a , ncd_cb_b , ( void * ) 0 , & gh_b [ 0 ] , NULL ) ;
if ( r ! = NCD_REUSED ) { fail ( " P6a: B open expected NCD_REUSED (incoming conn exists) " ) ; return ; }
fprintf ( stderr , " B open → NCD_REUSED \n " ) ;
r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 4 , & gh [ 4 ] ) ;
r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 4 , & gh [ 4 ] , NULL ) ;
if ( r ! = NCD_REUSED ) { fail ( " P6a: A open(4) expected NCD_REUSED (conn alive) " ) ; return ; }
fprintf ( stderr , " A open(4) → NCD_REUSED \n " ) ; fflush ( stderr ) ;
uasync_call_soon ( ua , NULL , t6b ) ;
@ -181,7 +181,7 @@ static void t6b(void* arg) {
static void t6c ( void * arg ) {
( void ) arg ; g_phase = 18 ;
fprintf ( stderr , " \n === P6c: KEEP_ALIVE round-trip, A re-opens === \n " ) ; fflush ( stderr ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 5 , & gh [ 5 ] ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 5 , & gh [ 5 ] , NULL ) ;
if ( r ! = NCD_REUSED ) { fail ( " P6c: expected NCD_REUSED (KEEP_ALIVE saved conn) " ) ; return ; }
fprintf ( stderr , " A re-open(5) → NCD_REUSED \n " ) ; fflush ( stderr ) ;
uasync_call_soon ( ua , NULL , t6d ) ;
@ -203,7 +203,7 @@ static void t6e(void* arg) {
( void ) arg ; g_phase = 20 ;
fprintf ( stderr , " \n === P6e: close h1 → fin_wait, immediately re-open === \n " ) ; fflush ( stderr ) ;
node_conn_direct_close ( gh [ 1 ] ) ; gh [ 1 ] = NULL ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 4 , & gh [ 4 ] ) ;
int r = node_conn_direct_open ( g_a , nid_b , ncd_cb , ( void * ) 4 , & gh [ 4 ] , NULL ) ;
if ( r ! = NCD_REUSED ) { fail ( " P6e: expected NCD_REUSED (entry found, fin_wait cleared) " ) ; return ; }
fprintf ( stderr , " re-open → NCD_REUSED \n " ) ; fflush ( stderr ) ;
uasync_call_soon ( ua , NULL , t6f ) ;
@ -231,7 +231,7 @@ static void t7(void* arg) {
( void ) arg ; g_phase = 7 ;
fprintf ( stderr , " \n === P7: NCD_ERR unknown node === \n " ) ; fflush ( stderr ) ;
struct NODE_CONN_DIRECT * hx = NULL ;
int r = node_conn_direct_open ( g_a , 0xDEADBEEF00000001ULL , ncd_cb , ( void * ) 99 , & hx ) ;
int r = node_conn_direct_open ( g_a , 0xDEADBEEF00000001ULL , ncd_cb , ( void * ) 99 , & hx , NULL ) ;
fprintf ( stderr , " open(unknown) → %s \n " , r = = NCD_ERR ? " NCD_ERR " : " ? " ) ;
if ( r ! = NCD_ERR ) { fail ( " expected NCD_ERR " ) ; return ; }
if ( hx ! = NULL ) { fail ( " handle not NULL " ) ; return ; }
@ -261,7 +261,7 @@ static void t8(void* arg) {
memset ( ( void * ) g_tout , 0 , sizeof ( g_tout ) ) ;
g_a - > etcp_connect_timeout_tb = SHORT_TO_TB ;
int r = node_conn_direct_open ( g_a , fake_id , ncd_cb , ( void * ) 0 , & gh [ 0 ] ) ;
int r = node_conn_direct_open ( g_a , fake_id , ncd_cb , ( void * ) 0 , & gh [ 0 ] , NULL ) ;
fprintf ( stderr , " open(unreachable) → %s \n " , r = = NCD_NEW ? " NCD_NEW " : " ? " ) ;
if ( r ! = NCD_NEW ) { fail ( " expected NCD_NEW " ) ; return ; }
@ -309,7 +309,7 @@ static int setup(void) {
static void cleanup ( void ) { test_unlink ( ca ) ; test_unlink ( cb ) ; test_rmdir ( tdir ) ; }
int main ( void ) {
debug_config_init ( ) ; debug_set_level ( DEBUG_LEVEL_WARN ) ;
debug_config_init ( ) ; debug_set_level ( DEBUG_LEVEL_TRACE ) ;
utun_instance_set_tun_init_enabled ( 0 ) ;
if ( setup ( ) ! = 0 ) return 1 ;
ua = uasync_create ( ) ;