Skip to content

Holo Guide ‐ Introduction

Paul-weqe edited this page Aug 7, 2024 · 2 revisions

Hello everyone, welcome to Holo's protocol creation guide. Whether you're here by accident or really want to learn how to build a networking protocol in the Holo suite from scratch, this guide should be fun for you.

Holo is a comprehensive networking suite focused on ensuring proper structure and efficiency with the protocols you create.

Networking protocols come in all shapes and sizes. Some operate on specific layers (routing protocols - L3, switching protocols - L2), some literally shapeshift according to your specific needs (I'm looking at you, BFD), and some operate between layers. The dynamism in these protocols' definitions in their individual RFCs also extends to their implementations. They often differ greatly, protocol by protocol, in terms of implementation.

A networking suite like Holo is aimed at combining all these wildly different protocols in a single place. As mentioned before, they come in all shapes and sizes, and when all put in a single place (like Holo), without proper planning they may pile up into a very big, sometimes unmanageable codebase.

At Holo, we have developed a structure that we hope covers the majority of networking protocol needs. This structure means you can navigate through each of the protocols and know where you need to make changes to incite specific behaviors.

With all that said, having a solid structure also means a bit of a learning curve for new developers who aim to introduce their own protocols. Networking protocols are inherently hard to implement, and adding this extra layer of items to learn doesn't make things any easier, we understand. However, this is a small price to pay for the long-term maintainability of the project.

So, what is this guide meant to do?

We will take you on a journey of implementing a networking protocol in Holo. It will be a fairly long journey, so buckle up; but we do try to make the journey easy for you.

The protocol we will be using in this reference guide is VRRP V2 (RFC 3768). Although in the next section, we will have an overview of how VRRP works, I would greatly urge you to go through the RFC for an in-depth understanding. It is an RFC with a total of less than 27 pages, with the most important sections (section 2 to section 6.4) being approximately 12 pages, which should be, with a decent networking foundation, not too hard to grasp.

If you are reading this guide at a later time, you may find the VRRP protocol already implemented. This guide will be referring to version 0.5.0, whose specific file structure can be found here. At this point, the VRRP protocol is not yet implemented, so this guide shows the step-by-step process of how life was breathed into the implementation.

It is going to be a long and hopefully interesting journey.

The guide assumes knowledge of:

  • Rust.
  • Basic networking concepts.
  • Basic understanding of Linux.
  • YANG (That's a wide base, so at least an understanding of what it does).

The rest of the items will be learned as we move along.

Let's get started. Next up is an overview of the VRRP protocol that we are going to implement.