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!
- 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
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
cd include
wget https://raw.githubusercontent.com/cloudflare/xdpcap/master/hook.h
cd ..
make
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
./bin/vinbero
- draft-filsfils-spring-srv6-network-programming
- draft-ietf-dmm-srv6-mobile-uplane
- draft-murakami-dmm-user-plane-message-encoding
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 |
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 |
Item name | schedule |
---|---|
BSID friendly table structure | future |
Function | schedule | description |
---|---|---|
PSP | future | Penultimate Segment Pop |
USP | Ultimate Segment Pop | |
USD | Ultimate Segment Decapsulation |
I'm using these as a reference. thanks:)
The Vinbero is an Esperanto word meaning grape
A meshed node running SRv6 looks like a grape when viewed from above:)