Example #1
0
        /******************************************************************************
         *  函数名称:EthernetFrameDecapsulation()
         *  功能:以太网数据帧解封装
         *  参数:无
         *  返回值:无
         * ***************************************************************************/
        public void EthernetFrameDecapsulation()
        {
            try
            {
                Object data = null;
                if (this.Component_reveice_queue.Count > 0)
                {
                    //读取有线模块接收队列数据
                    data = this.Component_reveice_queue.Dequeue();
                    Frame_Ethernet frame = (Frame_Ethernet)data;

                    //检查目的地址是否为本模块地址
                    if (frame.dest_mac_addr != mac_address) //若不是
                    {
                        return;                             //返回,丢弃该数据帧
                    }

                    //上层协议判断方式:依据帧类型字段判断
                    if (frame.type == 0x86DD)  //类型字段86DDH,表示IPv6报文
                    {
                        //解封装,获取IPv6 PDU,并进入有线模块组件发送队列
                        this.Component_send_queue.Enqueue(frame.pdu_network);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("以太网数据帧解封装错误情况:" + e.Message + " " + e.StackTrace);
            }
        }
Example #2
0
        /******************************************************************************
         *  函数名称:EthernetFrameEncapsulation()
         *  功能:以太网数据帧封装
         *  参数:dest_addr表示目标地址
         *  返回值:无
         * ***************************************************************************/
        public void EthernetFrameEncapsulation(UInt64 dest_addr)
        {
            try
            {
                Object data = null;
                if (this.Component_reveice_queue.Count > 0)
                {
                    //读取有线模块接收队列数据
                    data = this.Component_reveice_queue.Dequeue();

                    //构建以太网帧
                    Frame_Ethernet frame_ethernet = new Frame_Ethernet();
                    frame_ethernet.dest_mac_addr   = dest_addr;
                    frame_ethernet.source_mac_addr = mac_address;
                    frame_ethernet.type            = 0x86DD; //以太网帧类型0x86DD表示上层采用IPv6

                    frame_ethernet.pdu_network = (PDU_Network)data;

                    //以太网帧进入组件发送队列
                    this.Component_send_queue.Enqueue(frame_ethernet);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("以太网帧封装错误情况:" + e.Message + " " + e.StackTrace);
            }
        }