-
Notifications
You must be signed in to change notification settings - Fork 49
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
Support multiple network interfaces #132
Comments
Linking #79 for context, and closing it to track in one place. |
I think we should set the goal as: Support multiple network interfaces. And then a piece of that is supporting subnets. |
I think we should use a unique identifier for each host, which could be a It'd be good to decouple the DNS "lookup" function from the network manipulation ones. So And then lastly, we need to change how hosts are added to the simulation to allow for different addressing schemes. Perhaps a builder pattern works best here: sim.host()
.with_ipv4(...)
...
.build(<software>) In terms of iterating on this we could create a new remote so that |
Since each node has two possible addresses,
As an idea, if create a builder pattern like this, sim.host(<name>)
...
.build(<software>) we could ensure that each node has a human-readable name. Since these names should always be unique, we could them as a Additionally, we could change the API of the network manipulation functions like Of course, reverse dns lookups would need to be publicly accessible, to indirectly allow network manipulation with |
Makes sense.
We might still need a trait to support the regex use cases. |
Yeah, but we can completly detach this trait from dns resolutions |
Basically using |
I think a good first step would be the integration of uuids and the internal support of more complex dns queries. On a related note, will we ever support async dns queries (see #69)? I don't really see the point, since all queries in turmoil are sync either way. Additionally async lookups would prevent use of lookup in non-async contexts, like |
This refactor aims to introduce the ability of nodes to have multiple addresses
in distinct subnets.
Immediate Goals
Ipv4Addr
AND an unqiueIpv6Addr
192.168.0.0/16
)Builder
Challenges
I have tried to implement this, and come to the conlsuion that some major changes
internally AND externally would be nessecary. Notably:
Rt
/Host
can no longer by identified by a singleIpAddr
.The best possible solution would be to identify them by something like a MAC addr,
but that would warrent major internal changes
lookup
would need to return more than one possible address, thus the public APIof
ToIpAddr
/lookup
/lookup_many
would need to change. This could be a goodmoment to introduce API compliance with either
std::net
ortokio::net
ToIpAddr
for module creation creates problems when statically assigning addresses.Even without this refactoring, nodes with explicitly assigned address cannot have human readable
names, since their place is traded for the address assignment. Mixed IP subnets only enlarge this
problem. The current api of
Sim::client
/Sim::host
provides no way to explicitly assign bothan Ipv4 and an Ipv6 address. In short, the current API cannot support a node with explicitly assigned
addresses, let alone a human-readable name, so changes would be nessecary.
In my opinion, this amount of changes would exceed the scope of one PR, so it might be benifical
to make step by step changes to the public API. However this warrants discussion.
Some related thoughts
std
/tokio
Ipv6 sockets bound to[::]
can receive incoming Ipv4 packets (addresses are being mapped to Ipv6),however the reverse is not possible. This seems like an rare edge case, so i do not know whether we
should ever support this behaviour
Supporting a set of bound addresses+subnets might be beneficial to a) remodel localhost, to use
top.rs
links or b) add support for multiple interface, thus multiple subnets, should that ever be a goalAs a reference, my current test implementation can be found here.
I have closed the corresponding PR #125, since it is already out of date.
Progress
IpAddrs
lookup
and dns registrationuuid
asHost
/Rt
identifersBuilder
The text was updated successfully, but these errors were encountered: