Giter Club home page Giter Club logo

vinbero's Introduction

Vinbero

Vinbero is a very fast high-performance SRv6 implementation Vibero is about 3-5 Mpps in single flow, which is 2-3 times better performance than linux!

The goal of this project is to implement the basic functions of SRv6 so that users can enjoy network programming:) For example, L2,L3VPN, ServiceChain, Mobile Uplane(in UPF)...etc,

This implementation is also very powerful because it is written in XDP. It does not require any special equipment like P4. All you need is the latest linux kernel to run it. It is also a very small implementation compared to VPP. It's easy to understand and easy to add functionality.It is also possible to incorporate these:)(e.g. CNI, NOS...etc)

Please raise issue with use case description if you want to any SRv6 functions not implemented yet or let's make a contribution!

Required package

  • linux: 5.8<=x
    • It means that the version you are testing is 5.8 or higher. Actually, if BTF supports it, I think there is no problem.
  • golang: 1.3<=x
  • clang: 9<=x

Setup

ulimit -l unlimited

# if "ulimit -l unlimited" is not working when plz check
echo "DefaultLimitMEMLOCK=infinity">>/etc/systemd/system.conf
echo "DefaultLimitMEMLOCK=infinity">>/etc/systemd/user.conf

remove offload

for i in rx tx tso ufo gso gro lro tx nocache copy sg txvlan rxvlan; do
       /sbin/ethtool -K eth1 $i off 2>&1 > /dev/null;
done

use irqaffinity. this mellanox nic case.

git clone https://github.com/Mellanox/mlnx-tools.git
cd mlnx-tools/
./set_irq_affinity.sh ens4f0np0

Build

cd include
wget https://raw.githubusercontent.com/cloudflare/xdpcap/master/hook.h
cd ..
make

ConfigExample

This is an example of performing the End operation.

internal:
  devices:
    - eth1
    - eth2
settings:
  functions:
    - action: SEG6_LOCAL_ACTION_END
      triggerAddr: fc00:2::1/128
      actionSrcAddr: fc00:1::1
      flaver: NONE
    - action: SEG6_LOCAL_ACTION_END
      triggerAddr: fc00:2::2/128
      actionSrcAddr: fc00:1::1
      flaver: NONE

In the transit case, actionSrcAddr works as a so-called bsid.

See this for details: vinbero.yml.sample

Run

./bin/vinbero

List of SRv6 functions of interest and status (a.k.a. Road Map)

Reference list

Transit behaviors

Function schedule description
T n/a Transit behavior
T.Insert future
T.Insert.Red
T.Encaps Done
T.Encaps.Red
T.Encaps.L2 future
T.Encaps.L2.Red

Functions associated with a SID

Function schedule description
End Done
End.X Fed, 2020
End.T
End.DX2 (V)
End.DT2 (U/M)
End.DX6 Done
End.DX4 Done
End.DT6
End.DT4
End.DT46
End.B6.Insert
End.B6.Insert.Red
End.B6.Encaps
End.B6.Encaps.Red
End.BM
End.S
Args.Mob.Session Done Consider with End.MAP, End.DT and End.DX
End.MAP
End.M.GTP6.D Mar, 2021 GTP-U/IPv6 => SRv6, For implementation purposes, it is treated as transit 
End.M.GTP6.D.Di Mar, 2021 GTP-U/IPv6 => SRv6, For implementation purposes, it is treated as transit
End.M.GTP6.E Mar, 2021 SRv6 => GTP-U/IPv6
End.M.GTP4.E partial Done, Mar, 2021 SRv6 => GTP-U/IPv4 gtpv1ext hdr is not supported.
H.M.GTP4.D partial Done, Mar, 2021 GTP-U/IPv4 => SRv6, Currently, gtpv1ext hdr is not supported.
End.Limit Rate Limiting function

Non functional design items

Item name schedule
BSID friendly table structure future

Flavours

Function schedule description
PSP future Penultimate Segment Pop
USP Ultimate Segment Pop
USD Ultimate Segment Decapsulation

Respectful implementation

I'm using these as a reference. thanks:)

Trivia

The Vinbero is an Esperanto word meaning grape A meshed node running SRv6 looks like a grape when viewed from above:)

vinbero's People

Contributors

higebu avatar takehaya avatar terfno avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

vinbero's Issues

Support PMTUD

Why

At some point in the environment, there will be a possibility of MTU problems. So we will implement PTMUD in XDP.

Support vlan

Why

If I'm going to get people to actually use it, I want the ability to encap/decap vlan.

Incorrect implementation of End.DX{4,6}

Why

I'll write nexthop in the configuration, but then I'll have to rewrite the entire destination address.

How

Make it possible to fiblookup the destination address with only one parameter. Also, implement a helper for that.

Customizable Pseudo RSS function

Why

NICs in the world do not support RSS for packets used in SRv6 Mobile Function. So I want an implementation that enables CPU-level distribution

Add Testing and CI

Why

The code as it stands is ugly, needs refactoring, and refactoring introduces bugs without a test environment. So you need to add test environment

What

  • any case testing
  • do github actions with nested vm

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.