Grammar improvements, h/t Claude
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-02-21 16:09:24 +00:00
parent 8ace5cf9ff
commit 4d8f3a42e8

View File

@@ -12,7 +12,7 @@ performance and versatility. For those of us who have used Cisco IOS/XR devices,
_ASR_ (aggregation service router), VPP will look and feel quite familiar as many of the approaches _ASR_ (aggregation service router), VPP will look and feel quite familiar as many of the approaches
are shared between the two. are shared between the two.
There's some really fantastic features in VPP, some of which are lesser well known, and not always There are some really fantastic features in VPP, some of which are less well known, and not always
very well documented. In this article, I will describe a unique use case in which I think VPP will very well documented. In this article, I will describe a unique use case in which I think VPP will
excel, notably acting as a gateway for Internet Exchange Points. excel, notably acting as a gateway for Internet Exchange Points.
@@ -49,7 +49,7 @@ Back in October of 2023, I reached the conclusion that the policer works in the
## VPP Infra: L2 Feature Maps ## VPP Infra: L2 Feature Maps
The benefit in using the `device-input` input arc is it's efficient: every packet that comes from the The benefit of using the `device-input` arc is that it's efficient: every packet that comes from the
device (`Gi10/0/1`) regardless of tagging or not, will be handed off to the policer plugin. It means device (`Gi10/0/1`) regardless of tagging or not, will be handed off to the policer plugin. It means
any traffic (L2, L3, sub-interface, tagged, untagged) will all go through the same policer. any traffic (L2, L3, sub-interface, tagged, untagged) will all go through the same policer.
@@ -204,7 +204,7 @@ I think writing unit- and integration tests is a great idea. I add a new file
1. **L2 Output**: on a bridge-domain sub-interface 1. **L2 Output**: on a bridge-domain sub-interface
The existing `test/test_policer.py` should also cover existing cases, and of course it's important The existing `test/test_policer.py` should also cover existing cases, and of course it's important
that my work does not impact these changes. Lucky me, the existing tests all still pass :) that my work does not break existing functionality. Lucky me, the existing tests all still pass :)
### Test: L3 in/output ### Test: L3 in/output
@@ -288,7 +288,7 @@ pim@summer:~/src/vpp$ make test-debug TEST=test_policer_subif V=2
{{< image width="5em" float="left" src="/assets/shared/warning.png" alt="Warning" >}} {{< image width="5em" float="left" src="/assets/shared/warning.png" alt="Warning" >}}
**Whoops!** So much for predicting the outcome! I see that 7 packets (896 bytes) make it through on input **Whoops!** So much for predicting the outcome! I see that 7 packets (896 bytes) make it through on input
while 6 packets (876 bytes) made it through on output. In the input case, the packet size is while 6 packets (876 bytes) make it through on output. In the input case, the packet size is
`896/7 = 128` bytes, which is 18 bytes short. What's going on? `896/7 = 128` bytes, which is 18 bytes short. What's going on?
### Side Quest: Policer Accounting ### Side Quest: Policer Accounting
@@ -304,8 +304,8 @@ Ben also points out that when applying the policer to the interface, I can detec
it's a PHY, a single-tagged or a double-tagged interface, and store some information to help correct it's a PHY, a single-tagged or a double-tagged interface, and store some information to help correct
the accounting. We discuss a little bit on the mailinglist, and agree that it's best for all four the accounting. We discuss a little bit on the mailinglist, and agree that it's best for all four
cases (L2 input/output and L3 input/output) to use the full L2 frame bytes in the accounting, which cases (L2 input/output and L3 input/output) to use the full L2 frame bytes in the accounting, which
as an added benefit also that it remains backwards compatible with the `device-input` accounting. as an added benefit, also remains backwards compatible with the `device-input` accounting.
Chapeau, Ben you're so clever! Chapeau, Ben, you're so clever!
I add a little helper function: I add a little helper function:
@@ -351,7 +351,7 @@ pim@summer:~/src/vpp$ make test-debug TEST=test_policer_subif V=2 | grep 'police
'exceed_packets': 0, 'exceed_bytes': 0, 'violate_packets': 61, 'violate_bytes': 8906} 'exceed_packets': 0, 'exceed_bytes': 0, 'violate_packets': 61, 'violate_bytes': 8906}
``` ```
Yaay, great success! Yay, great success!
### Test: L2 in/output ### Test: L2 in/output
@@ -418,7 +418,7 @@ ethernet-input
I've sent the change, which was only about ~300 LOC, off for review. You can follow along on the I've sent the change, which was only about ~300 LOC, off for review. You can follow along on the
gerrit on [[44654](https://gerrit.fd.io/r/c/vpp/+/44654)]. I don't think the policer got much slower gerrit on [[44654](https://gerrit.fd.io/r/c/vpp/+/44654)]. I don't think the policer got much slower
after adding the l2 path, and one might argue it doesn't matter because policing didn't work on after adding the l2 path, and one might argue it doesn't matter because policing didn't work on
sub-interfaces and L2 output at all, before this change. However, for the L3 input/output case, and sub-interfaces or L2 output at all before this change. However, for the L3 input/output case, and
for the PHY input case, there are a few CPU cycles added now to address the L2 and sub-int use for the PHY input case, there are a few CPU cycles added now to address the L2 and sub-int use
cases. Perhaps I should do a side by side comparison of packets/sec throughput on the bench some cases. Perhaps I should do a side by side comparison of packets/sec throughput on the bench some
time. time.
@@ -428,5 +428,5 @@ and packet scheduler designed to eliminate bufferbloat, which is high latency ca
buffering in network equipment, while ensuring fair bandwidth distribution among competing traffic buffering in network equipment, while ensuring fair bandwidth distribution among competing traffic
flows. I know that Dave Täht - may he rest in peace - always wanted that. flows. I know that Dave Täht - may he rest in peace - always wanted that.
For me, I've set my sights on eVPN VxLAN, and I started toying with SRv6 L2 transport also. I hope For me, I've set my sights on eVPN VxLAN, and I also started toying with SRv6 L2 transport. I hope
that in the spring I'll have a bit more time to contribute to VPP and write about it. Stay tuned! that in the spring I'll have a bit more time to contribute to VPP and write about it. Stay tuned!