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 protcols-L2), some literally shapeshift according to your specific needs (I'm looking at you BFD) and some operate between layers.

Just the way the specific layers they operate are so differently, so do their implementations. They differ in both structure and difficulty, but not impossible to make.

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

So at holo, we came up with a structure that we hope covers majority of the networking protocol needs. This structure means you can navigate through each of the protocols and know where you need to make the changes in order to incite certain changes.

With all that said, having a solid structure also means a bit of a learning curve for the 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 long term maintainability of the project.

So, what is this guide meant to do ?

We will take you down a journey of implementing a networking protocol in holo. It will be a fairly long journey, so buckle up; but we do try and 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 on 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 number of less than 27 pages with the most imporant sections (section 2 to section 6.4) being approximately 12 pages, of what should be, with a descent 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 us the step by step as to 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.

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

Let's get started, next up is an overview of the VRRP protocol that we are meant to implement.