[2/3] [nat] introduce NatAddress trait - #335
Conversation
2c7f158 to
ce64fd3
Compare
NatFamily traitNatAddress trait
| } | ||
| } | ||
|
|
||
| impl NatAddress for Ipv4Addr { |
There was a problem hiding this comment.
Instead of implementing NatAddress for a raw V4 or V6 addr, would it make sense to create newtypes around them that provides additional validation (i.e. do we want to allow creation of a NAT entry for any Ipv4 / Ipv6 address?), and implement this trait for the newtype?
There was a problem hiding this comment.
We could, but I didn't want to add new functionality on these PRs.
There was a problem hiding this comment.
additional validations could be added later
a01c3aa to
d7008db
Compare
22d9c68 to
1b86758
Compare
d7008db to
25b94af
Compare
1b86758 to
6265bc6
Compare
| } else { | ||
| Ok(()) | ||
| } | ||
| Ipv6Addr::reset(switch) |
There was a problem hiding this comment.
🤔 This feels less clear than the older representation. If nat::reset_ipv6 was called in the wrong context it would be clear. If Ipv6Addr::reset(switch) is called in any other context it would not be clear if we're doing the correct thing or not without looking into the function to see what it did.
I feel like this is a close-but-slightly-awkward abstraction and this should be something more akin to an Ipv6NatTable type that implements a NatTable trait, or something in that spirit. I can be convinced otherwise, but even after sleeping on it the proposed representation feels weird to me.
There was a problem hiding this comment.
I guess I split this and #336 in an unfortunate place since this does go away in the next PR. Should be easy to address it on this one though.
| } else { | ||
| Ok(()) | ||
| } | ||
| Ipv4Addr::reset(switch) |
| } | ||
| } | ||
|
|
||
| impl NatAddress for Ipv4Addr { |
There was a problem hiding this comment.
additional validations could be added later
6265bc6 to
8293a3e
Compare
Tie each IP address family to its p4 table, match key, and action types via a trait, with the table operations provided as default methods. Replaces the duplicated per-family entry points.
8293a3e to
c597b42
Compare
This PR:
NatAddresstrait, tying each IP address family to its p4 table, match key, and action types. Replaces duplicated per-family entry points.This is the second of 3 PRs simplifying and de-duplicating some of the
nat.rscode.PortRangeto struct #334NatAddresstrait #335Obs: Changes are almost entirely equivalent, except for the ordering of some things and the log message
nat tables->nat table.