KVM: add configurable MAC/IP script hook for static ARP/NDP and routes#13495
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #13495 +/- ##
============================================
+ Coverage 18.93% 19.48% +0.54%
- Complexity 18471 19354 +883
============================================
Files 6221 6294 +73
Lines 560045 568214 +8169
Branches 68289 69609 +1320
============================================
+ Hits 106048 110691 +4643
- Misses 442372 445440 +3068
- Partials 11625 12083 +458
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
DaanHoogland
left a comment
There was a problem hiding this comment.
clgtm, why not set your script as default value for the property @wido ? (if it is well tested and robust, that is)
Thanks, the reason the script does not always execute is that it could break existing setups. Therefor it is not set by default. |
yeah, that is what I meant by robust ;) np, fine like this as well. |
baae859 to
ac65b6a
Compare
Introduces a new agent.properties option `vm.network.macip.static` (false by default) that makes BridgeVifDriver invoke on modifymacip.sh on every NIC plug (VM start) and unplug (VM stop). This is very useful in EVPN+VXLAN environments as it can reduce BUM traffic. By setting static ARP/NDP entries bridges can be configured using 'neigh_suppress on' as the ARP/NDP entries are already set statically by CloudStack. Setting 'neigh_suppress on' requires a manual change in the modifyvxlan.sh script as this is not the default behavior.
|
I tested and reviewed the code again. It worked on our environment, would be great to get feedback. This can be merged without changing anything to existing setups as you will need to enable it manually. |
|
@blueorangutan package |
|
@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress. |
|
Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 18429 |
|
@blueorangutan test |
|
@DaanHoogland a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests |
|
[SF] Trillian test result (tid-16466)
|
FRR populates the FDB via BGP EVPN, so kernel data-plane learning is redundant and counterproductive. Static ARP (IPv4) and NDP (IPv6) entries are added on startup of the Instance and remove on shutdown. FRR populates the FDB/neighbor table via control plane, and neigh_suppress tells the kernel bridge to use that information instead of flooding. This will vastly reduce BUM traffic with static ARP/NDP entries.
|
We have this setup running in production for over two weeks now. It works as expected. It will not break any existing environments as it is a config setting which has to be changed prior to it becoming active. |
|
@wido |
For me it is. Code is good and testing has been done by me. |
Introduces a new agent.properties option
vm.network.macip.static(false disabled by default) that makes BridgeVifDriver invoke modifymacip.sh on every NIC plug (VM start) and unplug (VM stop).This will lead to static IPv4/IPv6 ARP/NDP entries to be programmed into the kernel.
This is very useful in EVPN+VXLAN environments as it can reduce BUM traffic. By setting static ARP/NDP entries bridges can be configured using 'neigh_suppress on' as the ARP/NDP entries are already set statically by CloudStack. No ARP/NDP traffic is needed in this case as it's handled locally.
When using EVPN+VXLAN you will need to change the modifyvxlan.sh script so that it does this:
Further improvements can be made in general to the VXLAN+EVPN integration, but this should already resolve many problems people might have with BUM traffic.