The Socially-Aware Opportunistic Routing System Base
The Socially-Aware Opportunistic Routing System (SAORS) enables the easy developement of opportunistic routing schemes in OMNET++. It extends the DYMO MANET routing protocol implementation of Christoph Sommer (DYMOFAU) that is found in the inetment framework. By using a MANET protocol as its base, it provide instant communication where a path can be found between tw nodes. On the other hand, if not, it has the ability to store the messages until the destination of a better carrier is found. To use SAORSBase in order to create a new opportunistic protocol, all that needs to be done is the extention of the hooks provided. In the C++ code of the module these are the following functions:
* sendBeacon() * handleBeacon(SAORS_BEACON* my_beacon) * findEncounterProb(const SAORSBase_RoutingEntry* routeToNode) * compareEncounterProb(const SAORSBase_RoutingEntry* dtEntry, const SAORS_RREP* rrep) * sendEncounterProb(SAORS_RREQ* rreq, const SAORSBase_RoutingEntry* dtEntry)
These five function will provide all the opportunistic functionality needed for the creation of almost any probabilistic or epidemic routing scheme.
See also: DTDYMO, DSDYMO
Author:: Nikolaos Vastardis
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
| Name | Type | Description |
|---|---|---|
| DYMO | simple module |
Dynamic MANET On-demand (DYMO) Routing |
| Name | Type | Description |
|---|---|---|
| DTDYMO | simple module |
The Delay-Tolerant DYMO |
| EPDYMO | simple module |
The Epidemic DYMO |
| RDYMO | simple module |
The Random DYMO |
| SAMPhO | simple module |
Socially-Aware Multi Phase Opportunistic Routing |
| SimBetTS | simple module |
The SimBetTS Version of DYMO |
| Name | Type | Default value | Description |
|---|---|---|---|
| ExcludedInterfaces | string | "" |
list of interfaces excluded by the manet routing protocol |
| interfaces | string | "prefix(wlan)" |
list of routing interfaces were the routing protocol is active, the prefix(namei) indicate all the interfaces with "namei" in his names |
| usetManetLabelRouting | bool | true |
the routing entries are marked IPRoute::MANET, this label force an exact search with independent of the mask |
| useICMP | bool | true |
By default the module use the ICMP but it's necessary to activate with the method setSendToICMP(true) |
| setICMPSourceAddress | bool | false |
set the datagram source address if the address is undefined to the address of node This parameter allow that the ICMP messages could arrive to the source applications |
| coreDebug | bool | false |
debug switch for the core framework |
| RESPONSIBLE_ADDRESSES_PREFIX | int | -1 |
netmask of network this DYMO router is responsible for, -1 for self only |
| ROUTE_AGE_MIN_TIMEOUT | double | 1s |
string DYMO_INTERFACES = default("wlan"); // list of interfaces to run DYMO on, separated by a single space character string AUTOASSIGN_ADDRESS_BASE = default("10.0.0.0"); // start of address range from which to automatically assign an address to the DYMO_INTERFACES |
| ROUTE_AGE_MAX_TIMEOUT | double | 60s | |
| ROUTE_NEW_TIMEOUT | double | 5s | |
| ROUTE_USED_TIMEOUT | double | 5s | |
| ROUTE_DELETE_TIMEOUT | double | 10s | |
| MIN_HOPLIMIT | int | 5 |
RREQs are first tried with this MsgHdr.HopLimit |
| MAX_HOPLIMIT | int | 10 |
MsgHdr.HopLimit for last RREQ, as well as other DYMO control messages |
| RREQ_RATE_LIMIT | double | 10 |
maximum average RREQs per second (token bucket) |
| RREQ_BURST_LIMIT | int | 3 |
maximum RREQs in a burst (token bucket) |
| RREQ_WAIT_TIME | double | 2s |
how log to wait for a Route Request |
| RREQ_TRIES | int | 3 |
how many times to retry a routing request before declaring the node unreachable |
| BUFFER_SIZE_PACKETS | int | 50 |
maximum queue size in packets, -1 for no limit |
| BUFFER_SIZE_BYTES | int | 75000B |
maximum queue size in bytes, -1 for no limit |
| BEACON_TIMEOUT | double | 30s | |
| DTRT_DELETE_TIMEOUT | double | 5000s | |
| DLT_OUTSTANDINGRREQ_TIMEOUT | double | 3s | |
| NUM_COPIES | int | 1 | |
| SEND_COPIES | int | 0 | |
| SEND_COPIES_PC | int | 0 | |
| EPIDEMIC | bool | false |
| Name | Value | Description |
|---|---|---|
| class | DYMO |
| Name | Direction | Size | Description |
|---|---|---|---|
| from_ip | input | ||
| to_ip | output |
| Name | Title | Source | Record | Unit | Interpolation Mode |
|---|---|---|---|---|---|
| RcvdDTMsgs | RcvdDTMsgs | RcvdDTMsgs | vector | none |
// // <b> The Socially-Aware Opportunistic Routing System Base </b> // // The Socially-Aware Opportunistic Routing System (SAORS) enables // the easy developement of opportunistic routing schemes in OMNET++. // It extends the DYMO MANET routing protocol implementation of // Christoph Sommer (DYMOFAU) that is found in the inetment framework. // By using a MANET protocol as its base, it provide instant communication // where a path can be found between tw nodes. On the other hand, if not, // it has the ability to store the messages until the destination // of a better carrier is found. To use SAORSBase in order to create // a new opportunistic protocol, all that needs to be done is the // extention of the hooks provided. In the C++ code of the module // these are the following functions: // // * sendBeacon() // * handleBeacon(SAORS_BEACON* my_beacon) // * findEncounterProb(const SAORSBase_RoutingEntry* routeToNode) // * compareEncounterProb(const SAORSBase_RoutingEntry* dtEntry, const SAORS_RREP* rrep) // * sendEncounterProb(SAORS_RREQ* rreq, const SAORSBase_RoutingEntry* dtEntry) // // These five function will provide all the opportunistic functionality // needed for the creation of almost any probabilistic or epidemic // routing scheme. // // @see DTDYMO, DSDYMO // // @author: Nikolaos Vastardis // simple SAORSBase extends DYMO { parameters: double BEACON_TIMEOUT @unit("s") = default(30s); double DTRT_DELETE_TIMEOUT @unit("s") = default(5000s); double DLT_OUTSTANDINGRREQ_TIMEOUT @unit("s") = default(3s); int NUM_COPIES = default(1); int SEND_COPIES = default(0); int SEND_COPIES_PC = default(0); bool EPIDEMIC = default(false); @statistic[RcvdDTMsgs](title="RcvdDTMsgs"; source="RcvdDTMsgs"; record=vector; interpolationmode=none); gates: }