# Scalable and Reliable Data Center Networks by Combining Source Routing and Automatic Labelling
## 3 The eTorii DCN
### Auto-Configuration: Automatic Label Assignment Based on GA3  
In order to route traffic (which will be described in the next sections), eTorii needs to assign at least one hierarchical label to each network device or switch. This assignment is only required when the network is deployed the very first time and upon network modifications (addition/deletion/movement of links/switches). Each label represents an Hierarchical Local MACs (HLMACs) address [9], which is used afterwards for masking real physical MAC addresses. An HLMACs contains 6 bytes, as a standard MAC, and each byte represents a position in the hierarchy. For instance, 01:04:07:00:00:00 stands for position 1 for the first level, 4 for the second and 7 for the third; for simplicity, it is expressed as 1.4.7, omitting the zeroes. In this way, addresses become meaningful and are able to convey information about the location of the different hosts and switches in the network, following a source routing approach. In Torii, this assignment was performed leveraging the Rapid Spanning Tree Protocol (RSTP) with some modifications. As such, labelling was relatively slow and required a high number of control messages. Furthermore, RSTP did not allow the synchronization of the HLMAC suffixes, which is explained in the following paragraphs as one of the enhancements provided by eTorii. Therefore, this labelling is performed by GA3 [10] in eTorii instead, which follows the principles of meshed trees [22,23]. The control frames of both RSTP and GA3 are illustrated in Figure 1.  
GA3 assigns one or more HLMACs to each switch in the network, which portrays one or more hierarchical positions of the switch. The procedure starts at the top-level network devices, also known as core switches. Each of these core switches obtains an initial HLMAC with only their first byte set to a value, such as 1 and 2, as depicted in Figure 2 for switches \(S1\) and \(S2\), respectively. This initial selection and assignment of the core switches is independent of the protocol, and could be any desired by the network manager. Once the core switches start up, they flood GA3 frames through all their ports to start labelling the rest of nodes. These frames contain their HLMAC plus a suffix, which could be any value as far as it is unique per port. For example, in Figure 2, switch \(S1\) has HLMAC with value 1 and, accordingly, it sends 1.7 to \(S3\), 1.6 to \(S4\), and so on; while \(S2\) sends 2.2 to \(S3\), 2.1 to \(S5\), etc. Subsequent switches in the hierarchy will receive one or more HLMACs (e.g., \(S3\) obtains 1.7 and 2.2). These switches follow the same procedure as soon as they receive their first HLMAC: they forward a GA3 frame containing their HLMAC plus a unique suffix per port. For instance, \(S3\) will send 1.7.6 and 2.2.6 to switch \(S7\). The flooding of GA3 frames is performed until all network nodes are reached. This process is not performed if the switches receive HLMACs longer than the ones previously obtained, as they discard them to avoid loops [22,23]. The resulting assignment is illustrated in Figure 2.  
Figure 1: Frame comparison between eTorii and RSTP. The assigned addresses can have an additional property, which is synchronization of suffixes. GA3 achieves the synchronization of suffixes by evaluating the propagated HLMACs; instead of simply discarding longer HLMACs, a more complex priority rule is applied to discard or broadcast the addresses. For example, in Figure 2, node \(S3\) obtains suffix 7 from \(S1\) and suffix 2 from \(S2\), learning HLMACs 1.7 and 2.2, respectively. This is because suffix selection is distributed, decided individually, so \(S1\) and \(S2\) decisions might (and will usually) be different. In order to match these suffixes, \(S1\) and \(S2\) could evaluate the broadcasting produced by \(S3\). More specifically, \(S3\) will propagate 1.7 (received from \(S1\)) plus a suffix to \(S2\), and 2.2 (received from \(S2\)) plus a suffix to \(S1\).