## 3 Architecture Proposed
### RINA SBI Driver  
The RINA SBI driver serves as the API to communicate between the SDN controller, the RINA manager application process, and the HTTP-based MA. The RINA SBI driver is  
Figure 5: Initial process of CDAP message sharing. responsible for translating the application request into the RINA data model descriptor file (DIF configuration templates), managing the descriptor files (creating or deleting DIF configuration templates), managing the connection with the RINA manager (connecting or disconnecting), managing the connection with the HTTP-based MAs in the cloud, and sending an operational request so that the RINA manager executes it. The driver abstracts the current functionalities of the RINA manager application process and HTTP-based MAs. The driver was developed as a library in Python to facilitate the development of management network applications based on the Ryu Framework SDN controller ([[https://github.com/faucetsdn/ryu](https://github.com/faucetsdn/ryu)]([https://github.com/faucetsdn/ryu](https://github.com/faucetsdn/ryu))) (accessed on 15 June 2023). The library is composed of two main classes: the RinaManager() that makes an abstraction of the RINA manager, and the RinaCoreManager() that makes an abstraction of the HTTP-based MAs. An instance of these classes allows making a connection with the desired MA (CDAP-based and HTTP-based) to be controlled, as is shown in Figure 3. This RINA manager-instanced object requires the following initialized parameters: the RINA manager socket path and the path to store the description files. The description files contain the RINA nodes that will take part of the DIF and the specific DIF configuration options, such as routing algorithm, QoS supported in that DIF, the security schemes used, and the RINA nodes' names and addresses that are part of the DIF. More details about the DIF configuration options are found in the IRATI GitHub repository ([[https://github.com/IRATI](https://github.com/IRATI)]([https://github.com/IRATI](https://github.com/IRATI))) (accessed on 10 May 2023). Meanwhile, the RINA core manager-instanced object requires the following initialized parameters: the MA Uniform Resource Locator (URL), a system identifier (ID), and a short description of the MA. In this case, the DIF specifications are not supported because the HTTP-based MA has as only functionality to create and delete L2 VPN. Moreover, the RinaManager() and the RinaCoreManager() objects offer a set of methods related to the DIF manager functionalities that each MA supports. Each method creates the operation request, arranges it in a fixed format, and sends it to the DIF manager. Meanwhile, the DIF manager receives the requested operation and operates the management of DAF members. The current methods supported are described as follows:  
* list_systems(): Makes a list of systems that the RINA SBI driver can control. Each RINA node is considered a system. Each system has its ID, the MA name, and the RINA port's ID exposed in the DAF. * create_ipcp(systemId, IpcpcDescription): Creates an IPCP in the requested system using the IPCP template file. It returns the remote IPCP's created ID. * create_dif(DifDescription): Creates a DIF following the DIF template file. The DIF template file must indicate the systems' ids that will participate in the DIF. * destroy_ipcp(systemId, IpcId): Destroys a specific remote IPCP by using as parameters the remote system's ID and the IPCP's ID. * destroy_dif(difName): Destroys the group of IPCPs that take part of the requested DIF name. * create_L2 VPN(systemId): Creates an IPCP to enable an L2 VPN in the indicated system. This operation is supported only by the HTTP-based MAs. * delete_L2 VPN(systemId): Destroys a specific remote IPCP in the indicated system. This operation is supported only by the HTTP-based MAs. The above operations are currently available because they are required for the context of the TERMINET project and its use case validation.