路由模拟系统 设计方案(一) 接口说明部分 2004-3-21
一, 全局名空间 路由模拟系统中所有全局变量与函数皆实现在一个名空间中。
名空间:NetSource 名空间内变量: #define NULL 0 //网络设备类型表 enum NetElementType{FIBER=1,CENTRALROUT}; //路由IP地址长度 const int IP_ADDRESS_LENGTH=32; //路由表最大长度 const int MAX_ROUT_TABLE_SIZE=100; //路由器端口最大数据包容量 const int MAX_DATA_QUEUE_LENGTH=20; 名空间内函数: //判断两个IP地址是否相等 bool AddrEqual(const unsigned int * addr1,const unsigned int * addr2);
二,类设计 路由模拟系统的类根据前文档类图设计。所有类的构造函数与析构函数接口说明略。
1, 网络元素 类名: NetElement 类的性质: 纯虚基类 父类: 无 类的主要属性: // 网络设备的类型 < protected > NetElementType netElementType; 类的主要接口: // 获得网络设备的类型 < public > virtual NetElementType GetType(void) = 0;
2, 网络线路 类名: AbsLine 类的性质: 纯虚基类 父类: 公有继承NetElement 类的主要属性: 继承属性略;
// 网络线路的长度 < protected > int length; 类的主要接口: < public > virtual void SetLength(int _length) = 0; < public > virtual int GetLength(void) = 0;
3, 光纤 类名: Fiber 类的性质: 可实例化子类 父类: 公有继承AbsLine 类的主要属性: 继承属性略; 类的主要接口: // 获得网络设备的类型 < public > NetElementType GetType(void); // 设置线路物理长度 < public > virtual void SetLength(int _length); // 获得线路物理长度 < public > virtual int GetLength(void);
4, 路由器 类名: AbsRout 类的性质: 纯虚基类 父类: 公有继承NetElement 类的主要属性: 继承属性略; // 路由器自身地址 < protected > int selfAddress[IP_ADDRESS_LENGTH]; // 路由表 < protected > Table routTable; //当前IP数据包 < protected > NetData currTPData; //数据端口 < protected > std::list <NetData> dataInList; < protected > std::list <NetData> dataOutList; < protected > std::list <NetData>::iterator dataIter; //当前数据端口数据量 < protected > int dataListLength; 类的主要接口: // 路由器发送数据至端口 < protected > virtual void SendData(void) = 0; // 路由器从端口接收数据 < protected > virtual void ReceiveData(void) = 0; // 网络向路由器端口写数据 < public > virtual bool NetWriteData(NetData & _netData) = 0; // 网络从路由器端口接收数据 < public > virtual NetData * NetReadData() = 0; // 设置路由表 < public > virtual void SetRoutTable(void); //路由计算:函数指针 < protected > void (*RoutCompute)(int **_netArray,int **_valArray, int **&result,int routNum,int index); // 对当前数据包进行路由计算 < protected > void DataRoutCompute(void); //设置路由计算方法 < public > void SetComputeMethods(void _routCompute(int **,int **, int **&,int,int)); // 设置自身地址 < public > virtual void SetSelfAddress( unsigned int addr[IP_ADDRESS_LENGTH]); // 获得自身地址 < public > virtual unsigned int * GetSelfAddress(void); // 空 < public > virtual void SetNetInfor(int ** _netArray, int ** valArray, int _routNum); // 产生数据 < public > void MakeData(NetData & netData); 5, 中心路由器 类名: CentralRout 类的性质: 可实例化子类 父类: 公有继承AbsRout 类的主要属性: 继承属性略; //网络信息 < private > int **netArray,**valArray; //发送数据包跟踪器 < private > double id; 类的主要接口: // 获得设备类型 < public > virtual NetElementType GetType(void); //网络向端口发送数据 < public > virtual bool NetWriteData(NetData & _netData); // 网络从路由器端口接收数据 < public > virtual NetData * NetReadData(); // 设置路由表 < public > virtual void SetRoutTable(void); //洪泛过程获得网络信息 < public > virtual void SetNetInfor(int ** _netArray, int ** _valArray,int _routNum); // 路由器向端口发送数据 < protected > virtual void SendData(void); // 路由器从端口接收数据 < protected > virtual void ReceiveData(void);
6, 网络结点 类名: NetNode 类的性质: 可实例化类 父类: 无 类的主要属性: // 路由器 < public > AbsRout *pRout; // 网络线路 < public > AbsLine *pLine;
< public > NetNode *pNextNode; 类的主要接口: 无
7, 网络 类名: Net 类的性质: 可实例化类 父类: 无 类的主要属性: // 网络中路由器个数 < private > int routNum; //网络中网络线路个数 < private > int lineNum; // 网络的数据结构:邻接表 < private > NetNode *pNodeArray; //网络的相邻矩阵和耗散矩阵 < private > int ** netArray; < private > int ** valArray; //路由器的类型向量 < private > NetElementType * routTypes; //网络线路的类型向量 < private > NetElementType * lineTypes; //网络初建 < private > static bool first; 类的主要接口: // 创建空网络 < public > void Create(int _routNum); // 创建主干网络 < public > void Create(int ** _netArray, int ** _valArray, int _routNum); // 创建任意类型网络 < public > void Create(int ** _netArray, int ** _valArray, int _routNum,int _lineNum, NetElementType * R, NetElementType * L); // 获得网络信息 < private > void GetNetInfor(void); // 判断网络是否发生改变 < private > bool IsChanged(void); // 释放资源 < private > void Clear(void); // 创建网络 < public > void ReCreate(void); // 据地址获得路由器序列的下标 < public > int GetRoutID(unsigned int addr[IP_ADDRESS_LENGTH]); //获得pNodeArray < public > NetNode *& GetpNodeArray(); // 产生网络传输的数据包 < public > int MakeData(void); // 产生网络传输的数据包 < public > int MakeData(NetData &_ipData); // 路由计算的建立 < public > void RoutComputeBuilder(void);
8, 路由表结点 类名: TableNode 类的性质: 可实例化类 父类: 无 类的主要属性: // 目标地址 < public > unsigned int addressTo[IP_ADDRESS_LENGTH]; // 下一个中继路由地址 < public > unsigned int addressNextHop[IP_ADDRESS_LENGTH]; 类的主要接口: // 设置目标地址 < public > void SetAddressTo(unsigned int _addressTo[IP_ADDRESS_LENGTH]); // 设置下一个中继路由地址 < public > void SetAddressNextHop(unsigned int _addressNextHop[IP_ADDRESS_LENGTH]);
9, 路由表 类名: Table 类的性质: 可实例化类 父类: 无 类的主要属性: // 路由器数量 < private > int routNum; // 路由表 < private > TableNode table[MAX_ROUT_TABLE_SIZE]; 类的主要接口: // 设置路由器数量 < public > void SetRoutNum(int _routNum); // 设置路由表 < public > void SetTable(TableNode _table[MAX_ROUT_TABLE_SIZE]); // 获得下一个中继路由地址 < public > int * GetAddrNextHop(int addrTo[IP_ADDRESS_LENGTH]); // 获得路由器数目 < public > int GetRoutNum(void); 10, 网络数据包 类名: NetData 类的性质: 可实例化类 父类: 无 类的主要属性: // 网络数据包之源地址 < private > unsigned int addressFrom[IP_ADDRESS_LENGTH]; // 网络数据包之目标地址 < private > unsigned int addressTo[IP_ADDRESS_LENGTH]; // 网络数据包之前中继地址 < private > unsigned int preHop[IP_ADDRESS_LENGTH]; // 网络数据包之后中继地址 < private > unsigned int nextHop[IP_ADDRESS_LENGTH]; // 是否是消息 < private > bool bMessage; // 数据包跟踪计数器:消息与IP数据包一一对映 < public > double ID; // 网络数据包之数据信息 < private > int ipData[IP_ADDRESS_LENGTH]; 类的主要接口: // 判断是否为应答消息 < public > bool IsMessage(void); //判断网络数据包是否相同 < public > bool operator ==(NetData &netData); // 设置网络数据包源地址 < public > void SetAddressFrom(unsigned int addrFrom[IP_ADDRESS_LENGTH]); // 设置网络数据包目标地址 < public > void SetAddressTo(unsigned int addrTo[IP_ADDRESS_LENGTH]); // 获得网络数据包源地址 < public > unsigned int * GetAddressFrom(void); // 获得网络数据包目标地址 < public > unsigned int * GetAddressTo(void); // 设置网络数据包之前中继地址 < public > void SetPreHop(const unsigned int _preHop[IP_ADDRESS_LENGTH]); // 设置网络数据包之后中继地址 < public > void SetNextHop(const unsigned int _nextHop[IP_ADDRESS_LENGTH]); // 获得网络数据包之前中继地址 < public > unsigned int * GetPreHop(void); // 获得网络数据包之后中继地址 < public > unsigned int * GetNextHop(void); // 设置IP数据包之数据内容 < public > void SetIPData(const int _ipData[IP_ADDRESS_LENGTH]); // 获得IP数据包之数据内容 < public > int * GetIPData(void); 11, 通信 类名: Communication 类的性质: 可实例化类 父类: 无 类的主要属性: // 网络模拟 < private > Net &net; //网络数据结构的引用 < private > NetNode *& pNodeArray; 类的主要接口: // 单数据包路由 < public > void SingleDataRout(void);
<2004-4-10 修改>

|