第一部分 注册
NC模块
1.TCBTSource模块
功能:在DBA周期开始时,随机生成一个目的NT地址的TCBTMsg消息包
2.PTSource模块
功能:
SWITCH模块
1.路由表的建立
①向交换机发送注册帧regstMsg
②交换机给节点分配地址为nodeS_ID =pk->getNodeIndex()+1,随机生成多播地址
rtable[x][0] = nodeS_ID; //如果节点自身源地址等于rtable在该行存储的address
rtable[x][1] = pk->getArrivalGate()->getIndex();//gate("port$i")->getArrivalGateId(); //消息输入的端口地址
rtable[x][2] = nodeMulti_ID; //将节点对应的组播组地址存入rtable
③发送注册回复帧RegstAck
④交换路由信息
msg->setS_MultID(multiID); //加入组播组地址
msg->setTerminalS_ID(srcID); //新加入节点的S_ID即索引加1
msg->setMsgType("exRoutInfmtMsg");
send(msg,"port$o",0);//发送至另一交换机
⑤另一交换机存储在自己的路由表中
rtable[x][0] = pk->getTerminalS_ID(); //如果节点自身源地址等于rtable在该行存储的address
rtable[x][1] = pk->getArrivalGate()->getIndex();//gate("port$i")->getArrivalGateId(); //消息输入的端口地址
// EV << "*************************************" << pk->getArrivalGate()->getIndex() << "*****************";
rtable[x][2] = pk->getS_MultID();
2.SCR帧状态注册改变
①节点发送SCR至交换机
②交换机接收SCR帧,并生成RSCN帧将其源节点地址转发至已经进行SCR帧注册的其他节点
msg->setS_ID(srcAddress); //自身源地址
msg->setD_ID(stateChgRegst[j]); //目的地址
msg->setS_MultID(-1); //表示未加入组播组
msg->setTerminalS_ID(stateChgRegst[i]); //新加入节点的S_ID
msg->setR_CTL(0x07); //状态帧
msg->setMsgType("RSCNMsg");
3.PLOGI帧
直接转发
4.状态帧(ackMsg)
直接转发
5.NC发送请求问询帧NCEnquiryMsg
将消息转发至不是交换机端口,不是NC节点且端口不是消息到来的端口
6.CBTEnquiryAckMsgNT/回复发送请求问询帧、"CBTScheduleMsg"、PTAckMsg、CBTMsg、CBTAckMsg、TCBTAckMsg、TCBTMsg、PTMsg
直接转发