/* function called as callback proc from cm_SearchCellFile. Return 0 to * continue processing. * * At the present time the return value is ignored by the caller. */ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *hostnamep, unsigned short adminRank) { cm_server_t *tsp; cm_serverRef_t *tsrp; cm_cell_t *cellp; cm_cell_rock_t *cellrockp = (cm_cell_rock_t *)rockp; afs_uint32 probe; cellp = cellrockp->cellp; probe = !(cellrockp->flags & CM_FLAG_NOPROBE); /* if this server was previously created by fs setserverprefs */ if ( tsp = cm_FindServer(addrp, CM_SERVER_VLDB, FALSE)) { if ( !tsp->cellp ) tsp->cellp = cellp; else if (tsp->cellp != cellp) { osi_Log3(afsd_logp, "found a vlserver %s associated with two cells named %s and %s", osi_LogSaveString(afsd_logp,hostnamep), osi_LogSaveString(afsd_logp,tsp->cellp->name), osi_LogSaveString(afsd_logp,cellp->name)); } } else tsp = cm_NewServer(addrp, CM_SERVER_VLDB, cellp, NULL, probe ? 0 : CM_FLAG_NOPROBE); if (adminRank) tsp->adminRank = adminRank; /* Insert the vlserver into a sorted list, sorted by server rank */ tsrp = cm_NewServerRef(tsp, 0); cm_InsertServerList(&cellp->vlServersp, tsrp); return 0; }
/* function called as callback proc from cm_SearchCellFile. Return 0 to * continue processing. * * At the present time the return value is ignored by the caller. */ long cm_AddCellProc(void *rockp, struct sockaddr_in *addrp, char *hostnamep) { cm_server_t *tsp; cm_serverRef_t *tsrp; cm_cell_t *cellp; cm_cell_rock_t *cellrockp = (cm_cell_rock_t *)rockp; afs_uint32 probe; cellp = cellrockp->cellp; probe = !(cellrockp->flags & CM_FLAG_NOPROBE); /* if this server was previously created by fs setserverprefs */ if ( tsp = cm_FindServer(addrp, CM_SERVER_VLDB)) { if ( !tsp->cellp ) tsp->cellp = cellp; else if (tsp->cellp != cellp) { osi_Log3(afsd_logp, "found a vlserver %s associated with two cells named %s and %s", osi_LogSaveString(afsd_logp,hostnamep), osi_LogSaveString(afsd_logp,tsp->cellp->name), osi_LogSaveString(afsd_logp,cellp->name)); } } else tsp = cm_NewServer(addrp, CM_SERVER_VLDB, cellp, probe ? 0 : CM_FLAG_NOPROBE); /* Insert the vlserver into a sorted list, sorted by server rank */ tsrp = cm_NewServerRef(tsp, 0); cm_InsertServerList(&cellp->vlServersp, tsrp); /* drop the allocation reference */ lock_ObtainWrite(&cm_serverLock); tsrp->refCount--; lock_ReleaseWrite(&cm_serverLock); return 0; }