ÿÿ€ €€‚Write$£€ÉDECwrite V3.1 <39>¡€ €0€Ô Write$DD_PGR¥€ Šï5`0€Ô Write$DD_PGF0€Ô Write$DD_2S€0€Ô Write$DD_2LF€0€Ô Write$DD_2HOF€0€Ô Write$DD_2FOF€0€Ô Write$DF_PF€0€Ô Write$DF_RM0€Ô Write$DF_CB0€Ô Write$D_TYPE¢€Égenrl0€Ô Write$D_SG_RT0€Ô Write$C_FR¢€ÉFloating Frame0€Ô Write$C_TA¢€ÉTable0€Ô Write$C_L¢€ÉBulleted List0€Ô Write$C_FN¢€É Footnote0€Ô Write$C_PG¢€ÉPage-L0€Ô Write$C_M1¢€ÉPage0€Ô Write$C_P¢€ÉInclude Paragraph Text0€Ô Write$C_TR¢€É Textblock0€Ô Write$C_TTL¢€É Table Title0€Ô Write$C_TOC¢€ÉTOC0€ÔW$HT0€ÔW$HU0€ÔW$HV0€ÔW$HW„19960708114100¥€Ô$STSÔ$LO1Ô$FMTD¦€0€€+ ‡s¡€ÉDDIF‚%cda$library_en_us:wr_genrl.doc_styleƒ$RMS„§€€en_US€en_GB€fr_FR€fr_CA€de_DE€de_CH€sv_SE€es_ES€it_IT€da_DK€nl_NL€pt_PT€no_NO€fi_FI€ja_JP€zh_CN€zh_TW€ko_KR€fr_CH€it_CH€fr_BE€iw_IL en_Medical en_Businessˆ¢€b€£€‚$T¤€0€€$PG¡€0€€$PG.ru¡€£€€0€€$PG.rl¡€£€€0€€$PG.au¡€£€€0€€$PG.al¡€£€€‡©€€ ¡€É centipoints«€ €¡€"€«€0€ €€€¬€0€€Ù9-ADOBE-Helvetica-Medium-R-Normal--*-120-*-*-P-*-ISO8859-10€€ß9-ADOBE-Helvetica-Medium-R-Normal--*-140-*-*-P-*-ISO8859-10€€Ü9-ADOBE-Helvetica-Medium-R-Normal--*-180-*-*-P-*-ISO8859-10€€Ú7-ADOBE-Helvetica-Bold-R-Normal--*-120-*-*-P-*-ISO8859-10€€á9-ADOBE-Helvetica-Medium-O-Normal--*-120-*-*-P-*-ISO8859-10€€Þ7-ADOBE-Helvetica-Bold-O-Normal--*-120-*-*-P-*-ISO8859-10€€à7-ADOBE-Helvetica-Bold-O-Normal--*-140-*-*-P-*-ISO8859-10€€Ý7-ADOBE-Helvetica-Bold-O-Normal--*-180-*-*-P-*-ISO8859-10€€Û5-ADOBE-Times-Medium-R-Normal--*-100-*-*-P-*-ISO8859-10€€Ø5-ADOBE-Times-Medium-R-Normal--*-120-*-*-P-*-ISO8859-10€€ä5-ADOBE-Times-Medium-R-Normal--*-140-*-*-P-*-ISO8859-10€€â5-ADOBE-Times-Medium-R-Normal--*-180-*-*-P-*-ISO8859-10€€ã3-ADOBE-Times-Bold-R-Normal--*-120-*-*-P-*-ISO8859-10€€æ5-ADOBE-Times-Medium-I-Normal--*-120-*-*-P-*-ISO8859-10€€å3-ADOBE-Times-Bold-I-Normal--*-120-*-*-P-*-ISO8859-1­€0€€e¡€ €€‚¤€0€ÔWrite$ColorName¢€ÉBlack0€€f¡€ €€@@‚@¤€0€ÔWrite$ColorName¢€ÉWhite0€€g¡€ €€@þ‚¤€0€ÔWrite$ColorName¢€ÉRed0€€h¡€ €€@þ‚¤€0€ÔWrite$ColorName¢€ÉGreen0€€i¡€ €€‚@þ¤€0€ÔWrite$ColorName¢€ÉBlue0€€j¡€ €€@þ@þ‚¤€0€ÔWrite$ColorName¢€ÉYellow0€€k¡€ €€@þ‚@þ¤€0€ÔWrite$ColorName¢€ÉCyan0€€l¡€ €€@þ‚@þ¤€0€ÔWrite$ColorName¢€ÉMagenta0€€m¢€€¡€0€€n¢€€¡€0€€o¢€€¡€0€€p¢€€¡€°€0€€Date¢€C 0€€ Footer Text¢€C 0€€ Header Text¢€C ±€0€€Flow¢€¡€Ô$DB‚$T£€Ô$FLOW¤€0€€ $TTL.tab.1¡€€ $TTL.tab.10€€$FN¡€€$FN0€€ $TTL.fig.1¡€€ $TTL.fig.10€€S1¢€£€Ô$S.10€€S2¢€£€Ô$S.20€€S3¢€£€Ô$S.30€€Include Paragraph Tab-2¢€£€Ô$P«€ € €!€€‚€ƒ„…¡€"€‚„¥€€¦€€§€€¨€€©€€°ª€¡€€È«€0€ €€D0€ €€,ˆ0€ €€BÌ0€ €€Y0€ €€oT0€ €€…˜0€ €€›Ü0€ €€² 0€ €€Èd0€ €€Þ¨0€ €€ôì0€ €€ 00€ €€!t0€ €€7¸0€ €€Mü²€€eØ¢€£€€°¦€É.0€€Include Paragraph Text¢€£€Ô$P«€ € €!€€‚€ƒ„…¡€"€‚„¥€€¦€€§€€¨€€©€€°ª€¡€€È«€0€ €€D0€ €€,ˆ0€ €€BÌ0€ €€Y0€ €€oT0€ €€…˜0€ €€›Ü0€ €€² 0€ €€Èd0€ €€Þ¨0€ €€ôì0€ €€ 00€ €€!t0€ €€7¸0€ €€Mü²€€eØ¢€£€€°¦€É.¤€€¡€0€€Page-L¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUMÿ0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FIT€£€€Page-L¡€ € €€ï¡€ €€5`‚¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€5`¡€€ï£€ €€€ï€€€5`€€5`€ï¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€ GLY$Page-L.1¡€ € €€ ¡€€ ¡€ €€@¡€€Òðƒ$¤€Ô$DBÔ$RL… GLY$Page-L.1Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JMBXDDJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.hdr.1¡€ € €€¡€€×®¡€ €€ß–¡€€äVƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWMKDDJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.ftr.1¡€ € €€㹡€€Ï¡€ €€@¡€€ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JMBXDDJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page-L.trim.1¡€ € €€áy¡€€×°¡€ €€÷¡€€äVƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWMKDDJG³€ €€dµ€%€ €€ ¡€€¢€€ £€€ #€$€€GLY$Page-L.trim.2¡€ € €€ ¡€€Ï¡€ €€âò¡€€ƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€‚$T«€ €¡€"€ GLY$Page-L.1Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page-L.hdr.1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page-L.ftr.1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGAIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page-L.trim.1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page-L.trim.2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAA¥€ € €€0¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€0¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-1¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-1¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-1¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-1¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC1AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-1b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-1b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$JTWBDDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$JWTBDDJGAA €€1¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€1¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-2¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-2¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-2¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-2¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-2b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC2AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-2b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-2b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$JWTBDDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$JJJBDDJGAA €€2¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€2¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-3¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-3¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-3¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-3¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-3b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-3b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC3AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-3b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-3b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$JJJBDDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MMJKXDJGAA €€3¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€3¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-4¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-4¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-4¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-4¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-4b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-4b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC4AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-4b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-4b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MMJKXDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$JJGMJDJGAA €€4¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€4¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-5¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-5¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-5¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-5¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-5b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-5b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC5AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-5b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-5b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$JJGMJDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$JWTTBDJGAb€£€³€ €€d‰l€€𢀀&@€€F€€€F€€çP€&@€çPAb€£€³€ €€d‰l€€𢀀k €°€Œ €°€Œ €ç°€k €ç°Ab€£€³€ €€d‰l€€𢀀¨`€°€É€°€É€è€¨`€èAb€£€‚$2D‡«€¡€ € €€) €ü¬€7K€ü¬²€س€‰CCPU AAb€£€‚$2D‡«€¡€ € €€o€ûì€}•€ûì²€س€‰C CPU BAb€£€‚$2D‡«€¡€ € €€­@€ý €º©€ý ²€س€‰CCPU CAb€£€³€ €€d‰l€€Š¢€€E€ÙÀ€n €ÙÀ€n €Âx€E€ÂxAb€£€‚$2D‡«€¡€ € €€P@€Ìœ€Y€Ìœ²€س€‰CHSZAb€£€³€ €€d‰l€€𢀀L€€¸µ€[ €¸µ€[ €ª€L€€ª£€ €ÿ?&¨ª¢€€°Ab€£€‚$2D‡«€¡€ € €€O €¯R€Wû€¯R²€س€‰CDiskAb€£€³€ €€d„…‰l€¢€€Fà€΀k €ÎAb€£€³€ €€d„…‰l€¢€€F€€ò‰€l€ò‰Ab€£€‚$2D‡«€¡€ € €€L €N€cÓ€N²€س€‰C SCSI BUS 1Ab€£€‚$2D‡«€¡€ € €€K`€ô €c€ô ²€س€‰C SCSI BUS 2Ab€£€³€ €€d„…‰l€¢€€7à€æå€=€€ÞB€xÀ€ÝâAb€£€³€ €€d„…‰l€¢€€w €ÞB€ºÀ€ÞB€½€èAb€£€³€ €€d„…‰l€¢€€xÀ€Þ¢€xÀ€çEAb€£€‚$2D‡«€¡€ € €€‰ €Ø €™ƒ€Ø ²€س€‰CEthernetAb€£€³€ €€d„…‰l€¢€€O €.€O €Ú Ab€£€³€ €€d„…‰l€¢€€_@€óI€_@€ÙÀAb€£€³€ €€d„…‰l€¢€€S €ÂÙ€S €¹Ab€£€³€ €€d„…‰l€€𢀀&@€ç€Fà€ç€Fà€pG€&@€pGAb€£€³€ €€d„…‰l€€𢀀[€€ç€|€€ç€|€€oç€[€€oçAb€£€³€ €€d„…‰l€€𢀀”à€ç€¶@€ç€¶@€o‡€”à€o‡Ab€£€‚$2D‡«€¡€ € €€.€€€€<+€€²€س€‰CCPU AAb€£€‚$2D‡«€¡€ € €€d €€€q‰€€²€س€‰CCPU BAb€£€‚$2D‡«€¡€ € €€Ÿ€€€¬i€€²€س€‰CCPU CAb€£€³€ €€d„…‰l€¢€€Fà€â€[ €âAb€£€‚$2D‡«€¡€ € €€J €ƒÃ€T†€ƒÃ²€س€‰CSCSIAb€£€³€ €€d„…‰l€¢€€<€‘H€@à€› €n €› €n €‘H€p €› €£à€› €¦à€‘¨Ab€£€‚$2D‡«€¡€ € €€]€œ‹€l〜‹²€س€‰CEthernetAb€£€³€ €€d„…‰l€€Š¢€€W`€]v€„€]v€„€GN€W`€GNAb€£€‚$2D‡«€¡€ € €€cÀ€Q€lš€Q²€س€‰CHSZAb€£€³€ €€d„…‰l€¢€€R €‚B€a €\VAb€£€‚$2D‡«€¡€ € €€^ €d8€i2€d8²€س€‰C SCSIAb€£€³€ €€d„…‰l€¢€€z@€]u€”€€‚BAb€£€‚$2D‡«€¡€ € €€`€c€‹F€c²€س€‰CSCSIAb€£€³€ €€d„…‰l€€Š¢€€f€9Ê€v€€9Ê€v€€*d€f€*d£€ €ÿ?&¨ª¢€€°Ab€£€‚$2D‡«€¡€ € €€j €/¦€rû€/¦²€س€‰CDiskAb€£€³€ €€d„…‰l€¢€€mà€G®€mà€:*Ab€£€‚$2D‡«€¡€ € €€<`€€ˆ€²€䣀€x³€‰C Fig. 1 - Some HSZ ConfigurationsAA €€5¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€5¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-6¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-6¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-6¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-6¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-6b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-6b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC6AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-6b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-6b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$JWTTBDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MMDMKDJGAb€£€³€ €€d„…‰l€€Š¢€€Cà€ýÍ€© €ýÍ€© €ÙÀ€Cà€ÙÀAb€£€³€ €€d„…‰l€€Š¢€€0À€ÄY€d€€ÄY€d€€¢Ž€0À€¢ŽAb€£€³€ €€d„…‰l€€Š¢€€y€€ÄY€®`€ÄY€®`€£N€y€€£NAb€£€‚$2D‡«€¡€ € €€» €±3€¾¤€±3²€س€‰C...Ab€£€³€ €€d„…‰l€€Š¢€€1€€“é€e@€“é€e@€rÝ€1€€rÝAb€£€³€ €€d„…‰l€€Š¢€€yà€“é€° €“逰 €s=€yà€s=Ab€£€‚$2D‡«€¡€ € €€NÀ€ëÇ€–5€ëDz€⣀€³€‰CDKA100 (primary name)Ab€£€‚$2D‡«€¡€ € €€: €±3€d €±3²€⣀€³€‰C DKA100 UCBAb€£€‚$2D‡«€¡€ € €€ €³€¨½€³²€⣀€³€‰C DKB100 UCBAb€£€‚$2D‡«€¡€ € €€9À€‚€M€‚²€⣀€³€‰CPKA...Ab€£€‚$2D‡«€¡€ € €€…à€‚£€˜Ô€‚£²€⣀€³€‰CPKB...Ab€£€³€ €€d„…‰l€€Š¢€€R €b¸€’ €b¸€’ €GN€R €GNAb€£€‚$2D‡«€¡€ € €€[à€T€‡Ñ€T²€⣀€³€‰CHSZ ControllerAb€£€³€ €€d„…‰l€€Š¢€€c`€=ë€~`€=ë€~`€.†€c`€.†£€ €ÿ?&¨ª¢€€°Ab€£€‚$2D‡«€¡€ € €€fÀ€5H€{r€5H²€⣀€³€‰CDisk(s)Ab€£€³€ €€d„…‰l€¢€€p€€H€p€€=ëAb€£€³€ €€d„…‰l€¢€€V €rÝ€a €bXAb€£€³€ €€d„…‰l€¢€€‹ €sž€€@€cxAb€£€‚$2D‡«€¡€ € €€6`€¨0€N•€¨0²€س€‰CDKDRIVERAb€£€‚$2D‡«€¡€ € €€~€§o€–5€§o²€س€‰CDKDRIVERAb€£€³€ €€d„…‰l€¢€€HÀ€¢Ž€H`€”IAb€£€³€ €€d„…‰l€¢€€“€£®€“€”IAb€£€‚$2D‡«€¡€ € €€QÀ€à〘w€àã²€س€‰C%Switching Software Layer, just insideAb€£€‚$2D‡«€¡€ € €€QÀ€ÛB€y3€ÛB²€س€‰CDKDRIVER start_ioAb€£€³€ €€d„…‰l€¢€€Z€Ú!€Oà€ĹAb€£€³€ €€d„…‰l€¢€€ŠÀ€ÙÀ€“À€ÃùAb€£€³€ €€d„…‰l€¢€€\@€Òþ€ˆ €ÒþAb€£€‚$2D‡«€¡€ € €€^à€Ë€‰×€Ë²€س€‰COne OR the other usedAb€£€³€ €€d„…‰l€¢€€u€€u€þAb€£€‚$2D‡«€¡€ € €€S € ’€§’€ ’²€⣀€³€‰CRest of VMS Driver InterfaceAb€£€‚$2D‡«€¡€ € €€W€ð€Àw€ð²€س€‰C5(Only sees the name DKA100 regardless of driver used)Ab€£€‚$2D‡«€¡€ € €€,@€á€˜Ï€á²€⣀€³€‰C$Figure 2. The Software Layering UsedAA €€6¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€6¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-7¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-7¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-7¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-7¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-7b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-7b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC7AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-7b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-7b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MMDMKDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MJKKXDJGAA €€7¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€7¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-8¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-8¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-8¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-8¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-8b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-8b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC8AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-8b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-8b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MJKKXDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MXJMKDJGAA €€8¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM 0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€8¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-9¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-9¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-9¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-9¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-9b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-9b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC9AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-9b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-9b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MXJMKDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MXPKXDJGAb€£€³€ €€d‰l€€Š¢€€) €s€QÀ€s€QÀ€ôi€) €ôiAb€£€‚$2D‡«€¡€ € €€.€€ €I·€ ²€س€‰C VMS ServicesAb€£€³€ €€d‰l€€Š¢€€*€æå€R €æå€R €Ë€*€ËAb€£€‚$2D‡«€¡€ € €€.€€Ö¿€F€Ö¿²€س€‰C Switch layerAb€£€³€ €€d‰l€€Š¢€€n@€€–`€€–`€ôÊ€n@€ôÊAb€£€‚$2D‡«€¡€ € €€q € €‹G€ ²€س€‰C Switch serverAb€£€³€ €€d„…‰l€¢€€€@€õ*€~À€ñh€} €{À€ë€z@€èe€x€æ…€uÀ€å€s€€ãä€q@€âc€oÀ€àã€mà€߀k €Þ¢€iÀ€Ýâ€f€Üa€c`€ÛA€a€€Ú€^€€Ú€[€€ÛA€X€€Üa€Uà€Üa€S@€ÜAb€£€³€ €€d„…‰l€¢€€= €ôÊ€= €ç¥Ab€£€³€ €€d„…‰l€€Š¢€€*`€À8€R €À8€R €§Ï€*`€§ÏAb€£€³€ €€d„…‰l€€Š¢€€*€™Š€S €™Š€S €ƒ€*€ƒAb€£€³€ €€d„…‰l€€Š¢€€gà€¿€“À€¿€“À€¦O€gà€¦OAb€£€³€ €€d„…‰l€€Š¢€€g €šK€“€šK€“€‚€g €‚Ab€£€³€ €€d„…‰l€€Š¢€€Fà€n\€a€€n\€a€€Yµ€Fà€Yµ£€ €ÿ?&¨ª¢€€°Ab€£€‚$2D‡«€¡€ € €€0`€±2€Gò€±2²€س€‰C Class DriverAb€£€‚$2D‡«€¡€ € €€mà€±“€„h€±“²€س€‰C Class driverAb€£€‚$2D‡«€¡€ € €€0€Œf€D0€Œf²€س€‰C Port driverAb€£€‚$2D‡«€¡€ € €€n@€ŒÆ€ƒz€ŒÆ²€س€‰C Port DriverAb€£€‚$2D‡«€¡€ € €€HÀ€a÷€`€a÷²€س€‰C Storage DvcAb€£€³€ €€d„…‰l€¢€€<À€ËÜ€<À€À8Ab€£€³€ €€d„…‰l€¢€€L€€ËÜ€{`€¾WAb€£€³€ €€d„…‰l€¢€€<`€¨€<`€™ŠAb€£€³€ €€d„…‰l€¢€€{`€§€{`€š«Ab€£€³€ €€d„…‰l€¢€€=€€ƒÃ€Q€müAb€£€³€ €€d„…‰l€¢€€v €â€W`€n\Ab€£€‚$2D‡«€¡€ € €€l€s=€Ä'€s=²€س€‰C,(One path may be via some network, e.g. SCS)Ab€£€‚$2D‡«€¡€ € €€7€€`€ÂQ€`²€س€‰CEFigure 3. Layering with Switching Subsystem Added above Class DriversAb€£€‚$2D‡«€¡€ € €€à€Ýâ€ù€Ýâ²€س€‰C$Note: Switch layer hides extra pathsAb€£€‚$2D‡«€¡€ € €€3`€¸µ€?Þ€¸µ²€س€‰CDKAnAb€£€‚$2D‡«€¡€ € €€r€¸U€}€¸U²€س€‰CDKBn ?Ab€£€‚$2D‡«€¡€ € €€?`€ëf€v¸€ëf²€س€‰CDKAn visible to rest of VMSAA €€9¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM 0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€9¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-10¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-10¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-10¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-10¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-10b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-10b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC10AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-10b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-10b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MXPKXDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MTMGKDJGAA €€10¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM 0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€10¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-11¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-11¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-11¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-11¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-11b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-11b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC11AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-11b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-11b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MTMGKDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TBKGMJJGAA €€11¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM 0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€11¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-12¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-12¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-12¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-12¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-12b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-12b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC12AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-12b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-12b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TBKGMJJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TDWKKDJGAA €€12¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM 0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€12¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-13¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-13¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-13¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-13¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-13b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-13b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC13AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-13b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-13b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TDWKKDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TKBGMJJGAA €€13¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€13¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-14¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-14¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-14¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-14¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-14b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-14b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC14AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-14b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-14b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TKBGMJJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TGBMMJJGAA €€14¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€14¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-15¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-15¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-15¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-15¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-15b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-15b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC15AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-15b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-15b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TGBMMJJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$TPTGMJJGAA €€15¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€15¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-16¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-16¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-16¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-16¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-16b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-16b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC16AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-16b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-16b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$TPTGMJJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL† GLY$MTTKXDJGAA €€16¡€0€Ô Write$PG_FMT¢€É#0€ÔWrite$PG_PTFMT¢€É.#0€Ô Write$PG_CB¥€èd0€Ô Write$PG_TRT¢€É Textblock0€Ô Write$PG_NUM0€ÔWrite$PG_POINT0€Ô Write$PG_NSTY0€Ô Write$PG_PSTY0€Ô Write$PG_MG¥€      0€Ô Write$PG_FN¥€È0€Ô Write$PG_FR€£€€16¡€ € €€ï¡€ €€5`ƒPage¤€b€£€‚$2D£€Ô$F³€ €€„…‡‰·€€¡€ € €€¡€€¡€ €€ï¡€€5`£€ €€€5`€€€ï€€ï€5`¤€ €€¡€€b€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.hdr.1-17¡€ € €€ ¡€€.¡€ €€Œˆ¡€€*Ôƒ ¤€Ô$HDRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.ftr.1-17¡€ € €€©N¡€€¡€ €€Òð¡€€”ƒ ¤€Ô$FTRÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JTDPPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.1-17¡€ € €€ ¡€€n¡€ €€¨À¡€€”ƒ ¤€Ô$DBÔ$RL‡Ab€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$GÔ $GRP.JWKJPGJG³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€GLY$Page.trim.2-17¡€ € €€ŒØ¡€€.¡€ €€Òð¡€€*Ôƒ ¤€Ô$DBÔ$RL‡Ab€‚Flow£€¡€Ô$HDR‚$T«€ €¡€"€GLY$Page.hdr.1-17b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Header TextIAAb€‚Flow£€¡€Ô$FTR‚$T«€ €¡€"€GLY$Page.ftr.1-17b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€b€£€¥€‚$PGC17AIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.1-17b€‚ Paragraph£€ €£€Ô$P«€ €¡€"€o€ Footer TextIAAb€‚Flow£€‚$T«€ €¡€"€GLY$Page.trim.2-17b€‚ Paragraph£€ €£€Ô$P«€ € €!€€¡€"€o€DateIAAb€‚ Textblock£€ €0€Ô Write$TR_DH0€Ô Write$TR_PGF¢€É Paragraph0€Ô Write$TR_TYP£€Ô$G³€ €€dµ€%€ €€ ¡€€ ¢€€ £€€ #€$€€ GLY$MTTKXDJG¡€ € €€ ¡€€ ¡€ €€Òð¡€€@ƒ ¤€Ô$DBÔ$RL… GLY$Page.1AAb€€Flow.1‚Flow£€‚$T«€ €¡€"€ GLY$JTWBDDJGb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€b€£€²€£€€CMulti Path SwitchingIAC Design Spec V2 Draft, 1-Jul-1996ICGlenn C. EverhartIAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CD--------------------------------------------------------------------IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CXProblem Statement: The HSZ40 series with the next release of HSOF will offer a dual bus JC^failover capability. This is characterized by some new INQUIRY information so that a host can JCcbe informed that the failover is possible, and new logic to provide a "preferred" initial path. (A JCasingle SCSI bus failover is also offered, but that requires no software changes.) In addition, a JCXnumber of other situations exist where more than one path to a device exists, and where JCccurrently no means to control which path is used exists. This situation exists in the case where a JC_device on a shared SCSI bus, for example, can be accessed directly or via a server such as the JC]MSCP server. Lack of an ability to notice the failure of one path and switch to another is a JCYnotable weakness in parts of the OVMS I/O system currently and needs to be fixed. In the JCbfuture it may also be desirable to be able to share the I/O load to devices across several access JCWpaths. Some controllers (EMC's, for example) support this now, but OVMS cannot use the JC]features. In addition, some device names appear twice (or conceivably more) in OVMS displays JC^and other devices may appear with multiple, and different, names. This can cause confusion at JC\best, or file system corruption in cases where multiple names are used for the same storage.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C\For the HSZ, when the devices come up under current autoconfiguration, it is to be expected JC`that each device will appear twice, once via its path over the first SCSI bus from the HSZ40 to JC`the host, once via the other. Notwithstanding this, the devices are not duplicated, and because JC\they have two aliases, the file system can readily corrupt file structures located on these JCdevices.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C\Some means to control access so that a single path is used at any given moment, and so that JC_normal VMS operations will not notice the dual path, is needed, which will allow access to the JCbdevices via the second SCSI bus in the event the first fails. Allowing accesses to be shared over JCZthe busses initially is highly desirable as well, and is supported to a degree by the HSZ JC\firmware. (This is done by allowing a preference to be stated for each device, so that some JC4devices can be set to be "preferred" over each bus.)IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CYThis failover must be available for disks. It should be available for other devices also.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€b€£€²€¢€C Background:IAAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C\Some HSZ devices have multiple SCSI bus connections, and the issue of failover between them JC[has arisen. These connections can be connected either to the same SCSI bus (providing dual JC^paths to that bus so that the failure of either controller does not prevent access to devices JC3connected to the HSZ) or to different SCSI busses. IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C]If both SCSI controllers on the HSZ are connected to the same SCSI bus, the HSZ will be able JC`to handle failover within itself so that a host on the bus will not notice any change. However, JCUwhen each controller is connected to a different SCSI bus, the host must be involved.IAJb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C[In this case, an HSZ might be on two ports on a system, with two SCSI controllers, and all JC[LUNs attached to the HSZ will therefore show up twice; a disk might show up as DKB300: and JCZas DKD300:, for example, if the HSZ were connected to the second and fourth SCSI adapters JCeon the machine. At the HSZ itself, it is possible to set a preferred path to the device, and it will JC[appear unready on the other path, but both could be configured and would refer to the same JCdevice.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C]Having dual names for the same storage violates the VMS cluster naming scheme and can result JCDin disk corruption, so this situation by itself is not satisfactory.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C^Fortunately the HSZ itself provides certain bits of information which an operating system can JC&use to figure which devices are which.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CZFirst, when in this dual-bus configuration, an HSZ will return some extra data in INQUIRY JCresponses. This data includes:IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C' * The serial number of this controllerIC0 * The serial number of the alternate controllerIC< * A bitmask of LUNs which are preferred for this controllerIC" * State of the "other" controllerIAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C[Therefore one can determine, from the INQUIRY data, if the device is an HSZ, what this and JCathe "other" controller is, and whether this particular device is preferred on "this" controller. JCd(The bitmask changes to reflect the actual situation, so that if one controller fails, all LUNs are JC_marked as preferred on the other). This extra information is present only in the dual bus case JCV(the serial numbers being nulled otherwise). This permits a driver to determine, when JCfconfiguring a device, that this particular path to the device is the preferred one or is an alternate JC_non-preferred one. Moreover, the controller serial numbers are unique and visible to all nodes JCbon a cluster, so that if a device name is chosen based on them, it will automatically be the same JCfor all cluster nodes./IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CdIn addition, the HSZ firmware is being given the ability to notify drivers when a controller fails. JC[This presumes that some devices are active on each controller, and works by having the HSZ JCcdetect the controller failure. If this happens, the next I/O to the good controller will receive a JCUCHECK CONDITION status (unit attention). The sense data then uses some vendor unique JCasense codes for failover (and eventually failback) events and returns the good controller serial JC_number, the failed controller serial number, failed controller target number, and a bitmask of JC^LUNs moved. In addition, when this happens, the surviving controller kills (resets) the other JC8controller to keep it from trying to continue operation.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C_This information can permit the processor to be notified of a path failure without necessarily JC]having to incur timeout and mount verify delays. On VMS, however, a SCSI adapter on a failed JC`path may have I/O in various states within its control, and if this is the case, some method of JCaextracting it is needed. The usual path for this function is for timeouts to occur and force I/O JC`requeue and mount verify. Where I/O is in progress to a device, there is no convenient external JCbhandle available to extract it (and the notion that as a side effect of a successful I/O on, say, JC[mkb200:, we might stop and redirect all I/O active on DKD400:, seems likely to be far more JJCdcomplex and error prone than can be tolerated, if it can be done at all on all adapters). Therefore JCcthis information is likely to be most useful where the failed path devices are in fact idle. Where JCbI/O is in progress at some stage within a SCSI adapter, it will have to be timed out or otherwise JC_cleared from the adapter before a path switchover can take place. (This also means that in the JCeevent a transient failure occurs, nothing will be left "in the pipeline" to a device at switch time.)IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CTActual HSZ switchover is done by a SCSI START command (which is done as part of the JCEIO$_PACKACK operation in VMS) so that host software has some control.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C[There is a proposal to the SCSI-3 committee which details a more general configuration, in JC[which some number of devices are controlled by a set of controllers, where a device may be JC_accessible from one or more of the controllers at a time. It is anticipated that LUN ownership JCbmight have to be established in this case via reserve/ release to set initial path preference (if JC&only one path at a time may be used). IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CZThis proposal defines some SCSI commands which may be sent to a storage control device to JC^report which controllers and devices are associated and to set up access. Since these devices JC\will have their own LUNs and device types (apart from disks, tapes, etc. behind them) it is JCSapparent that an io$_packack to a disk would have to have been preceded by some FC JC`initialization commands. The unit init code of a new class driver may be the most logical place JC[for such commands. Failover or failback is to be reported by ASC/ASCq event codes, same as JC for the HSZ.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C[While this suggestion is not yet definite, this specification does attempt to be generally JCbcompatible with it. (A server, for a specific case, can communicate with a control device if need JC!be when a failover is signalled.)IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C^In addition to issues with controllers like HSZ, issues already exist with the MSCP server in JC[SCSI clusters. At times, disks are visible with two paths, one via MSCP and one via direct JC`shared SCSI connections. Until the advent of SCSI clusters, a SCSI disk could be reached either JCZlocally or via MSCP, never both. Now, however, both paths can exist and be useful, but no JC`failover is possible. Failover is supported with DUdriver, but not generally with other drivers JC\such as DKdriver. Wherever there is at least one redundant path to a device, however, it is JC`highly desirable that the system be able to switch paths invisibly to the good path when one of JCthe paths fails.IIC^As can be seen in Figure 1, there are several ways that an HSZ with failover can be connected JC[to a system in addition to two SCSI ports on the same machine or one each on two clustered JCYmachines. In the top drawing, the disk on the HSZ might appear as $2$DKA100: and also as JCZ$2$DKB100 on the two machines directly on the shared SCSI busses, and would be visible as JCRboth names via the MSCP server in the third machine, if no code changes were made.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CYWith our code changes, DKdriver would invalidate either the DKA100 or the DKB100 path at JC]startup, prior to the MSCP server being involved, so that only one path would appear to VMS. JCSNOTE HOWEVER that once the switching code was loaded, BOTH paths would be known to JC>it, and the HSZ-preferred path would in fact be the one used. IAJb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CfIf the disk is the boot device, of course, and loading of the switch code is later than very early in JCdthe boot path, in the top configuration it is not a problem so long as the systems in fact boot the JCZsame device and the CPU C does also. Only one device would be left visible by DKdriver on JCPCPU A and B in the top picture, and CPU C would see only one MSCP served device.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C_The bottom picture is one which requires some configuration restrictions for boot time use, so JC\that CPU A and B, and also CPU C, use the same port letter and allocation class. This would JCXrequire that CPU C "see" a different allocation class database from CPU A and B if port JC^allocation class were used, so that the same device name is common to the cluster. For use in JC_data devices, however, the switching system can read a configuration file to assign either the JCUname DKA100 or DKB100 to the disk, while using the local path, whichever that may be.IAIb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€IAIIb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CJAs can be seen in Figure 2, switching as proposed herein presents a commonb€£€²€¢€C device name ACto JC6VMS, but the switching code can apply that device nameb€£€²€¢€C regardless ACof which device path is JCbactually used (and will select the online one at startup). This concept is vital to understanding JC"what is being discussed. VMS sees b€£€²€¢€C8only the external name the switching software provides, JCand not the underlying names.ACD The switch code's purpose is to hide the fact that there are extra JC[drivers, UCBs, port drivers, or the like, cleanly from the rest of OVMS. While this report JC_covers directly only the HSZ failover case, the approach can be applied where one of the paths JC`is using another disk driver and port driver transport to switch between that and another path, JCGbut there will be no notice from the controller to assist the failover.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CGoals:ICA * Support HSZ failover for HSZ7x type controllers where two SCSIIC IC)busses are connected to a single machine.ICJ * Support other multipath failover cases such as SCSI to/from MSCP paths.ICG * Be compatible with planed HSG failover mechanism (which is generallyIC IC@similar to the HSZ one, with some differences due to the changesIICbetween SCSI-2 and SCSI-3)IC Non-Goals:IC& * Support more than 2 busses (as yet)ICH * Support the case where both HSZ controllers are on a single bus (thisIC ICis supported within the HSZ)IC, * Solve the device naming problem generallyICX * Dynamic routing or load balancing between paths to a device in full detail. (That is,IICKit is expected that the solution must function to switch a failed path, butIICKit is not initially necessary for a solution to load share between multipleIIC,paths dynamically in the first design pass.)ICK * Describe details of compatibility with the HSG proposed failover scheme.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CDiscussion of goals:IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C]Much more complex situations may arise in the future, where devices are reachable via any of JC^several paths. Controllers are under discussion which have 16 bus interconnects available to JC]different computers, and which will need to do load balancing, and will need to have devices JCYhandled in such a way that confusion does not result due to multiple names. The approach JC^discussed herein does not attempt to deal with this complexity yet, but to find a way to deal JC]with the part of the failover problem defined by the HSZ firmware (HSOF 3.0 and later) which JC`requires host CPU cooperation. It does attempt not to constrain its implementation too much, so JC\that extension of the switching to more than two busses, routing of I/O dynamically between JCZseveral paths, and failover between paths regardless of their method of connection can be JCacontemplated as extensions to it rather than total reworks. All these are possible, but all will JCarequire additional design effort, which is not covered directly here. The techniques here appear JC`to be usefully extensible in the directions mentioned, but the full set of issues around any of JCa mount verify condition does not necesarily mean a bad path.)IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CaSWdriver also counts up outstanding I/O and arranges to gain control at I/O post time (so it can JC[count down the I/O and post it). This is done by saving IRP$L_PID and replacing it with an JC\address within SWDRIVER which will count the I/O down and, after replacing modified fields, JC)perform a real I/O completion on the IRP.IAJb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€CaNow if the I/O request is being routed to the primary path, SWdriver just calls the primary path JCastart-io entry and returns. Since it is entered as part of the primary driver, it has all needed JClocks.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C^If on the other hand the path routed to is the secondary, SWdriver calls IOC$INSIOQC instead, JC_redirecting the IRP to the secondary device. The primary device is unbusied in this case also, JCcsince SWdriver is acting in lieu of the primary device, which will not in fact get any I/O when it JC^is routed this way. IRP$L_UCB is pointed at the secondary device during this operation, to be JC4replaced with its original value when I/O is posted.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C[In all cases, when the I/O completes (and without a detour through IPL 4 if assembled that JC`way), SWdriver regains control. At this point it decrements the outstanding I/O count, replaces JC]a few IRP fields it needed to regain control, and completes the I/O (via a call to COM$POST, JCbsince it has no right to alter the underlying driver's busy or unbusy state). If on the secondary JC]path, SWdriver checks the I/O to ensure that mount verification is begun on it also, as this JC^would not otherwise be done. The I/O checking, mount verify processing, and postprocessing is JCZall done in the context of the primary path, so that the primary path remains mounted and JCKapparently active, though the secondary path may in fact be the one in use.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C\To save volatile parameters from an IRP during the switching, SWdriver currently overwrites JC_the IRP argument areas (which are used prior to start_io but are not used after that point) to JCGhold a number of IRP fields which are being reused to route the packet.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C The usage is as follows:IAb€‚Include Paragraph Tab-2£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C Field:IICSaves contents of:IC IRP$Q_QIO_P1+4IC(IRP$L_STS (if fast finish shortcut only)IC IRP$Q_QIO_P2ICIRP$L_MEDIA (block number)IC IRP$Q_QIO_P2+4IC0IRP$L_PID (PID, used to capture post processing)IC IRP$Q_QIO_P2+8IC IRP$L_UCBIAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C+While it is of course possible to allocate b€£€²€¢€Canother AC.structure to hold this information, these IRP JC_fields are used by no other driver code since they are present only to make the $QIO arguments JCYavailable to FDT code, completed before start-io code can be run. It may be desirable to JC\consider extending the IRP to supply dedicated fields for this functionality, or perhaps to JC]consider reusing some of the structures shadowing uses where the device is not shadowed, and JC_otherwise use some separate structure. This approach does however provide very fast operation. JCaThe fields mentioned are saved and restored so that the IRP can be passed to another driver, yet JC]have its I/O posted in the context of the correct driver. Saving IRP$L_MEDIA is necessary to JCbensure that IRPs which are re-inserted in device I/O queues at the start of mount verify have the JCYcorrect block information. The UCB and PID fields must be altered to redirect the IRP to JC]another driver and regain control when the I/O is posted by that driver. The IRP$L_STS field JC_must also be treated this way if a "shortcut" to avoid IPL 4 processing is used, which is also JC^present to minimize extra code caused by this approach, using the fast path I/O processing to JC\eliminate most of the completion overhead which would otherwise be seen due to the need for JC[two request completion calls. SWdriver also has an interface for program controlled path JJC]switching. This is built using the IO$_RETCENTER function code (chosen rather arbitrarily as JCWone that is not used generally and thus can be defined without much confusion) sent to JCdSWdriver itself. (It is meant as a private interface.) This code passes a single parameter, 1 or 2, JC]to indicate whether to take the primary or the secondary path. When this function is sent to JCbSWdriver, it will switch to the selected path, provided that its count of active I/O (I/O seen at JCZstart-io and not yet seen at I/O post) is ZERO. When the HSZ sends notice that "the other JC2controller has failed", the switch server sends a b€£€²€¢€CpackackAC) to the currently inactive path to flush JC`out all I/O before switching in this way. The secondary device exists independently and is just JCcaddressed directly. The primary device, recall, has its start-io entry stolen, so there is code in JC`SWdriver which will notice an I/O with all I/O function modifiers set, and which will strip all JC_these and send the I/O to the primary path, whether it is connected or not for other purposes. JCdThe reason for this packack is to ensure that any "left over" activity on the path will be flushed, JC_and also to issue the necessary SCSI functions to activate the path. This will be required for JC7HSZ40 and up, and is likely to be important for others.IAb€‚Include Paragraph Text£€ €£€Ô$P«€ € €!€€‚„…¡€"€«€C\To interact with the failover server, SWdriver sends messages to a mailbox allocated by the JC]failover server and whose UCB address has been stored in part of the SWdriver UCB extension. JCSThus SWdriver can use CALL_WRTMAILBOX, a documented interface, to send messages to JC`the controller indicating that a mount-verify-initiated switchover has occurred, or that an I/O JCastatus with the 16384 bit set has been seen. These messages are simply sent, provided the server JC^is present. The server is sent enough information to tell which devices are involved, and one JC_server can handle any number of pairs of switched devices. It has the convention that SW units JC_must be allocated and enabled starting with unit zero. (There is a UCB table in SWdriver which JC_limits the number of units permitted, but its size is an assembly parameter and can be made as JC