dash83 / meshsim Goto Github PK
View Code? Open in Web Editor NEWMobile Ad hoc Network simulator.
License: Apache License 2.0
Mobile Ad hoc Network simulator.
License: Apache License 2.0
Given the real-time nature of MeshSim, the successful execution of a simulation requires that the host computer have enough computational resources to emulate the collective computing power of the nodes in the simulation. This constraint limits the usability of MeshSim to either small simulations or the need for a simulation server with several CPU cores.
This enhancement proposal deals with the re-architecture of MeshSim to support distributed simulations in environments composed of multiple simulation hosts. The objective of it, is to be able to add the computational capacity of several hosts into a single pool of resources, such that larger simulations can be executed with commodity hardware.
The specifics of this enhancement are still in the planning stage, but any contributor interested in implementing this feature can contact me to discuss the design.
When running the basic test from the Master, it works some times and sometimes it doesn't. The issue is that both Workers started by master first try to join the network and then listen for messages. Worker1 has nothing to do since it's the first node of the network. However, Worker2 does send a JOIN message wich sometimes goes out before Worker1 starts listening for messages.
The fix should be to start listening for messages before sending a JOIN message, however currently it would imply starting a new thread. As I decided whether to stick with nanomsg or move to tokio, this issue might go away using callbacks.
Ensure cross-compilation for ARM is still working and add a test/mechanism to make sure it continues working.
As indicated in issue #2 These should be separate operations. The protocol needs to be isolated to a common interface that is run after the Worker starts-up.
When a node performs a scan_for_peers operation, it will return 1 result per peer per group, so if it shares more than 1 broadcast group, it will see it multiple times. This is the wrong behaviour and we should only keep 1 of said peers in the returned list.
Echo the configuration file support that worker_cli has, with the appropriate configuration parameters.
As indicated in issue #2. Following features are required.
*All broadcast groups need to live under the working dir of the Master.
*Network scan is performed via a ls
of the dir.
*Every worker's named pipe will reside on the first group indicated in its spec.
*Further groups that the worker belongs to will be implemented via a soft link to the original pipe.
Currently acquiring the lock for the worker handles uses an unwrap operation. If this fails, all the child processes would remain.
Adding error conversion from the error returned by lock() to MasterError is also not a great idea since if it fails to acquire the lock and return right there, the results are similar to a failing unwrap (e.g. dandling processes).
Best bet is probably to add a retry strategy to acquire the lock. Also, since all meaningful work from the test should be done by this point, an aggressive strategy using killall could be used, but it seems unnecessary since this hasn't been a problem at all in the past.
A blanket error-handling strategy used in the early days of the project was to convert all errors to WorkerError and return them upon failure all the way up the worker_cli layer, log them and exit.
This strategy is no longer optimal. Especially now dealing with the protocols in which failure is expected and not critical. Most Protocol operation-failures are not critical. Therefore, a new strategy needs to be reworked to account for this.
As defined in issue #6, implement the test specification feature for the Master.
A lot of the dependencies are quite stale at this point (like slog). Update them as appropriate to fresher and more stable releases.
This will drive its implementation. When defined, it should be documented in the Wiki and linked to this issue.
In write_to_file(), the toml::to_string() error is handled manually. Add error conversion for this error type so that try!/? can be used.
Currently acquiring the lock for the worker handles uses an unwrap operation. Acquiring this lock could easily fail if more than 1 node is added at the same time.
A retry strategy for the lock-acquisition seems like the best strategy.
Instead of having the concept of a main bc_group, move all socket files one dir up and have all the content in the bc_groups directories be symlinks. This will allow for easier implementation of the mobility functionality down the road.
Find a way to programmatically execute and evaluate the sustained test for both tmembership and tmembership_advanced.
A SimulatedRadio scan would detect a peer as many times as they share bc_groups. Add it only once.
All platform API functions must implement documentation tests.
Update README with a proper introduction of the project, examples and usage-documentation.
Implement a feature, script or similar to enable easier deployment to devices.
After issue #2 and all its sub-issues are fixed, test the software by implementing SWIM.
Following the outline of my paper, change the network scan of the Worker in simulated mode to use broadcast groups. Since I'm using named pipes, the broadcast groups can be folders. This change also requires to separate the peer detection from the membership protocol I was running.
Make sure the documentation of all modules is up to date for public release.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.