-
Notifications
You must be signed in to change notification settings - Fork 9
use mac flows to filter xde traffic #61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This is not an immediate focus just yet as we can do a lot of work right now while still using promisc. It's probably more important to get xde/opte running various scenarios via Falcon and then come back around on this. However, I did start looking into this over the weekend and have a broken and incomplete implementation as a first step. |
A thought on the inner frame discriminator popped into my head during a conversation related to this. If each xde device has a unique underlay IP address that is associated with the logical port on the guest side of the xde, then this outer frame destination address can be used on ingress as a discriminator for the destination of the inner frame, without having to actually dive into the inner frame. |
What's the motivation for going into or not going into the inner frame? It's possible to use unique IPs, but that is going to lead to a lot of other complications here and eliminates some of the simpler hardware filtering solutions in mind. I assume there are probably a bunch of tradeoffs here, mind sharing your views? |
The offset calculation to find the discriminator would be constant (assuming no VLAN tags). With extension headers on the outer frame, constant offsets may not be possible for inner-frame discriminators. It may (speculation) be more conducive to hardware offload than inner-frame elements. |
With the new xde device in place there is a lot of new work that has been unlocked. I'm working towards getting an iperf run between two TGs (Traffic Generator -- basically a zone which plays the part of an Oxide Guest Instance) which live on virtual sleds with their two physical network ports connected back to back. But to get to that place there are other things I'm noticing that I want to fix up first. In this case I would like to get xde off of the promisc bottle and onto the mac flow classification system. Why is this important? Well, here's some messages you'll see in the system log on the sled:
Now, part of the problem is that I need to replace my home brewed IPv6 header parsing with smoltcp, but that's not the real problem I'm after here. Let's look at this traffic with snoop:
In this case sled2 is sending an NA to sled1. This is all well and good, but xde should never see this packet, as it is purely a physical network concern. We need to teach xde to program the mac flow classification (via
mac_link_flow_add()
) to request it only see traffic for its given VNI +<inner frame discriminator(s)>
. However, the flow classification is not currently powerful enough to deal with encap'd packets (seeflow_desc_t
). Although, we could take the first minor step of setting up a flow to only pass IPv6 + UDP packets, that would out least filter some stuff out like the above. This would at least test out the flow mechanisms and get xde out of the promisc business.The text was updated successfully, but these errors were encountered: