// ping_fs is a callback routine meant to be called from within // cm_SearchCellFile() or cm_SearchCellDNS() static long pingFS(void *ping_params, struct sockaddr_in *addrp, char *namep) { int rc; struct ping_params * pp = (struct ping_params *) ping_params; if ( pp->max_hosts && pp->hosts_attempted >= pp->max_hosts ) return 0; pp->hosts_attempted++; if (pp->port && addrp->sin_port != htons(pp->port)) addrp->sin_port = htons(pp->port); rc = fsprobe_Init(1, addrp, pp->retry_delay, fsHandler, pp->verbose); if (rc) { fprintf(stderr, "fsprobe_Init failed (%d)\n", rc); fsprobe_Cleanup(1); return 0; } for (;;) { tv.tv_sec = pp->host.wait; tv.tv_usec = 0; if (IOMGR_Select(0, 0, 0, 0, &tv)) break; } probeComplete(); return(0); }
int main(int argc, char **argv) { /*Main routine */ static char rn[] = "fsprobe_test"; /*Routine name */ afs_int32 code; /*Return code */ struct sockaddr_in FSSktArray[3]; /*socket array */ struct hostent *he; /*Host entry */ int sleep_secs; /*Number of seconds to sleep */ printf("\n\nTest of the fsprobe facility.\n\n"); /* * Fill in the socket array for bigbird, vice1, and vice2. */ FSSktArray[0].sin_family = AF_INET; FSSktArray[0].sin_port = htons(7000); /* FileServer port */ he = hostutil_GetHostByName("servername1"); if (he == NULL) { fprintf(stderr, "[%s] Can't get host info for servername1\n", rn); exit(-1); } memcpy(&(FSSktArray[0].sin_addr.s_addr), he->h_addr, 4); FSSktArray[1].sin_family = AF_INET; FSSktArray[1].sin_port = htons(7000); /* FileServer port */ he = hostutil_GetHostByName("servername2"); if (he == NULL) { fprintf(stderr, "[%s] Can't get host info for servername2\n", rn); exit(-1); } memcpy(&(FSSktArray[1].sin_addr.s_addr), he->h_addr, 4); FSSktArray[2].sin_family = AF_INET; FSSktArray[2].sin_port = htons(7000); /* FileServer port */ he = hostutil_GetHostByName("servername3"); if (he == NULL) { fprintf(stderr, "[%s] Can't get host info for servername3\n", rn); exit(-1); } memcpy(&(FSSktArray[2].sin_addr.s_addr), he->h_addr, 4); printf("Sockets for the 3 AFS FileServers to be probed:\n"); printf("\t Host servername1: IP addr 0x%x, port %d\n", FSSktArray[0].sin_addr.s_addr, FSSktArray[0].sin_port); printf("\t Host servername2: IP addr 0x%x, port %d\n", FSSktArray[1].sin_addr.s_addr, FSSktArray[1].sin_port); printf("\t Host servername3: IP addr 0x%x, port %d\n", FSSktArray[2].sin_addr.s_addr, FSSktArray[2].sin_port); /* * Crank up the FileServer prober, then sit back and have fun. */ printf("Starting up the fsprobe service\n"); code = fsprobe_Init(3, /*Num servers */ FSSktArray, /*FileServer socket array */ 30, /*Probe every 30 seconds */ FS_Handler, /*Handler routine */ 1); /*Turn debugging output on */ if (code) { fprintf(stderr, "[%s] Error returned by fsprobe_Init: %d\n", rn, code); fsprobe_Cleanup(1); /*Get rid of malloc'ed structures */ exit(-1); } sleep_secs = 60 * 10; /*Allow 10 minutes of data collection */ printf ("Fsprobe service started, main thread sleeping for %d seconds...\n", sleep_secs); fsprobe_Wait(sleep_secs); /* * We're all done. Clean up, put the last nail in Rx, then * exit happily. */ printf("Yawn, main thread just woke up. Cleaning things out...\n"); code = fsprobe_Cleanup(1); /*Get rid of malloc'ed data */ rx_Finalize(); exit(0); } /*Main routine */