Пример #1
0
        /******************************************************************************
         *  函数名称:ConvertBetween_ConnID_IPv6()
         *  功能:实现ConnID协议到IPv6协议的转换
         *  参数:data表示ConnID报文;
         *  返回值:IPv6_packet 返回IPv6报文
         * ***************************************************************************/

        private PDU_Network ConvertBetween_ConnID_IPv6(Object data)
        {
            PDU_ConnID pdu_connid = (PDU_ConnID)data;

            IPv6_packet = new PDU_Network();                      //构造IPv6数据报
            UDP_packet  = new PDU_Transport();                    //构造UDP数据报

            UInt64        connid   = pdu_connid.connid;           //获取ConnID报文连接标识ConnID
            List <Byte[]> app_data = pdu_connid.application_data; //获取ConnID报文应用层数据

            Communicarion_Patameter commPata = (Communicarion_Patameter)CommPara_ConnID_Mapping[connid];

            IPv6_packet.version       = 0x6;    //版本号4bit
            IPv6_packet.traffic_class = 0x00;   //通信类型8bit
            IPv6_packet.flow_label    = 0x0000; //流标签20bit
            IPv6_packet.flow_label2   = 0x0;


            IPv6_packet.next_header         = commPata.next_header;      //下一首部8bit
            IPv6_packet.hop_limit           = commPata.hop_limit;        //跳数限制8bit
            IPv6_packet.source_ipv6_address = commPata.source_ipv6_addr; //源IPv6地址
            IPv6_packet.dest_ipv6_address   = commPata.dest_ipv6_addr;   //目的IPv6地址

            UDP_packet.source_port  = commPata.source_port;              //源端口号
            UDP_packet.dest_port    = commPata.dest_port;                //目的端口号
            UDP_packet.udp_checksum = 0x0000;

            UInt16 app_data_len = 0x0000; //应用层数据字节数

            foreach (Byte[] B in app_data)
            {
                foreach (Byte b in B)
                {
                    app_data_len++;
                }
            }

            //================== UDP长度 =====================//
            UDP_packet.udp_length = (UInt16)(0x0008 + app_data_len); //UDP长度为UDP报头+UDP数据长度

            //================ IPv6有效载荷长度 ===============//
            IPv6_packet.payload_length = UDP_packet.udp_length;

            //================== UDP数据 ======================//
            UDP_packet.application_data = app_data;

            //================ IPv6上层PDU ====================//
            IPv6_packet.pdu_transport = UDP_packet;

            return(IPv6_packet);
        }
Пример #2
0
        /******************************************************************************
         *  函数名称:CommPara_ConnID_MappingTab()
         *  功能:建立通信参数-连接标识映射表
         *  参数:无
         *  返回值:无
         * ***************************************************************************/
        public void CommPara_ConnID_MappingTab()
        {
            CommPara_ConnID_Mapping = new Hashtable();

            //ConnID 1
            UInt64 ConnID1 = 0xF431CA185F74C6E6;
            //ConnID 2
            UInt64 ConnID2 = 0x73B6D1725035878D;


            //2001:0DA8:D813:08A1:1201:0585:FEAB:6001
            UInt16[] source_ipv6_addr1 = new UInt16[] { 0x0120, 0xA80D, 0x13D8, 0xA108, 0x0112, 0x8505, 0xABFE, 0x0160 };
            UInt16[] source_ipv6_addr2 = new UInt16[] { 0x0120, 0xA80D, 0x13D8, 0xA108, 0x0112, 0x8505, 0xABFE, 0x0170 };
            UInt16[] dest_ipv6_addr    = new UInt16[] { 0x0120, 0xA80D, 0x18D8, 0x8200, 0x0000, 0x0000, 0x0000, 0x3412 };
            Byte     next_header       = 0x11;
            Byte     hop_limit         = 0xFF;
            UInt16   source_port1      = 0xF0BF;
            UInt16   source_port2      = 0xF0BE;
            UInt16   dest_port         = 0xF0B0;


            //Communicarion Patameter 1
            Communicarion_Patameter commPara1 = new Communicarion_Patameter();

            commPara1.source_ipv6_addr = source_ipv6_addr1;
            commPara1.dest_ipv6_addr   = dest_ipv6_addr;
            commPara1.next_header      = next_header;
            commPara1.hop_limit        = hop_limit;
            commPara1.source_port      = source_port1;
            commPara1.dest_port        = dest_port;


            //Communicarion Patameter 2
            Communicarion_Patameter commPara2 = new Communicarion_Patameter();

            commPara2.source_ipv6_addr = source_ipv6_addr2;
            commPara2.dest_ipv6_addr   = dest_ipv6_addr;
            commPara2.next_header      = next_header;
            commPara2.hop_limit        = hop_limit;
            commPara2.source_port      = source_port2;
            commPara2.dest_port        = dest_port;


            CommPara_ConnID_Mapping.Add(ConnID1, commPara1);
            CommPara_ConnID_Mapping.Add(ConnID2, commPara2);
        }