-
Notifications
You must be signed in to change notification settings - Fork 162
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
refactor: replace addr.HostAddr hierarchy with tagged union addr.Host #4346
Conversation
b5b945b
to
d44237c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 110 of 116 files at r1, 12 of 12 files at r2, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @matzf and @oncilla)
pkg/addr/host.go
line 95 at r2 (raw file):
// IP address. // TODO(matzf): return ok or ...? func HostIPFromSlice(ip net.IP) Host {
- Just
HostFromSlice
instead ofHostIPFromSlice
? - Re "return ok or ...?": Browsing through the existing code, I see the convenience argument, nevertheless I lean towards passing the ok value to the caller instead of returning an invalid address.
pkg/addr/svc.go
line 40 at r2 (raw file):
// SVC is a SCION service address. // A service address is a short identifier for the service type, and a // flag-bit to for multicast.
"flag-bit for multicast"?
Code quote:
flag-bit to for multicast
d44237c
to
3233ae5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 95 of 125 files reviewed, all discussions resolved (waiting on @marcfrei and @oncilla)
pkg/addr/host.go
line 95 at r2 (raw file):
Previously, marcfrei (Marc Frei) wrote…
- Just
HostFromSlice
instead ofHostIPFromSlice
?- Re "return ok or ...?": Browsing through the existing code, I see the convenience argument, nevertheless I lean towards passing the ok value to the caller instead of returning an invalid address.
Done. I've added the handling of the ok
result by raising errors where appropriate. This looks a bit clunky in some places now, but as pointed out in the PR description, the plan is to get rid of these type conversions by adopting the netip.Addr etc more broadly.
When the caller needs to handle the ok
result, this HostIPFromSlice
is really no longer any more convenient than using netip.AddrFromSlice
directly, and so I've removed the function entirely.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 5 of 17 files at r3, 25 of 25 files at r4, all commit messages.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @oncilla)
7ec7810
to
62ab7de
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 95 of 116 files at r1, 5 of 17 files at r3, 25 of 25 files at r4, all commit messages.
Reviewable status: all files reviewed, 15 unresolved discussions (waiting on @matzf and @oncilla)
pkg/addr/addr.go
line 63 at r4 (raw file):
return fmt.Sprintf("%s,%s", a.IA, a.Host) }
I think it would be nice if we'd also implement TextMarshaler and TextUnmarshaler
pkg/addr/addr.go
line 85 at r4 (raw file):
// EXPERIMENTAL: This API is experimental. It may be changed to return a // combined AddrPort type instead. func ParseAddrPort(s string) (Addr, uint16, error) {
should we also have an JoinAddrPort
?
pkg/addr/addr.go
line 88 at r4 (raw file):
host, port, err := net.SplitHostPort(s) if err != nil { return Addr{}, 0, serrors.WrapStr("invalid address: split host:port", err, "addr", s)
I wonder if it would be desirable to get rid of the serrors dependency on this package and if it is I would suggest to use fmt.Errorf
here.
pkg/addr/host.go
line 51 at r4 (raw file):
// // The zero value is a valid object with Host{}.Type() == HostTypeNone. type Host struct {
I think we should sort the members by size to get the better alignment (and smaller struct size): ip, svc, t
, I wonder why SVC needs to be a uint16 and not just a uint8 (but it doesn't matter much anyway)
pkg/addr/svc.go
line 43 at r4 (raw file):
// The package's SVC constant values are defined without multicast. // The Multicast and Base methods set/unset the multicast flag. type SVC uint16
If we anyway rework, can we get rid of the SVC multicast
? :P
pkg/addr/svc.go
line 85 at r4 (raw file):
} // XXX(matzf): change this to the format accepted by ParseSVC?
hm I think it's not nice that we don't have a matching pair. I would have expected that whatever I print with String()
I can also parse.
tools/braccept/cases/bfd.go
line 106 at r4 (raw file):
SrcIA: remoteIA, } err := scionL.SetSrcAddr(addr.HostIP(netip.MustParseAddr("192.168.13.3")))
why not use addr.MustParseHost()
here and below?
tools/braccept/cases/child_to_child_xover.go
line 112 at r4 (raw file):
} if err := scionL.SetSrcAddr(addr.HostIP(netip.MustParseAddr("172.16.5.1"))); err != nil {
MustParseHost ?
tools/braccept/cases/child_to_internal.go
line 101 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.HostIP(netip.MustParseAddr("172.16.4.1"))); err != nil {
MustParseHost? here and below?
tools/braccept/cases/child_to_parent.go
line 109 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.HostIP(netip.MustParseAddr("172.16.4.1"))); err != nil {
ditto
tools/braccept/cases/internal_to_child.go
line 104 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.MustParseHost("192.168.0.51")); err != nil {
ditto
tools/braccept/cases/jumbo.go
line 108 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.MustParseHost("172.16.3.1")); err != nil {
ditto
tools/braccept/cases/onehop.go
line 82 at r4 (raw file):
Path: ohp, } if err := scionL.SetSrcAddr(addr.MustParseHost("172.16.4.1")); err != nil {
ditto
tools/braccept/cases/parent_to_child.go
line 108 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.MustParseHost("172.16.3.1")); err != nil {
ditto
tools/braccept/cases/parent_to_internal.go
line 95 at r4 (raw file):
Path: sp, } if err := scionL.SetSrcAddr(addr.MustParseHost("172.16.3.1")); err != nil {
ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 15 unresolved discussions (waiting on @lukedirtwalker and @oncilla)
pkg/addr/addr.go
line 63 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
I think it would be nice if we'd also implement TextMarshaler and TextUnmarshaler
Done.
pkg/addr/addr.go
line 85 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
should we also have an
JoinAddrPort
?
Done.
I thought that the "Join" name is a bit close to net.JoinHostPort
which also works on scion addresses (in the form of strings). I would have chosen FmtAddrPort
but this package already contains a few FormatXY
functions, so I went with FormatAddrPort
.
pkg/addr/addr.go
line 88 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
I wonder if it would be desirable to get rid of the serrors dependency on this package and if it is I would suggest to use
fmt.Errorf
here.
Ok to look into this as a follow up? The serrors package is throughout addr
and this would all need to change as we don't gain anything by using a different error mechanism only in the new functionality.
pkg/addr/host.go
line 51 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
I think we should sort the members by size to get the better alignment (and smaller struct size):
ip, svc, t
, I wonder why SVC needs to be a uint16 and not just a uint8 (but it doesn't matter much anyway)
Excellent, done.
The uint16 is really a bit weird. The address field in the packet header is 4 bytes wide and it currently only uses the upper two bytes.
pkg/addr/svc.go
line 43 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
If we anyway rework, can we get rid of the
SVC multicast
? :P
I'm happy to work more on this, and I agree that the service addresses can be used better. But such a functional change to the service addresses themselves should perhaps be discussed separately.
pkg/addr/svc.go
line 85 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
hm I think it's not nice that we don't have a matching pair. I would have expected that whatever I print with
String()
I can also parse.
Done. It now only contains the hex representation of the service identifier in cases where it's unknown. This format cannot currently be parsed back.
tools/braccept/cases/bfd.go
line 106 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
why not use
addr.MustParseHost()
here and below?
Done.
tools/braccept/cases/child_to_child_xover.go
line 112 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
MustParseHost ?
Done.
tools/braccept/cases/child_to_internal.go
line 101 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
MustParseHost? here and below?
Done.
tools/braccept/cases/child_to_parent.go
line 109 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done.
tools/braccept/cases/internal_to_child.go
line 104 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done.
tools/braccept/cases/jumbo.go
line 108 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done (was already MustParseHost here)
tools/braccept/cases/onehop.go
line 82 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done.
tools/braccept/cases/parent_to_child.go
line 108 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done.
tools/braccept/cases/parent_to_internal.go
line 95 at r4 (raw file):
Previously, lukedirtwalker (Lukas Vogel) wrote…
ditto
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 11 of 11 files at r5, all commit messages.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @oncilla)
pkg/addr/svc.go
line 43 at r4 (raw file):
Previously, matzf (Matthias Frei) wrote…
I'm happy to work more on this, and I agree that the service addresses can be used better. But such a functional change to the service addresses themselves should perhaps be discussed separately.
Agreed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 1 files at r6, all commit messages.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @oncilla)
Thanks for the reviews and feedback so far! |
…rmat, add FormatHostPort, use MustParseHost
0e97b8c
to
c117167
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 30 of 30 files at r8, all commit messages.
Reviewable status: complete! all files reviewed, all discussions resolved (waiting on @oncilla)
The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire.
The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in #4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble.
The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble.
removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router
removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router fix dispatcherless docker and integration tests ignore SCMP errors messages on initSvcRedirect() adapt HP test adapt integration tests error string HP control/main dispatcher pass return addresses in helper function by value
removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router fix dispatcherless docker and integration tests ignore SCMP errors messages on initSvcRedirect() adapt HP test adapt integration tests error string HP control/main dispatcher pass return addresses in helper function by value fix rebase upgrade dispatcher shim config to toml v2 add PortRange() RPC in daemon Revert "modify HP and tests" This reverts commit 1c82e9c. remove leftover CSResolver leftover in HP discovery open a single underlay socket for both the QUIC server and the SVC redirector revert acceptance/hiden_paths test await connectivity in old_br acceptance test pass pass pass pass pass + lint pass changes to snet API + refactor pass + allow for using snet outside the defined port range changes in isShimDispatcher() add destination safeguard to snet.scionConnReader.read() add TODOs lint change dispatched_ports name in topo add dispatched_ports all|ALL option range for services in topology PortGenerator dynamic ports refactoring add isDispatcher flag fix clientNet SCMPHandler add default value for shim underlay addr fix dispatcher port + cleaning isShimDispatcher add dstPort check reader remove leftover + TODO revert destination type in ResolverPacketConn replace UnderlayAddr comment comments + TODOs + refactoring add options pattern NewCookedConn improve error message pass
change last-mile router port forwarding removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router fix dispatcherless docker and integration tests ignore SCMP errors messages on initSvcRedirect() adapt HP test adapt integration tests error string HP control/main dispatcher pass return addresses in helper function by value fix rebase upgrade dispatcher shim config to toml v2 add PortRange() RPC in daemon Revert "modify HP and tests" This reverts commit 1c82e9c. remove leftover CSResolver leftover in HP discovery open a single underlay socket for both the QUIC server and the SVC redirector revert acceptance/hiden_paths test await connectivity in old_br acceptance test pass pass pass pass pass + lint pass changes to snet API + refactor pass + allow for using snet outside the defined port range changes in isShimDispatcher() add destination safeguard to snet.scionConnReader.read() add TODOs lint change dispatched_ports name in topo add dispatched_ports all|ALL option range for services in topology PortGenerator dynamic ports refactoring add isDispatcher flag fix clientNet SCMPHandler add default value for shim underlay addr fix dispatcher port + cleaning isShimDispatcher add dstPort check reader remove leftover + TODO revert destination type in ResolverPacketConn replace UnderlayAddr comment comments + TODOs + refactoring add options pattern NewCookedConn improve error message pass fix rebase rename dispatcher flag mocks pass update sig_short_exp_time docker file fix dialer constructor fix docker image references for sig adapt end2end test to use Dial/Listen API remove debug logs add comment for snet.Dial
change last-mile router port forwarding removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router fix dispatcherless docker and integration tests ignore SCMP errors messages on initSvcRedirect() adapt HP test adapt integration tests error string HP control/main dispatcher pass return addresses in helper function by value fix rebase upgrade dispatcher shim config to toml v2 add PortRange() RPC in daemon Revert "modify HP and tests" This reverts commit 1c82e9c. remove leftover CSResolver leftover in HP discovery open a single underlay socket for both the QUIC server and the SVC redirector revert acceptance/hiden_paths test await connectivity in old_br acceptance test pass pass pass pass pass + lint pass changes to snet API + refactor pass + allow for using snet outside the defined port range changes in isShimDispatcher() add destination safeguard to snet.scionConnReader.read() add TODOs lint change dispatched_ports name in topo add dispatched_ports all|ALL option range for services in topology PortGenerator dynamic ports refactoring add isDispatcher flag fix clientNet SCMPHandler add default value for shim underlay addr fix dispatcher port + cleaning isShimDispatcher add dstPort check reader remove leftover + TODO revert destination type in ResolverPacketConn replace UnderlayAddr comment comments + TODOs + refactoring add options pattern NewCookedConn improve error message pass fix rebase rename dispatcher flag mocks pass update sig_short_exp_time docker file fix dialer constructor fix docker image references for sig adapt end2end test to use Dial/Listen API remove debug logs add comment for snet.Dial typo
change last-mile router port forwarding removing dispatcher from snet and infra libraries intermediate commit remove dispatcher fix dataplane port parsing adapt end2end braccept UTs integration no probe add port range fix port range remove ref to dispatcher & reliable socket fix epic failing test remove dispatcher and reliable: - still integration test failing due to lack of support for SCMP handling and more comments, leftovers, small fixes more minor after rebasing pass add stateless dispatcher intermediate commit - Still things missing, e.g., update topology to include stateless dispatcher update topology with reduced dispatcher config add error handling and debug verbose to endHost resolution in BR add reduced forwarding dispatcher integration and utils integration tests lint + chown container fix docker check, only for linux dev lint modify HP and tests lint fix broken rebase lint pass change dispatcher configuration bugfix: QUIC address for client with :0 port slayers: unmap IPv4-mapped IPv6 addresses (scionproto#4377) The Go standard library can produce IPv4-mapped IPv6 addresses when resolving IP addresses. These IP addresses need to be unmapped before putting them on the wire. Before this patch, we could observe the following with tshark: Len=1304 SCION 1-ff00:0:110,[::ffff:172.20.2.2] -> 1-ff00:0:111,[::ffff:172.20.3.2] UDP 32769 -> 32768 1208 The regression was introduced in scionproto#4346, which removed the unmapping behavior in slayers.PackAddr. This patch restores the behavior to ensure only unmapped IPv4 addresses make it on the wire. Handling the unmapping in the code that generates the addresses and only checking this in slayers would seem ideal, but these calls are often very far away from the place that would then trigger an error. Thus handling this in slayers seems like a compromise that saves us and the users of the slayers package a lot of trouble. add packet reflection safeguard in shim add compatible IP_PKTINFO code for windows fix validateNextHopAddr fix isSCMPInfo add endhost port range configuration port range comment udpportRange add fixme allow unspecified address fon SCIONNetwork.Listen retriving nextHop from path and local Interface information add dispatching logic for SCMP at BR remove dispatcher shim support for Windows remove br dispatcher configuration from integration tests add test for old and new br configuration with(out) shim dispatcher comments and minor fixes remove utils_chown container remove docker utils from script pass pass pass refactor topology endhost_port_range comment for router fix dispatcherless docker and integration tests ignore SCMP errors messages on initSvcRedirect() adapt HP test adapt integration tests error string HP control/main dispatcher pass return addresses in helper function by value fix rebase upgrade dispatcher shim config to toml v2 add PortRange() RPC in daemon Revert "modify HP and tests" This reverts commit 1c82e9c. remove leftover CSResolver leftover in HP discovery open a single underlay socket for both the QUIC server and the SVC redirector revert acceptance/hiden_paths test await connectivity in old_br acceptance test pass pass pass pass pass + lint pass changes to snet API + refactor pass + allow for using snet outside the defined port range changes in isShimDispatcher() add destination safeguard to snet.scionConnReader.read() add TODOs lint change dispatched_ports name in topo add dispatched_ports all|ALL option range for services in topology PortGenerator dynamic ports refactoring add isDispatcher flag fix clientNet SCMPHandler add default value for shim underlay addr fix dispatcher port + cleaning isShimDispatcher add dstPort check reader remove leftover + TODO revert destination type in ResolverPacketConn replace UnderlayAddr comment comments + TODOs + refactoring add options pattern NewCookedConn improve error message pass fix rebase rename dispatcher flag mocks pass update sig_short_exp_time docker file fix dialer constructor fix docker image references for sig adapt end2end test to use Dial/Listen API remove debug logs add comment for snet.Dial typo
Providing MustParseX along with ParseX is a typical pattern in Go. There was already addr.MustParseAddr (since #4346), but MustParseIA and MustParseAS were only defined as helper function in the internal xtest package. Define addr.MustParseIA, MustParseAS, MustParseISD to replace the definitions in the xtest package. Remove the rarely used plural forms, xtest.MustParseIAs/ASes; simply typing this out instead seems perfectly appropriate.
Replace the
addr.HostAddr
type hierarchy, consisting of theHostAddr
interface and theHostNone
,HostIPv4
,HostIPv6
andHostSVC
implementations with a single typeaddr.Host
, representing all the different host address types as a tagged union ("sum type"). This uses, and follows the spirit of, thenet/netip.Addr
types to represent IP addresses for both IPv4 and IPv6.The
addr.Host
type is a simple value type, which can be created and copied without heap allocations and can be used in comparisons and as map keys.In addition to replacing all uses of
addr.HostAddr
, the newaddr.Host
type is used in theslayers.SCION.Get/SetSrc/DstAddr
interfaces, as well as in the DRKey infrastructure. Using a consistent representation of the addresses allows to get rid of duplicate functionality and a number of address conversions, e.g. insnet
.In contrast to the
addr.HostAddr
interface, the newaddr.Host
does not implement thenet.Addr
interface. In particular, service addresses were passed through layers requiring anet.Addr
. Usesnet.SVCAddr
in these cases.Additionally, add a new
addr.Addr
type representing a full SCION address (ISD, AS and host address), including parsing functionality. This definition is identical to thesnet.SCIONAddress
type, which is now only kept as a type alias for compatibility.Closes #4149.
Future work:
pkg/addr
is a public API and should have a more SCION-specific and less clash-likely name, e.g.saddr
snet.SCIONAddress
byaddr.Addr
addr.Addr
in the ping, traceroute etc tools, in place of the ill-fitting use ofsnet.UDPAddr
.addr.MustParse{ISD,AS,IA}
for completeness sake (currently in xtest package)netip.Addr
conversions by gradually increasing the adoption ofnetip.Addr
and related APIsThis change is