relaxNeighborsfvertex u) <
80 . PathCapEx hCapExU = gelMinCapEx(u);
get Ihis lisl of neighbors of vertex u;
for each neighbor v of vertex u, do the following
90 {
1 ► if (vertex v is settled)
skip vertex v;
//calculate fLoss, fCapEx, and fFiberCost based on the following cases
•\ 00 "a's0 update nSegmentStartType for path_upto_v
if (link(u. v) is a ROADM hop)
{
path_upto_u nSegmentStartType must be SEGMENT_START_FROM_7500_VIA_LAMBDA; otherwise error,
set path_upto_v.nSegmentStartType = SEGMENT_START_FROM_7500_VIA_ LAMBDA;
calculate fLossV, fCapExV, and fFiberCostVaccordingly; (case A)
110^ )
else if (link(u, v) is a ROADM_Auxilary hop)
{
if (link(u, v) is a ROADM_Aux_Hub hop)
{
path_upto_u.nSegmentStartType must be SEGMENT_START_FROM_7500_VIA_LAMBDA; otherwise error,
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case B)
)
else {
//for non-hub ROADM_Auxilary hop: three different cases based on path_upto_u.nSegmentStartType;
//we need to adjust path_uplo_v.nSegmentStartType accordingly
if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7750) {
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA; } else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_FIBER) {
set path_upto_v.nSegmentStartType = SEGMENT_START_FROM_7500_VIA_LAMBDA; } else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_LAMBDA) {
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_FIBER;
}else{
error:
}
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case C)
120 )'
^ else//which means link(u.v) is a fiber hop
{
//there are two cases for a fiber hop:
// i) it starts from a 7750 router; or
//ii) it starts from a 7500 ROADM node
if (path_upto_u nSegmentStartType == SEGMENT_START_FROM_7750) {
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7750;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case D)
}
else if (path_upto_u.nSegmentStartType == SEGMENT_START_FROM_7500_VIA_FIBER) {
set path_upto_v nSegmentStartType = SEGMENT_START_FROM_7500_VIA_FIBER;
calculate fLossV, fCapExV, and fFiberCostV accordingly; (case E)
}
else (
1 30—//update minCapEx for vertex v (i.e., path_upto_v)
PathCapEx hCapExV = getMinCapEx(v); if (null ==hCapExV){
hCapExV = new PathCapEx(fLossV, fCapExV, fFiberCostV, nSegmentType);
setMinCapEx(v, hCapExV); } else if (hCapExV.fCapEx > fCapExV) {
hCapExV = new PathCapEx(fLossV, fCapExV, fFiberCostV, nSegmentType);
setMinCapEx(v, hCapExV);
}
//assign predecessor in shortest path T2f 7'
setPredecessor(v, u); 17A. VJT« /