From e9c5e2af894e3556c1758e3bf60ba2f140bb6654 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 9 Dec 2004 23:14:01 +0000 Subject: [PATCH] windows-multihomed-20041209 FIXES 16564 Add support for VL_GetEntryByNameU and VL_GetAddrs for the purpose of working with multi-homed servers --- doc/txt/winnotes/afs-changes-since-1.2.txt | 4 ++ src/WINNT/afsd/cm_server.h | 12 ++--- src/WINNT/afsd/cm_volume.c | 52 +++++++++++++++++----- src/config/NTMakefile.i386_nt40 | 2 +- 4 files changed, 53 insertions(+), 17 deletions(-) diff --git a/doc/txt/winnotes/afs-changes-since-1.2.txt b/doc/txt/winnotes/afs-changes-since-1.2.txt index 4facd2f3a..ed900c606 100644 --- a/doc/txt/winnotes/afs-changes-since-1.2.txt +++ b/doc/txt/winnotes/afs-changes-since-1.2.txt @@ -1,3 +1,7 @@ +Since 1.3.75: + + * Support has been added for multi-homed servers + Since 1.3.74: * Added a new registry value, "StoreAnsiFilenames", which can be used to force the use of ANSI character sets instead of OEM Code Pages. diff --git a/src/WINNT/afsd/cm_server.h b/src/WINNT/afsd/cm_server.h index 0ea6e6787..348350769 100644 --- a/src/WINNT/afsd/cm_server.h +++ b/src/WINNT/afsd/cm_server.h @@ -21,15 +21,15 @@ * at the appropriate times to change the pointers to these servers. */ typedef struct cm_server { - struct cm_server *allNextp; /* locked by cm_serverLock */ + struct cm_server *allNextp; /* locked by cm_serverLock */ struct sockaddr_in addr; /* by mx */ int type; /* by mx */ - struct cm_conn *connsp; /* locked by cm_connLock */ + struct cm_conn *connsp; /* locked by cm_connLock */ long flags; /* by mx */ - struct cm_cell *cellp; /* cell containing this server */ - unsigned long refCount; /* locked by cm_serverLock */ - osi_mutex_t mx; - unsigned short ipRank; /* server priority */ + struct cm_cell *cellp; /* cell containing this server */ + unsigned long refCount; /* locked by cm_serverLock */ + osi_mutex_t mx; + unsigned short ipRank; /* server priority */ } cm_server_t; enum repstate {not_busy, busy, offline}; diff --git a/src/WINNT/afsd/cm_volume.c b/src/WINNT/afsd/cm_volume.c index 932b9b809..f8ab0114e 100644 --- a/src/WINNT/afsd/cm_volume.c +++ b/src/WINNT/afsd/cm_volume.c @@ -63,11 +63,12 @@ void cm_InitVolume(void) * first, and fall back to successively older versions if you get * RXGEN_OPCODE. */ +#define MULTIHOMED 1 long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, cm_volume_t *volp) { cm_conn_t *connp; - int i; + int i, j, k; cm_serverRef_t *tsrp; cm_server_t *tsp; struct sockaddr_in tsockAddr; @@ -95,6 +96,7 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, osi_Log1(afsd_logp, "CALL VL_GetEntryByName{UNO} name %s", volp->namep); #ifdef MULTIHOMED code = VL_GetEntryByNameU(connp->callp, volp->namep, &uvldbEntry); + type = 2; if ( code == RXGEN_OPCODE ) #endif { @@ -147,17 +149,47 @@ long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, rwID = uvldbEntry.volumeId[0]; roID = uvldbEntry.volumeId[1]; bkID = uvldbEntry.volumeId[2]; - for ( i=0; ivlServersp, userp, reqp, &connp); + if (code) + continue; + + code = VL_GetAddrsU(connp->callp, &attrs, &uuid, &unique, &nentries, &addrs); + + if (code == 0 && nentries == 0) + code = VL_NOENT; + } while (cm_Analyze(connp, userp, reqp, NULL, NULL, cellp->vlServersp, NULL, code)); + code = cm_MapVLRPCError(code, reqp); + if (code) + return code; + + addrp = addrs.bulkaddrs_val; + for (k = 0; k < nentries && j < NMAXNSERVERS; j++, k++) { + serverFlags[j] = uvldbEntry.serverFlags[i]; + serverNumber[j] = addrp[k]; + } + + free(addrs.bulkaddrs_val); /* This is wrong */ } } + nServers = j; /* update the server count */ break; #endif } diff --git a/src/config/NTMakefile.i386_nt40 b/src/config/NTMakefile.i386_nt40 index 366683fa5..85c3b0adc 100644 --- a/src/config/NTMakefile.i386_nt40 +++ b/src/config/NTMakefile.i386_nt40 @@ -80,7 +80,7 @@ LIB = $(AFSDEV_LIB) #define used in WinNT/2000 installation and program version display AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=3 -AFSPRODUCT_VER_PATCH=7500 +AFSPRODUCT_VER_PATCH=7501 AFSPRODUCT_VER_BUILD=0 # For MSI installer, each major release should have a different GUID -- 2.39.5