Introduction.

La convergence des réseaux de télécommutions avec le transfert de données, souvent traditionnellement orientés réseaux informatiques, vont permettre l'émergence de nouveaux protocoles de transmission (NextGen). Les liens éxistants SDH et SONET devraient fédérer cette évolution là où le concept ATM, de par sa trop grande complexité, à échoué. La concaténation virtuelle permet une optimisation de la bande passante et peut servir de support au transport de données, voie, Ethernet, vidéo...

Exemple de signaux client & caractéristiques :
Signal Line BW User BW Norme VCG PTI value
GbE 1.250 1.000 802.3 VC-4-7v 0000 0110
DVB-ASI 0.270 0.200 EN 50083-9 VC-4-2v 0000 1001
ESCON 0.200 0.160 X3.296 VC-3-4v 0000 0101
FICON as FC as FC X3.230 as FC 0000 0100
2GFC 2.125 1.700 X3.230 VC-4-12v 0000 0011

GFP-F est utilisé pour l'encapsulation de protocoles orientés trame/paquets comme ethernet ou IP ; GFP-T est quant à lui prévu pour des sources utilisant le code en ligne 8B/10B (GbE, DVB-ASI...). L'inconvénient majeur du protocole GFP-F réside dans la latence ; il est nécessiite de mémoriser une trame entière en émission avant de déterminer la valeur d'en-tête PLI. Une variente du protocole GFP-F fut dévelopée afin de pallier à ce problème de latence : GFP-T.

Principe du protocole GFP-Transparent (G7041).

Le transcodage 8B/10B est un protocole de code en ligne qui converti un mot de 8 bits, donc 28 combinaisons, en un mot de 10 bits. Certaines de ces combinaisons ne servent pas car relevant d'une disparité trop importante entre le nombre de 0 et de 1 ; d'autres codes permettent de définir des valeurs de controle. L'objectif d'un tel encodage est multiple : Le mapper GFP-T reçoit des caractères issuent d'un décodeur 8B/10B afin d'obtenir le mot binaire utile de 8 bits associé à un bit de drapeau. Dans le cas d'une source Giga bit Ethernet, le flux est donc de 9bits à 125 MHz. Le mapper GFP-T réalise en premier lieu la conversion en code 64B/65B, code transportant l'information de 8 caractères 8B/10B cobsécutifs. Un caratère de donnée est mappé directement dans code 64B/65B alors qu'un caratère de contrôle est ré-encodé sur 4 bits plus 4 bits de gestion. Les octets de contrôle sont en début du code 64/65B.

Composition d'un code 64B/65B.

Une suite de 8 octets + 1 bit de drapeau est transcodée en un code 64B/65B ; il apparait aucune perte d'information, juste un ré-encodage. 64 bits constituent des octets de données, 1 bit d'en-tête (lead) précise si le premier octet est un code-K (controle) ou un code-D (donnée).
Flus 8 bits + 1 drapeau :
flag   0   0   1   0   0   0   0   0   ...
char   D1  D2  C1  D3  D4  D5  D6  D7  ...

Code 64B/65B associé :
lead - octet1 - octet2 - octet3 - octet4 - octet5 - octet6 - octet7 - octet8
 1       C1       D1       D2       D3       D4       D5       D6       D7

L'octet de controle C1 est définit comme suit :
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
| Z  | A  | A  | A  | C  | C  | C  | C  |
AAA : adresse de la position du code de contrôle dans le flux incident 8B/10B.
CCCC : Le code de controle transcodé sur 4 bits (voir table ci-dessous).
Plusieurs codes de contrôle peuvent se succéder, le bit Z est à '0' lors du dernier code de contrôle du code. Il faut mémoriser 8 octets du flux incident avant de connaître la structure du code 64B65B. Le bit lead (ou bit directeur) est à '1' si le premier octet du code 64B/65B est un code-K.

Exemple de code 64B/65B.

Les 9 combinaisons code-K/code-D possibles :
flag byte1 byte2 byte3 byte4 byte5 byte6 byte7 byte8 data type
0 D1 D2 D3 D4 D5 D6 D7 D8 all data
1 C1 D1 D2 D3 D4 D5 D6 D7 7 data 1 control
1 C1 C2 D1 D2 D3 D4 D5 D6 6 data 2 control
1 C1 C2 C3 D1 D2 D3 D4 D5 5 data 3 control
1 C1 C2 C3 C4 D1 D2 D3 D4 4 data 4 control
1 C1 C2 C3 C4 C5 D1 D2 D3 3 data 5 control
1 C1 C2 C3 C4 C5 C6 D1 D2 2 data 6 control
1 C1 C2 C3 C4 C5 C6 C7 D1 1 data 7 control
1 C1 C2 C3 C4 C5 C6 C7 C8 all control

Une transmission selon ce format permet d'optimiser la bande passante, le rendement est de 64/65=98% contre 8/10=80%. Par ailleurs, les caractères de contrôle sont conservés, d'ou le nom transparent donné à ce mode GFP : la trame GFP-T conserve l'information d'origine. Quelques inconvénients toutefois :

Structure d'un super bloc.

Pour y remédier une structure super bloc est utilisée. Elle est construite à partir de 8 codes 64B/65B ; les 64 octes de données sont envoyés, puis les 8 drapeaux de contrôle suivit enfin d'un code CRC-16 sur deux octets. Le super bloc ainsi constitué est de 67 octets, ce qui est propice à un traitement sur un bus de données de 8 bits mais beaucoup moins pour des bus de 32 bits. Un CRC-24 par exemple aurait grandement facilité le traitement au détriment d'un rendement légèrement inférieur. Le code 64B/65B est très vulnérable aux erreurs, en particulier si celle ci se produit sur le bit de drapeau : le récepteur interprète mal la donnée et génère une rafale d'erreur. Le code de redondance cyclique permet de détecter 3 bits erronés et en corriger 1. Structure du superbloc GFP-T :
1 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     Octet 1,1
2 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     Octet 1,2
3 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     .........
4 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | ==> Octet 8,7
5 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     Octet 8,8
6 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     F1.....F8
7 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     C1.....C8
8 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 |     C9....C16
La dernier étape consiste à insérer les superblocs dans la trame GFP-F. Exemple d'une trame GFP-F encapsulant des super blocs.
| PLI | cHEC | PTI | tHEC | EXI | eHEC | N superblocs GFP-T | FCS  |
| 16b | 16b  | 16b | 16b  | 16b | 16b  |   (N*67 octets)    | 32b  |

Gestion de flux et applications.

Le conduit (SDH ou SONET) permettant de transporter les trames GFP dispose d'une capacité légèrement supérieure au débit de la source (débit entrant). Le buffer GFP-T se retrouvera donc régulièrement vide ; un caractère de controle spécial est définit : 65B_PAD (padding, bourrage). Ce code de controle permet de maintenir le débit des super blocs constant en absence de données client, le code de contrôle de bourrage 65B_PAD est insérer, puis enlever dans le demapper.

Table des codes de controle :
Nom Val Code 10BRD- Code 10BRD+ Code 65B description
/K28.0/ 1C 0011110100 1100001011 0000 --
/K28.1/ 3C 0011111001 1100000110 0001 --
/K28.2/ 5C 0011110101 1100001010 0010 --
/K28.3/ 7C 0011110011 1100001100 0011 --
/K28.4/ 9C 0011110010 1100001101 0100 --
/K28.5/ BC 0011111010 1100000101 0101 /C/ link configuration
/K28.6/ DC 0011110110 1100001001 0110 --
/K28.7/ FC 0011111000 1100000111 0111 --
/K23.7/ F7 1110101000 0001010111 1000 /R/ carrier extended
/K27.7/ FB 1101101000 0010010111 1001 /S/ start of packet
/K29.7/ FD 1011101000 0100010111 1010 /T/ end of packet
/K30.7/ FE 0111101000 1000010111 1011 /V/ error propagation
10B_ERR 01 URD- URD+ 1100 disparity error
65B_PAD 02 N/A N/A 1101 bourrage/padding
Spare 03 N/A N/A 1110 --
Spare 04 N/A N/A 1111 --

Lorsque le décodeur 8B/10B ethernet analyse un code non valide, la donnée est substituée par un code de contrôle 0x01 qui est propagé par le transcodage 64B/65B, à la réception GFP-T, cette information de contrôle est codée par un caractère 8B/10B non valide. Les codes d'erreurs /K30.7/ correspondent quant à eux à des erreurs amonts du réseau.

Exemple de superbloc GFP-T :
Octet champ Valeur Remarque
1 Data 0x80 1er octet du 1er superbloc
2 Data 0x00 2er octet du 1er superbloc
.. ... ... ...
63 Data 0x00 octet 7 du 8ème superbloc
64 Data 0x00 octet 8 du 8ème superbloc
65 Flags 0x00 drapeau des 8 superbloc
66 CRC(15.8) 0x9A calcul du CRC-16
67 CRC( 7.0) 0xA2 C(n,k)=GFP(536,520)

Le code de protection d'erreurs utilisé est un code CRC C(536, 520) ; un traitement sur bus 32 bits peut être réalisé en effectuant le calcul sur les 64 octets de données sous leur forme 32 bits puis un calcul final sur les 8 bits directeurs donne la valeur de CRC.

Exemple de calcul CRC sur un bus de données de 32 bits :
Cpt_word din_32b crc32 crc8
1 (init) 80000000 xxxx xxxx
2 00000000 367D xxxx
3 00000000 11E2 xxxx
... ... ... ...
16 00000000 68BE xxxx
1 80000000 3761 xxxx
2 00000000 367D 9AA2

L'émission de trames Ethernet en mode GFP-T présente quelques curiosités. Le code /S/ qui précise la fin d'un paquet Ethernet est considéré comme code-D (et non un code-K) et substitue le premier octet de préambule. Lenght précise le nombre d'octet de data : champs client payload, d'une valeur minimale de 46 soit ici une charge utilisateur de 00 à 45. Il faut au minimum 10 séquences idle BC-50. La synchronisation Ethernet est réalisée par la présence du code de pause (comma code xBC) qui doit se trouver trois fois de suite dans le flux de réception en alternance avec un code de donnée : ce peut donc aussi bien être une séquence /I1 /I2 ou /C1/C2. Ces codes ainsi que les mécanismes de synchronisation sont normalisés dans IEEE 802.3 (§36.2.4.8 page 1204/1538)

SFD : Start Frame Delimiter
DA : Destination Adress
SA : Source Adresse
FCS : Field Check Sequence

g(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 g(x) = 100000100110000010001110110110111 = 104C11DB7

Détection & correction d'erreurs.

Le désembrouilleur de la trame GFP est de type auto synchronisé, (ATM transmission convergence layer, auto synchronous scrambler), une erreur qui se présente à l'entrée du désembrouilleur se trouve en sortie sur le signal désembrouillé mais aussi sur l'entrée de la LFSR d'ordre 43. Il en résulte que 43 bits plus loin l'erreur d'origine est dupliquée.
En mode ATM ou GFP, pendant l'en-tête l'embrouilleur est désactivé, la détection et correction d'erreur est effectuée avant désembrouillage, la fonction d'embrouillage n'a donc pas d'incidence sur le CRC. Dans le cas GFP-T ou des cellules OAM de l'ATM, l'analyse et donc la correction des erreurs est réalisée après le désembrouilleur. Ce dernier étant de type autosynchronisé, il en résulte :

Si une erreur intervient avant embrouillage, elle sera dupliquée dans l'embrouilleur mais lors du désembrouillage, seule l'erreur d'origine sera conservée, la seconde étant à nouveau modifiée, nous nous retrouverons avec une erreur simple et le décodeur pourra la corriger facilement. Si une erreur est introduite entre les données embrouillées et celles désembrouillées, donc sur la ligne de transmission, elle sera vue dupliquée 43 bits plus loin lors du décodage : l'erreur simple à l'origine devient une erreur double. (cas classique) Sinon, si l'erreur est introduite après désembrouillage, une erreur simple sera propagée à l'entrée du bloc de correction d'erreurs. (cas très rare à priori impossible) Résumons nous : une erreur sur la ligne de transmission propagera une erreur double, cela correspond au cas le plus probable en pratique : Il faut donc pouvoir analyser et corriger les erreurs doubles espacées de 43 bits. Plus de détails dans le document Codes CRC, Performance d'un CRC et interaction avec un embrouilleur. En cas d'erreur CRC multiples, donc non corrigibles, tous les caractères du super bloc sont remplacés par le code d'erreur 8B (10B_ERR).

Perte de signal client (FCS) et répercution.

Insertion d'une charge ethernet dans la trame GFP : en mode normal les données sont lues dans la fifo et insérées dans les super bloc, en absence de données client, le code de control pading (65B_PAD) est émit. Si le signal client passe en erreur (Loss of client signal/Client signal fail), les superblocs contiennent des données aléatoires qui n'ont pas de signification, le mapper GFP-F substitue le flux de super bloc GFP-T par des trames idle spécifiques qui permettent de propager le signal d'erreur.

   FCS   -------------------------------------+
                                              |
                                              v
 Ethernet                     idle_frame -->+---+    +--------+
             +-----------+                  |Mux|--->|VCG     |----> SDH
   FIFO  --->|Super bloc |-----> GFP-F   -->+---+    |SDH core|      Tx
             |  GFP-T    |       mapper              +--------+
             +-----------+


G806 §8.5.4.2.1 :
Lorsque aCSF_LOS ou aCSF_LCS sont actifs, les trames de gestion client de procédure GFP sont insérées à la place des trames de données client de procédure GFP. Le champ PTI de l'en-tête de type de procédure GFP des trames de gestion client de procédure GFP est mis à "100". L'UPI est mis à "0000 0001" lorsque aCSF_LOS est actif, et il est mis à "0000 0010" lorsque aCSF_LCS est actif. Ces trames de gestion client de procédure GFP n'ont pas de champ d'information de charge utile. Elles sont générées comme défini au § 6.3.3/G.7041/Y.1303.

Intellectual property

Xelic
Biof
Xilinx
Nuvation

Glossaire & liens.

SAN : Storage Area Network
GFP : Generic Framing Procedure
PLI : Payload Length Indicator
PTI : Payload Type Identifier
HEC : Header Error Check
CSF : Client Signal Fail
FC  : Fiber Channel
GbE : Giga bit Ethernet
VoD : video on Demand
DVB : Digital Video Broadcasting

GFP-F GFP Framed
GFP-F is normally used to encapsulate packet/frame-based protocols such as IP/PPP or Ethernet/MAC. The frame is entirely assembled before transmission through the SONET/SDH network.

GFP-T GFP Transparent
GFP-T offers direct transmission of data streams requiring low-latency, such as VoIP, digital video (e.g., DVB-ASI) and SAN (e.g., Fibre Channel) applications. GFP-T is optimized for protocols using 8B/10B encoding.

Steve Gorshe PMC-Sierra
Core IP Xilinx GFP
Xilinx application note
Application dérivée.
GFP Lucent presentation.