commit 4a1f291d7f0b033c98cb08ecffc00a791f53d474 Author: Matthias Schiffer Date: Mon Mar 18 00:04:29 2013 +0100 Initial (incomplete) API definition and some data structures for the simulator diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c8a1c50 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 2.8.3) +project(GMRF C) + +add_subdirectory(mmss) diff --git a/include/gmrf/gmrf.h b/include/gmrf/gmrf.h new file mode 100644 index 0000000..02442b1 --- /dev/null +++ b/include/gmrf/gmrf.h @@ -0,0 +1,53 @@ +/* + Copyright (c) 2013, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _GMRF_GMRF_H_ +#define _GMRF_GMRF_H_ + +#include +#include +#include + + +typedef struct gmrf_context gmrf_context_t; +typedef struct gmrf_iface gmrf_iface_t; + + +typedef struct gmrf_addr { + uint8_t d[8]; +} gmrf_addr_t; + + +static const gmrf_addr_t gmrf_addr_unspec = {}; + + +gmrf_addr_t gmrf_iface_get_addr(gmrf_context_t *ctx, gmrf_iface_t *iface); +size_t gmrf_iface_get_mtu(gmrf_context_t *ctx, gmrf_iface_t *iface); + +bool gmrf_iface_send(gmrf_context_t *ctx, gmrf_iface_t *iface, void *data, size_t len, gmrf_addr_t dest); +bool gmrf_iface_send_bc(gmrf_context_t *ctx, gmrf_iface_t *iface, void *data, size_t len); + +#endif /* _GMRF_GMRF_H_ */ diff --git a/mmss/CMakeLists.txt b/mmss/CMakeLists.txt new file mode 100644 index 0000000..ee65b85 --- /dev/null +++ b/mmss/CMakeLists.txt @@ -0,0 +1,7 @@ +include_directories(${GMRF_SOURCE_DIR}/include) + +add_executable(mmss + iface.c + mmss.c +) +target_link_libraries(mmss rt) diff --git a/mmss/iface.c b/mmss/iface.c new file mode 100644 index 0000000..80aead9 --- /dev/null +++ b/mmss/iface.c @@ -0,0 +1,48 @@ +/* + Copyright (c) 2013, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include "mmss.h" + +#include + + +gmrf_addr_t gmrf_iface_get_addr(gmrf_context_t *ctx, gmrf_iface_t *iface) { + return iface->address; +} + +size_t gmrf_iface_get_mtu(gmrf_context_t *ctx, gmrf_iface_t *iface) { + return iface->net->mtu; +} + +bool gmrf_iface_send(gmrf_context_t *ctx, gmrf_iface_t *iface, void *data, size_t len, gmrf_addr_t dest) { + errno = ENOSYS; + return false; +} + +bool gmrf_iface_send_bc(gmrf_context_t *ctx, gmrf_iface_t *iface, void *data, size_t len) { + errno = ENOSYS; + return false; +} diff --git a/mmss/mmss.c b/mmss/mmss.c new file mode 100644 index 0000000..a0ae643 --- /dev/null +++ b/mmss/mmss.c @@ -0,0 +1,52 @@ +/* + Copyright (c) 2013, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include "mmss.h" + + +int main() { + //mmss_context_t ctx = {0}; + + mmss_network_t net = { .mtu = 1500 }; + mmss_node_t node1 = {}, node2 = {}; + gmrf_iface_t iface1 = {}, iface2 = {}; + + iface1.net = &net; + iface1.node = &node1; + iface1.address = (gmrf_addr_t){{1}}; + + iface2.net = &net; + iface2.node = &node2; + iface2.address = (gmrf_addr_t){{2}}; + + node1.interfaces = &iface1; + node2.interfaces = &iface2; + + iface2.network_next = &iface1; + net.interfaces = &iface2; + + return 0; +} diff --git a/mmss/mmss.h b/mmss/mmss.h new file mode 100644 index 0000000..fd18570 --- /dev/null +++ b/mmss/mmss.h @@ -0,0 +1,73 @@ +/* + Copyright (c) 2013, Matthias Schiffer + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#ifndef _GMRF_MMSS_MMSS_H_ +#define _GMRF_MMSS_MMSS_H_ + +#include + + +typedef struct mmss_context mmss_context_t; +typedef struct mmss_node mmss_node_t; +typedef struct mmss_network mmss_network_t; + + +struct mmss_context { + uint64_t now; +}; + +struct mmss_node { + mmss_node_t *next; + + gmrf_iface_t *interfaces; +}; + +struct mmss_network { + mmss_network_t *next; + + gmrf_iface_t *interfaces; + + size_t mtu; +}; + + +struct gmrf_iface { + gmrf_iface_t *node_next; + gmrf_iface_t *network_next; + + mmss_node_t *node; + mmss_network_t *net; + + gmrf_addr_t address; +}; + +struct gmrf_context { + mmss_context_t *mmss; + mmss_node_t *node; +}; + + +#endif /* _GMRF_MMSS_MMSS_H_ */