/* if timeout - check that it did not exceed the HardDead timeout
* and retry */
- /* timeleft - get if from reqp the same way as cmXonnByMServers does */
+ /* timeleft - get it from reqp the same way as cm_ConnByMServers does */
timeUsed = (GetTickCount() - reqp->startTime) / 1000;
-
- /* leave 5 seconds margin for sleep */
- if (reqp->flags & CM_REQ_NORETRY)
- timeLeft = 0;
- else
- timeLeft = HardDeadtimeout - timeUsed;
+ timeLeft = HardDeadtimeout - timeUsed;
/* get a pointer to the cell */
if (errorCode) {
else if (errorCode == VNOVOL || errorCode == VMOVED || errorCode == VOFFLINE ||
errorCode == VSALVAGE || errorCode == VNOSERVICE || errorCode == VIO)
{
- char addr[16];
char *format;
DWORD msgID;
}
else if (errorCode >= -64 && errorCode < 0) {
/* mark server as down */
- sprintf(addr, "%d.%d.%d.%d",
- ((serverp->addr.sin_addr.s_addr & 0xff)),
- ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
- ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
- ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
+ if (serverp)
+ sprintf(addr, "%d.%d.%d.%d",
+ ((serverp->addr.sin_addr.s_addr & 0xff)),
+ ((serverp->addr.sin_addr.s_addr & 0xff00)>> 8),
+ ((serverp->addr.sin_addr.s_addr & 0xff0000)>> 16),
+ ((serverp->addr.sin_addr.s_addr & 0xff000000)>> 24));
if (errorCode == RX_CALL_DEAD)
osi_Log2(afsd_logp, "cm_Analyze: Rx Call Dead addr[%s] forcedNew[%s]",
osi_LogSaveString(afsd_logp,addr),
(reqp->flags & CM_REQ_NEW_CONN_FORCED ? "yes" : "no"));
- lock_ObtainMutex(&serverp->mx);
- if (errorCode != RX_CALL_DEAD ||
- (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
- if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
- serverp->flags |= CM_SERVERFLAG_DOWN;
- serverp->downTime = time(NULL);
+ if (serverp) {
+ lock_ObtainMutex(&serverp->mx);
+ if (errorCode == RX_CALL_DEAD &&
+ (reqp->flags & CM_REQ_NEW_CONN_FORCED)) {
+ if (!(serverp->flags & CM_SERVERFLAG_DOWN)) {
+ serverp->flags |= CM_SERVERFLAG_DOWN;
+ serverp->downTime = time(NULL);
+ }
+ } else {
+ if (reqp->flags & CM_REQ_NEW_CONN_FORCED) {
+ reqp->tokenIdleErrorServp = serverp;
+ reqp->tokenError = errorCode;
+ } else {
+ reqp->flags |= CM_REQ_NEW_CONN_FORCED;
+ forcing_new = 1;
+ }
}
- } else {
- reqp->flags |= CM_REQ_NEW_CONN_FORCED;
- forcing_new = 1;
- }
- lock_ReleaseMutex(&serverp->mx);
- cm_ForceNewConnections(serverp);
+ lock_ReleaseMutex(&serverp->mx);
+ cm_ForceNewConnections(serverp);
+ }
if ( timeLeft > 2 )
retry = 1;
}
else if (errorCode == RXKADEXPIRED) {
+ osi_Log1(afsd_logp, "cm_Analyze: rxkad error code 0x%x (RXKADEXPIRED)",
+ errorCode);
if (!dead_session) {
lock_ObtainMutex(&userp->mx);
ucellp = cm_GetUCell(userp, serverp->cellp);
retry = 1;
}
} else if (errorCode >= ERROR_TABLE_BASE_RXK && errorCode < ERROR_TABLE_BASE_RXK + 256) {
+ char * s = "unknown error";
+ switch ( errorCode ) {
+ case RXKADINCONSISTENCY: s = "RXKADINCONSISTENCY"; break;
+ case RXKADPACKETSHORT : s = "RXKADPACKETSHORT"; break;
+ case RXKADLEVELFAIL : s = "RXKADLEVELFAIL"; break;
+ case RXKADTICKETLEN : s = "RXKADTICKETLEN"; break;
+ case RXKADOUTOFSEQUENCE: s = "RXKADOUTOFSEQUENCE"; break;
+ case RXKADNOAUTH : s = "RXKADNOAUTH"; break;
+ case RXKADBADKEY : s = "RXKADBADKEY"; break;
+ case RXKADBADTICKET : s = "RXKADBADTICKET"; break;
+ case RXKADUNKNOWNKEY : s = "RXKADUNKNOWNKEY"; break;
+ case RXKADEXPIRED : s = "RXKADEXPIRED"; break;
+ case RXKADSEALEDINCON : s = "RXKADSEALEDINCON"; break;
+ case RXKADDATALEN : s = "RXKADDATALEN"; break;
+ case RXKADILLEGALLEVEL : s = "RXKADILLEGALLEVEL"; break;
+ }
+ osi_Log2(afsd_logp, "cm_Analyze: rxkad error code 0x%x (%s)",
+ errorCode, s);
+
if (serverp) {
- reqp->tokenIdleErrorServp = serverp;
- reqp->tokenError = errorCode;
- retry = 1;
+ reqp->tokenIdleErrorServp = serverp;
+ reqp->tokenError = errorCode;
+ retry = 1;
}
} else if (errorCode >= ERROR_TABLE_BASE_U && errorCode < ERROR_TABLE_BASE_U + 256) {
/*
if (errorCode) {
char * s = "unknown error";
switch ( errorCode ) {
- case RXKADINCONSISTENCY: s = "RXKADINCONSISTENCY"; break;
- case RXKADPACKETSHORT : s = "RXKADPACKETSHORT"; break;
- case RXKADLEVELFAIL : s = "RXKADLEVELFAIL"; break;
- case RXKADTICKETLEN : s = "RXKADTICKETLEN"; break;
- case RXKADOUTOFSEQUENCE: s = "RXKADOUTOFSEQUENCE"; break;
- case RXKADNOAUTH : s = "RXKADNOAUTH"; break;
- case RXKADBADKEY : s = "RXKADBADKEY"; break;
- case RXKADBADTICKET : s = "RXKADBADTICKET"; break;
- case RXKADUNKNOWNKEY : s = "RXKADUNKNOWNKEY"; break;
- case RXKADEXPIRED : s = "RXKADEXPIRED"; break;
- case RXKADSEALEDINCON : s = "RXKADSEALEDINCON"; break;
- case RXKADDATALEN : s = "RXKADDATALEN"; break;
- case RXKADILLEGALLEVEL : s = "RXKADILLEGALLEVEL"; break;
case VSALVAGE : s = "VSALVAGE"; break;
case VNOVNODE : s = "VNOVNODE"; break;
case VNOVOL : s = "VNOVOL"; break;
int secIndex;
struct rx_securityClass *secObjp;
- if (serverp->type == CM_SERVER_VLDB) {
- port = htons(7003);
+ port = serverp->addr.sin_port;
+ switch (serverp->type) {
+ case CM_SERVER_VLDB:
+ if (port == 0)
+ port = htons(7003);
serviceID = 52;
- }
- else {
- osi_assertx(serverp->type == CM_SERVER_FILE, "incorrect server type");
- port = htons(7000);
+ break;
+ case CM_SERVER_FILE:
+ if (port == 0)
+ port = htons(7000);
serviceID = 1;
+ break;
+ default:
+ osi_panic("unknown server type", __FILE__, __LINE__);
}
+
if (ucellp->flags & CM_UCELLFLAG_RXKAD) {
secIndex = 2;
switch (cryptall) {
}
osi_assertx(secObjp != NULL, "null rx_securityClass");
tcp->rxconnp = rx_NewConnection(serverp->addr.sin_addr.s_addr,
- port,
- serviceID,
- secObjp,
- secIndex);
+ port,
+ serviceID,
+ secObjp,
+ secIndex);
rx_SetConnDeadTime(tcp->rxconnp, ConnDeadtimeout);
rx_SetConnHardDeadTime(tcp->rxconnp, HardDeadtimeout);
rx_SetConnIdleDeadTime(tcp->rxconnp, IdleDeadtimeout);