Data stream processing method, electronic device, storage medium and program product

By transcoding the 66b FlexE data stream into a 257b data stream and using a fixed-position O code block to identify the 257b FlexE overhead, the high complexity of traditional 66b layer processing is solved, enabling support for higher-speed Ethernet technologies.

WO2025260838A1PCT designated stage Publication Date: 2025-12-26ZTE CORP
View PDF 3 Cites 0 Cited by

Patent Information

Application Number
PCT/CN2025/081282
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Priority Date
2024-06-21
Filing Date
2025-03-07
Publication Date
2025-12-26

AI Technical Summary

Technical Problem

Existing technologies have high internal processing complexity when handling high-speed FlexE data, especially at the 66b level, making it difficult to support the development of higher-speed Ethernet technologies.

Method used

The four 66b code blocks in the 66b FlexE data stream are transcoded into a single 257b code block. The first 66b code block at a fixed position is used as the O code block. Service processing is performed through 257b FlexE overhead identification, avoiding decoding to the 66b layer.

Benefits of technology

It reduces the processing complexity of high-speed FlexE data, supports the development of higher-speed Ethernet technology, and simplifies hardware implementation.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN2025081282_26122025_PF_FP_ABST
    Figure CN2025081282_26122025_PF_FP_ABST
Patent Text Reader

Abstract

The present application provides a data stream processing method, an electronic device, a storage medium, and a program product. The method comprises: locking and deleting first padding in a first 257b data stream, to obtain a second 257b data stream; locking first overhead in the second 257b data stream, the first overhead comprising a 257b FlexE overhead code block, the 257b FlexE overhead code block being obtained by means of conversion of four 66b code blocks, the four 66b code blocks comprising one O code block, and the O code block being located at a fixed position among the four 66b code blocks; based on the first overhead, determining and deleting a non-equipped FlexE instance from the second 257b data stream, to obtain a third 257b data stream.
Need to check novelty before this filing date? Find Prior Art

Description

Data stream processing methods, electronic devices, storage media, and application products

[0001] Cross-reference to related applications

[0002] This application is based on and claims priority to Chinese Patent Application No. 202410815248.7, filed on June 21, 2024, the entire contents of which are incorporated herein by reference. Technical Field

[0003] This application relates to the field of communication technology, and in particular to a data stream processing method, electronic device, computer-readable storage medium, and computer program product. Background Technology

[0004] Currently, for high-speed Flexible Ethernet (FlexE) services such as 800G and 1.6T, rate adaptation is based on 66-bit (b) encoding format. As the speed increases, the bus width processed inside the device also increases, and there will be more 66b data within a bus width, making the implementation of service processing based on the 66b layer increasingly complex. Summary of the Invention

[0005] This application provides a data stream processing method, an electronic device, a computer-readable storage medium, and a computer program product, designed to reduce the processing complexity of high-speed FlexE data.

[0006] In a first aspect, embodiments of this application provide a data stream processing method, the method comprising: transcoding four 66b code blocks in a 66b FlexE data stream into a 257b code block to obtain a 257b data stream; wherein the 66b FlexE data stream includes a 66b FlexE overhead frame, the position of the first 66b code block of the 66b FlexE overhead frame in the four 66b code blocks transcoded into the 257b FlexE overhead code block is fixed, and the first 66b code block is a 0 code block.

[0007] Secondly, embodiments of this application provide a data stream processing method, the method comprising: locking and deleting a first padding in a first 257b data stream to obtain a second 257b data stream; locking a first overhead in the second 257b data stream, wherein the first overhead includes a 257b FlexE overhead code block, the 257b FlexE overhead code block being obtained by conversion of four 66b code blocks, the four 66b code blocks including one O code block, and the O code block being the first 66b code block of the FlexE overhead frame, located at a fixed position among the four 66b code blocks; determining and deleting an Unequipped FlexE instance from the second 257b data stream to obtain a third 257b data stream.

[0008] Thirdly, embodiments of this application provide an electronic device, including: at least one processor; at least one memory for storing at least one program; and implementing the data stream processing method as described in the first or second aspect when at least one of the programs is executed by at least one of the processors.

[0009] Fourthly, embodiments of this application provide a computer-readable storage medium having a computer program stored thereon, which, when executed by a processor, implements the data stream processing method as described in the first or second aspect.

[0010] Fifthly, embodiments of this application provide a machine program product, including a computer program, which, when executed by a processor, implements the data stream processing method as described in the first or second aspect.

[0011] In this embodiment, the first 66b code block of the 66b FlexE overhead frame is an O code block. The position of this O code block is fixed among the four 66b code blocks that are transcoded into 257b FlexE overhead code blocks. Therefore, 257b FlexE overhead can be identified through a fixed pattern, and then the 257b FlexE data stream can be processed based on the identified 257b FlexE overhead without first decoding to the 66b layer. This solves the problem of high hardware implementation complexity of traditional 66b layer processing under high-speed interfaces and can better support the development of higher-speed Ethernet technology. Attached Figure Description

[0012] The accompanying drawings are used to provide a further understanding of the technical solutions of this application and constitute a part of the specification. They are used together with the embodiments of this application to explain the technical solutions of this application and do not constitute a limitation on the technical solutions of this application.

[0013] Figure 1 is a schematic diagram of the format of the O code block provided in an embodiment of this application;

[0014] Figures 2a, 2b-1, 2b-2, 2c-1, 2c-2, 2d-1, and 2d-2 are schematic diagrams of the format of the 257b FlexE overhead code block provided in the embodiments of this application.

[0015] Figures 3a, 3b, 3c, and 3d are schematic diagrams of the format of the 257b Unequipped FlexE instance provided in the embodiments of this application;

[0016] Figure 4 is a schematic diagram of the format of the 66b P1 padding code block provided in the embodiment of this application;

[0017] Figure 5 is a schematic diagram of the format of the 66b P2 padding code block provided in the embodiment of this application;

[0018] Figure 6 is a schematic diagram of a 257b fill format provided in an embodiment of this application;

[0019] Figures 7, 8, 9 and 10 are schematic diagrams of a data stream processing method provided in an embodiment of this application;

[0020] Figure 11 is a schematic diagram of 257b data stream processing provided in an embodiment of this application;

[0021] Figure 12 is a schematic diagram of an electronic device provided in an embodiment of this application. Detailed Implementation

[0022] To make the objectives, technical solutions, and advantages of this application clearer, the following detailed description is provided in conjunction with the accompanying drawings and embodiments. It should be understood that the specific embodiments described herein are merely illustrative and not intended to limit the scope of this application.

[0023] It should be understood that in the description of the embodiments of this application, the use of terms such as "first" and "second" is only for the purpose of distinguishing technical features and should not be construed as indicating or implying relative importance, or implicitly indicating the number of technical features indicated, or implicitly indicating the order of the technical features indicated. "At least one" means one or more, and "more" means two or more. "And / or" describes the relationship between related objects, indicating that three relationships can exist. For example, A and / or B can indicate the existence of A alone, the simultaneous existence of A and B, or the existence of B alone. A and B can be singular or plural. The character " / " generally indicates that the related objects before and after are in an "or" relationship. "At least one of the following" and similar expressions refer to any group of these items, including any group of singular or plural items. For example, at least one of a, b, and c can represent: a, b, c, a and b, a and c, b and c, or a and b and c, where a, b, and c can be single or multiple. Furthermore, the technical features involved in the various embodiments of this application described below can be combined with each other as long as they do not conflict with each other.

[0024] FlexE is based on high-speed Ethernet interfaces (100GE and above). By decoupling the Ethernet MAC rate and PHY rate, it enables flexible control of the interface rate to adapt to different network transmission structures.

[0025] Existing standards define the concept of a Flexible Ethernet group (FlexE group). Specifically, a FlexE group can consist of a single physical layer (PHY). Alternatively, a FlexE group can consist of multiple bundled PHYs. When a FlexE group contains multiple PHYs, each PHY has the same data rate. For example, each PHY can have a data rate of 100G, 200G, or 400G. Each FlexE group carries one or more FlexE instances. A FlexE instance can refer to a unit of information that carries Ethernet client data.

[0026] The 66b data stream described in this application refers to a bitstream using a 66b encoding format, composed of multiple 66-bit blocks. Each 66-bit block contains 66 bits and uses a 64b / 66b encoding format. The first two bits of a 66-bit block can be called a synchronization header. A 66-bit block with a synchronization header of 0 or 1 can be called a 64b / 66b data block (or a D block), indicating that the last 64 bits of the 66-bit block are all data information. A 66-bit block with a synchronization header of 10 can be called a 64b / 66b control block, indicating that the last 64 bits of the 66-bit block are a mixture of data information and control information, or all control information. When two bits in the synchronization header have the same value (synchronization header is 00 or 11), the synchronization header is invalid, and a 66-bit block with an invalid synchronization header is an error block (or an E block). The 257b data stream described in this application refers to a bitstream using the 257b encoding format, which consists of multiple 257-bit blocks. Each 257-bit block contains 257 bits.

[0027] Current standards have defined FlexE services at 800G and 1.6T speeds, and will continue to define Ethernet services at even higher speeds in the future. In the processing of FlexE services at 800G and 1.6T speeds, most steps are still based on 66-bit encoding. As the speed increases, the bus width for internal processing also increases, resulting in more 66-bit data within a single bus width. This makes the implementation of 66-bit-based service processing increasingly complex. Processing based on a 257-bit encoding format would reduce this complexity.

[0028] In existing standards, high-speed services are rate-adapted based on 66-bit data. To reduce processing complexity, a 257-bit processing mechanism is used instead of 66-bit in the mapping of 800GE to the Optical Transport Network (OTN). Existing standards define 50G / 100G / 200G / 400G FlexE interfaces. In each 100G FlexE instance, every 20 66-bit data blocks are divided into code block groups, with each group containing 20 data blocks, representing 20 time slots, each time slot representing a service speed of 5G (bit / s) bandwidth. When transmitting 66-bit data blocks, a FlexE overhead code block is inserted after every 1023 data block groups (1023 * 20 data blocks). Because the alignment marker (AM) insertion frequency of 50G / 200G / 400G Ethernet PHY is different from that of 100G Ethernet PHY, in order to ensure the integer multiple relationship of the rate between FlexE instances, padding blocks need to be inserted during 50G / 200G / 400G FlexE processing. OIF FlexE IA also defines two padding formats, P1 and P2, based on 66b.

[0029] Currently, the industry is discussing 800G FlexE technology, which will most likely still use a 66-bit FlexE instance structure. After transcoding to 257 bits, forward error correction (FEC) encoding will be added before transmission. Due to the increased speed of 800G FlexE, the data bus width will also increase to N*66 bits. The overhead and padding processing of N*66 bit FlexE will reduce implementation complexity.

[0030] Currently, for 50G / 100G / 200G / 400G FlexE over OTN awareness mapping scenarios, it is necessary to first decode to the 66b level, identify the FlexE overhead, delete unusable time slots and unequipped instances, insert the corresponding number of padding blocks, and then interleave multiple FlexE instances into a serial 257b data stream using a 66b interleaving method, finally mapping it to the OTN container. This mapping method requires first transcoding the 257b data stream to a 66b data stream, and then transcoding the 66b data stream back to a 257b data stream, resulting in high hardware implementation complexity. Therefore, this application provides a data stream processing method aimed at reducing the processing complexity of high-speed FlexE data.

[0031] This application provides a data stream processing method, which includes transcoding four 66b code blocks in a 66b FlexE data stream into a single 257b code block to obtain a 257b data stream. The 66b FlexE data stream includes a 66b FlexE overhead frame. The position of the first 66b code block of the 66b FlexE overhead frame among the four 66b code blocks transcoded into the 257b FlexE overhead block is fixed, and the first 66b code block is designated as the 0 code block. In this application embodiment, the 257b code block obtained by transcoding the first 66b code block of the 66b FlexE overhead frame is referred to as the 257b overhead block.

[0032] For example, a 66b FlexE overhead frame includes eight 66b code blocks, where the first 66b code block is a 0 code block. The format of the 0 code block can be as shown in Figure 1, with its synchronization header (bits 0-1) being "10" and its block type (bits 2-9) being "0x4B".

[0033] For example, in the process of transcoding a 66b FlexE data stream to a 257b data stream, the four 66b code blocks in the 66b FlexE data stream overhead are transcoded into one 257b FlexE overhead code block. In this embodiment, the 257b code block transcoded from the four 66b code blocks containing the first O code block of 66b FlexE overhead is referred to as a 257b-based FlexE overhead code block.

[0034] In one possible implementation, the O code block is located at the first position among four 66-bit code blocks. That is, the O code block is the first 66-bit code block among the four 66-bit code blocks transcoded into a 257-bit FlexE overhead code block. When the O code block is located at the first position among the four 66-bit code blocks, the format of the 257-bit FlexE overhead code block can be as shown in Figure 2a, which includes at least one of the following: the 0th bit of the 257-bit code block is 0; the 1st bit of the 257-bit code block is 0; bits 5 to 8 of the 257-bit code block are 0xB; and bits 33 to 36 of the 257-bit code block are 0x5. The other bits of the 257-bit FlexE overhead code block can be any values.

[0035] In one possible implementation, the O code block is located in the second position of the four 66-bit code blocks, and the first position of the four 66-bit code blocks is the control code block. That is, the O code block is the second 66-bit code block of the four 66-bit code blocks that are transcoded into a 257-bit FlexE overhead code block, while the first 66-bit code block is the control code block.

[0036] When the 0 code block is located in the second position of four 66b code blocks, and the first position of the four 66b code blocks is a control code block, the format of the 257b FlexE overhead code block can be as shown in Figure 2b-1, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st bit of the 257b code block is 0; the 2nd bit of the 257b code block is 0; bits 65 to 72 of the 257b code block are 0x4B; and bits 97 to 100 of the 257b code block are 0x5. The other bits of the 257b FlexE overhead code block can be any value.

[0037] In one possible implementation, the O code block is located in the second position of the four 66-bit code blocks, and the first position of the four 66-bit code blocks is a non-control code block. That is, the O code block is the second 66-bit code block of the four 66-bit code blocks that are transcoded into a 257-bit FlexE overhead code block, while the first 66-bit code block is a non-control code block, which can specifically be a data code block.

[0038] When the 0 code block is located in the second position of four 66b code blocks, and the first position of the four 66b code blocks is a non-control code block, the format of the 257b FlexE overhead code block can be as shown in Figure 2b-2, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st bit of the 257b code block is 1; the 2nd bit of the 257b code block is 0; bits 69 to 72 of the 257b code block are 0xB; and bits 97 to 100 of the 257b code block are 0x5. The other bits of the 257b FlexE overhead code block can be any value.

[0039] In one possible implementation, the O code block is located in the third position of four 66-bit code blocks, and at least one of the first and second positions of the four 66-bit code blocks includes a control code block. That is, the O code block is the third 66-bit code block of the four 66-bit code blocks transcoded into a 257-bit FlexE overhead code block, while the first two 66-bit code blocks contain the control code block.

[0040] When the 0 code block is located in the third position of four 66b code blocks, and at least one of the first and second positions of the four 66b code blocks includes a control code block, the format of the 257b FlexE overhead code block can be as shown in Figure 2c-1, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 3rd bit of the 257b code block is 0; bits 129 to 136 of the 257b code block are 0x4B; and bits 161 to 164 of the 257b code block are 0x5. The other bits of the 257b FlexE overhead code block can be of arbitrary values.

[0041] In one possible implementation, the O code block is located in the third position of the four 66-bit code blocks, while the first and second positions of the four 66-bit code blocks are both non-control code blocks. That is, the O code block is the third 66-bit code block among the four 66-bit code blocks transcoded into a 257-bit FlexE overhead code block, and the first two 66-bit code blocks are both non-control code blocks, which can specifically be data code blocks.

[0042] When the 0 code block is located at the third position of four 66b code blocks, and the first and second positions of the four 66b code blocks are both non-control code blocks, the format of the 257b FlexE overhead code block can be as shown in Figure 2c-2, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 3rd bit of the 257b code block is 0; bits 133 to 136 of the 257b code block are 0xB; bits 161 to 164 of the 257b code block are 0x5. The other bits of the 257b FlexE overhead code block can be any value.

[0043] In one possible implementation, the O code block is located at the fourth position of four 66-bit code blocks, and at least one of the first, second, and third positions of the four 66-bit code blocks includes a control code block. That is, the O code block is the fourth 66-bit code block of the four 66-bit code blocks transcoded into a 257-bit FlexE overhead code block, while the first three 66-bit code blocks contain the control code block.

[0044] When the 0 code block is located at the fourth position of four 66b code blocks, and at least one of the first, second, and third positions of the four 66b code blocks includes a control code block, the format of the 257b FlexE overhead code block can be as shown in Figure 2d-1, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 4th bit of the 257b code block is 0; bits 193 to 200 of the 257b code block are 0x4B; and bits 225 to 228 of the 257b code block are 0x5. The other bits of the 257b FlexE overhead code block can be of any value.

[0045] In one possible implementation, the O code block is located at the fourth position of four 66-bit code blocks, while the first, second, and third positions of the four 66-bit code blocks are all non-control code blocks. That is, the O code block is the fourth 66-bit code block among the four 66-bit code blocks transcoded into a 257-bit FlexE overhead code block, and the first three 66-bit code blocks are all non-control code blocks, which can specifically be data code blocks. When the O code block is located at the fourth position of the four 66-bit code blocks, and the first, second, and third positions of the four 66-bit code blocks are all non-control code blocks, the format of the 257-bit FlexE overhead code block can be as shown in Figure 2d-2, which includes at least one of the following: the 0th bit of 257b is 0; the 4th bit of 257b is 0; bits 197 to 200 of 257b are 0xB; and bits 225 to 228 of 257b are 0x5. The other bits of the 257-bit FlexE overhead code block can be any value.

[0046] In this embodiment, the position of the first O code block of the 66b FlexE overhead frame is fixed among the four 66b code blocks transcoded into a 257b FlexE overhead code block. Therefore, 257b FlexE overhead can be identified using a fixed pattern, which can be any one of the patterns shown in Figures 2a, 2b-1, 2b-2, 2c-1, 2c-2, 2d-1, and 2d-2. Based on the identified 257b FlexE overhead, 257b-level service processing can be performed on the FlexE data stream, such as removing unequipped FlexE instances at the 257b level, without first decoding to the 66b level. This solves the problem of high hardware implementation complexity of traditional 66b-level processing under high-speed interfaces and better supports the development of higher-speed Ethernet technologies.

[0047] For example, the method provided in this application further includes: sending position indication information, wherein the position indication information is used to indicate the position of the O code block among the four 66b code blocks. The first O code block of the 66b FlexE overhead is located at a fixed position among the four 66b code blocks that are transcoded into a 257b FlexE overhead code block. In order to transmit the position information of the first O code block to the apparatus for 66b to 257b transcoding processing, the position of the O code block among the four 66b code blocks can be indicated by sending position indication information.

[0048] For example, the method provided in this application embodiment further includes setting the data bus width to a multiple of 4*66b. It should be noted that the data bus width is equal to the number of data blocks processed at one time, and the interval between O code blocks in the FlexE data stream is fixed to a multiple of 4*66b. Therefore, setting the data bus width to a multiple of 4*66b can determine the position of the O code block.

[0049] For example, each 800G PHY carries eight 100G FlexE instances. These eight instances are divided into two groups, each containing four instances, corresponding to the two flows of the 800G PHY. For each 100G FlexE instance, a fixed number of x1 66-bit insertions and a fixed number of x2 66-bit paddings are performed at intervals of 4. Then, the four 100G FlexE instances in each group are interleaved at a 4*66-bit granularity. After interleaving, 257-bit transcoding is performed. The four 66-bit code blocks that transcode into a single 257-bit code block originate from the same 100G FlexE instance. During 257-bit transcoding, if the four 66-bit blocks contain the first overhead code block of the FlexE overhead (i.e., the O code block), the position of the FlexE overhead O code block within the four 66-bit blocks is fixed, for example, located at the first 66-bit position within the four 66-bit code blocks. In the multiplexing-side functional architecture of FlexE, the insertion processing of FlexE overhead and the 66b to 257b transcoding processing are implemented in different devices. In order to ensure that the first 0 code block of FlexE overhead is located in a fixed position among the four 66b blocks in the 257b transcoding during the 257b transcoding, the position information of the first 0 code block of FlexE overhead needs to be transmitted to the device for 66b to 257b transcoding processing. Specifically, the position of the 0 code block in the four 66b code blocks can be indicated by position indication information, or the data bus bit width can be set to a multiple of 4*66b.

[0050] For example, for an equipped FlexE instance, the three remaining 66-bit code blocks (excluding the O code block) of the four 257-bit overhead code blocks include any combination of one or more of the following code blocks: data D code blocks; idle code blocks; and control code blocks. For example, one O code block plus three data D code blocks, one O code block plus three idle code blocks, or one O code block plus any combination of three code blocks (idle code blocks, data D code blocks, and control code blocks).

[0051] For example, for an unequipped FlexE instance, the three 66-bit code blocks (excluding the O code block) out of the four 66-bit code blocks transcoded into a 257-bit overhead code block are three E code blocks. That is, the four 66-bit code blocks transcoded into a 257-bit overhead code block consist of one O code block and three E code blocks. It should be noted that the format of the Unequipped FlexE instance in this embodiment is also related to the position of the 66-bit FlexE overhead O code block within the four 66-bit code blocks transcoded into a 257-bit code block.

[0052] In one possible implementation, when the O code block is located at the first position of four 66b code blocks, the format of the Unequipped FlexE instance can be as shown in Figure 3a, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st to 4th bits of the 257b code block are 0000; the 5th to 8th bits of the 257b code block are 0xB; the 13th to 32nd bits of the 257b code block are all 0; and the 33rd to 36th bits of the 257b code block are 0x5.

[0053] Optionally, to further improve the accuracy of unequipped FlexE instance identification, when the O code block is located in the first position among the four 66b code blocks, the unequipped FlexE instance may also include at least one of the following: bits 9 to 12 of the 257b code block are all 0; bits 65 to 128, bits 129 to 192, and bits 193 to 256 of the 257b code block are consistent with the block payload content of the 66b Ethernet error control code block (E code block), as shown in Figure 3a.

[0054] In one possible implementation, when the O code block is located in the second position of four 66b code blocks, the format of the Unequipped FlexE instance can be as shown in Figure 3b, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st to 4th bits of the 257b code block are 0000; the 65th to 72nd bits of the 257b code block are 0x4B; the 77th to 96th bits of the 257b code block are all 0; and the 97th to 100th bits of the 257b code block are 0x5.

[0055] Optionally, to further improve the accuracy of unequipped FlexE instance identification, when the O code block is located in the second position among the four 66b code blocks, the unequipped FlexE instance may also include at least one of the following: bits 73 to 76 of the 257b code block are all 0; bits 129 to 192 and bits 193 to 256 of the 257b code block are consistent with the block payload content of the 66b Ethernet error control code block, as shown in Figure 3b.

[0056] In one possible implementation, when the O code block is located in the third position of four 66b code blocks, the format of the Unequipped FlexE instance can be as shown in Figure 3c, which includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st to 4th bits of the 257b code block are 0000; the 129th to 136th bits of the 257b code block are 0x4B; the 141st to 160th bits of the 257b code block are all 0; and the 161st to 164th bits of the 257b code block are 0x5.

[0057] Optionally, to further improve the accuracy of unequipped FlexE instance identification, when the O code block is located in the third position among the four 66b code blocks, the unequipped FlexE instance may also include at least one of the following: bits 137 to 140 of the 257b code block are all 0s; bits 65 to 128 and bits 193 to 256 of the 257b code block are consistent with the block payload content of the 66b Ethernet error control code block, as shown in Figure 3c.

[0058] In one possible implementation, when the O code block is located at the fourth position of four 66-bit code blocks, the format of the Unequipped FlexE instance can be as shown in Figure 3d, which includes at least one of the following: the O code block is located at the fourth position of four 66-bit code blocks, and the Unequipped FlexE instance pattern includes at least one of the following: the 0th bit of the 257-bit code block is 0; the 1st to 4th bits of the 257-bit code block are 0000; the 193rd to 200th bits of the 257-bit code block are 0x4B; the 205th to 224th bits of the 257-bit code block are all 0; and the 225th to 228th bits of the 257-bit code block are 0x5.

[0059] Optionally, to further improve the accuracy of unequipped FlexE instance identification, when the O code block is located in the fourth position among four 66b code blocks, the unequipped FlexE instance may also include at least one of the following: bits 201 to 204 of the 257b code block are all 0s; bits 65 to 128 and bits 129 to 192 of the 257b code block are consistent with the block payload content of the 66b Ethernet error control code block, as shown in Figure 3d.

[0060] In this embodiment, the format of the 257b unequipped FlexE instance is related to the position of the 66b FlexE overhead O code block in the four 66b blocks transcoded into 257b. The position of the O code block in the four 66b blocks transcoded into 257b is fixed. Therefore, a fixed pattern of 257b unequipped FlexE instance can be obtained based on the fixed position of the O code block. Thus, the pattern of 257b unequipped FlexE instance can be used to identify unequipped FlexE instances at the 257b level and remove unequipped FlexE instances.

[0061] It should be noted that, in order to maintain the same 100G speed for each FlexE instance in Ethernet interfaces of different speeds, padding insertion is required for 800G FlexE. Padding insertion can be performed on a per-instance basis or per 400G flow basis. Specifically, n*4 66b padding blocks can be inserted at fixed intervals of m 66b blocks, ensuring that when converting four 66b blocks into one 257b block, the four 66b padding blocks can be converted into a single 257b padding block. Here, n is an integer greater than or equal to 1, and m is a multiple of 4. The padding blocks can be either P1 or P2 blocks. The P1 block is a 66b 0 block, where bits 12 to 31 are 0xFFFFF, and its format is shown in Figure 4. The P2 block is an Ethernet error control block (E block), and its format is shown in Figure 5. The aforementioned n*4 padding blocks include n identical padding combinations, each combination consisting of four 66b padding blocks. For example, n*4 paddings can be combined into n P1P1P2P2 combinations, n P1P2P1P2 combinations, etc.; or they can be composed of 4 P1s and 4 P2s alternating sequentially. When inserting padding based on each 400G flow, 257b padding blocks can also be inserted at fixed intervals after the 66b to 257b transcoding is completed.

[0062] Figure 6 illustrates a 257b padding format according to an embodiment of this application. The 257b padding includes at least one of the following: bit 0 of the 257b code block is 0; bits 1 to 4 of the 257b code block are 0000; bits 5 to 8 of the 257b code block are 0xB; bits 13 to 32 of the 257b code block are preset values ​​(e.g., all 1); and bits 33 to 36 of the 257b code block are 0x5. It should be understood that the 257b padding format shown in Figure 6 can be used as a pattern for identifying 257b padding code blocks.

[0063] It should be noted that various padding formats can be further obtained based on different compositions of the four 66b padding elements used to transcode into 257b padding. For example, when the four 66b elements constituting the 257b padding are P1P2P1P2, the 257b padding further includes one of the following: bits 65 to 128 and bits 193 to 256 of the 257b are consistent with the block payload of P2 (66b Ethernet error control code block), and bits 129 to 192 are consistent with the block payload of P1. For example, when the four 66b elements constituting the 257b padding are P1P1P2P2, the 257b padding further includes one of the following: bits 65 to 128 of the 257b are consistent with the block payload of P1, and bits 193 to 256 and bits 129 to 192 are consistent with the block payload of P2 (66b Ethernet error control code block).

[0064] For example, on the receiving side, if FlexE padding is inserted based on each 400G flow, padding location can be based on 257b. The 257b padding location method is as follows: 257b padding is detected in the 257b data stream of each 400G flow according to the above fixed pattern. When a 257b padding is detected, and another 257b padding is found after a fixed number of 257b blocks, the process enters the 257b padding locking state. After entering the locked state, padding code block removal can be performed based on 257b. After the 257b padding code block removal is completed, transcoding from 257b to 66b is performed, and then deinterleaving is performed based on a granularity of 4*66b. Each 400G flow can deinterleave into 4 100G FlexE instances. For each 100G FlexE instance, FlexE overhead positioning can be performed based on a size of 4*66b. The specific processing method is as follows: it is detected whether each of the 4 66b is an O code block. If it is an O code block, the position of the O code block in the 4 66b is determined. After a fixed number of 4*66b intervals, the 4*66b containing the O code block is located again, and the position of the O code block is consistent with the previous one. Then, the FlexE overhead locked state is entered.

[0065] For example, to increase the transmission distance of FlexE, it can be achieved by carrying FlexE on OTN. One transmission mode is the awareness model, which involves deleting unequipped FlexE instances at the OTN entry point, and then processing the other equipped instances according to a certain process before carrying them in the OTN container.

[0066] As shown in Figure 7, this is a data stream processing method provided in an embodiment of the present application. The method includes, but is not limited to, the following steps S110-S130.

[0067] Step S110: Lock and delete the first padding in the first 257b data stream to obtain the second 257b data stream.

[0068] For example, the first 257b data stream can be obtained from a (flexible) Ethernet physical interface. For instance, receiving data streams from p 800G (flexible) Ethernet physical ports (PHYs), where p is an integer greater than or equal to 1, and restoring the data streams to 257b format, since each 800G (flexible) Ethernet port consists of two 400G 257b data streams, thus 2*p first 257b data streams can be obtained from p 800G (flexible) Ethernet physical ports.

[0069] In order to map the first data stream obtained from the Ethernet PHY into the OTN container, padding in the first data stream needs to be removed first. In this embodiment, the first padding in the first 257b data stream is first identified according to a preset 257b padding pattern, then the first padding is deleted, and finally the second 257b data stream is obtained based on the first 257b data stream after the first padding is removed.

[0070] Step S120: Lock the first overhead in the second 257b data stream, wherein the first overhead includes a 257b FlexE overhead code block, which is obtained by converting four 66b code blocks. The four 66b code blocks include one O code block, and the O code block is the first 66b code block of the FlexE overhead frame, located at a fixed position in the four 66b code blocks.

[0071] After deleting the first padding in the first 257b data stream to obtain the second 257b data stream, it is necessary to identify the position of the first overhead in the second 257b data stream so that unequipped FlexE instances can be identified and removed subsequently based on the position of the first overhead. In this embodiment, since the position of the O code block in the four 66b code blocks transcoded into the 257b FlexE overhead code block is fixed, the 257b FlexE overhead also has a fixed pattern. In specific implementation, the overhead position in the second 257b data stream can be identified according to the preset 257b FlexE overhead pattern.

[0072] Step S130: Based on the first overhead, lock and delete the unequipped FlexE instance from the second 257b data stream to obtain the third 257b data stream.

[0073] After determining the location of the overhead in the second 257b data stream (i.e., determining the first overhead), the location of the unequipped FlexE instance can be determined from the first overhead. Based on the location of the unequipped FlexE instance in the first overhead, the location of the unequipped FlexE instance in the first payload of the second 257b data stream can be determined, and then the unequipped FlexE instances in both the first overhead and the first payload can be deleted. It should be noted that the locations of the unequipped FlexE instances in the overhead and payload generally have a corresponding relationship.

[0074] As described above, the format of a 257b unequipped FlexE instance is related to the position of the 66b FlexE overhead O code block in the four 66b bits of the 257b encoding. The position of the O code block in the four 66b bits of the 257b encoding is fixed. Therefore, a fixed pattern of 257b unequipped FlexE instance can be obtained based on the fixed position of the O code block. In specific implementation, the fixed pattern of 257b unequipped FlexE instance can be used to identify the unequipped FlexE instance in the first overhead.

[0075] In this embodiment, the locking and deletion of padding, the locking of overhead, and the determination and deletion of unequipped FlexE instances are all performed at the 257b level. This solves the problem of high hardware implementation complexity of traditional 66b level processing under high-speed interfaces and can better support the development of higher-speed Ethernet technologies.

[0076] In one possible implementation, locking and deleting the first padding in the first 257b data stream to obtain the second 257b data stream includes the following steps S211-S212.

[0077] Step S211: Search for 257b padding blocks in the first 257b data stream according to the padding pattern. When a 257b padding block is found and then found again in a preset first cycle, enter the padding lock state. The padding pattern can be consistent with any of the 257b padding formats mentioned above, such as the 257b padding format shown in Figure 6.

[0078] Step S212: After entering the padding lock state, delete the first padding in the first 257b data stream to obtain the second 257b data stream. The first padding includes R1 consecutive 257b padding code blocks, where R1 is an integer greater than or equal to 1.

[0079] For example, a search can be conducted in the first 257b data stream for 257b padding blocks that match the padding pattern. Specifically, each 257b block in the first 257b data stream can be matched with the padding pattern. If a match is found, the currently matched 257b block is considered a 257b padding block.

[0080] If R1 consecutive 257b padding blocks are identified in the first 257b data stream, then it is considered that a first padding block has been identified.

[0081] For example, when a first padding occurs every A1 257b code blocks in the first 257b data stream, the system enters a padding-locked state, where A1 is an integer greater than or equal to 1. That is, if a first padding is detected in the first 257b data stream, and then detected again after an A1 257b code block interval, the system enters a padding-locked state. In the padding-locked state, the system checks for the first padding every A1 257b code blocks, using the most recently detected first padding as the boundary. If no first padding is detected once or multiple times consecutively, the system enters a padding-unlocked state.

[0082] For example, after entering the padding lock state, the first padding that was identified is deleted. Here, the first 257b data stream after the first padding is deleted is referred to as the second 257b data stream.

[0083] In one possible implementation, locking the first overhead in the second 257b data stream may include the following steps S311-S312.

[0084] Step S311: Search for 257b FlexE overhead code blocks in the second 257b data stream according to the preset FlexE overhead pattern. When a 257b FlexE overhead code block is found and then found again in a preset second cycle, enter the overhead locking state. The FlexE overhead pattern can be consistent with any of the 257b FlexE overhead code block formats mentioned above, such as any of the 257b FlexE overhead code block formats shown in Figures 2a, 2b-1, 2b-2, 2c-1, 2c-2, 2d-1, or 2d-2.

[0085] Step S312: After entering the overhead locking state, lock the first overhead, wherein the first overhead includes K1 consecutive 257b FlexE overhead code blocks, where K1 is an integer greater than or equal to 1.

[0086] For example, each 257b code block in the second 257b data stream can be matched with the FlexE overhead pattern. If a match is found, the currently matched 257b code block is confirmed as a 257b FlexE overhead code block. If K1 consecutive 257b FlexE overhead code blocks are identified in the second 257b data stream, it is considered that a first overhead has been identified.

[0087] In one possible implementation, when a first overhead appears every A2 257b code blocks in the second 257b data stream, the system enters an overhead-locked state, where A2 is an integer greater than or equal to 1. That is, if a first overhead is identified in the second 257b data stream, and then again after an A2 257b code block interval, the system enters an overhead-locked state. In the overhead-locked state, the system identifies the first overhead every A2 257b code blocks, using the most recently identified first overhead as a boundary. If no first overhead is identified once or multiple times consecutively, the system enters an overhead-unlocked state.

[0088] For example, in the overhead-locked state, the position of the first overhead in the second 257b data stream can be determined based on the identified first overhead, and the 257b unequipped FlexE instance deletion process will be performed based on the position of the first overhead.

[0089] In one possible implementation, based on the first overhead, the Unequipped FlexE instance is identified and removed from the second 257b data stream to obtain the third 257b data stream, including the following steps S411-S413.

[0090] Step S411: Based on the Unequipped FlexE instance pattern, search for Unequipped FlexE instances in the first overhead.

[0091] Specifically, each 257b code block in the first overhead can be matched with the Unequipped FlexE instance pattern. If a match is found, the currently matched 257b code block is considered an unequipped FlexE instance.

[0092] The pattern of an unequipped FlexE instance can be consistent with any of the 257b unequipped FlexE instances described above, such as any of the 257b unequipped FlexE instance formats shown in Figures 3a, 3b, 3c, or 3d.

[0093] Step S412: Based on the unequipped FlexE instances in the first overhead, determine the unequipped FlexE instances in the first payload of the second 257b data stream. Specifically, for the second 257b data stream, both its overhead (first overhead) and payload (first payload) contain unequipped FlexE instances. Generally, there is a correspondence between the positions of unequipped FlexE instances in the overhead and payload. Therefore, the positions of the unequipped FlexE instances in the first overhead can be determined first, and then the positions of the unequipped FlexE instances in the first payload can be determined according to the correspondence. In this way, the positions of all unequipped FlexE instances in the second 257b data stream can be determined.

[0094] Step S413: Remove the Unequipped FlexE instance from the first overhead and first payload of the second 257b data stream.

[0095] Specifically, after determining the location of all unequipped FlexE instances in the second 257b data stream, all unequipped FlexE instances in the first overhead and first payload of the second 257b data stream can be deleted based on their location.

[0096] For example, the first overhead includes Xi unequipped FlexE instances. The Xi unequipped FlexE instances are located at the end of the first overhead, that is, the last Xi 257b code blocks in the first overhead are unequipped FlexE instances. Xi is an integer greater than 0 and less than K2, and K2 represents the number of 257b FlexE overhead code blocks included in the first overhead.

[0097] In this embodiment of the application, based on the first overhead, determining and deleting Unequipped FlexE instances from the second 257b data stream to obtain a third 257b data stream includes: searching for Unequipped FlexE instances in the first overhead according to the Unequipped FlexE instance pattern; determining the number Xi of Unequipped FlexE instances in the first overhead based on the searched Unequipped FlexE instances; and deleting the Unequipped FlexE instances from the second 257b data stream if the number Xi is consistent with the configured number of Unequipped FlexE instances, thereby obtaining a third 257b data stream.

[0098] For example, if the number of unequipped FlexE instances identified in the first overhead is Xi, Xi is compared with the number of unequipped FlexE instances X pre-issued by the system. If they match, the process of deleting the unequipped FlexE instances from the first overhead and first payload of the second 257b data stream is executed. In this embodiment, the second 257b data stream after deleting the unequipped FlexE instances is referred to as the third 257b data stream.

[0099] For example, after obtaining the third 257b data stream, the method of this application embodiment further includes: adding a third padding after the third overhead in the third 257b data stream to obtain a seventh 257b data stream, wherein the third overhead is obtained after deleting the Unequipped FlexE instance from the first overhead.

[0100] Here, the overhead in the third 257b data stream is called the third overhead. A third padding is added after the third overhead to adjust the rate of the 257b data stream. The third 257b data stream after adding the third padding is called the seventh 257b data stream.

[0101] For example, the third padding includes 19*2*(K1-Xi) 257b padding code blocks, where K2 represents the number of 257b FlexE overhead code blocks included in the first overhead, and Xi is an integer greater than 0 and less than K2. It should be noted that the padding code blocks in the third padding can adopt any of the 257b padding formats mentioned above, such as the 257b padding format shown in Figure 6.

[0102] For example, a 257b padding code block can be formed by transcoding four 66b error control code blocks.

[0103] For example, a 257b filled code block can be obtained by converting two P1 code blocks and two P2 code blocks, where the P1 code block is a 66b O code block and the P2 code block is a 66b E code block. For example, a combination of four 66b code blocks converted into a 257b filled code block can be P1P1P2P2, P1P2P1P2, etc.

[0104] For example, the method in this application embodiment further includes: interleaving (2*p-Zi) seventh 257b data streams in units of 257b, and mapping the interleaved data streams to an OTN container; wherein, p is the number of 800G PHYs, Zi is the number of Unequipped streams in p 800G PHYs, p is greater than or equal to 1, Zi is greater than or equal to 0, and Unequipped streams indicate that all FlexE instances contained in the stream are Unequipped FlexE instances.

[0105] It should be noted that one 800G PHY contains two 400G streams, and each stream contains four FlexE instances.

[0106] In one possible implementation, the data stream processing method of this application embodiment includes the following steps S221-S224.

[0107] Step S221: Deinterleave the first 257b data stream to obtain M1 fourth 257b data streams.

[0108] M can be a multiple of 4, such as 4 or 8.

[0109] Step S222: For each fourth 257b data stream, search for 257b padding blocks in the fourth 257b data stream according to the padding pattern. When a 257b padding block is found and is found again in a preset fourth cycle, enter the padding locking state. After entering the padding locking state, delete the second padding to obtain M1 fifth 257b data streams. The second padding includes R2 consecutive 257b padding blocks, where R2 is an integer greater than or equal to 1.

[0110] For example, the first 257b data stream is a 400G 257b data stream. Deinterleaving this 400G 257b data stream yields four 100G 257b data streams, each of which is the fourth 257b data stream. A preset padding pattern is used to identify padding in the 100G 257b data stream. If R2 consecutive 257b padding blocks are identified in the 100G 257b data stream, a second padding is considered identified. When a second padding appears every A1 257b blocks in the fourth 257b data stream, a padding lock state is entered, where A1 is an integer greater than or equal to 1. For the 100G 257b data stream obtained through deinterleaving, if the first second padding is identified in the 100G 257b data stream, and after A1 257b code blocks, the second second padding is identified, then the stream enters a padding-locked state. If, using the most recently identified second padding as the boundary, no second padding is identified after A1 257b code blocks, then the stream enters a padding-unlocked state. For the 100G 257b data stream obtained through deinterleaving, in the padding-locked state, the second padding in the 100G 257b data stream is deleted. Here, the 257b data stream after deleting the second padding is referred to as the fifth 257b data stream.

[0111] Step S223: Lock the second overhead in the fifth 257b data stream of M1, wherein the second overhead includes a 257b FlexE overhead code block, which is obtained by converting four 66b code blocks. The four 66b code blocks include one O code block, and the O code block is the first 66b code block of the FlexE overhead frame, located at a fixed position among the four 66b code blocks.

[0112] Specifically, for each fifth 257b data stream, a 257b FlexE overhead code block is searched in the fifth 257b data stream according to the FlexE overhead pattern. When a 257b FlexE overhead code block is found and is found again in a preset third cycle, the overhead is locked. After entering the overhead locking state, the second overhead is locked. The second overhead includes K2 257b FlexE overhead code blocks, where K2 is an integer greater than or equal to 1.

[0113] Step S224: Based on the second overhead of locking, identify and delete the Unequipped FlexE instance from the M1 fifth 257b data stream to obtain the M2 sixth 257b data stream. M2 is less than or equal to M1.

[0114] In one possible implementation, for each of the fifth 257b data streams, an Unequipped FlexE instance is searched in the second overhead according to the Unequipped FlexE instance pattern, and the Unequipped FlexE instance in the fifth 257b data stream is deleted based on the searched Unequipped FlexE instance to obtain the sixth 257b data stream.

[0115] In one possible implementation, for each of the fifth 257b data streams, according to the Unequipped FlexE instance pattern, an Unequipped FlexE instance is searched in the second overhead. Based on the searched Unequipped FlexE instances, the number Yi of the Unequipped FlexE instances in the first overhead is determined. If the number Yi matches the configured number Y of Unequipped FlexE instances, the Unequipped FlexE instances in the fifth 257b data stream are deleted to obtain the sixth 257b data stream.

[0116] For example, after obtaining M2 sixth 257b data streams, the method of this application embodiment further includes: adding a fourth padding after the fourth overhead in the M2 sixth 257b data streams to obtain M2 eighth 257b data streams, wherein the fourth padding includes 19*2 257b padding code blocks; interleaving M1 eighth 257b data streams to obtain a ninth 257b data stream.

[0117] The method in this application embodiment further includes: interleaving (8*p-Yi) eighth 257b data streams in units of 257b to obtain a ninth 257b data stream, and mapping the ninth 257b data stream to an OTN container; where p is the number of 800G PHYs, Yi is the number of Unequipped FlexE instances contained in p 800G PHYs, p is greater than or equal to 1, and Yi is greater than or equal to 0.

[0118] In one possible implementation, the data stream processing method of this application embodiment includes the following steps S321-S327.

[0119] Step S321: Lock and delete the first padding in the first 257b data stream to obtain the second 257b data stream.

[0120] Step S322: Deinterleave the second 257b data stream to obtain M3 tenth 257b data streams.

[0121] M3 is a multiple of 4, such as 4 or 8.

[0122] Step S323: For each tenth 257b data stream, search for a 257b FlexE overhead code block in the tenth 257b data stream according to the preset FlexE overhead pattern. When a 257b FlexE overhead code block is found and is found again in the preset fifth cycle, enter the overhead locking state. After entering the overhead locking state, lock the fifth overhead of the tenth 257b data stream.

[0123] Step S324: Based on the fifth overhead of locking, identify and delete the Unequipped FlexE instance from M3 data streams of the eleventh 257b, to obtain M4 data streams of the eleventh 257b; wherein M4 is less than or equal to M3.

[0124] Step S325: Add a fifth padding after the sixth overhead in the eleventh 257b data stream of M4 to obtain the twelfth 257b data stream of M4. The sixth overhead is obtained by deleting the Unequipped FlexE instance of the fifth overhead. The fifth padding includes 19*2 257b padding code blocks.

[0125] Step S326: Interleave (8*p-Yi) twelfth 257b data streams in units of 257b to obtain the thirteenth 257b data stream; where p is greater than or equal to 1 and Yi is greater than or equal to 0.

[0126] Step S327: Map the data stream of the thirteenth 257b to the OTN container.

[0127] For example, interleaving multiple 257b data streams can be done as follows: Determine the order relationship between the 257b data streams based on their overhead; based on this order relationship, interleave the overhead corresponding to each 257b data stream, interleave the padding corresponding to each 257b data stream, and interleave the payload corresponding to each 257b data stream. This yields a serial 257b data stream, which can then be mapped into an OTN container.

[0128] Please refer to Figure 8, which is a flowchart of a data stream processing method provided in an embodiment of this application. To increase the transmission distance of FlexE, the transmission distance is extended by carrying FlexE on OTN. One transmission mode is the awareness model, where unequipped FlexE instances are deleted at the OTN entry point, and the remaining equipped instances are processed according to a certain process and then carried in the OTN container. When 800G FlexE is mapped to OTN using the awareness method, assuming a FlexE group contains p 800G PHYs, the method shown in Figure 8 can be used to map the 257b data stream output by the 800G PHY to the OTN container. As shown in Figure 8, the method includes:

[0129] (1) Obtain 257b data streams from p (p≥1) 800G Flexible Ethernet physical ports (PHY). These 257b data streams are descrambled data streams. Two parallel 400G 257b data streams can be obtained from each 800G Flexible Ethernet physical port. Therefore, there are a total of 2*p 400G 257b data streams. Each 400G 257b data stream is a data stream interleaved by four 100G FlexE Instances.

[0130] (2) For each 257b data stream, 257b padding removal is performed. Specifically, 257b padding is identified using a padding pattern. If a first padding consisting of K1 257b padding blocks is detected every A1 257b code blocks, the system enters a padding lock state. In the padding lock state, the detected 257b padding blocks are removed. In the padding lock state, if no first padding is detected after an interval of A1 257b code blocks once or multiple times, the system enters a padding unlock state. Here, A1 is an integer greater than or equal to 1, and K1 is an integer greater than or equal to 1.

[0131] (3) For each 257b data stream after padding removal, perform 257b OH (overhead) identification. Specifically, use the FlexE overhead pattern to identify 257b FlexE overhead code blocks. If a first overhead consisting of K2 257b FlexE overhead code blocks is detected every A2 257b code blocks, enter the overhead locking state. In the overhead locking state, if no first overhead is detected once or multiple times after an interval of A2 257b code blocks, enter the overhead unlocking state; where A2 is an integer greater than or equal to 1, and K2 is an integer greater than or equal to 1. For example, K2 = 4, A2 = (1023*20+1)*8. In addition, the numbering order of 2*p 257b data streams can be determined based on the first overhead.

[0132] (4) For each 257b data stream, after completing the first overhead location, determine the number Xi of unequipped FlexE instances in the first overhead. Specifically, unequipped FlexE instances can be identified by bits 13-32 of the 257b FlexE overhead code block being 0. Xi unequipped FlexE instances are located at the end of K2 consecutive 257b FlexE overhead code blocks, where 0 ≤ Xi < K2. The number Xi of unequipped FlexE instances in different 257b data streams can be different. After determining the number Xi of unequipped FlexE instances in each 257b data stream, compare this value with the value issued by the network management system. If the comparison results are consistent, determine the unequipped FlexE instances in the first payload of the 257b data stream based on the unequipped FlexE instances in the first overhead. Remove the unequipped FlexE instances in the first overhead and the first payload.

[0133] After removing unequipped FlexE instances, the first overhead becomes the second overhead, and the first payload becomes the second payload. The first overhead consists of K2 257b FlexE overhead code blocks, the second overhead consists of (K2-Xi) 257b FlexE overhead code blocks, the first payload consists of (N-K2) 257b FlexE data code blocks, and the second payload consists of (N-K2)*(1-Xi / K2) 257b FlexE data code blocks.

[0134] The location of the FlexE segment management channel overhead is determined based on the second overhead. The segment management channel overhead is located in one or two consecutive (K2-Xi) 257b blocks at a fixed interval from the second overhead. After extracting the overhead of the FlexE segment management channel, the content of the segment management channel overhead is set to the default value, which can be all 0.

[0135] (5) Insert a second padding after each second overhead. The second padding consists of 19*2*(K2-Xi) 257b padding code blocks, which are obtained by transcoding 4 66b Ethernet error control code blocks.

[0136] (6) The 2*p 257b data streams after the 257b padding are interleaved according to the order relationship determined in step (3) as follows: the 2*p second overheads (i.e. (K2-Xi) 257b overhead code blocks) are interleaved together, the 2*p second paddings (i.e. 19*2*(K2-Xi) 257b) are interleaved together, and the 2*p second payloads (i.e. (N-K2)*(1-Xi / K2) 257b) are interleaved together to obtain a serial data stream.

[0137] (7) Map the serial data stream into the OTN container.

[0138] The format of the 257b data stream can be shown in Figure 11 during the processes of removing 257b padding, removing 257b unequipped FlexE instances, and filling in 257b padding.

[0139] Please refer to Figure 9, which is a flowchart of another data stream processing method provided in an embodiment of this application. When mapping 800G FlexE to OTN in a perceptual manner, assuming that a FlexE group contains p 800G PHYs, the method shown in Figure 9 can be used to map the 257b data stream output by the 800G PHY to the OTN container. As shown in Figure 9, the method includes:

[0140] (1) Obtain 257b data streams from p (p≥1) 800G Flexible Ethernet physical ports (PHY). These 257b data streams are descrambled data streams. Two parallel 400G 257b data streams can be obtained from each 800G Flexible Ethernet physical port. Therefore, there are a total of 2*p 400G 257b data streams. Each 400G 257b data stream is a data stream interleaved by four 100G FlexE Instances.

[0141] (2) For each 257b data stream, 257b padding removal is performed. Specifically, 257b padding is identified using a padding pattern. If a first padding consisting of K1 257b padding blocks is detected every A1 257b code blocks, the system enters a padding lock state. In the padding lock state, the detected 257b padding blocks are removed. In the padding lock state, if no first padding is detected after an interval of A1 257b code blocks once or multiple times, the system enters a padding unlock state. Here, A1 is an integer greater than or equal to 1, and K1 is an integer greater than or equal to 1.

[0142] (3) Perform 257b deinterleaving on each 257b data stream after removing padding to obtain 8*p 257b FlexE data streams.

[0143] Alternatively, the 257b data stream can be deinterleaved first, and then padding and removal can be performed.

[0144] (4) Perform 257b OH (overhead) identification on each deinterleaved 257b FlexE data stream. Specifically, use the FlexE overhead pattern to identify 257b FlexE overhead code blocks. If a first overhead consisting of K2 257b FlexE overhead code blocks is detected every A2 257b code blocks, enter the overhead locking state. In the overhead locking state, if no first overhead is detected once or multiple times after an interval of A2 257b code blocks, enter the overhead unlocking state. Here, A2 is an integer greater than or equal to 1, and K2 is an integer greater than or equal to 1. For example, A2 = (1023*20+1)*2. In addition, the numbering order of 8*p 257b data streams can be determined based on the first overhead.

[0145] (5) For each 257b data stream, after completing the first overhead location, determine the number Xi of unequipped FlexE instances in the first overhead. Specifically, unequipped FlexE instances can be identified by bits 13-32 of the 257b FlexE overhead code block being 0. Xi unequipped FlexE instances are located at the end of K2 consecutive 257b FlexE overhead code blocks, where 0 ≤ Xi < K2. The number Xi of unequipped FlexE instances in different 257b data streams can be different. After determining the number Xi of unequipped FlexE instances in each 257b data stream, compare this value with the value issued by the network management system. If the comparison results are consistent, determine the unequipped FlexE instances in the first payload of the 257b data stream based on the unequipped FlexE instances in the first overhead. Remove the unequipped FlexE instances in the first overhead and the first payload.

[0146] After removing unequipped FlexE instances, the first overhead becomes the second overhead, and the first payload becomes the second payload. The first overhead consists of K2 257b FlexE overhead code blocks, the second overhead consists of (K2-Xi) 257b FlexE overhead code blocks, the first payload consists of (N-K2) 257b FlexE data code blocks, and the second payload consists of (N-K2)*(1-Xi / K2) 257b FlexE data code blocks.

[0147] (6) Insert a second padding after each second overhead. The second padding consists of 19*2*(K2-Xi) 257b padding code blocks, which are obtained by transcoding 4 66b Ethernet error control code blocks.

[0148] (7) Interleave the 2*p 257b data streams after inserting 257b padding according to the order relationship determined in step (4) in the following manner: interleave the 2*p second overhead (i.e. (K2-Xi) 257b overhead code blocks) together, interleave the 2*p second padding (i.e. 19*2*(K2-Xi) 257b) together, and interleave the 2*p second payload (i.e. (N-K2)*(1-Xi / K2) 257b) together to obtain a serial data stream.

[0149] (8) Map the serial data stream into the OTN container.

[0150] Please refer to Figure 10, which is a flowchart of another data stream processing method provided in an embodiment of this application. When mapping 800G FlexE to OTN in a perceptual manner, assuming that a FlexE group contains p 800G PHYs, the method shown in Figure 10 can be used to map the 257b data stream output by the 800G PHY to the OTN container. As shown in Figure 9, the method includes:

[0151] (1) Obtain 257b data streams from p (p≥1) 800G Flexible Ethernet physical ports (PHY). These 257b data streams are descrambled data streams. Two parallel 400G 257b data streams can be obtained from each 800G Flexible Ethernet physical port. Therefore, there are a total of 2*p 400G 257b data streams. Each 400G 257b data stream is a data stream interleaved by four 100G FlexE Instances.

[0152] (2) Perform 257b deinterleaving on each 257b data stream to obtain 8*p 257b FlexE data streams.

[0153] (3) Perform 257b padding removal on each 257b FlexE data stream obtained from deinterleaving. Specifically, 257b padding is identified using a padding pattern. If a first padding consisting of K1 257b padding blocks is detected every A1 257b code blocks, the system enters a padding-locked state. In the padding-locked state, the detected 257b padding blocks are removed. In the padding-locked state, if no first padding is detected after an interval of A1 257b code blocks once or multiple times, the system enters a padding-unlocked state. Here, A1 is an integer greater than or equal to 1, and K1 is an integer greater than or equal to 1.

[0154] (4) Perform 257b OH (overhead) identification on each 257b data stream after padding removal. Specifically, use the FlexE overhead pattern to identify 257b FlexE overhead code blocks. If a first overhead consisting of K2 257b FlexE overhead code blocks is detected every A2 257b code blocks, enter the overhead locking state. In the overhead locking state, if no first overhead is detected after one or more consecutive intervals of A2 257b code blocks, enter the overhead unlocking state. Here, A2 is an integer greater than or equal to 1, and K2 is an integer greater than or equal to 1. For example, A2 = (1023*20+1)*2. In addition, the numbering order of 8*p 257b data streams can be determined based on the first overhead.

[0155] (5) For each 257b data stream, after completing the first overhead location, determine the number Xi of unequipped FlexE instances in the first overhead. Specifically, unequipped FlexE instances can be identified by bits 13-32 of the 257b FlexE overhead code block being 0. Xi unequipped FlexE instances are located at the end of K2 consecutive 257b FlexE overhead code blocks, where 0 ≤ Xi < K2. The number Xi of unequipped FlexE instances in different 257b data streams can be different. After determining the number Xi of unequipped FlexE instances in each 257b data stream, compare this value with the value issued by the network management system. If the comparison results are consistent, determine the unequipped FlexE instances in the first payload of the 257b data stream based on the unequipped FlexE instances in the first overhead. Remove the unequipped FlexE instances in the first overhead and the first payload.

[0156] After removing unequipped FlexE instances, the first overhead becomes the second overhead, and the first payload becomes the second payload. The first overhead consists of K2 257b FlexE overhead code blocks, the second overhead consists of (K2-Xi) 257b FlexE overhead code blocks, the first payload consists of (N-K2) 257b FlexE data code blocks, and the second payload consists of (N-K2)*(1-Xi / K2) 257b FlexE data code blocks.

[0157] (6) Insert a second padding after each second overhead. The second padding consists of 19*2*(K2-Xi) 257b padding code blocks, which are obtained by transcoding 4 66b Ethernet error control code blocks.

[0158] (7) Interleave the 2*p 257b data streams after inserting 257b padding according to the order relationship determined in step (4) in the following manner: interleave the 2*p second overhead (i.e. (K2-Xi) 257b overhead code blocks) together, interleave the 2*p second padding (i.e. 19*2*(K2-Xi) 257b) together, and interleave the 2*p second payload (i.e. (N-K2)*(1-Xi / K2) 257b) together to obtain a serial data stream.

[0159] (8) Map the serial data stream into the OTN container.

[0160] This application also provides an electronic device, as shown in FIG12. The electronic device 1400 includes: one or more processors 1410; and a memory 1420 storing one or more programs. When the one or more programs are executed by the one or more processors 1410, the one or more processors 1410 implement the data stream processing method provided in any embodiment of this application.

[0161] Memory 1420, as a non-transitory network system, can be used to store non-transitory software programs and non-transitory computer-executable programs. Furthermore, memory 1420 may include high-speed random access memory and may also include non-transitory memory, such as at least one disk storage device, flash memory device, or other non-transitory solid-state storage device. In some embodiments, memory 1420 may optionally include remotely located memories 1420 relative to processor 1410, which can be connected to processor 1410 via a network. Examples of such networks include, but are not limited to, the Internet, intranets, local area networks, mobile communication networks, and combinations thereof.

[0162] The memory 1420 can be implemented as a read-only memory (ROM), static storage device, dynamic storage device, or random access memory (RAM). The memory 1420 can store the operating system and other applications. When the technical solutions provided in the embodiments of this specification are implemented through software or firmware, the relevant program code is stored in the memory 1420 and is called and executed by the processor 1410.

[0163] The processor 1410 can be implemented using a general-purpose CPU (Central Processing Unit), microprocessor, application-specific integrated circuit (ASIC), or one or more integrated circuits, and is used to execute relevant programs to implement the technical solutions provided in the embodiments of this application.

[0164] In some embodiments, the electronic device further includes: an input / output interface for inputting and outputting information; a communication interface for communication and interaction between the device and other devices, which can be implemented via wired means (e.g., USB, Ethernet cable, etc.) or wireless means (e.g., mobile network, WIFI, Bluetooth, etc.); and a bus for transmitting information between various components of the device (e.g., processor 1410, memory 1420, input / output interface, and communication interface); wherein the processor 1410, memory 1420, input / output interface, and communication interface can be interconnected within the device via the bus.

[0165] One embodiment of this application also provides a computer-readable storage medium storing computer-executable instructions for executing the data stream processing method provided in any embodiment of this application.

[0166] An embodiment of this application also provides a computer program product, including a computer program or computer instructions stored in a computer-readable storage medium. A processor of a computer device reads the computer program or computer instructions from the computer-readable storage medium and executes the computer program or computer instructions, causing the computer device to perform a data stream processing method that implements any embodiment of this application.

[0167] The system architecture and application scenarios described in this application are intended to more clearly illustrate the technical solutions of this application and do not constitute a limitation on the technical solutions provided in this application. Those skilled in the art will understand that as system architectures evolve and new application scenarios emerge, the technical solutions provided in this application are also applicable to similar technical problems.

[0168] Those skilled in the art will understand that all or part of the processes in the methods of the above embodiments can be implemented by a computer program instructing related hardware. The computer program can be stored in a non-volatile computer-readable storage medium. When executed, the computer program can include the processes of the embodiments of the above methods. Any references to memory, storage, databases, or other media used in the embodiments provided in this application can include non-volatile and / or volatile memory. Non-volatile memory can include read-only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), or flash memory. Volatile memory can include random access memory (RAM) or external cache memory. By way of illustration and not limitation, RAM is available in various forms, such as static RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), dual data rate SDRAM (DDRSDRAM), enhanced SDRAM (ESDRAM), synchronous link DRAM (SLDRAM), RAMbus direct RAM (RDRAM), direct memory bus dynamic RAM (DRDRAM), and RAMbus dynamic RAM (RDRAM), etc.

[0169] It will be understood by those skilled in the art that all or some of the steps and systems in the methods disclosed above can be implemented as software, firmware, hardware, and suitable combinations thereof. Some or all of the physical components can be implemented as software executed by a processor, such as a central processing unit, digital signal processor, or microprocessor, or as hardware, or as an integrated circuit, such as an application-specific integrated circuit. Such software can be distributed on a computer-readable medium, which can include computer storage media (or non-transitory media) and communication media (or transient media). As is known to those skilled in the art, the term computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storing information (such as computer-readable instructions, data structures, program modules, or other data). Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technologies, CD-ROM, digital versatile disc (DVD) or other optical disc storage, magnetic cartridges, magnetic tape, disk storage or other magnetic storage devices, or any other medium that can be used to store desired information and is accessible to a computer. Furthermore, as is known to those skilled in the art, communication media typically contain computer-readable instructions, data structures, program modules, or other data in modulated data signals such as carrier waves or other transmission mechanisms, and may include any information delivery medium.

[0170] The above description, with reference to the accompanying drawings, illustrates some embodiments of this application, but does not limit the scope of this application. Any modifications, equivalent substitutions, and improvements made by those skilled in the art without departing from the scope and spirit of this application shall be within the scope of this application.

Claims

1. A data stream processing method, comprising: The four 66b code blocks in the 66b Flexible Ethernet FlexE data stream are transcoded into a 257b code block to obtain a 257b data stream; The 66b FlexE data stream includes 66b FlexE overhead frames. The position of the first 66b code block of the 66b FlexE overhead frame is fixed among the four 66b code blocks that are transcoded into 257b code blocks. The first 66b code block is a 0 code block.

2. The method according to claim 1, characterized in that, The 257b code block obtained by transcoding the first 66b code block of the 66b FlexE overhead frame is the 257b overhead code block; for the Equipped FlexE instance, the remaining three code blocks of the four 66b code blocks transcoded into the 257b overhead code block, excluding the O code block, include any combination of one or more of the following code blocks: D code block; idle code block; control code block.

3. The method according to claim 1, wherein, The method further includes at least one of the following: Send location indication information, wherein the location indication information is used to indicate the position of the O code block among the four 66b code blocks; Alternatively, set the data bus width to a multiple of 4*66b.

4. The method according to claim 1, wherein, The 257b code block obtained by transcoding the first 66b code block of the 66b FlexE overhead frame is the 257b overhead code block; for an Unequipped FlexE instance, the remaining three code blocks (excluding the O code block) of the four 66b code blocks transcoded based on the 257b overhead code block are the three E code blocks.

5. A data stream processing method, comprising: Lock and remove the first padding in the first 257b data stream to obtain the second 257b data stream; Lock the first overhead in the second 257b data stream, wherein the first overhead includes a 257b FlexE overhead code block, the 257b FlexE overhead code block is obtained by converting four 66b code blocks, the four 66b code blocks include one O code block, and the O code block is the first 66b code block of the FlexE overhead frame, located at a fixed position among the four 66b code blocks; Based on the first overhead, the Unequipped FlexE instance is identified and removed from the second 257b data stream to obtain the third 257b data stream.

6. The method according to claim 5, wherein, The process of locking and deleting the first padding in the first 257b data stream to obtain the second 257b data stream includes: According to the filling pattern, search for 257b filling code blocks in the first 257b data stream. When a 257b filling code block is found and the 257b filling code block is found again in a preset first cycle, enter the filling lock state. After entering the padding lock state, the first padding in the first 257b data stream is deleted to obtain the second 257b data stream, wherein the first padding includes R1 257b padding code blocks, and R1 is an integer greater than or equal to 1.

7. The method according to claim 5, further comprising: Deinterleaving the first 257b data stream yields M1 fourth 257b data streams; For each of the fourth 257b data streams, a 257b padding code block is searched in the fourth 257b data stream according to the padding pattern. When a 257b padding code block is found and is found again in a preset fourth cycle, a padding lock state is entered. After entering the padding lock state, the second padding is deleted to obtain M1 fifth 257b data streams. The second padding includes R2 consecutive 257b padding code blocks, where R2 is an integer greater than or equal to 1. Lock the second overhead in the fifth 257b data stream M1, wherein the second overhead includes a 257b FlexE overhead code block, the 257b FlexE overhead code block is obtained by converting four 66b code blocks, the four 66b code blocks include one O code block, and the O code block is the first 66b code block of the FlexE overhead frame, located at a fixed position among the four 66b code blocks; From the fifth 257b data stream described in M1, identify and delete the Unequipped FlexE instance to obtain the sixth 257b data stream in M2.

8. The method according to claim 6 or 7, wherein, The filling pattern includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st to 4th bits of the 257b code block are 0000; the 5th to 8th bits of the 257b code block are 0xB; the 13th to 32nd bits of the 257b code block are preset values; and the 33rd to 36th bits of the 257b code block are 0x5.

9. The method according to claim 5, wherein, The overhead of locking the first data stream in the second 257b includes: Search for the 257b FlexE overhead code block in the second 257b data stream according to the FlexE overhead pattern. When the 257b FlexE overhead code block is found and is found again in a preset second cycle, the overhead lock state is entered. After entering the overhead locking state, the first overhead is locked, wherein the first overhead includes K1 of the 257b FlexE overhead code blocks, and K1 is an integer greater than or equal to 1.

10. The method according to claim 7, wherein, Locking the second overhead in the fifth 257b data stream of M1 includes: For each of the fifth 257b data streams, a 257b FlexE overhead code block is searched in the fifth 257b data stream according to the FlexE overhead pattern. When a 257b FlexE overhead code block is found and is found again in a preset third cycle, an overhead locking state is entered. After entering the overhead locking state, the second overhead is locked. The second overhead includes K2 of the 257b FlexE overhead code blocks, where K2 is an integer greater than or equal to 1.

11. The method according to claim 9 or 10, wherein, The 0 code block is located at the first position among the four 66b code blocks that are transcoded into a 257b overhead code block, and the FlexE overhead pattern includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st bit of the 257b code block is 0; the 5th to 8th bits of the 257b code block are 0xB; and the 33rd to 36th bits of the 257b code block are 0x5.

12. The method according to claim 5, wherein, Based on the first overhead, unequipped FlexE instances are identified and removed from the second 257b data stream to obtain a third 257b data stream, including: Based on the Unequipped FlexE instance pattern, search for Unequipped FlexE instances in the first overhead, and determine the number Xi of the Unequipped FlexE instances in the first overhead based on the searched Unequipped FlexE instances; If the number Xi is consistent with the number of configured Unequipped FlexE instances, the Unequipped FlexE instances in the second 257b data stream are deleted to obtain the third 257b data stream.

13. The method according to claim 12, wherein, The 0 code block is located at the first position of the four 66b code blocks that are transcoded into a 267b overhead code block. The Unequipped FlexE instance pattern includes at least one of the following: the 0th bit of the 257b code block is 0; the 1st to 4th bits of the 257b code block are 0000; the 5th to 8th bits of the 257b code block are 0xB; the 13th to 32nd bits of the 257b code block are all 0; and the 33rd to 36th bits of the 257b code block are 0x5.

14. The method according to claim 5, wherein, After obtaining the third 257b data stream, the method further includes: A third padding is added after the third overhead in the third 257b data stream to obtain a seventh 257b data stream, wherein the third overhead is obtained by deleting the Unequipped FlexE instance from the first overhead; The (2*p-Zi) seventh 257b data streams are interleaved in units of 257b, and the interleaved data streams are mapped to OTN containers; where p is the number of 800G PHYs, and Zi is the number of Unequipped streams in the p 800G PHYs, and the Unequipped streams indicate that all FlexE instances contained in the stream are Unequipped FlexE instances.

15. The method according to claim 7, characterized in that, After obtaining the M2 sixth 257b data stream, the method further includes: A fourth padding is added after the fourth overhead in the M2 sixth 257b data streams to obtain M2 eighth 257b data streams. The fourth padding includes 19*2 257b padding code blocks. The (8*p-Yi) eighth 257b data streams are interleaved in units of 257b to obtain the ninth 257b data stream; where p is the number of 800G PHYs and Yi is the number of Unequipped FlexE instances contained in p 800G PHYs; Map the ninth 257b data stream to the OTN container.

16. The method of claim 14, wherein, The third padding includes 19*2*(K1-Xi) 257b padding code blocks, where K1 represents the number of 257b FlexE overhead code blocks included in the first overhead, and Xi is the number of unequipped FlexE instances.

17. The method according to claim 15 or 16, wherein, The 257b padding code block is formed by transcoding four 66b error control code blocks.

18. An electronic device comprising: One or more processors; A memory having stored one or more programs that, when executed by one or more processors, cause the one or more processors to implement: the data stream processing method as described in any one of claims 1 to 4, or the data stream processing method as described in any one of claims 5 to 17.

19. A computer-readable storage medium having a computer program stored thereon, the program being executed by a processor to implement: the data stream processing method as described in any one of claims 1 to 4, or the data stream processing method as described in any one of claims 5 to 17.

20. A computer program product comprising a computer program that, when executed by a processor, implements: the data stream processing method as described in any one of claims 1 to 4, or the data stream processing method as described in any one of claims 5 to 17.

Citation Information

Patent Citations

  • Data transmission method, communication equipment and storage medium

    CN111884753A

  • Data processing method, device, equipment, system and computer readable storage medium

    CN116743677A

  • FlexE frame format using 256b / 257b block encoding

    US20200358722A1