diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..a2e865d8da9b3ad5e6563ea6015e14fdbd91252a --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,170 @@ + + +build-docker-common: + image: docker:18 + script: + - echo "nameserver 172.26.4.20" > /etc/resolv.conf + - export http_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - export https_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY + - docker pull $CI_REGISTRY_IMAGE:common || true + - > + docker build -f Dockerfile_common + --pull + --build-arg http_proxy=$http_proxy + --build-arg https_proxy=$http_proxy + --build-arg VCS_REF=$CI_COMMIT_SHA + --build-arg VCS_URL=$CI_PROJECT_URL + --build-arg SOURCE=$QUALNET_9301_SOURCE + --build-arg EXTRA_LIBS=$QUALNET_9301_LIBS_U1804 + --cache-from $CI_REGISTRY_IMAGE:common + --tag $CI_REGISTRY_IMAGE:common + . + - docker push $CI_REGISTRY_IMAGE:common + +build-docker-filtering: + image: docker:18 + needs: ["build-docker-common"] + script: + - echo "nameserver 172.26.4.20" > /etc/resolv.conf + - export http_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - export https_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY + - docker pull $CI_REGISTRY_IMAGE:filtering || true + - > + docker build -f Dockerfile_filtering + --pull + --build-arg http_proxy=$http_proxy + --build-arg https_proxy=$http_proxy + --build-arg VCS_REF=$CI_COMMIT_SHA + --build-arg VCS_URL=$CI_PROJECT_URL + --build-arg BASE_IMG=$CI_REGISTRY_IMAGE + --cache-from $CI_REGISTRY_IMAGE:filtering + --tag $CI_REGISTRY_IMAGE:filtering + . + - docker push $CI_REGISTRY_IMAGE:filtering + +build-docker-original-iwcmc: + image: docker:18 + needs: ["build-docker-common"] + script: + - echo "nameserver 172.26.4.20" > /etc/resolv.conf + - export http_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - export https_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY + - docker pull $CI_REGISTRY_IMAGE:original_iwcmc || true + - > + docker build -f Dockerfile_original_iwcmc + --pull + --build-arg http_proxy=$http_proxy + --build-arg https_proxy=$http_proxy + --build-arg VCS_REF=$CI_COMMIT_SHA + --build-arg VCS_URL=$CI_PROJECT_URL + --build-arg BASE_IMG=$CI_REGISTRY_IMAGE + --cache-from $CI_REGISTRY_IMAGE:original_iwcmc + --tag $CI_REGISTRY_IMAGE:original_iwcmc + . + - docker push $CI_REGISTRY_IMAGE:original_iwcmc + +build-docker-original: + image: docker:18 + script: + - echo "nameserver 172.26.4.20" > /etc/resolv.conf + - export http_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - export https_proxy="http://proxy-serveur.univ-nantes.prive:3128" + - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY + - docker pull $CI_REGISTRY_IMAGE:original || true + - > + docker build -f Dockerfile_original + --pull + --build-arg http_proxy=$http_proxy + --build-arg https_proxy=$http_proxy + --build-arg VCS_REF=$CI_COMMIT_SHA + --build-arg VCS_URL=$CI_PROJECT_URL + --build-arg SOURCE=$QUALNET_921_SOURCE + --build-arg EXTRA_LIBS=$QUALNET_921_LIBS_U1804 + --cache-from $CI_REGISTRY_IMAGE:original + --tag $CI_REGISTRY_IMAGE:original + . + - docker push $CI_REGISTRY_IMAGE:original + +qualnet-iwcmc-filtering: + image: $CI_REGISTRY_IMAGE:filtering + needs: ["build-docker-filtering"] + timeout: 4h + cache: + key: qualnet-9-3-0-1-filtering + paths: + - /data/qualnet-9.3.0.1/build/ + script: + - source /etc/profile.d/eureka.sh + - use_eureka + - cd ~/qualnet-9.3.0.1/build + - cmake . + - make exata + - ldd bin/qualnet | cut -d ">" -f2 | cut -d ' ' -f2 | grep ".so" | xargs -d "\n" cp -f -u -t ./bin/ + artifacts: + paths: + - "/data/qualnet-9.3.0.1/build/bin/*" + +qualnet-iwcmc-original: + image: $CI_REGISTRY_IMAGE:original_iwcmc + needs: ["build-docker-original-iwcmc"] + timeout: 4h + cache: + key: qualnet-9-3-0-1-original-iwcmc + paths: + - /data/qualnet-9.3.0.1/build/ + script: + - source /etc/profile.d/eureka.sh + - use_eureka + - cd ~/qualnet-9.3.0.1/build + - cmake . + - make exata + - ldd bin/qualnet | cut -d ">" -f2 | cut -d ' ' -f2 | grep ".so" | xargs -d "\n" cp -f -u -t ./bin/ + artifacts: + paths: + - "/data/qualnet-9.3.0.1/build/bin/*" + +qualnet-adhocnet-original: + image: $CI_REGISTRY_IMAGE:original + needs: ["build-docker-original"] + timeout: 4h + cache: + key: qualnet-9-2-1-original + paths: + - /data/qualnet-9.3.0.1/build/ + script: + - cp -r ADHOCNET_2020/Original/libraries/user_models/src ~/qualnet-9.2.1/libraries/user_models/src + - cp patch_qualnet_8.2_to_9.2.patch ~/qualnet-9.2.1/ + - cd ~/qualnet-9.2.1/ + - git apply patch_qualnet_8.2_to_9.2.patch + - cd build + - cmake . + - make exata + - ldd bin/qualnet | cut -d ">" -f2 | cut -d ' ' -f2 | grep ".so" | xargs -d "\n" cp -f -u -t ./bin/ + artifacts: + paths: + - "/data/qualnet-9.2.1/build/bin/*" + +qualnet-adhocnet-epoch: + image: $CI_REGISTRY_IMAGE:original + needs: ["build-docker-original"] + timeout: 4h + cache: + key: qualnet-9-2-1-original + paths: + - /data/qualnet-9.3.0.1/build/ + script: + - cp -r ADHOCNET_2020/Epoch/libraries/user_models/src ~/qualnet-9.2.1/libraries/user_models/src + - cp patch_qualnet_8.2_to_9.2.patch ~/qualnet-9.2.1/ + - cd ~/qualnet-9.2.1/ + - git apply patch_qualnet_8.2_to_9.2.patch + - cd build + - cmake . + - make exata + - ldd bin/qualnet | cut -d ">" -f2 | cut -d ' ' -f2 | grep ".so" | xargs -d "\n" cp -f -u -t ./bin/ + artifacts: + paths: + - "/data/qualnet-9.2.1/build/bin/*" + diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/CMakeLists.txt b/ADHOCNET_2020/Epoch/libraries/user_models/CMakeLists.txt similarity index 93% rename from ADHOCNET 2020/Epoch/libraries/user_models/CMakeLists.txt rename to ADHOCNET_2020/Epoch/libraries/user_models/CMakeLists.txt index c0b9e390cfd00f621feccef0559b2999ad958a05..706adb5e1af729b240b74cdedcc7075f722c8879 100644 --- a/ADHOCNET 2020/Epoch/libraries/user_models/CMakeLists.txt +++ b/ADHOCNET_2020/Epoch/libraries/user_models/CMakeLists.txt @@ -1,6 +1,7 @@ option(WITH_USER_MODELS "Build the User Models library" ON) if (WITH_USER_MODELS) add_global_definitions(-DUSER_MODELS_LIB) + add_global_definitions(-DQROUTING) add_global_include_dir(src) add_srcs( src/routing_qrouting.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/aux_data_extractor.cpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/aux_data_extractor.cpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/aux_data_extractor.cpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/aux_data_extractor.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/aux_data_extractor.hpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/aux_data_extractor.hpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/aux_data_extractor.hpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/aux_data_extractor.hpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/confLoader.cpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/confLoader.cpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/confLoader.cpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/confLoader.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/confLoader.h b/ADHOCNET_2020/Epoch/libraries/user_models/src/confLoader.h similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/confLoader.h rename to ADHOCNET_2020/Epoch/libraries/user_models/src/confLoader.h diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_route.cpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_route.cpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_route.cpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_route.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_route.hpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_route.hpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_route.hpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_route.hpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_table.cpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_table.cpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_table.cpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_table.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_table.hpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_table.hpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/qrouting_table.hpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/qrouting_table.hpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/routing_qrouting.cpp b/ADHOCNET_2020/Epoch/libraries/user_models/src/routing_qrouting.cpp similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/routing_qrouting.cpp rename to ADHOCNET_2020/Epoch/libraries/user_models/src/routing_qrouting.cpp diff --git a/ADHOCNET 2020/Epoch/libraries/user_models/src/routing_qrouting.h b/ADHOCNET_2020/Epoch/libraries/user_models/src/routing_qrouting.h similarity index 100% rename from ADHOCNET 2020/Epoch/libraries/user_models/src/routing_qrouting.h rename to ADHOCNET_2020/Epoch/libraries/user_models/src/routing_qrouting.h diff --git a/ADHOCNET 2020/Original/libraries/user_models/CMakeLists.txt b/ADHOCNET_2020/Original/libraries/user_models/CMakeLists.txt similarity index 93% rename from ADHOCNET 2020/Original/libraries/user_models/CMakeLists.txt rename to ADHOCNET_2020/Original/libraries/user_models/CMakeLists.txt index c0b9e390cfd00f621feccef0559b2999ad958a05..706adb5e1af729b240b74cdedcc7075f722c8879 100644 --- a/ADHOCNET 2020/Original/libraries/user_models/CMakeLists.txt +++ b/ADHOCNET_2020/Original/libraries/user_models/CMakeLists.txt @@ -1,6 +1,7 @@ option(WITH_USER_MODELS "Build the User Models library" ON) if (WITH_USER_MODELS) add_global_definitions(-DUSER_MODELS_LIB) + add_global_definitions(-DQROUTING) add_global_include_dir(src) add_srcs( src/routing_qrouting.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/aux_data_extractor.cpp b/ADHOCNET_2020/Original/libraries/user_models/src/aux_data_extractor.cpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/aux_data_extractor.cpp rename to ADHOCNET_2020/Original/libraries/user_models/src/aux_data_extractor.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/aux_data_extractor.hpp b/ADHOCNET_2020/Original/libraries/user_models/src/aux_data_extractor.hpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/aux_data_extractor.hpp rename to ADHOCNET_2020/Original/libraries/user_models/src/aux_data_extractor.hpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/confLoader.cpp b/ADHOCNET_2020/Original/libraries/user_models/src/confLoader.cpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/confLoader.cpp rename to ADHOCNET_2020/Original/libraries/user_models/src/confLoader.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/confLoader.h b/ADHOCNET_2020/Original/libraries/user_models/src/confLoader.h similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/confLoader.h rename to ADHOCNET_2020/Original/libraries/user_models/src/confLoader.h diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/qrouting_route.cpp b/ADHOCNET_2020/Original/libraries/user_models/src/qrouting_route.cpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/qrouting_route.cpp rename to ADHOCNET_2020/Original/libraries/user_models/src/qrouting_route.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/qrouting_route.hpp b/ADHOCNET_2020/Original/libraries/user_models/src/qrouting_route.hpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/qrouting_route.hpp rename to ADHOCNET_2020/Original/libraries/user_models/src/qrouting_route.hpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/qrouting_table.cpp b/ADHOCNET_2020/Original/libraries/user_models/src/qrouting_table.cpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/qrouting_table.cpp rename to ADHOCNET_2020/Original/libraries/user_models/src/qrouting_table.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/qrouting_table.hpp b/ADHOCNET_2020/Original/libraries/user_models/src/qrouting_table.hpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/qrouting_table.hpp rename to ADHOCNET_2020/Original/libraries/user_models/src/qrouting_table.hpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/routing_qrouting.cpp b/ADHOCNET_2020/Original/libraries/user_models/src/routing_qrouting.cpp similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/routing_qrouting.cpp rename to ADHOCNET_2020/Original/libraries/user_models/src/routing_qrouting.cpp diff --git a/ADHOCNET 2020/Original/libraries/user_models/src/routing_qrouting.h b/ADHOCNET_2020/Original/libraries/user_models/src/routing_qrouting.h similarity index 100% rename from ADHOCNET 2020/Original/libraries/user_models/src/routing_qrouting.h rename to ADHOCNET_2020/Original/libraries/user_models/src/routing_qrouting.h diff --git a/ADHOCNET 2020/README.md b/ADHOCNET_2020/README.md similarity index 100% rename from ADHOCNET 2020/README.md rename to ADHOCNET_2020/README.md diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/README.md b/ADHOCNET_2020/Scenario/wireless_grid_2/README.md similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/README.md rename to ADHOCNET_2020/Scenario/wireless_grid_2/README.md diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/log.conf b/ADHOCNET_2020/Scenario/wireless_grid_2/log.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/log.conf rename to ADHOCNET_2020/Scenario/wireless_grid_2/log.conf diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/qrouting.conf b/ADHOCNET_2020/Scenario/wireless_grid_2/qrouting.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/qrouting.conf rename to ADHOCNET_2020/Scenario/wireless_grid_2/qrouting.conf diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/test.json b/ADHOCNET_2020/Scenario/wireless_grid_2/test.json similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/test.json rename to ADHOCNET_2020/Scenario/wireless_grid_2/test.json diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.app b/ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.app similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.app rename to ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.app diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.config b/ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.config similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.config rename to ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.config diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.display b/ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.display similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.display rename to ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.display diff --git a/ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.nodes b/ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.nodes similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_2/wireless_grid_2.nodes rename to ADHOCNET_2020/Scenario/wireless_grid_2/wireless_grid_2.nodes diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/README.md b/ADHOCNET_2020/Scenario/wireless_grid_3/README.md similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/README.md rename to ADHOCNET_2020/Scenario/wireless_grid_3/README.md diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/log.conf b/ADHOCNET_2020/Scenario/wireless_grid_3/log.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/log.conf rename to ADHOCNET_2020/Scenario/wireless_grid_3/log.conf diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/qrouting.conf b/ADHOCNET_2020/Scenario/wireless_grid_3/qrouting.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/qrouting.conf rename to ADHOCNET_2020/Scenario/wireless_grid_3/qrouting.conf diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/test.json b/ADHOCNET_2020/Scenario/wireless_grid_3/test.json similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/test.json rename to ADHOCNET_2020/Scenario/wireless_grid_3/test.json diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.app b/ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.app similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.app rename to ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.app diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.config b/ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.config similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.config rename to ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.config diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.display b/ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.display similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.display rename to ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.display diff --git a/ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.nodes b/ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.nodes similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_grid_3/wireless_grid_3.nodes rename to ADHOCNET_2020/Scenario/wireless_grid_3/wireless_grid_3.nodes diff --git a/ADHOCNET 2020/Scenario/wireless_toy/README.md b/ADHOCNET_2020/Scenario/wireless_toy/README.md similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/README.md rename to ADHOCNET_2020/Scenario/wireless_toy/README.md diff --git a/ADHOCNET 2020/Scenario/wireless_toy/log.conf b/ADHOCNET_2020/Scenario/wireless_toy/log.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/log.conf rename to ADHOCNET_2020/Scenario/wireless_toy/log.conf diff --git a/ADHOCNET 2020/Scenario/wireless_toy/qrouting.conf b/ADHOCNET_2020/Scenario/wireless_toy/qrouting.conf similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/qrouting.conf rename to ADHOCNET_2020/Scenario/wireless_toy/qrouting.conf diff --git a/ADHOCNET 2020/Scenario/wireless_toy/test.json b/ADHOCNET_2020/Scenario/wireless_toy/test.json similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/test.json rename to ADHOCNET_2020/Scenario/wireless_toy/test.json diff --git a/ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.app b/ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.app similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.app rename to ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.app diff --git a/ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.config b/ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.config similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.config rename to ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.config diff --git a/ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.display b/ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.display similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.display rename to ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.display diff --git a/ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.nodes b/ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.nodes similarity index 100% rename from ADHOCNET 2020/Scenario/wireless_toy/wireless_toy.nodes rename to ADHOCNET_2020/Scenario/wireless_toy/wireless_toy.nodes diff --git a/CHANGELOG.md b/CHANGELOG.md index c6f772a6e8fcde504a00acb75161faa2b140a288..84220f23700917ff059532c33684d71101b48b6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ +22/05/2022: +* Add Gitlab CI. + 22/11/2021: -* Add Q-routing with filtering and scenarios (IWCMC 2021) +* Add Q-routing with filtering and scenarios (IWCMC 2021). * Add extra scenario from phd. thesis. 03/03/2021: @@ -18,4 +21,4 @@ * Add/restore license header and license file. * Correct the reward (aux_q.cpp). * Add this changelog. -* Add Readme. \ No newline at end of file +* Add Readme. diff --git a/Dockerfile_common b/Dockerfile_common new file mode 100644 index 0000000000000000000000000000000000000000..fd243c2d415ab0fe21f84c8b588eaea271381088 --- /dev/null +++ b/Dockerfile_common @@ -0,0 +1,14 @@ +FROM ubuntu:bionic +ENV DEBIAN_FRONTEND noninteractive +ARG EXTRA_LIBS +ARG SOURCE + +RUN sed -i -e "s/archive.ubuntu.com/ubuntu.univ-nantes.fr/g" /etc/apt/sources.list && sed -i -e "s/security.ubuntu.com/ubuntu.univ-nantes.fr/g" /etc/apt/sources.list +RUN apt-get update -q && apt-get install git ca-certificates libssl-dev libpcap-dev libzmq3-dev libzmqpp-dev --no-install-recommends -qy && git clone $EXTRA_LIBS && echo "deb [trusted=yes] file:///$(pwd)/qualnet-9.3.0.1-extra-ubuntu18/eureka-pkgs unstable main" >> /etc/apt/sources.list && apt-get update -q && apt-get install eureka-qualnet-deps -qy && rm -r qualnet-9.3.0.1-extra-ubuntu18 && apt-get clean + +ENV HOME /data +WORKDIR /data +RUN git clone $SOURCE --depth 1 -b main +COPY patch_integration_qualnet_9.3.patch ./qualnet-9.3.0.1/ +RUN cd qualnet-9.3.0.1 && git apply patch_integration_qualnet_9.3.patch && . /etc/profile.d/eureka.sh && use_eureka && cmake -S ./ -B build -DCMAKE_BUILD_TYPE=Release +VOLUME ["/data"] diff --git a/Dockerfile_filtering b/Dockerfile_filtering new file mode 100644 index 0000000000000000000000000000000000000000..c517fa8cdd887fc3830bf58042261178d5430fa8 --- /dev/null +++ b/Dockerfile_filtering @@ -0,0 +1,3 @@ +ARG BASE_IMG +FROM $BASE_IMG:common +ADD IWCMC_2021/Q-routing_filtering/libraries/user_models ./qualnet-9.3.0.1/libraries/user_models diff --git a/Dockerfile_original b/Dockerfile_original new file mode 100644 index 0000000000000000000000000000000000000000..6f6369cf3ec8e3d87c31a4fef9c742c0be33f7c1 --- /dev/null +++ b/Dockerfile_original @@ -0,0 +1,15 @@ +FROM ubuntu:bionic +ENV DEBIAN_FRONTEND noninteractive +ARG EXTRA_LIBS +ARG SOURCE + +RUN apt-get update -q && apt-get install --no-install-recommends libexpat1 libexpat1-dev libssl1.0.0 libssl1.1 libssl-dev libsqlite3-0 libsqlite3-dev libpcap0.8 libpcap-dev libpcre32-3 libpcre3-dev libeigen3-dev libpthread-stubs0-dev libc6-dev libmariadb3 libmariadb-dev zlib1g-dev libgoogle-perftools4 libgoogle-perftools-dev gcc-7 g++-7 make unzip git file ca-certificates binutils pkg-config build-essential -qy && apt-get clean +RUN git clone $EXTRA_LIBS && cd qualnet-9.2.1-extra-ubuntu18 && apt-get update -q && dpkg -i ./*.deb && apt-get -f install -yq && apt-get clean && unzip protobuf-cpp-3.10.0.zip && cd protobuf-3.10.0 && ./configure && make && make install && cd .. && unzip fmt-6.0.0.zip && cd fmt-6.0.0 && mkdir build && cmake -S ./ -B build && cd build && make && make install && cd .. && ldconfig && cd ../.. && rm -r qualnet-9.2.1-extra-ubuntu18 + +ENV HOME /data +WORKDIR /data +RUN git clone $SOURCE --depth 1 -b master +COPY patch_integration_qualnet_9.2.patch ./qualnet-9.2.1/ +RUN cd qualnet-9.2.1 && git apply patch_integration_qualnet_9.2.patch && cmake -S ./ -B build -DCMAKE_BUILD_TYPE=Release +ADD ADHOCNET_2020/Original/libraries/user_models ./qualnet-9.2.1/libraries/user_models +VOLUME ["/data"] diff --git a/Dockerfile_original_iwcmc b/Dockerfile_original_iwcmc new file mode 100644 index 0000000000000000000000000000000000000000..050b57fc6c348a17dce80deef7ce2f236c497a19 --- /dev/null +++ b/Dockerfile_original_iwcmc @@ -0,0 +1,3 @@ +ARG BASE_IMG +FROM $BASE_IMG:common +ADD IWCMC_2021/Original/libraries/user_models ./qualnet-9.3.0.1/libraries/user_models diff --git a/IWCMC 2021/Original/libraries/user_models/CMakeLists.txt b/IWCMC 2021/Original/libraries/user_models/CMakeLists.txt deleted file mode 100644 index c0b9e390cfd00f621feccef0559b2999ad958a05..0000000000000000000000000000000000000000 --- a/IWCMC 2021/Original/libraries/user_models/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -option(WITH_USER_MODELS "Build the User Models library" ON) -if (WITH_USER_MODELS) - add_global_definitions(-DUSER_MODELS_LIB) - add_global_include_dir(src) - add_srcs( - src/routing_qrouting.cpp - src/routing_qrouting.h - src/qrouting_route.cpp - src/qrouting_route.hpp - src/qrouting_table.cpp - src/qrouting_table.hpp - src/confLoader.h - src/confLoader.cpp - src/aux_data_extractor.hpp - src/aux_data_extractor.cpp - ) - add_doxygen_inputs(src) -endif() - -add_feature_info(user_models WITH_USER_MODELS "User Models library") \ No newline at end of file diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/CMakeLists.txt b/IWCMC_2021/Original/libraries/user_models/CMakeLists.txt similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/CMakeLists.txt rename to IWCMC_2021/Original/libraries/user_models/CMakeLists.txt diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/CMakeLists.txt b/IWCMC_2021/Original/libraries/user_models/conf_loader/CMakeLists.txt similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/CMakeLists.txt rename to IWCMC_2021/Original/libraries/user_models/conf_loader/CMakeLists.txt diff --git a/IWCMC 2021/Original/libraries/user_models/src/confLoader.cpp b/IWCMC_2021/Original/libraries/user_models/conf_loader/src/confLoader.cpp similarity index 100% rename from IWCMC 2021/Original/libraries/user_models/src/confLoader.cpp rename to IWCMC_2021/Original/libraries/user_models/conf_loader/src/confLoader.cpp diff --git a/IWCMC 2021/Original/libraries/user_models/src/confLoader.h b/IWCMC_2021/Original/libraries/user_models/conf_loader/src/confLoader.h similarity index 100% rename from IWCMC 2021/Original/libraries/user_models/src/confLoader.h rename to IWCMC_2021/Original/libraries/user_models/conf_loader/src/confLoader.h diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/CMakeLists.txt b/IWCMC_2021/Original/libraries/user_models/data_extractor/CMakeLists.txt similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/CMakeLists.txt rename to IWCMC_2021/Original/libraries/user_models/data_extractor/CMakeLists.txt diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/src/aux_data_extractor.cpp b/IWCMC_2021/Original/libraries/user_models/data_extractor/src/aux_data_extractor.cpp similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/src/aux_data_extractor.cpp rename to IWCMC_2021/Original/libraries/user_models/data_extractor/src/aux_data_extractor.cpp diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/src/aux_data_extractor.hpp b/IWCMC_2021/Original/libraries/user_models/data_extractor/src/aux_data_extractor.hpp similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/data_extractor/src/aux_data_extractor.hpp rename to IWCMC_2021/Original/libraries/user_models/data_extractor/src/aux_data_extractor.hpp diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/CMakeLists.txt b/IWCMC_2021/Original/libraries/user_models/qrouting/CMakeLists.txt similarity index 91% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/CMakeLists.txt rename to IWCMC_2021/Original/libraries/user_models/qrouting/CMakeLists.txt index 798175a2135d59c092e09cf94c767e10c47eaae1..60e67ba90e0ccd129d1566d9f104d3c86b1b8358 100644 --- a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/CMakeLists.txt +++ b/IWCMC_2021/Original/libraries/user_models/qrouting/CMakeLists.txt @@ -11,7 +11,6 @@ if (WITH_USER_MODELS) src/qrouting_route.hpp src/qrouting_table.cpp src/qrouting_table.hpp - src/aux_linear_regression.hpp ) endif() endif() diff --git a/IWCMC 2021/Original/libraries/user_models/src/qrouting_route.cpp b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_route.cpp similarity index 100% rename from IWCMC 2021/Original/libraries/user_models/src/qrouting_route.cpp rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_route.cpp diff --git a/IWCMC 2021/Original/libraries/user_models/src/qrouting_route.hpp b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_route.hpp similarity index 100% rename from IWCMC 2021/Original/libraries/user_models/src/qrouting_route.hpp rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_route.hpp diff --git a/IWCMC 2021/Original/libraries/user_models/src/qrouting_table.cpp b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.cpp similarity index 87% rename from IWCMC 2021/Original/libraries/user_models/src/qrouting_table.cpp rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.cpp index ac33a267e238629f4cb289956f22e95cd6ee8aeb..f0bc5c42028aa9b843fd44f2498994b80f6bef62 100644 --- a/IWCMC 2021/Original/libraries/user_models/src/qrouting_table.cpp +++ b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.cpp @@ -74,7 +74,7 @@ namespace qrouting { endExplorationPhase = std::stoi(conf.get_conf("explorationPhase")) * SECOND; } if (conf.get_conf("epsilon") != "") { - epsilon = std::stod(conf.get_conf("epsilon")) * SECOND; + epsilon = std::stod(conf.get_conf("epsilon")); } if (conf.get_conf("timeout") != "") { timeout = std::stoi(conf.get_conf("timeout")) * SECOND; @@ -239,6 +239,38 @@ namespace qrouting { } } + void QVect::printConfigurtion(void (*p1)(Node*, const char*, const char*, NodeAddress, int, const char*, ...), Node* node, const char* app, const char* proto, NodeAddress addr, int random) const + { +#ifdef COGNET + p1(node, app, proto, addr, random, "Compilation = CogMod"); +#endif + char buffer[256]; + if (epsilon > 0) { + p1(node, app, proto, addr, random, "Epsilon updates = enabled"); + sprintf(buffer, "Epsilon value = %f", epsilon); + p1(node, app, proto, addr, random, buffer); + } + else { + p1(node, app, proto, addr, random, "Epsilon updates = disabled"); + } + p1(node, app, proto, addr, random, "Epoch updates = disabled"); + p1(node, app, proto, addr, random, "Linear regression = disabled"); + sprintf(buffer, "Periodic updates rates (s) = %llu", periodicUpdateRate / SECOND); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Timeout (s) = %llu", timeout / SECOND); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Timeout check rate (s) = %llu", timeoutCheckRate / SECOND); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Exploration (s) = %llu", endExplorationPhase / SECOND); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Init reward = %f", defaultReward); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Max hop per route = %u", maxRouteLength); + p1(node, app, proto, addr, random, buffer); + sprintf(buffer, "Learning rate = %f", alpha); + p1(node, app, proto, addr, random, buffer); + } + void QVect::extractRoutes(std::mutex* lock_file, std::ofstream* log_file, const NodeAddress nodeId, const std::vector<Address> nodeAddr, const clocktype now) const { std::lock_guard<std::mutex> guard(*lock_file); unsigned int nows = now / SECOND; diff --git a/IWCMC 2021/Original/libraries/user_models/src/qrouting_table.hpp b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.hpp similarity index 94% rename from IWCMC 2021/Original/libraries/user_models/src/qrouting_table.hpp rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.hpp index 906113ac5274cbcc3bdec5a8fc389ecc79e439f2..827f38ff878204a715c2a630eb654f74a1ca4f52 100644 --- a/IWCMC 2021/Original/libraries/user_models/src/qrouting_table.hpp +++ b/IWCMC_2021/Original/libraries/user_models/qrouting/src/qrouting_table.hpp @@ -36,6 +36,8 @@ knowledge of the CeCILL-C license and that you accept its terms. #pragma once #include "qrouting_route.hpp" #include <vector> +#include <memory> +#include <functional> namespace qrouting { #define USE_TIMEOUT_PENALITY @@ -72,6 +74,9 @@ namespace qrouting { int checkTimeout(Node* node, const clocktype& now); void printQTable() const; RandomSeed* getSeed() { return &randChoice; } + void printConfigurtion(void (*)(Node*, const char*, const char*, NodeAddress, int, const char*, ...), Node*, const char*, const char*, NodeAddress, int) const; + + // Extract method void extractRoutes(std::mutex* lock_file, std::ofstream* log_file, const NodeAddress nodeId, const std::vector<Address> nodeAddr, const clocktype now) const; void extractQTable(std::mutex* lock_file, std::ofstream* log_file, const NodeAddress nodeId, const std::vector<Address> nodeAddr, const clocktype now) const; #ifdef USE_HASH diff --git a/IWCMC 2021/Original/libraries/user_models/src/routing_qrouting.cpp b/IWCMC_2021/Original/libraries/user_models/qrouting/src/routing_qrouting.cpp similarity index 97% rename from IWCMC 2021/Original/libraries/user_models/src/routing_qrouting.cpp rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/routing_qrouting.cpp index ce2950986360c7de852a67b937cc7b6d5843b007..41d497ec22275c7d057c449d2e26b7c3688fdfe0 100644 --- a/IWCMC 2021/Original/libraries/user_models/src/routing_qrouting.cpp +++ b/IWCMC_2021/Original/libraries/user_models/qrouting/src/routing_qrouting.cpp @@ -26,9 +26,25 @@ As Qualnet uses events and messages, we reuse Bellman-Ford messages. #include "app_util.h" #include "routing_qrouting.h" #include "qrouting_table.hpp" -#define EnableExtractor 1 // With the argument -np > 1, it requires full C++11 // So not VS C++ 2013 and under // GCC 4.9+ OK +#ifdef ENABLE_EXTRACTOR // With the argument -np > 1, it requires full C++11 // So not VS C++ 2013 and under // GCC 4.9+ OK #include "aux_data_extractor.hpp" // data extractor #include <future> +#endif +#ifdef COGNET +enum { + MSG_COGNET_REFRESH +}; +#endif + +void QroutingHookToRedistribute( + Node* node, + NodeAddress destAddress, + NodeAddress destAddressMask, + NodeAddress nextHopAddress, + int interfaceIndex, + void* routeCost, + unsigned short receiverAsId); + namespace qrouting { //#define DEBUG_QTABLE #define nDEBUG @@ -104,6 +120,13 @@ namespace qrouting { RandomSeed checkTimeoutSeed; RandomSeed triggeredUpdateSeed; BOOL statsPrinted; + Qrouting() : triggeredUpdateScheduled(FALSE), statsPrinted(FALSE), numPeriodicUpdates(0) + , numTriggeredUpdates(0), numRouteAdvertisementsReceived(0), numRouteTimeouts(0), nextPeriodicUpdateTime(0) + { + periodicJitterSeed[0] = periodicJitterSeed[1] = periodicJitterSeed[2] = 0; + checkTimeoutSeed[0] = checkTimeoutSeed[1] = checkTimeoutSeed[2] = 0; + triggeredUpdateSeed[0] = triggeredUpdateSeed[1] = triggeredUpdateSeed[2] = 0; + } }; // @@ -140,18 +163,18 @@ namespace qrouting { ROUTING_BELLMANFORD_POST_UPDATE } PrintRouteTableType; -#if EnableExtractor +#ifdef ENABLE_EXTRACTOR class QTableExtractor : public DataExtractor<QTableExtractor> { friend class DataExtractor<QTableExtractor>; QTableExtractor() : DataExtractor("QTable") {} public: - virtual void extract(Node* node, boost::any callback = 0) { + virtual void extract(Node* node, any callback = 0) { if (logFile.is_open()) { std::vector<Address> nodeAddrs(node->numberInterfaces); for (int i = 0; i < node->numberInterfaces; i++) { NetworkGetInterfaceInfo(node, i, &nodeAddrs[i]); } - boost::any_cast<void(*)(Node*, std::mutex*, std::ofstream*, NodeAddress, std::vector<Address>)>(callback)(node, &logLock, &logFile, node->nodeId, nodeAddrs); + any_cast<void(*)(Node*, std::mutex*, std::ofstream*, NodeAddress, std::vector<Address>)>(callback)(node, &logLock, &logFile, node->nodeId, nodeAddrs); } } }; @@ -516,7 +539,7 @@ void RoutingQroutingInit(Node* node) APP_ROUTING_QROUTING, MSG_APP_CheckRouteTimeoutAlarm); MESSAGE_Send(node, newMsg, qrouting->q.getTimeoutCheckInterval() + randomDelay); -#if EnableExtractor +#ifdef ENABLE_EXTRACTOR DropExtractor::getInstance().scheduleLog(node, APP_ROUTING_QROUTING); #endif // Dynamic address @@ -592,7 +615,7 @@ void RoutingQroutingLayer(Node* node, Message* msg) HandleFromTransport(node, msg); break; } -#if EnableExtractor +#ifdef ENABLE_EXTRACTOR case MSG_LOGNOW: { AppExtractor::getInstance().extract(node); @@ -638,7 +661,7 @@ void RoutingQroutingFinalize(Node* node, int interfaceIndex) { using namespace qrouting; Qrouting* qrouting = (Qrouting*)node->appData.qrouting; -#if EnableExtractor +#ifdef ENABLE_EXTRACTOR RouteExtractor::getInstance().extract(node, RouteQroutingExtraction); #endif if (node->get_networkData()->networkProtocol == NETWORK_IPV6) @@ -1309,6 +1332,7 @@ namespace qrouting { sprintf(buf, "Number of update packets received = %d", qrouting->numRouteAdvertisementsReceived); IO_PrintStat(node, "Application", "Qrouting", ANY_DEST, -1, buf); + qrouting->q.printConfigurtion(IO_PrintStat, node, "Application", "Qrouting", ANY_DEST, -1); } //----------------------------------------------------------------------------- @@ -1445,7 +1469,8 @@ void QroutingHookToRedistribute( NodeAddress destAddressMask, NodeAddress nextHopAddress, int interfaceIndex, - void* routeCost) + void* routeCost, + unsigned short receiverAsId) { using namespace qrouting; int cost = *(int*)routeCost; diff --git a/IWCMC 2021/Original/libraries/user_models/src/routing_qrouting.h b/IWCMC_2021/Original/libraries/user_models/qrouting/src/routing_qrouting.h similarity index 100% rename from IWCMC 2021/Original/libraries/user_models/src/routing_qrouting.h rename to IWCMC_2021/Original/libraries/user_models/qrouting/src/routing_qrouting.h diff --git a/IWCMC 2021/Q-routing with filtering/libraries/CMakeLists.txt b/IWCMC_2021/Q-routing_filtering/libraries/CMakeLists.txt similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/CMakeLists.txt rename to IWCMC_2021/Q-routing_filtering/libraries/CMakeLists.txt diff --git a/IWCMC_2021/Q-routing_filtering/libraries/user_models/CMakeLists.txt b/IWCMC_2021/Q-routing_filtering/libraries/user_models/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1faa26857875f3bb41b85733a91b2257c872f819 --- /dev/null +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/CMakeLists.txt @@ -0,0 +1,14 @@ +option(WITH_USER_MODELS "Build the User Models library" ON) +if (WITH_USER_MODELS) + add_global_definitions(-DUSER_MODELS_LIB) + foreach (optional_lib + conf_loader + data_extractor + qrouting) + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${optional_lib}) + add_subdirectory(${optional_lib}) + endif () + endforeach () +endif() + +add_feature_info(user_models WITH_USER_MODELS "User Models library") \ No newline at end of file diff --git a/IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/CMakeLists.txt b/IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..66f1587073f5e9467ab05defc9ccac4a0223ec37 --- /dev/null +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/CMakeLists.txt @@ -0,0 +1,12 @@ +if (WITH_USER_MODELS) + option(CONFLOADER "Configuration loader" ON) + add_global_definitions(-DUSER_CONF_LOADER) + if (CONFLOADER) + add_global_include_dir(src) + add_srcs( + src/confLoader.h + src/confLoader.cpp + ) + add_doxygen_inputs(src) + endif() +endif() diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/src/confLoader.cpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/src/confLoader.cpp similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/src/confLoader.cpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/src/confLoader.cpp diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/src/confLoader.h b/IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/src/confLoader.h similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/conf_loader/src/confLoader.h rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/conf_loader/src/confLoader.h diff --git a/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/CMakeLists.txt b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..8bbcb9ef0b66964860524aa7152416d62b2b909a --- /dev/null +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/CMakeLists.txt @@ -0,0 +1,14 @@ +if (WITH_USER_MODELS) + if (CONFLOADER) + option(ENABLE_EXTRACTOR "Metric extractor included in Q-routing" ON) + if(ENABLE_EXTRACTOR) + add_global_include_dir(src) + add_global_definitions(-DENABLE_EXTRACTOR) + add_srcs( + src/aux_data_extractor.hpp + src/aux_data_extractor.cpp + ) + add_doxygen_inputs(src) + endif() + endif() +endif() diff --git a/IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.cpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.cpp similarity index 73% rename from IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.cpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.cpp index 7459f3c54a42d9fcfe9313d623a0f398419ea264..c846a9e918795e8b976b10162d7b12aecf5c25f6 100644 --- a/IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.cpp +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.cpp @@ -38,13 +38,13 @@ knowledge of the CeCILL-C license and that you accept its terms. #include "app_cbr.h" #include "network_ip.h" -void RouteExtractor::extract(Node* node, boost::any extra_parameter) { +void RouteExtractor::extract(Node* node, any extra_parameter) { if (logFile.is_open()) { std::vector<Address> nodeAddrs(node->numberInterfaces); for (int i = 0; i < node->numberInterfaces; i++) { NetworkGetInterfaceInfo(node, i, &nodeAddrs[i]); } - boost::any_cast<void(*)(Node*, std::mutex*, std::ofstream*, NodeAddress, std::vector<Address>)>(extra_parameter)(node, &logLock, &logFile, node->nodeId, nodeAddrs); + any_cast<void(*)(Node*, std::mutex*, std::ofstream*, NodeAddress, std::vector<Address>)>(extra_parameter)(node, &logLock, &logFile, node->nodeId, nodeAddrs); } } @@ -55,7 +55,7 @@ void asyncDropExtraction(NodeAddress nodeId, clocktype now, STAT_NetStatistics n *log_file << networkStats.GetPacketsDroppedQueueOverflow().GetValueAsInt(now) << std::endl; } -void DropExtractor::extract(Node* node, boost::any extra_parameter) { +void DropExtractor::extract(Node* node, any extra_parameter) { if (logFile.is_open()) { auto handler = std::async(std::launch::async, asyncDropExtraction, node->nodeId, node->getNodeTime(), *node->get_networkVar()->newStats, &logLock, &logFile); } @@ -84,7 +84,7 @@ void asyncAppExtraction(AppInfo appList, clocktype now, std::mutex* lock_file, s } } -void AppExtractor::extract(Node* node, boost::any extra_parameter) { +void AppExtractor::extract(Node* node, any extra_parameter) { if (logFile.is_open()) { AppInfo* appList = node->appData.appPtr; for (; appList != NULL; appList = appList->appNext) { @@ -98,9 +98,40 @@ void asyncBatteryExtraction(NodeAddress nodeId, clocktype now, double remainingB log_file->operator<<(nodeId) << ";" << now / SECOND << ";" << (int)std::round(remainingBattery) << std::endl; } -void BatteryExtractor::extract(Node* node, boost::any extra_parameter) +void BatteryExtractor::extract(Node* node, any extra_parameter) { if (logFile.is_open()) { auto handler = std::async(std::launch::async, asyncBatteryExtraction, node->nodeId, node->getNodeTime(), BatteryGetRemainingCharge(node), &logLock, &logFile); } -} \ No newline at end of file +} + +void ForwardTableIPv4Extractor::extract(Node* node, any unuse_parameter) +{ + NetworkDataIp* ip = node->get_networkVar(); + NetworkForwardingTable* rt = &ip->forwardTable; + if (logFile.is_open()) { + std::vector<Address> nodeAddrs(node->numberInterfaces); + for (int i = 0; i < node->numberInterfaces; i++) { + NetworkGetInterfaceInfo(node, i, &nodeAddrs[i]); + } + std::lock_guard<std::mutex> guard(logLock); + unsigned int nows = node->getNodeTime() / SECOND; + logFile << nows << "NODEINFO;" << node->nodeId; + char buf[20]; + for (size_t i = 0; i < nodeAddrs.size(); i++) { + IO_ConvertIpAddressToString(nodeAddrs[i].interfaceAddr.ipv4, buf); + logFile << ";" << buf; + } + logFile << std::endl; + for (int i = 0; i < rt->size; i++) + { + char address[20]; + IO_ConvertIpAddressToString(NetworkIpGetInterfaceAddress(node, rt->row[i].interfaceIndex), address); + logFile << address << ";"; + IO_ConvertIpAddressToString(rt->row[i].destAddress, address); + logFile << address << ";"; + IO_ConvertIpAddressToString(rt->row[i].nextHopAddress, address); + logFile << address << ";" << rt->row[i].cost << ";" << rt->row[i].cost << ";1;0" << std::endl; + } + } +} diff --git a/IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.hpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.hpp similarity index 81% rename from IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.hpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.hpp index 7dfbd145503259d39b2ca469beef15d07d949c46..85c2bf3c0c2422fac1c969e513788c0e6c661c38 100644 --- a/IWCMC 2021/Original/libraries/user_models/src/aux_data_extractor.hpp +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/data_extractor/src/aux_data_extractor.hpp @@ -39,8 +39,15 @@ knowledge of the CeCILL-C license and that you accept its terms. #include <ios> #include "api.h" #include "confLoader.h" +#if __cplusplus == 201703L +#include <any> +using std::any; +using std::any_cast; +#else #include <boost/any.hpp> - +using boost::any; +using boost::any_cast; +#endif #define CONF_FILE "log.conf" enum @@ -61,7 +68,7 @@ protected: if ((BOOL)std::stoi(conf.get_conf("EnableLog" + logType))) { logFile.open(conf.get_conf("logFile" + logType) + ".csv", std::ios::out | std::ios::trunc); if (conf.get_conf("logRate" + logType) != "") { - logRate = std::round(std::stod(conf.get_conf("logRate" + logType)) * SECOND); + logRate = std::lround(std::stod(conf.get_conf("logRate" + logType)) * SECOND); } } } @@ -74,7 +81,7 @@ protected: } } public: - virtual void extract(Node* node, boost::any extra_parameter) = 0; + virtual void extract(Node* node, any extra_parameter) = 0; void scheduleLog(Node* node, AppType app) { Message* log = MESSAGE_Alloc(node, APP_LAYER, @@ -93,26 +100,33 @@ class RouteExtractor : public DataExtractor<RouteExtractor> { friend class DataExtractor<RouteExtractor>; RouteExtractor() : DataExtractor("Route") {} public: - virtual void extract(Node* node, boost::any callback); + virtual void extract(Node* node, any callback); }; class DropExtractor : public DataExtractor<DropExtractor> { friend class DataExtractor<DropExtractor>; DropExtractor() : DataExtractor("Drop") {} public: - virtual void extract(Node* node, boost::any extra_parameter = 0); + virtual void extract(Node* node, any extra_parameter = 0); }; class AppExtractor : public DataExtractor<AppExtractor> { friend class DataExtractor<AppExtractor>; AppExtractor() : DataExtractor("CBR") {} public: - virtual void extract(Node* node, boost::any extra_parameter = 0); + virtual void extract(Node* node, any extra_parameter = 0); }; class BatteryExtractor : public DataExtractor<BatteryExtractor> { friend class DataExtractor<BatteryExtractor>; BatteryExtractor() : DataExtractor("Battery") {} public: - virtual void extract(Node* node, boost::any unuse_parameter = 0); + virtual void extract(Node* node, any unuse_parameter = 0); +}; + +class ForwardTableIPv4Extractor : public DataExtractor<ForwardTableIPv4Extractor> { + friend class DataExtractor<ForwardTableIPv4Extractor>; + ForwardTableIPv4Extractor() : DataExtractor("ForwardTableIPv4"){} +public: + virtual void extract(Node* node, any unuse_parameter = 0); }; \ No newline at end of file diff --git a/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/CMakeLists.txt b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..60e67ba90e0ccd129d1566d9f104d3c86b1b8358 --- /dev/null +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/CMakeLists.txt @@ -0,0 +1,16 @@ +if (WITH_USER_MODELS) + option(QROUTING "Q-routing routing protocol" ON) + if (QROUTING) + add_global_definitions(-DQROUTING) + add_global_include_dir(src) + add_doxygen_inputs(src) + add_srcs( + src/routing_qrouting.cpp + src/routing_qrouting.h + src/qrouting_route.cpp + src/qrouting_route.hpp + src/qrouting_table.cpp + src/qrouting_table.hpp + ) + endif() +endif() diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.cpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.cpp similarity index 98% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.cpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.cpp index 5337d9c475bd0e696a360028f46d5742a5de6f5a..483ce76141f68cf4755a8c8e43f55baa048415cf 100644 --- a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.cpp +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.cpp @@ -39,8 +39,6 @@ knowledge of the CeCILL-C license and that you accept its terms. namespace qrouting { unsigned int Route::samplesBeforeEndTrial = 3; unsigned int Route::samplesForAverageLatency = 7; - unsigned short Route::coefRSSI = 1; - unsigned short Route::coefLatency = 1; template <template<typename, class> class V, typename T, class A, typename = typename std::enable_if<std::is_arithmetic<T>::value, T>::type> inline T average_container(const V<T, A>& deq) { return deq.empty() ? 0 : std::accumulate(deq.begin(), deq.end(), 0) / (T)deq.size(); } diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.hpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.hpp similarity index 97% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.hpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.hpp index 444d1473fc8bb476d44884a61c0bc4f6ece330e6..d746fb270ca5e891fcae80f7d9c8134ff6332bc4 100644 --- a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_route.hpp +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_route.hpp @@ -98,8 +98,6 @@ namespace qrouting { static void setNbSamplesAverageLatency(const unsigned int nbSamples) { Route::samplesForAverageLatency = nbSamples; } static void setNbSamplesEndTrial(const unsigned int nbSamples) { Route::samplesBeforeEndTrial = nbSamples; } - static void setCoefLatency(const unsigned short coef) { Route::coefLatency = coef; } - static void setCoefRSSI(const unsigned short coef) { Route::coefRSSI = coef; } void setOnTrial(bool value) { onTrial = value; } bool getOnTrial() const { return onTrial; } diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_table.cpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_table.cpp similarity index 99% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_table.cpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_table.cpp index fdb11c8781424262702193dd34cc90cd53650270..97ddcbfc01035ccd2f661024aa81cf5e5f6f371a 100644 --- a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_table.cpp +++ b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_table.cpp @@ -160,12 +160,7 @@ namespace qrouting { { if (now > endExplorationPhase) { for (Route* elm : routesToUpdate) { - if (linearRegressionStatus) { - elm->updateRewardLR(alpha, maxPredictedValue, now, periodicUpdateRate); - } - else { - elm->updateReward(alpha); - } + elm->updateReward(alpha); Route tmp(chooseAction(elm->getDestAddr(), elm->getSubnetMask())); NetworkUpdateForwardingTable( node, diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_table.hpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_table.hpp similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/qrouting_table.hpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/qrouting_table.hpp diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/routing_qrouting.cpp b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/routing_qrouting.cpp similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/routing_qrouting.cpp rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/routing_qrouting.cpp diff --git a/IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/routing_qrouting.h b/IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/routing_qrouting.h similarity index 100% rename from IWCMC 2021/Q-routing with filtering/libraries/user_models/qrouting/src/routing_qrouting.h rename to IWCMC_2021/Q-routing_filtering/libraries/user_models/qrouting/src/routing_qrouting.h diff --git a/IWCMC 2021/README.md b/IWCMC_2021/README.md similarity index 100% rename from IWCMC 2021/README.md rename to IWCMC_2021/README.md diff --git a/IWCMC 2021/Scenario/hipo/README.md b/IWCMC_2021/Scenario/hipo/README.md similarity index 100% rename from IWCMC 2021/Scenario/hipo/README.md rename to IWCMC_2021/Scenario/hipo/README.md diff --git a/IWCMC 2021/Scenario/hipo/hipo.app b/IWCMC_2021/Scenario/hipo/hipo.app similarity index 100% rename from IWCMC 2021/Scenario/hipo/hipo.app rename to IWCMC_2021/Scenario/hipo/hipo.app diff --git a/IWCMC 2021/Scenario/hipo/hipo.config b/IWCMC_2021/Scenario/hipo/hipo.config similarity index 100% rename from IWCMC 2021/Scenario/hipo/hipo.config rename to IWCMC_2021/Scenario/hipo/hipo.config diff --git a/IWCMC 2021/Scenario/hipo/hipo.display b/IWCMC_2021/Scenario/hipo/hipo.display similarity index 100% rename from IWCMC 2021/Scenario/hipo/hipo.display rename to IWCMC_2021/Scenario/hipo/hipo.display diff --git a/IWCMC 2021/Scenario/hipo/hipo.nodes b/IWCMC_2021/Scenario/hipo/hipo.nodes similarity index 100% rename from IWCMC 2021/Scenario/hipo/hipo.nodes rename to IWCMC_2021/Scenario/hipo/hipo.nodes diff --git a/IWCMC 2021/Scenario/hipo/log.conf b/IWCMC_2021/Scenario/hipo/log.conf similarity index 100% rename from IWCMC 2021/Scenario/hipo/log.conf rename to IWCMC_2021/Scenario/hipo/log.conf diff --git a/IWCMC 2021/Scenario/hipo/qrouting.conf b/IWCMC_2021/Scenario/hipo/qrouting.conf similarity index 100% rename from IWCMC 2021/Scenario/hipo/qrouting.conf rename to IWCMC_2021/Scenario/hipo/qrouting.conf diff --git a/IWCMC 2021/Scenario/hipo/test.json b/IWCMC_2021/Scenario/hipo/test.json similarity index 100% rename from IWCMC 2021/Scenario/hipo/test.json rename to IWCMC_2021/Scenario/hipo/test.json diff --git a/IWCMC 2021/Scenario/wireless_grid_2/README.md b/IWCMC_2021/Scenario/wireless_grid_2/README.md similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/README.md rename to IWCMC_2021/Scenario/wireless_grid_2/README.md diff --git a/IWCMC 2021/Scenario/wireless_grid_2/log.conf b/IWCMC_2021/Scenario/wireless_grid_2/log.conf similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/log.conf rename to IWCMC_2021/Scenario/wireless_grid_2/log.conf diff --git a/IWCMC 2021/Scenario/wireless_grid_2/qrouting.conf b/IWCMC_2021/Scenario/wireless_grid_2/qrouting.conf similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/qrouting.conf rename to IWCMC_2021/Scenario/wireless_grid_2/qrouting.conf diff --git a/IWCMC 2021/Scenario/wireless_grid_2/test.json b/IWCMC_2021/Scenario/wireless_grid_2/test.json similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/test.json rename to IWCMC_2021/Scenario/wireless_grid_2/test.json diff --git a/IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.app b/IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.app similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.app rename to IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.app diff --git a/IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.config b/IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.config similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.config rename to IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.config diff --git a/IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.display b/IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.display similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.display rename to IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.display diff --git a/IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.nodes b/IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.nodes similarity index 100% rename from IWCMC 2021/Scenario/wireless_grid_2/wireless_grid_2.nodes rename to IWCMC_2021/Scenario/wireless_grid_2/wireless_grid_2.nodes diff --git a/MLN 2019/README.md b/MLN_2019/README.md similarity index 100% rename from MLN 2019/README.md rename to MLN_2019/README.md diff --git a/MLN 2019/Scenario/grid94/README.md b/MLN_2019/Scenario/grid94/README.md similarity index 100% rename from MLN 2019/Scenario/grid94/README.md rename to MLN_2019/Scenario/grid94/README.md diff --git a/MLN 2019/Scenario/grid94/Seeds.txt b/MLN_2019/Scenario/grid94/Seeds.txt similarity index 100% rename from MLN 2019/Scenario/grid94/Seeds.txt rename to MLN_2019/Scenario/grid94/Seeds.txt diff --git a/MLN 2019/Scenario/grid94/grid94.app b/MLN_2019/Scenario/grid94/grid94.app similarity index 100% rename from MLN 2019/Scenario/grid94/grid94.app rename to MLN_2019/Scenario/grid94/grid94.app diff --git a/MLN 2019/Scenario/grid94/grid94.config b/MLN_2019/Scenario/grid94/grid94.config similarity index 100% rename from MLN 2019/Scenario/grid94/grid94.config rename to MLN_2019/Scenario/grid94/grid94.config diff --git a/MLN 2019/Scenario/grid94/grid94.display b/MLN_2019/Scenario/grid94/grid94.display similarity index 100% rename from MLN 2019/Scenario/grid94/grid94.display rename to MLN_2019/Scenario/grid94/grid94.display diff --git a/MLN 2019/Scenario/grid94/grid94.nodes b/MLN_2019/Scenario/grid94/grid94.nodes similarity index 100% rename from MLN 2019/Scenario/grid94/grid94.nodes rename to MLN_2019/Scenario/grid94/grid94.nodes diff --git a/MLN 2019/Scenario/grid94/log.conf b/MLN_2019/Scenario/grid94/log.conf similarity index 100% rename from MLN 2019/Scenario/grid94/log.conf rename to MLN_2019/Scenario/grid94/log.conf diff --git a/MLN 2019/Scenario/grid94/qrouting.conf b/MLN_2019/Scenario/grid94/qrouting.conf similarity index 100% rename from MLN 2019/Scenario/grid94/qrouting.conf rename to MLN_2019/Scenario/grid94/qrouting.conf diff --git a/MLN 2019/Scenario/toy_example/README.md b/MLN_2019/Scenario/toy_example/README.md similarity index 100% rename from MLN 2019/Scenario/toy_example/README.md rename to MLN_2019/Scenario/toy_example/README.md diff --git a/MLN 2019/Scenario/toy_example/Seeds.txt b/MLN_2019/Scenario/toy_example/Seeds.txt similarity index 100% rename from MLN 2019/Scenario/toy_example/Seeds.txt rename to MLN_2019/Scenario/toy_example/Seeds.txt diff --git a/MLN 2019/Scenario/toy_example/log.conf b/MLN_2019/Scenario/toy_example/log.conf similarity index 100% rename from MLN 2019/Scenario/toy_example/log.conf rename to MLN_2019/Scenario/toy_example/log.conf diff --git a/MLN 2019/Scenario/toy_example/qrouting.conf b/MLN_2019/Scenario/toy_example/qrouting.conf similarity index 100% rename from MLN 2019/Scenario/toy_example/qrouting.conf rename to MLN_2019/Scenario/toy_example/qrouting.conf diff --git a/MLN 2019/Scenario/toy_example/toy_example.app b/MLN_2019/Scenario/toy_example/toy_example.app similarity index 100% rename from MLN 2019/Scenario/toy_example/toy_example.app rename to MLN_2019/Scenario/toy_example/toy_example.app diff --git a/MLN 2019/Scenario/toy_example/toy_example.config b/MLN_2019/Scenario/toy_example/toy_example.config similarity index 100% rename from MLN 2019/Scenario/toy_example/toy_example.config rename to MLN_2019/Scenario/toy_example/toy_example.config diff --git a/MLN 2019/Scenario/toy_example/toy_example.display b/MLN_2019/Scenario/toy_example/toy_example.display similarity index 100% rename from MLN 2019/Scenario/toy_example/toy_example.display rename to MLN_2019/Scenario/toy_example/toy_example.display diff --git a/MLN 2019/Scenario/toy_example/toy_example.nodes b/MLN_2019/Scenario/toy_example/toy_example.nodes similarity index 100% rename from MLN 2019/Scenario/toy_example/toy_example.nodes rename to MLN_2019/Scenario/toy_example/toy_example.nodes diff --git a/MLN 2019/libraries/CMakeLists.txt b/MLN_2019/libraries/CMakeLists.txt similarity index 100% rename from MLN 2019/libraries/CMakeLists.txt rename to MLN_2019/libraries/CMakeLists.txt diff --git a/MLN 2019/libraries/user_models/CMakeLists.txt b/MLN_2019/libraries/user_models/CMakeLists.txt similarity index 100% rename from MLN 2019/libraries/user_models/CMakeLists.txt rename to MLN_2019/libraries/user_models/CMakeLists.txt diff --git a/MLN 2019/libraries/user_models/src/aux_data_extractor.cpp b/MLN_2019/libraries/user_models/src/aux_data_extractor.cpp similarity index 100% rename from MLN 2019/libraries/user_models/src/aux_data_extractor.cpp rename to MLN_2019/libraries/user_models/src/aux_data_extractor.cpp diff --git a/MLN 2019/libraries/user_models/src/aux_data_extractor.hpp b/MLN_2019/libraries/user_models/src/aux_data_extractor.hpp similarity index 100% rename from MLN 2019/libraries/user_models/src/aux_data_extractor.hpp rename to MLN_2019/libraries/user_models/src/aux_data_extractor.hpp diff --git a/MLN 2019/libraries/user_models/src/aux_q.cpp b/MLN_2019/libraries/user_models/src/aux_q.cpp similarity index 100% rename from MLN 2019/libraries/user_models/src/aux_q.cpp rename to MLN_2019/libraries/user_models/src/aux_q.cpp diff --git a/MLN 2019/libraries/user_models/src/aux_q.h b/MLN_2019/libraries/user_models/src/aux_q.h similarity index 100% rename from MLN 2019/libraries/user_models/src/aux_q.h rename to MLN_2019/libraries/user_models/src/aux_q.h diff --git a/MLN 2019/libraries/user_models/src/confLoader.cpp b/MLN_2019/libraries/user_models/src/confLoader.cpp similarity index 100% rename from MLN 2019/libraries/user_models/src/confLoader.cpp rename to MLN_2019/libraries/user_models/src/confLoader.cpp diff --git a/MLN 2019/libraries/user_models/src/confLoader.h b/MLN_2019/libraries/user_models/src/confLoader.h similarity index 100% rename from MLN 2019/libraries/user_models/src/confLoader.h rename to MLN_2019/libraries/user_models/src/confLoader.h diff --git a/MLN 2019/libraries/user_models/src/routing_qrouting.cpp b/MLN_2019/libraries/user_models/src/routing_qrouting.cpp similarity index 100% rename from MLN 2019/libraries/user_models/src/routing_qrouting.cpp rename to MLN_2019/libraries/user_models/src/routing_qrouting.cpp diff --git a/MLN 2019/libraries/user_models/src/routing_qrouting.h b/MLN_2019/libraries/user_models/src/routing_qrouting.h similarity index 100% rename from MLN 2019/libraries/user_models/src/routing_qrouting.h rename to MLN_2019/libraries/user_models/src/routing_qrouting.h diff --git a/README.md b/README.md index b2ab2b7c8e153ba1bb79c9fc385f1306345e11d4..aedf9c84e5f6242b24af0ac7f67f7a23a422fb18 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ In order to compile these source code, you need: #### Compilation requirement for Qualnet 9.2 / 9.3 In order to compile these source code, you need: -* Qualnet 9.2 Developer (to get access to Qualnet source code, not provided), +* Qualnet 9.2/9.3 Developer (to get access to Qualnet source code, not provided), * VS2017+ / GCC 7+ * CMake (>= 3.16) * all the libraries needed in order to compile Qualnet diff --git a/extra scenarios/grid94m1/README.md b/extra_scenarios/grid94m1/README.md similarity index 100% rename from extra scenarios/grid94m1/README.md rename to extra_scenarios/grid94m1/README.md diff --git a/extra scenarios/grid94m1/grid94.app b/extra_scenarios/grid94m1/grid94.app similarity index 100% rename from extra scenarios/grid94m1/grid94.app rename to extra_scenarios/grid94m1/grid94.app diff --git a/extra scenarios/grid94m1/grid94.config b/extra_scenarios/grid94m1/grid94.config similarity index 100% rename from extra scenarios/grid94m1/grid94.config rename to extra_scenarios/grid94m1/grid94.config diff --git a/extra scenarios/grid94m1/grid94.display b/extra_scenarios/grid94m1/grid94.display similarity index 100% rename from extra scenarios/grid94m1/grid94.display rename to extra_scenarios/grid94m1/grid94.display diff --git a/extra scenarios/grid94m1/grid94.nodes b/extra_scenarios/grid94m1/grid94.nodes similarity index 100% rename from extra scenarios/grid94m1/grid94.nodes rename to extra_scenarios/grid94m1/grid94.nodes diff --git a/extra scenarios/grid94m1/log.conf b/extra_scenarios/grid94m1/log.conf similarity index 100% rename from extra scenarios/grid94m1/log.conf rename to extra_scenarios/grid94m1/log.conf diff --git a/extra scenarios/grid94m1/qrouting.conf b/extra_scenarios/grid94m1/qrouting.conf similarity index 100% rename from extra scenarios/grid94m1/qrouting.conf rename to extra_scenarios/grid94m1/qrouting.conf diff --git a/extra scenarios/grid94m1/test.json b/extra_scenarios/grid94m1/test.json similarity index 100% rename from extra scenarios/grid94m1/test.json rename to extra_scenarios/grid94m1/test.json diff --git a/patch_integration_qualnet_9.3.patch b/patch_integration_qualnet_9.3.patch new file mode 100644 index 0000000000000000000000000000000000000000..2322a26423d677033800f21e7dafe1862e7a737c --- /dev/null +++ b/patch_integration_qualnet_9.3.patch @@ -0,0 +1,1844 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 65c082b..942d5ff 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -33,22 +33,7 @@ include(gen_references) + + project(${BUILD_TARGET}) + +-set(CMAKE_CXX_STANDARD 14) +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++set(CMAKE_CXX_STANDARD 17) + + if (UNIX) + if (NOT DEFINED HAVE_NO_PIE) +diff --git a/core/network/enum_NetworkRoutingAdminDistanceType.h.in b/core/network/enum_NetworkRoutingAdminDistanceType.h.in +index c670626..fedf66a 100644 +--- a/core/network/enum_NetworkRoutingAdminDistanceType.h.in ++++ b/core/network/enum_NetworkRoutingAdminDistanceType.h.in +@@ -31,6 +31,14 @@ static const int ROUTING_ADMIN_DISTANCE_OSPFv3 = 115; + static const int ROUTING_ADMIN_DISTANCE_OLSRv2_NIIGATA = 116; + static const int ROUTING_ADMIN_DISTANCE_FSRL = 210; + static const int ROUTING_ADMIN_DISTANCE_DEFAULT = 255; ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++static const int ROUTING_ADMIN_DISTANCE_QROUTING = 220; // Q-ROUTING ++#endif ++#ifdef MP_OLSR ++static const int ROUTING_ADMIN_DISTANCE_MPOLSRv2_NIIGATA = 221; // MP_OLSR ++#endif ++#endif + // end enum NetworkRoutingAdminDistanceType + #endif + @OTHER_INCLUDES@ +diff --git a/core/network/enum_NetworkRoutingProtocolType.h.in b/core/network/enum_NetworkRoutingProtocolType.h.in +index 67d757c..89f8dfa 100644 +--- a/core/network/enum_NetworkRoutingProtocolType.h.in ++++ b/core/network/enum_NetworkRoutingProtocolType.h.in +@@ -65,6 +65,14 @@ static const int ROUTING_PROTOCOL_OSPFv2_TYPE2_EXTERNAL = 5225; + static const int ROUTING_PROTOCOL_EIGRP_EXTERNAL = 5226; + static const int NETWORK_TUNNEL_GRE = 5227; + static const int ROUTING_PROTOCOL_NONE = 5228; ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++static const int ROUTING_PROTOCOL_QROUTING = 5220; // Q-ROUTING ++#endif ++#ifdef MP_OLSR ++static const int ROUTING_PROTOCOL_MPOLSRv2_NIIGATA = 5221; // MP_OLSR ++#endif ++#endif + // end enum NetworkRoutingProtocolType + #endif + @OTHER_INCLUDES@ +diff --git a/include/UrbanCache.h b/include/UrbanCache.h +index 5fa75ca..6d1113c 100644 +--- a/include/UrbanCache.h ++++ b/include/UrbanCache.h +@@ -9,6 +9,7 @@ + #include <boost/functional/hash.hpp> + #include <boost/shared_ptr.hpp> + #include "Cache.h" ++#include <functional> + + /// Coordinate type for the Urban Cache + typedef int UrbanCacheCoord; +@@ -64,7 +65,9 @@ inline bool operator==(const UrbanCacheLine& lhs, const UrbanCacheLine& rhs) + /// The hash algorithm has to combine the four endpoints of the line segment. + /// Therefore, this implementation uses boost::hash_combine that is based on + /// boost::hash_value. +-struct HashUrbanCacheLine : public std::unary_function<UrbanCacheLine, size_t> ++ ++ ++struct HashUrbanCacheLine : public std::function<std::size_t(UrbanCacheLine)> + { + size_t operator()(const UrbanCacheLine& v) const + { +diff --git a/include/application.h b/include/application.h +index 54d5903..9ea3eb8 100644 +--- a/include/application.h ++++ b/include/application.h +@@ -260,6 +260,18 @@ enum AppType + APP_UDM, + APP_GNB, + APP_PLACEHOLDER ++ ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++, APP_ROUTING_QROUTING ++#endif ++#ifdef MP_OLSR ++, APP_ROUTING_MPOLSRv2_NIIGATA ++#endif ++#ifdef UNFIXED_COMMS ++, APP_UNFIXED_COMMS ++#endif ++#endif + }; + + /// Information relevant to specific app layer protocol +@@ -596,6 +608,13 @@ struct AppData + std::map<Address, UInt8> btConnectedDestMaxPktSizeMap; + std::set<BtAppSessionData*, BtAppSeesionDataComp> btAppInfoSet; + std::map<Address, Message*> btReconnectionTimerMap; ++ ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ void* qrouting; /* QRouting - not standard */ ++#endif ++#endif ++ + }; + + #define APP_TIMER_SEND_PKT (1) /* for sending a packet */ +diff --git a/include/qualnet_socket.h b/include/qualnet_socket.h +index 5a0187f..4c28e66 100644 +--- a/include/qualnet_socket.h ++++ b/include/qualnet_socket.h +@@ -20,6 +20,7 @@ + + #include <list> + #include <deque> ++#include <functional> + + #include "message.h" + #include "types.h" +@@ -467,7 +468,8 @@ private: + // Class :: SOCK_MatchConnId + // DESCRIPTION :: Function object used to search socket with specified connection ID + // **/ +-struct SOCK_MatchConnId : public std::unary_function<SOCK_Socket*, bool> { ++ ++struct SOCK_MatchConnId : public std::function<bool(SOCK_Socket*)> { + int m_ConnId; + SOCK_MatchConnId(int connId):m_ConnId(connId) { } + bool operator()(const SOCK_Socket* sock) const +diff --git a/include/timer_manager.h b/include/timer_manager.h +index c4ad080..e56703c 100644 +--- a/include/timer_manager.h ++++ b/include/timer_manager.h +@@ -4,9 +4,10 @@ + #include <vector> + #include <queue> + #include <stack> ++#include <functional> + + +-struct MessageCompare : std::binary_function<Message*, Message*, bool> ++struct MessageCompare : std::function<bool(Message*, Message*)> + { + bool operator()(const Message *m1, const Message *m2) const + { +diff --git a/interfaces/agi/src/STK10/agi_interface_util_stk10_create.h b/interfaces/agi/src/STK10/agi_interface_util_stk10_create.h +index 68e52d0..1e207c9 100644 +--- a/interfaces/agi/src/STK10/agi_interface_util_stk10_create.h ++++ b/interfaces/agi/src/STK10/agi_interface_util_stk10_create.h +@@ -1,4 +1,7 @@ + #pragma once ++#ifdef _WIN32 ++#define _HAS_STD_BYTE 0 ++#endif + #include "..\agi_common_interfaces.h" + + IAgiInterfaceUtil* CreateSTK10Util(); +diff --git a/interfaces/agi/src/STK11/agi_interface_util_stk11_create.h b/interfaces/agi/src/STK11/agi_interface_util_stk11_create.h +index a2b7e24..ffa1e4f 100644 +--- a/interfaces/agi/src/STK11/agi_interface_util_stk11_create.h ++++ b/interfaces/agi/src/STK11/agi_interface_util_stk11_create.h +@@ -1,4 +1,7 @@ + #pragma once ++#ifdef _WIN32 ++#define _HAS_STD_BYTE 0 ++#endif + #include "..\agi_common_interfaces.h" + + IAgiInterfaceUtil* CreateSTK11Util(); +diff --git a/interfaces/agi/src/STK12/agi_interface_util_stk12_create.h b/interfaces/agi/src/STK12/agi_interface_util_stk12_create.h +index 06e8193..d39bfee 100644 +--- a/interfaces/agi/src/STK12/agi_interface_util_stk12_create.h ++++ b/interfaces/agi/src/STK12/agi_interface_util_stk12_create.h +@@ -1,4 +1,7 @@ + #pragma once ++#ifdef _WIN32 ++#define _HAS_STD_BYTE 0 ++#endif + #include "..\agi_common_interfaces.h" + + IAgiInterfaceUtil* CreateSTK12Util(); +diff --git a/interfaces/agi/src/STK9/agi_interface_util_stk9_create.h b/interfaces/agi/src/STK9/agi_interface_util_stk9_create.h +index c3f1a46..defa8de 100644 +--- a/interfaces/agi/src/STK9/agi_interface_util_stk9_create.h ++++ b/interfaces/agi/src/STK9/agi_interface_util_stk9_create.h +@@ -1,4 +1,8 @@ + #pragma once ++#ifdef _WIN32 ++#define _HAS_STD_BYTE 0 ++#endif ++ + #include "..\agi_common_interfaces.h" + + IAgiInterfaceUtil* CreateSTK9Util(); +diff --git a/interfaces/agi/src/agi_interface_id_impl.h b/interfaces/agi/src/agi_interface_id_impl.h +index d68032a..3cc0012 100644 +--- a/interfaces/agi/src/agi_interface_id_impl.h ++++ b/interfaces/agi/src/agi_interface_id_impl.h +@@ -1,5 +1,9 @@ + #pragma once + ++#ifdef _WIN32 ++#define _HAS_STD_BYTE 0 ++#endif ++ + #include <unknwn.h> + #include "agi_interface_smart_ptr.h" + +diff --git a/interfaces/agi/src/agi_interface_signal_impl.h b/interfaces/agi/src/agi_interface_signal_impl.h +index 97e7f37..4a44de2 100644 +--- a/interfaces/agi/src/agi_interface_signal_impl.h ++++ b/interfaces/agi/src/agi_interface_signal_impl.h +@@ -76,7 +76,7 @@ HRESULT STDMETHODCALLTYPE CAgiInterfaceSignalImpl<T>::QueryInterface( + return S_OK; + } + +- if (IsEqualIID(riid, __uuidof(IAgStkCommUtilSignal))) ++ if (IsEqualIID(riid, __uuidof(AgStkCommUtilLib::IAgStkCommUtilSignal))) + { + *ppvObject = static_cast<AgStkCommUtilLib::IAgStkCommUtilSignal*>(this); + AddRef(); +diff --git a/interfaces/auto-ipne/src/mdp_interface.cpp b/interfaces/auto-ipne/src/mdp_interface.cpp +index 3e3cb90..f8faa64 100644 +--- a/interfaces/auto-ipne/src/mdp_interface.cpp ++++ b/interfaces/auto-ipne/src/mdp_interface.cpp +@@ -87,7 +87,7 @@ BOOL MDPPacketHandler::MDPSwapBytes(unsigned char* mdpPacket, + BOOL in) + { + MdpMessage msg; +- register UInt32 len = 0; ++ UInt32 len = 0; + Int32 count = 0; + unsigned char* buffer = mdpPacket; + BOOL isServerMsg = TRUE; +diff --git a/interfaces/net-snmp/src/MIBII/ifmib_netsnmp.h b/interfaces/net-snmp/src/MIBII/ifmib_netsnmp.h +index 4c78ca5..440e8ad 100644 +--- a/interfaces/net-snmp/src/MIBII/ifmib_netsnmp.h ++++ b/interfaces/net-snmp/src/MIBII/ifmib_netsnmp.h +@@ -1,5 +1,5 @@ + #ifndef IFMIB_NETSNMP_H +-#define IFMIBNETSNMP_H ++#define IFMIB_NETSNMP_H + + + #define IFNAME 1 +diff --git a/interfaces/net-snmp/src/net-snmp/asn1_netsnmp.cpp b/interfaces/net-snmp/src/net-snmp/asn1_netsnmp.cpp +index 5a05303..0736c18 100644 +--- a/interfaces/net-snmp/src/net-snmp/asn1_netsnmp.cpp ++++ b/interfaces/net-snmp/src/net-snmp/asn1_netsnmp.cpp +@@ -424,9 +424,9 @@ asn_parse_int(u_char* data, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + static const char* errpre = "parse int"; +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; +- register long value = 0; ++ long value = 0; + + if (intsize != sizeof(long)) { + _asn_size_err(errpre, intsize, sizeof(long)); +@@ -487,9 +487,9 @@ asn_parse_unsigned_int(u_char* data, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + static const char* errpre = "parse uint"; +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; +- register u_long value = 0; ++ u_long value = 0; + + if (intsize != sizeof(long)) { + _asn_size_err(errpre, intsize, sizeof(long)); +@@ -551,8 +551,8 @@ asn_build_int(u_char* data, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + static const char* errpre = "build int"; +- register long integer; +- register u_long mask; ++ long integer; ++ u_long mask; + + if (intsize != sizeof(long)) { + _asn_size_err(errpre, intsize, sizeof(long)); +@@ -625,9 +625,9 @@ asn_build_unsigned_int(u_char* data, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + static const char* errpre = "build uint"; +- register u_long integer; +- register u_long mask; +- register u_long temp; ++ u_long integer; ++ u_long mask; ++ u_long temp; + int add_null_byte = 0; + + if (intsize != sizeof(long)) { +@@ -817,7 +817,7 @@ NetSnmpAgent::asn_build_string(u_char* data, + u_char* + asn_parse_header(u_char* data, size_t* datalength, u_char* type) + { +- register u_char* bufp; ++ u_char* bufp; + u_long asn_length; + + if (!data || !datalength || !type) { +@@ -1014,7 +1014,7 @@ asn_parse_length(u_char* data, u_long* length) + { + static const char* errpre = "parse length"; + char ebuf[128]; +- register u_char lengthbyte; ++ u_char lengthbyte; + + if (!data || !length) { + return NULL; +@@ -1159,10 +1159,10 @@ asn_parse_objid(u_char* data, + * leadingbyte ::= 1 7bitvalue + * lastbyte ::= 0 7bitvalue + */ +- register u_char* bufp = data; +- register oid* oidp = objid + 1; +- register u_long subidentifier; +- register long length; ++ u_char* bufp = data; ++ oid* oidp = objid + 1; ++ u_long subidentifier; ++ long length; + u_long asn_length; + size_t original_length = *objidlength; + +@@ -1274,11 +1274,11 @@ asn_build_objid(u_char* data, + * lastbyte ::= 0 7bitvalue + */ + size_t asnlength; +- register oid* op = objid; ++ oid* op = objid; + u_char objid_size[MAX_OID_LEN]; +- register u_long objid_val = 0; ++ u_long objid_val = 0; + u_long first_objid_val; +- register int i; ++ int i; + /* + * check if there are at least 2 sub-identifiers + */ +@@ -1429,7 +1429,7 @@ asn_parse_null(u_char* data, size_t* datalength, u_char* type) + /* + * ASN.1 null ::= 0x05 0x00 + */ +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; + + *type = *bufp++; +@@ -1509,7 +1509,7 @@ asn_parse_bitstring(u_char* data, + * bitstring ::= 0x03 asnlength unused {byte}* + */ + static const char* errpre = "parse bitstring"; +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; + + *type = *bufp++; +@@ -1614,9 +1614,9 @@ asn_parse_unsigned_int64(u_char* data, + */ + static const char* errpre = "parse uint64"; + const int uint64sizelimit = (4 * 2) + 1; +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; +- register u_long low = 0, high = 0; ++ u_long low = 0, high = 0; + + if (countersize != sizeof(struct counter64)) { + _asn_size_err(errpre, countersize, sizeof(struct counter64)); +@@ -1707,8 +1707,8 @@ asn_build_unsigned_int64(u_char* data, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + +- register u_long low, high; +- register u_long mask, mask2; ++ u_long low, high; ++ u_long mask, mask2; + int add_null_byte = 0; + size_t intsize; + +@@ -1859,9 +1859,9 @@ asn_parse_signed_int64(u_char* data, + static const char* errpre = "parse int64"; + const int int64sizelimit = (4 * 2) + 1; + char ebuf[128]; +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; +- register u_int low = 0, high = 0; ++ u_int low = 0, high = 0; + + if (countersize != sizeof(struct counter64)) { + _asn_size_err(errpre, countersize, sizeof(struct counter64)); +@@ -1957,7 +1957,7 @@ asn_build_signed_int64(u_char* data, + */ + + struct counter64 c64; +- register u_int mask, mask2; ++ u_int mask, mask2; + u_long low, high; + size_t intsize; + if (countersize != sizeof(struct counter64)) { +@@ -2043,7 +2043,7 @@ asn_parse_float(u_char* data, + size_t* datalength, + u_char* type, float* floatp, size_t floatsize) + { +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; + union { + float floatVal; +@@ -2197,7 +2197,7 @@ asn_parse_double(u_char* data, + size_t* datalength, + u_char* type, double* doublep, size_t doublesize) + { +- register u_char* bufp = data; ++ u_char* bufp = data; + u_long asn_length; + long tmp; + union { +@@ -2500,7 +2500,7 @@ asn_realloc_rbuild_int(u_char** pkt, size_t* pkt_len, + u_char type, const long* intp, size_t intsize) + { + static const char* errpre = "build int"; +- register long integer = *intp; ++ long integer = *intp; + int testvalue; + size_t start_offset = *offset; + +@@ -2622,7 +2622,7 @@ NetSnmpAgent::asn_realloc_rbuild_unsigned_int(u_char** pkt, size_t* pkt_len, + u_char type, const u_long* intp, size_t intsize) + { + static const char* errpre = "build uint"; +- register u_long integer = *intp; ++ u_long integer = *intp; + size_t start_offset = *offset; + + if (intsize != sizeof(unsigned long)) { +@@ -2728,8 +2728,8 @@ NetSnmpAgent::asn_realloc_rbuild_objid(u_char** pkt, size_t* pkt_len, + * leadingbyte ::= 1 7bitvalue + * lastbyte ::= 0 7bitvalue + */ +- register size_t i; +- register oid tmpint; ++ size_t i; ++ oid tmpint; + size_t start_offset = *offset; + const char* errpre = "build objid"; + +@@ -2930,7 +2930,7 @@ NetSnmpAgent::asn_realloc_rbuild_unsigned_int64(u_char** pkt, size_t* pkt_len, + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ +- register u_long low = cp->low, high = cp->high; ++ u_long low = cp->low, high = cp->high; + size_t intsize, start_offset = *offset; + int count; + +@@ -3110,7 +3110,7 @@ asn_realloc_rbuild_signed_int64(u_char** pkt, size_t* pkt_len, + /* + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ +- register long low = cp->low, high = cp->high; ++ long low = cp->low, high = cp->high; + size_t intsize, start_offset = *offset; + int count, testvalue = (high & 0x80000000) ? -1 : 0; + +diff --git a/interfaces/net-snmp/src/net-snmp/mib_netsnmp.cpp b/interfaces/net-snmp/src/net-snmp/mib_netsnmp.cpp +index c2aa9ed..7e54235 100644 +--- a/interfaces/net-snmp/src/net-snmp/mib_netsnmp.cpp ++++ b/interfaces/net-snmp/src/net-snmp/mib_netsnmp.cpp +@@ -901,7 +901,7 @@ NetSnmpAgent::get_wild_node(const char* name, oid* objid, size_t* objidlen) + + + void +-clear_tree_flags(register struct tree* tp) ++clear_tree_flags(struct tree* tp) + { + for (; tp; tp = tp->next_peer) { + tp->reported = 0; +diff --git a/interfaces/net-snmp/src/net-snmp/parse_netsnmp.cpp b/interfaces/net-snmp/src/net-snmp/parse_netsnmp.cpp +index b0ba6de..32a4c61 100644 +--- a/interfaces/net-snmp/src/net-snmp/parse_netsnmp.cpp ++++ b/interfaces/net-snmp/src/net-snmp/parse_netsnmp.cpp +@@ -548,7 +548,7 @@ NetSnmpAgent::is_labelchar(int ich) + int + NetSnmpAgent::parseQuoteString(FILE* fp, char* token, int maxtlen) + { +- register int ch; ++ int ch; + int count = 0; + int too_long = 0; + char* token_start = token; +@@ -592,10 +592,10 @@ NetSnmpAgent::parseQuoteString(FILE* fp, char* token, int maxtlen) + int + NetSnmpAgent::get_token(FILE* fp, char* token, int maxtlen) + { +- register int ch, ch_next; +- register char* cp = token; +- register int hash = 0; +- register struct tok* tp = NULL; ++ int ch, ch_next; ++ char* cp = token; ++ int hash = 0; ++ struct tok* tp = NULL; + int too_long = 0; + enum { bdigits, xdigits, other } seenSymbols; + +@@ -1403,8 +1403,8 @@ NetSnmpAgent::find_best_tree_node(const char* pattrn, struct tree* tree_top, + void + NetSnmpAgent::netsnmp_init_mib_internals(void) + { +- register struct tok* tp; +- register int b, i; ++ struct tok* tp; ++ int b, i; + int max_modc; + + if (tree_head) +@@ -1937,7 +1937,7 @@ NetSnmpAgent::get_tc(const char* descriptor, + struct enum_list* + NetSnmpAgent::parse_enumlist(FILE* fp, struct enum_list** retp) + { +- register int type; ++ int type; + char token[MAXTOKEN]; + struct enum_list* ep = NULL, **epp = &ep; + +@@ -2112,12 +2112,12 @@ NetSnmpAgent::tossObjectIdentifier(FILE* fp) + struct NetSnmpNode* + NetSnmpAgent::parse_objecttype(FILE* fp, char* name) + { +- register int type; ++ int type; + char token[MAXTOKEN]; + char nexttoken[MAXTOKEN]; + char quoted_string_buffer[MAXQUOTESTR]; + int nexttype, tctype; +- register struct NetSnmpNode* np; ++ struct NetSnmpNode* np; + + type = get_token(fp, token, MAXTOKEN); + if (type != SYNTAX) { +@@ -2501,10 +2501,10 @@ struct varbind_list* + struct NetSnmpNode* + NetSnmpAgent::parse_trapDefinition(FILE* fp, char* name) + { +- register int type; ++ int type; + char token[MAXTOKEN]; + char quoted_string_buffer[MAXQUOTESTR]; +- register struct NetSnmpNode* np; ++ struct NetSnmpNode* np; + + np = alloc_node(current_module); + if (np == NULL) +@@ -2601,10 +2601,10 @@ NetSnmpAgent::parse_trapDefinition(FILE* fp, char* name) + struct NetSnmpNode* + NetSnmpAgent::parse_notificationDefinition(FILE* fp, char* name) + { +- register int type; ++ int type; + char token[MAXTOKEN]; + char quoted_string_buffer[MAXQUOTESTR]; +- register struct NetSnmpNode* np; ++ struct NetSnmpNode* np; + + np = alloc_node(current_module); + if (np == NULL) +@@ -2949,8 +2949,8 @@ struct NetSnmpNode* + struct NetSnmpNode* + NetSnmpAgent::parse_objectid(FILE* fp, char* name) + { +- register int count; +- register struct subid_s* op, *nop; ++ int count; ++ struct subid_s* op, *nop; + int length; + struct subid_s loid[32]; + struct NetSnmpNode* np, *root = NULL, *oldnp = NULL; +@@ -3640,7 +3640,7 @@ int + NetSnmpAgent::getoid(FILE* fp, struct subid_s* id, /* an array of subids */ + int length) + { /* the length of the array */ +- register int count; ++ int count; + int type; + char token[MAXTOKEN]; + +diff --git a/interfaces/net-snmp/src/net-snmp/snmp_api_netsnmp.cpp b/interfaces/net-snmp/src/net-snmp/snmp_api_netsnmp.cpp +index c43038d..76e9329 100644 +--- a/interfaces/net-snmp/src/net-snmp/snmp_api_netsnmp.cpp ++++ b/interfaces/net-snmp/src/net-snmp/snmp_api_netsnmp.cpp +@@ -756,9 +756,9 @@ int + netsnmp_oid_equals(const unsigned int* in_name1, + size_t len1, const unsigned int* in_name2, size_t len2) + { +- register const unsigned int* name1 = in_name1; +- register const unsigned int* name2 = in_name2; +- register int len = len1; ++ const unsigned int* name1 = in_name1; ++ const unsigned int* name2 = in_name2; ++ int len = len1; + + /* + * len = minimum of len1 and len2 +@@ -796,9 +796,9 @@ int + snmp_oid_compare(const oid* in_name1, + size_t len1, const oid* in_name2, size_t len2) + { +- register int len; +- register const oid* name1 = in_name1; +- register const oid* name2 = in_name2; ++ int len; ++ const oid* name1 = in_name1; ++ const oid* name2 = in_name2; + + /* + * len = minimum of len1 and len2 +@@ -888,9 +888,9 @@ netsnmp_oid_compare_ll(const unsigned int* in_name1, + size_t len1, const unsigned int* in_name2, size_t len2, + size_t* offpt) + { +- register int len; +- register const unsigned int* name1 = in_name1; +- register const unsigned int* name2 = in_name2; ++ int len; ++ const unsigned int* name1 = in_name1; ++ const unsigned int* name2 = in_name2; + int initlen; + + /* +@@ -1644,9 +1644,9 @@ snmp_oid_ncompare(const oid* in_name1, + size_t len1, + const oid* in_name2, size_t len2, size_t max_len) + { +- register int len; +- register const oid* name1 = in_name1; +- register const oid* name2 = in_name2; ++ int len; ++ const oid* name1 = in_name1; ++ const oid* name2 = in_name2; + size_t min_len; + + /* +diff --git a/interfaces/net-snmp/src/net-snmp/snmpusm_netsnmp.cpp b/interfaces/net-snmp/src/net-snmp/snmpusm_netsnmp.cpp +index 267cec5..972ed4d 100644 +--- a/interfaces/net-snmp/src/net-snmp/snmpusm_netsnmp.cpp ++++ b/interfaces/net-snmp/src/net-snmp/snmpusm_netsnmp.cpp +@@ -246,7 +246,7 @@ usm_set_usmStateReference_sec_level(struct usmStateReference* ref, + int + asn_predict_int_length(int type, long number, size_t len) + { +- register u_long mask; ++ u_long mask; + + + if (len != sizeof(long)) +diff --git a/interfaces/net-snmp/src/netSnmpAgent.cpp b/interfaces/net-snmp/src/netSnmpAgent.cpp +index fd0824d..3412cff 100644 +--- a/interfaces/net-snmp/src/netSnmpAgent.cpp ++++ b/interfaces/net-snmp/src/netSnmpAgent.cpp +@@ -215,7 +215,7 @@ NetSnmpAgent::AsnBuildHeaderWithTruth(unsigned char* data, int* datalength, + */ + + unsigned char* +-NetSnmpAgent::AsnBuildObjId(register unsigned char* data, int* datalength, ++NetSnmpAgent::AsnBuildObjId(unsigned char* data, int* datalength, + unsigned char type, oid* objid,int objidlength) + { + /* +@@ -225,11 +225,11 @@ NetSnmpAgent::AsnBuildObjId(register unsigned char* data, int* datalength, + * lastbyte ::= 0 7bitvalue + */ + unsigned char buf[MAX_OID_LEN]; +- register unsigned char* bp = buf; +- register oid* op = objid; ++ unsigned char* bp = buf; ++ oid* op = objid; + int asnlength; +- register unsigned long subid, mask, testmask; +- register int bits, testbits; ++ unsigned long subid, mask, testmask; ++ int bits, testbits; + if (objidlength < 2) + { + *bp++ = 0; +@@ -305,7 +305,7 @@ NetSnmpAgent::AsnBuildObjId(register unsigned char* data, int* datalength, + */ + + unsigned char* +-NetSnmpAgent::AsnBuildHeader(register unsigned char* data, int* datalength, ++NetSnmpAgent::AsnBuildHeader(unsigned char* data, int* datalength, + unsigned char type, int length) + { + if (*datalength < 1) +@@ -570,8 +570,8 @@ NetSnmpAgent::AsnBuildUnsignedInt(unsigned char* data, int* datalength, + * ASN.1 integer ::= 0x02 asnlength byte {byte}* + */ + +- register unsigned long integer; +- register unsigned long mask; ++ unsigned long integer; ++ unsigned long mask; + int add_null_byte = 0; + + //if (intsize != sizeof (int)) +diff --git a/interfaces/net-snmp/src/netSnmpAgent.h b/interfaces/net-snmp/src/netSnmpAgent.h +index 805dfa9..e930e55 100644 +--- a/interfaces/net-snmp/src/netSnmpAgent.h ++++ b/interfaces/net-snmp/src/netSnmpAgent.h +@@ -2004,7 +2004,7 @@ public: + int* datalength, + unsigned char type, + int length); +- unsigned char* AsnBuildHeader(register unsigned char* data, ++ unsigned char* AsnBuildHeader(unsigned char* data, + int* datalength, + unsigned char type, int length); + unsigned char* AsnBuildInt(unsigned char* data, +@@ -2028,7 +2028,7 @@ public: + int* datalength, + unsigned char type, + char* string, int strlength); +- unsigned char* AsnBuildObjId(register unsigned char* data, ++ unsigned char* AsnBuildObjId(unsigned char* data, + int* datalength, + unsigned char type, + oid* objid, +diff --git a/interfaces/pas/src/packet_analyzer.cpp b/interfaces/pas/src/packet_analyzer.cpp +index 09dc9bf..4869448 100644 +--- a/interfaces/pas/src/packet_analyzer.cpp ++++ b/interfaces/pas/src/packet_analyzer.cpp +@@ -117,11 +117,11 @@ static char temp[] = "0123456789abcdef"; + #define QM 0x22 + + #define PRT_BUF_SZ 81 +-void hexprint( unsigned char nm, register unsigned char *inp, int len ) ++void hexprint( unsigned char nm, unsigned char *inp, int len ) + { +- register int i; ++ int i; + char prt_buf[PRT_BUF_SZ]; +- register char *ocharp; ++ char *ocharp; + + if (len > 0) printf("\n"); + while (len > 0) { +diff --git a/libraries/CMakeLists.txt b/libraries/CMakeLists.txt +index 7e45d7d..a011013 100644 +--- a/libraries/CMakeLists.txt ++++ b/libraries/CMakeLists.txt +@@ -10,7 +10,8 @@ foreach (optional_lib + tirem + umts + underwater +- urban) ++ urban ++ user_models) + if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${optional_lib}) + add_subdirectory(${optional_lib}) + endif () +diff --git a/libraries/cyber/advanced/src/certificate_wtls.cpp b/libraries/cyber/advanced/src/certificate_wtls.cpp +index 8a91ec3..4d852dd 100644 +--- a/libraries/cyber/advanced/src/certificate_wtls.cpp ++++ b/libraries/cyber/advanced/src/certificate_wtls.cpp +@@ -156,10 +156,15 @@ HMAC_hash(sslbyte *res, + length_t data_leng, + SecurityParameters *sp) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ unsigned int i; ++ length_t step3_leng = B_LENG + data_leng, step6_leng; ++#else + register unsigned int i; ++ register length_t step3_leng = B_LENG + data_leng, step6_leng; ++#endif + sslbyte h_res[20]; + length_t L = 0; +- register length_t step3_leng = B_LENG+data_leng, step6_leng; + sslbyte step1[B_LENG], *step2=(sslbyte *)xcalloc(step3_leng, 1), *step5; + + if (K_leng > B_LENG) +@@ -219,7 +224,11 @@ static void P_hash(sslbyte *res, + { + sslbyte *A=(sslbyte *)xcalloc(20+seed_leng, 1); + length_t L; ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t i, res_sz; ++#else + register length_t i, res_sz; ++#endif + + /* compute A[1] at first */ + HMAC_hash(A, &L, secret, secret_leng, seed, seed_leng, sp); +@@ -263,7 +272,11 @@ void PRF(sslbyte *res, + length_t seed_leng, + SecurityParameters *sp) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t labelseed_leng = label_leng + seed_leng; ++#else + register length_t labelseed_leng = label_leng+seed_leng; ++#endif + sslbyte *labelseed = (sslbyte *)xcalloc(labelseed_leng, 1); + + memcpy(labelseed, label, label_leng); +@@ -446,10 +459,17 @@ void key_block(sslbyte *cw_mac, sslbyte *cw_key, sslbyte *cw_iv, + { + sslbyte seed[34]; + uint16 seq_num = (sp->cur_seq/sp->refresh_seq)*(sp->refresh_seq); ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t macsz = sp->mac_key_size; ++ length_t keysz = sp->key_material_length; ++ length_t ivsz = sp->iv_size; ++ length_t keyblocksz = macsz + keysz + ivsz; ++#else + register length_t macsz = sp->mac_key_size; + register length_t keysz = sp->key_material_length; + register length_t ivsz = sp->iv_size; + register length_t keyblocksz = macsz + keysz + ivsz; ++#endif + sslbyte keyblock[40/*leng*/]; /* no cipher algorithm in WTLS needs > 40B */ + + memcpy(seed, &seq_num, sizeof(uint16)); +@@ -640,9 +660,7 @@ uint16_endian(sslbyte *in) + void + uint32_encode(sslbyte *result, uint32 in) + { +- register int i; +- +- for (i=0; i<4; i++) ++ for (int i=0; i<4; i++) + result[i] = (sslbyte)(in >> (24-i*8)); + } + uint32 +@@ -654,7 +672,11 @@ void + uint32_endian(sslbyte *in) + { + uint32 i; ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t j; ++#else + register length_t j; ++#endif + + memcpy(&i, in, sizeof(uint32)); + +@@ -666,9 +688,8 @@ uint32_endian(sslbyte *in) + void + uint64_encode(sslbyte *result, uint64 in) + { +- register int i; + +- for (i=0; i<4; i++) ++ for (int i=0; i<4; i++) + { + result[i] = (sslbyte)(in[0] >> (24-i*8)); + result[i+4] = (sslbyte)(in[1] >> (24-i*8)); +@@ -684,12 +705,11 @@ void + uint64_endian(sslbyte *in) + { + uint64 i; +- register length_t j; + + memcpy(&i[0], in, sizeof(uint32)); + memcpy(&i[1], in+sizeof(uint32), sizeof(uint32)); + +- for (j=0; j<4; j++) ++ for (length_t j=0; j<4; j++) + { + in[j] = (sslbyte)(i[0] >> (24-j*8)); + in[j+4] = (sslbyte)(i[1] >> (24-j*8)); +@@ -777,7 +797,11 @@ length_t WTLSText_encode(sslbyte *result, + uint16 length, + sslbyte *fragment) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t i = 0; ++#else + register length_t i=0; ++#endif + opaque record_type = (sslbyte) + ((content_type << 4) | ((flag?1:0)<<2) | ((seq_ind?1:0)<<1) | 0x1); + +diff --git a/libraries/cyber/advanced/src/crypto_certificate.cpp b/libraries/cyber/advanced/src/crypto_certificate.cpp +index e2ccf1d..5b31a1f 100644 +--- a/libraries/cyber/advanced/src/crypto_certificate.cpp ++++ b/libraries/cyber/advanced/src/crypto_certificate.cpp +@@ -805,7 +805,11 @@ length_t WTLSCertificate_encode(sslbyte *result, + sslbyte *to_be_signed_cert, + sslbyte *signature) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ length_t i = 0; ++#else + register length_t i=0; ++#endif + length_t sz; + + memcpy(&sz, to_be_signed_cert, sizeof(length_t)); +diff --git a/libraries/cyber/core/src/crypto_lib.cpp b/libraries/cyber/core/src/crypto_lib.cpp +index d7a15d6..a1b59d8 100644 +--- a/libraries/cyber/core/src/crypto_lib.cpp ++++ b/libraries/cyber/core/src/crypto_lib.cpp +@@ -36,7 +36,11 @@ + */ + static unsigned char high_to_hex(unsigned char in) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ unsigned char ch = (in >> 4) & 0xf; ++#else + register unsigned char ch = (in>>4) & 0xf; ++#endif + if (ch > 9) + return ch - 10 + 'A'; + else +@@ -44,7 +48,11 @@ static unsigned char high_to_hex(unsigned char in) + } + static unsigned char low_to_hex(unsigned char in) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ unsigned char ch = in & 0xf; ++#else + register unsigned char ch = in & 0xf; ++#endif + if (ch > 9) + return ch - 10 + 'A'; + else +diff --git a/libraries/cyber/core/src/network_ipsec.h b/libraries/cyber/core/src/network_ipsec.h +index 04c5c18..9a3375e 100644 +--- a/libraries/cyber/core/src/network_ipsec.h ++++ b/libraries/cyber/core/src/network_ipsec.h +@@ -396,7 +396,7 @@ typedef struct struct_haipe_spec_str + + /// Structure for rate for different encryption + /// and authorization algorithm +-typedef struct ++struct IPsecProcessingRate + { + clocktype hmacMd5Rate = 0; + clocktype hmacMd596Rate = 0; +@@ -404,7 +404,7 @@ typedef struct + clocktype hmacSha196Rate = 0; + clocktype desCbcRate = 0; + clocktype aesXcbcMac96Rate = 0; +-} IPsecProcessingRate; ++} ; + + + struct AlgoDetails +diff --git a/libraries/cyber/hostmodel/include/host_model_types.h b/libraries/cyber/hostmodel/include/host_model_types.h +index 1e73b66..2785d72 100644 +--- a/libraries/cyber/hostmodel/include/host_model_types.h ++++ b/libraries/cyber/hostmodel/include/host_model_types.h +@@ -100,7 +100,7 @@ public: + Int32 mask = 24; + HAddress() + { +- address.networkType == NETWORK_INVALID; ++ address.networkType = NETWORK_INVALID; + memset(&address.interfaceAddr, 0, sizeof(address.interfaceAddr)); + } + HAddress(const Address& addr, Int32 mask = 24) : address(addr), mask(mask) { } +diff --git a/libraries/developer/src/app_cbr.cpp b/libraries/developer/src/app_cbr.cpp +index 2cb1e93..3ff5777 100644 +--- a/libraries/developer/src/app_cbr.cpp ++++ b/libraries/developer/src/app_cbr.cpp +@@ -709,6 +709,24 @@ void AppCbrClientPrintStats(Node *node, AppDataCbrClient *clientPtr) { + clientPtr->sourcePort, + buf); + ++ sprintf(buf, "Sender = %d", node->nodeId); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Client", ++ ANY_DEST, ++ clientPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Receiver = %d", clientPtr->destNodeId); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Client", ++ ANY_DEST, ++ clientPtr->sourcePort, ++ buf); ++ + } + + /* +@@ -1052,6 +1070,11 @@ AppLayerCbrServer(Node *node, Message *msg) + } + serverPtr->seqNo = data.seqNo + 1; + ++#ifdef USER_MODELS_LIB ++ clocktype delay = node->getNodeTime() - data.txTime; ++ serverPtr->latencies->push_back(delay); ++#endif // USER_MODELS_LIB ++ + msgStatus = APP_MSG_NEW; + #ifdef LTE_LIB + #ifdef LTE_LIB_LOG +@@ -1084,6 +1107,12 @@ AppLayerCbrServer(Node *node, Message *msg) + } + } + ++#ifdef USER_MODELS_LIB ++ else { ++ serverPtr->outOfOrderDrops++; ++ } ++#endif ++ + serverPtr->stats->AppReportStatsDbReceiveEvent( + node, + msg, +@@ -1164,6 +1193,24 @@ AppCbrServerPrintStats(Node *node, AppDataCbrServer *serverPtr) { + serverPtr->sourcePort, + buf); + ++ sprintf(buf, "Receiver = %d", node->nodeId); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Sender = %d", MAPPING_GetNodeIdFromInterfaceAddress(node, serverPtr->remoteAddr)); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ + + #ifdef LTE_LIB + #ifdef LTE_LIB_LOG +@@ -1178,6 +1225,80 @@ AppCbrServerPrintStats(Node *node, AppDataCbrServer *serverPtr) { + #endif + #endif + #endif ++ ++#ifdef USER_MODELS_LIB ++ sprintf(buf, "Out-of-order drop messages = %u", serverPtr->outOfOrderDrops); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ sprintf(buf, "Average hop count = %f", serverPtr->stats->GetAverageHopCount().GetValue(node->getNodeTime())); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ if (!serverPtr->latencies->empty()) { ++ const double sum = std::accumulate(serverPtr->latencies->begin(), serverPtr->latencies->end(), 0.0); ++ const double mean = sum / serverPtr->latencies->size(); ++ std::vector<double> diff(serverPtr->latencies->size()); ++ std::transform(serverPtr->latencies->begin(), serverPtr->latencies->end(), diff.begin(), [mean](const double x) { return x - mean; }); ++ const double sq_sum = std::inner_product(diff.begin(), diff.end(), diff.begin(), 0.0); ++ const double stdev = std::sqrt(sq_sum / serverPtr->latencies->size()); ++ std::sort(serverPtr->latencies->begin(), serverPtr->latencies->end()); ++ ++ sprintf(buf, "Average End-to-End delay (sd second) = %f", stdev / SECOND); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Average End-to-End delay (median second) = %f", static_cast<double>(serverPtr->latencies->at(static_cast<size_t>(serverPtr->latencies->size() / 2))) / SECOND); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Average End-to-End delay (95th second) = %f", static_cast<double>(serverPtr->latencies->at(static_cast<size_t>(serverPtr->latencies->size() * 0.95))) / SECOND); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Average End-to-End delay (best second) = %f", static_cast<double>(serverPtr->latencies->front()) / SECOND); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ ++ sprintf(buf, "Average End-to-End delay (worst second) = %f", static_cast<double>(serverPtr->latencies->back()) / SECOND); ++ IO_PrintStat( ++ node, ++ "Application", ++ "CBR Server", ++ ANY_DEST, ++ serverPtr->sourcePort, ++ buf); ++ } ++#endif + } + + /* +@@ -1279,7 +1400,10 @@ AppCbrServerNewCbrServer(Node *node, + // cbrServer->lastPacketReceptionTime = 0; + cbrServer->stats = NULL; + +- ++#ifdef USER_MODELS_LIB ++ cbrServer->outOfOrderDrops = 0; ++ cbrServer->latencies = std::make_unique<std::vector<clocktype>>(); ++#endif // USER_MODELS_LIB + + APP_RegisterNewApp(node, APP_CBR_SERVER, cbrServer); + +diff --git a/libraries/developer/src/app_cbr.h b/libraries/developer/src/app_cbr.h +index 3e9ee89..c804779 100644 +--- a/libraries/developer/src/app_cbr.h ++++ b/libraries/developer/src/app_cbr.h +@@ -23,6 +23,11 @@ + #include "stats_app.h" + #include "application.h" + ++#ifdef USER_MODELS_LIB ++#include <memory> ++#include <vector> ++#endif ++ + /* + * Header size defined to be consistent accross 32/64 bit platforms + */ +@@ -101,6 +106,11 @@ struct struct_app_cbr_server_str + // clocktype lastPacketReceptionTime; + + STAT_AppStatsDataCollection* stats; ++ ++#ifdef USER_MODELS_LIB ++ unsigned int outOfOrderDrops; ++ std::unique_ptr<std::vector<clocktype>> latencies; ++#endif + } + AppDataCbrServer; + +diff --git a/libraries/developer/src/app_mdp.cpp b/libraries/developer/src/app_mdp.cpp +index ae79f9c..13d6415 100644 +--- a/libraries/developer/src/app_mdp.cpp ++++ b/libraries/developer/src/app_mdp.cpp +@@ -4340,7 +4340,11 @@ BOOL MdpIsServerPacket(Node* node, Message* theMsg) + void MdpSwapIncomingPacketForNtoh(Node* node, Message* theMsg) + { + MdpMessage msg; ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ UInt32 len = 0; ++#else + register UInt32 len = 0; ++#endif + Int32 count = 0; + unsigned char* buffer = (unsigned char*)MESSAGE_ReturnPacket(theMsg); + Int32 size = theMsg->packetSize; +diff --git a/libraries/developer/src/mac_link.cpp b/libraries/developer/src/mac_link.cpp +index 5170d54..390d952 100644 +--- a/libraries/developer/src/mac_link.cpp ++++ b/libraries/developer/src/mac_link.cpp +@@ -891,7 +891,7 @@ void ReturnLinkParameters( + addStr); + ERROR_ReportError(errorStr); + } +- else if (bandwidth < 0) ++ else if (*bandwidth < 0) + { + char errorStr[MAX_STRING_LENGTH]; + sprintf(errorStr, "LINK-BANDWIDTH for %s needs to be >= 0.\n", +diff --git a/libraries/developer/src/mac_multicast.h b/libraries/developer/src/mac_multicast.h +index 634e224..81e685a 100644 +--- a/libraries/developer/src/mac_multicast.h ++++ b/libraries/developer/src/mac_multicast.h +@@ -20,7 +20,7 @@ + // + + #ifndef MAC_MULTICAST_H +-#define MAC_MUTICAST_H ++#define MAC_MULTICAST_H + + #include "address.h" + #include "node.h" +diff --git a/libraries/developer/src/mdp/mdpEncoder.cpp b/libraries/developer/src/mdp/mdpEncoder.cpp +index 208e194..323d142 100644 +--- a/libraries/developer/src/mdp/mdpEncoder.cpp ++++ b/libraries/developer/src/mdp/mdpEncoder.cpp +@@ -388,11 +388,19 @@ void MdpDecoder::Destroy() + // This will crash & burn if (NErasures > npar) + int MdpDecoder::Decode(char** dVec, int ndata, const char* ErasureMask) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ unsigned char* S, * Omega, * data; ++#else + register unsigned char *S, *Omega, *data; ++#endif + int i, j, k, n; + int X, denom, Lk; + int degree = 2*npar; ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int nvecs = npar + ndata; ++#else + register int nvecs = npar + ndata; ++#endif + int nvecs_minus_one = nvecs - 1; + int vecSize = vector_size; + +diff --git a/libraries/developer/src/mdp/mdpMessage.cpp b/libraries/developer/src/mdp/mdpMessage.cpp +index 507edbc..cb0b8b5 100644 +--- a/libraries/developer/src/mdp/mdpMessage.cpp ++++ b/libraries/developer/src/mdp/mdpMessage.cpp +@@ -98,10 +98,15 @@ static void MdpUnpackFileNameInfo(MdpMessage* msg) + + int MdpMessage::Pack(char *buffer) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ UInt32 len = 0; ++ UInt32 temp_long; ++ unsigned short temp_short; ++#else + register UInt32 len = 0; + register UInt32 temp_long; + register unsigned short temp_short; +- ++#endif + // If these assertions fail, the code base needs some reworking + // for compiler with different size settings (or set compiler + // settings so these values work) +@@ -389,8 +394,13 @@ int MdpMessage::Pack(char *buffer) + bool MdpMessage::Unpack(char *buffer, int packet_length, + int virtual_length, bool* isServerPacket) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ UInt32 len = 0; ++ UInt32 temp_long; ++#else + register UInt32 len = 0; + register UInt32 temp_long; ++#endif + // Unpack common fields first. + type = (unsigned char) buffer[len++]; + version = (unsigned char) buffer[len++]; +@@ -824,7 +834,11 @@ int MdpObjectNack::Pack() + + int MdpObjectNack::Unpack(char *buffer) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int len = 0; ++#else + register int len = 0; ++#endif + memcpy(&object_id, buffer, sizeof(UInt32)); + len += sizeof(UInt32); + memcpy(&nack_len, &buffer[len], sizeof(short)); +@@ -837,7 +851,11 @@ int MdpObjectNack::Unpack(char *buffer) + + int MdpRepairNack::Pack(char* buffer, unsigned int buflen) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int len = 0; ++#else + register int len = 0; ++#endif + if (buflen-- > 0) + buffer[len++] = (char)type; + else +@@ -908,7 +926,11 @@ int MdpRepairNack::Pack(char* buffer, unsigned int buflen) + + int MdpRepairNack::Unpack(char* buffer) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int len = 0; ++#else + register int len = 0; ++#endif + type = (MdpRepairType) buffer[len++]; + switch (type) + { +diff --git a/libraries/developer/src/network_ip.cpp b/libraries/developer/src/network_ip.cpp +index 53e8e3e..249a7f7 100644 +--- a/libraries/developer/src/network_ip.cpp ++++ b/libraries/developer/src/network_ip.cpp +@@ -10587,6 +10587,14 @@ NetworkRoutingGetAdminDistance( + { + return ROUTING_ADMIN_DISTANCE_FSRL; + } ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ case ROUTING_PROTOCOL_QROUTING: ++ { ++ return ROUTING_ADMIN_DISTANCE_QROUTING; ++ } ++#endif ++#endif + default: + ERROR_ReportError("Invalid switch value"); + return (NetworkRoutingAdminDistanceType) 0; // Not reachable. +@@ -20030,6 +20038,14 @@ void NetworkIpParseAndSetRoutingProtocolType( + // Allow a node to specify explicitly that routing + // protocols are not used. + } ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ else if (strcmp(protocolString, "QROUTING") == 0) ++ { ++ routingProtocolType = ROUTING_PROTOCOL_QROUTING; ++ } ++#endif ++#endif + else + { + char buff[MAX_STRING_LENGTH]; +diff --git a/libraries/developer/src/tcp/app_echo.cpp b/libraries/developer/src/tcp/app_echo.cpp +index 68b8d2d..959e281 100644 +--- a/libraries/developer/src/tcp/app_echo.cpp ++++ b/libraries/developer/src/tcp/app_echo.cpp +@@ -262,7 +262,7 @@ void AppLayerEcho(Node* node, Message* msg) + { + node->appData.numAppTcpFailure ++; + } +- else if (openResult->type == TCP_CONN_ACTIVE_OPEN); ++ else if (openResult->type == TCP_CONN_ACTIVE_OPEN)//; + { + struct echo_session* session; + session = get_session(node, openResult->uniqueId, openResult->connectionId); +diff --git a/libraries/developer/src/tcp/transport_tcp_hdr.h b/libraries/developer/src/tcp/transport_tcp_hdr.h +index d1b9cd7..6643f9b 100644 +--- a/libraries/developer/src/tcp/transport_tcp_hdr.h ++++ b/libraries/developer/src/tcp/transport_tcp_hdr.h +@@ -125,9 +125,9 @@ public: + BitFieldView(U& con, int st, int numbits) : m_container(con), m_start(st+1), m_end(st+numbits) {} + operator U() const { return Rshift<U>(mask<U>(m_start, m_end) & m_container, m_end); } + BitFieldView& operator =(U val) { +- U mask(mask<U>(m_start, m_end)); +- m_container &= ~mask; +- m_container |= Lshift<U>(val, m_end) & mask; ++ U my_mask(mask<U>(m_start, m_end)); ++ m_container &= ~my_mask; ++ m_container |= Lshift<U>(val, m_end) & my_mask; + return *this; + } + +diff --git a/libraries/umts/src/cellular_umts.h b/libraries/umts/src/cellular_umts.h +index 8051c9f..24615d4 100644 +--- a/libraries/umts/src/cellular_umts.h ++++ b/libraries/umts/src/cellular_umts.h +@@ -29,6 +29,7 @@ + #include <list> + #include <bitset> + #include <algorithm> ++#include <functional> + + #include "message.h" + #include "trace.h" +@@ -2090,8 +2091,8 @@ public: + /// set that store pointers to the real objects. + /// Note class T must implement operator< + template<class T> +-class UmtsPointedItemLess : +- public std::binary_function<const T*, const T*, bool> ++class UmtsPointedItemLess : ++ public std::function<bool(const T*, const T*)> + { + public: + bool operator() (const T* lPtr, +@@ -2106,7 +2107,7 @@ public: + /// by pointers + template<class T> + class UmtsPointedItemEqual : +- public std::binary_function<const T*, const T*, bool> ++ public std::function<bool(const T*, const T*)> + { + public: + bool operator() (const T* lPtr, +diff --git a/libraries/umts/src/layer2_umts_mac.h b/libraries/umts/src/layer2_umts_mac.h +index 76a44e3..83b8ef7 100644 +--- a/libraries/umts/src/layer2_umts_mac.h ++++ b/libraries/umts/src/layer2_umts_mac.h +@@ -123,7 +123,7 @@ struct UmtsLogChInfoPtrLess { + #ifdef _WIN64 + template<> + struct std::greater<UmtsLogChInfo*> : +- public binary_function<UmtsLogChInfo* ,UmtsLogChInfo*, bool> ++ public std::function<bool(UmtsLogChInfo* ,UmtsLogChInfo*)> + { + bool operator()(const UmtsLogChInfo* x, const UmtsLogChInfo* y) const + { +@@ -256,7 +256,7 @@ struct UmtsTransChInfoPtrLess { + #ifdef _WIN64 + template<> + struct std::greater<UmtsTransChInfo*> : +- public binary_function<UmtsTransChInfo* ,UmtsTransChInfo*, bool> ++ public std::function<bool(UmtsTransChInfo* ,UmtsTransChInfo*)> + { + bool operator()(const UmtsTransChInfo* x, const UmtsTransChInfo* y) const + { +diff --git a/libraries/umts/src/layer3_umts_gsn.cpp b/libraries/umts/src/layer3_umts_gsn.cpp +index 2e9b13d..896c94a 100644 +--- a/libraries/umts/src/layer3_umts_gsn.cpp ++++ b/libraries/umts/src/layer3_umts_gsn.cpp +@@ -4077,7 +4077,7 @@ BOOL UmtsLayer3GsnReqMmConnEst( + if (ueMm->actMmConns->end() == + find_if(ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + ueMm->actMmConns->push_back(new UmtsLayer3MmConn(cmpMmConn)); +@@ -4112,7 +4112,7 @@ void UmtsLayer3GsnReleaseMmConn( + UmtsMmConnCont::iterator mmConnIter = + find_if(ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn)); + if (ueMm->actMmConns->end() != mmConnIter) + { +@@ -8924,7 +8924,7 @@ void UmtsLayer3GsnHandleNasMsg( + if (ueMm->actMmConns->end() == + find_if(ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + ueMm->actMmConns->push_back(new UmtsLayer3MmConn(cmpMmConn)); +@@ -12901,8 +12901,8 @@ void UmtsLayer3GsnMmConnEstInd( + if (ueMm->actMmConns->end() == + find_if(ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd( +- UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind( ++ UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + ueMm->actMmConns-> +diff --git a/libraries/umts/src/layer3_umts_rnc.h b/libraries/umts/src/layer3_umts_rnc.h +index 88d0bbe..ab77bfd 100644 +--- a/libraries/umts/src/layer3_umts_rnc.h ++++ b/libraries/umts/src/layer3_umts_rnc.h +@@ -113,7 +113,7 @@ struct UmtsMntNodebInfo + #ifdef _WIN64 + template<> + struct std::greater<UmtsMntNodebInfo*> : +- public binary_function<UmtsMntNodebInfo* ,UmtsMntNodebInfo*, bool> ++ public std::function<bool(UmtsMntNodebInfo* ,UmtsMntNodebInfo*)> + { + bool operator()(const UmtsMntNodebInfo* x, + const UmtsMntNodebInfo* y) const +@@ -516,8 +516,8 @@ typedef std::list<UmtsRncRabAssgtReqInfo*> UmtsRabAssgtReqList; + #ifdef _WIN64 + template<> + struct std::greater<UmtsRncRabAssgtReqInfo*> : +- public binary_function<UmtsRncRabAssgtReqInfo* , +- UmtsRncRabAssgtReqInfo*, bool> ++ public std::function<bool(UmtsRncRabAssgtReqInfo* , ++ UmtsRncRabAssgtReqInfo*)> + { + bool operator()(const UmtsRncRabAssgtReqInfo* lPtr, + const UmtsRncRabAssgtReqInfo* rPtr) const +diff --git a/libraries/umts/src/layer3_umts_ue.cpp b/libraries/umts/src/layer3_umts_ue.cpp +index ed2d419..e336e76 100644 +--- a/libraries/umts/src/layer3_umts_ue.cpp ++++ b/libraries/umts/src/layer3_umts_ue.cpp +@@ -4364,7 +4364,7 @@ BOOL UmtsLayer3UeReqMmConnEst( + if (ueMm->rqtingMmConns->end() == + find_if (ueMm->rqtingMmConns->begin(), + ueMm->rqtingMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + ueMm->rqtingMmConns->push_back(new UmtsLayer3MmConn(cmpMmConn)); +@@ -4384,7 +4384,7 @@ BOOL UmtsLayer3UeReqMmConnEst( + if (ueMm->actMmConns->end() != + find_if (ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + retVal = TRUE; +@@ -4492,7 +4492,7 @@ void UmtsLayer3UeReleaseMmConn( + UmtsMmConnCont::iterator mmConnIter = + find_if (ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn)); + if (ueMm->actMmConns->end() != mmConnIter) + { +@@ -11798,7 +11798,7 @@ void UmtsLayer3UeHandleNasMsg(Node* node, + if (ueMm->actMmConns->end() == + find_if(ueMm->actMmConns->begin(), + ueMm->actMmConns->end(), +- bind2nd(UmtsPointedItemEqual<UmtsLayer3MmConn>(), ++ std::bind(UmtsPointedItemEqual<UmtsLayer3MmConn>(), placeholders::_1, + &cmpMmConn))) + { + ueMm->actMmConns->push_back(new UmtsLayer3MmConn(cmpMmConn)); +diff --git a/main/application.cpp b/main/application.cpp +index 23c0a3a..b92887c 100644 +--- a/main/application.cpp ++++ b/main/application.cpp +@@ -213,6 +213,18 @@ using Qualnet::AppModel; + #include "cyber_state.h" + #endif + ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++#include "routing_qrouting.h" ++#endif ++#ifdef UNFIXED_COMMS ++#include "app_unfixed_comms.h" ++#endif ++#ifdef MP_OLSR ++#include "routing_mpolsrv2_niigata.h" ++#endif ++#endif ++ + #include "mac_switch.h" + + // Dynamic info to provide hop-by-hop flow info data +@@ -1322,6 +1334,40 @@ APP_Initialize(Node *node, const NodeInput *nodeInput) + #endif // WIRELESS_LIB + //InsertPatch APP_ROUTING_INIT_CODE + ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ case ROUTING_PROTOCOL_QROUTING: ++ { ++ if (node->appData.qrouting == NULL) ++ { ++ RoutingQroutingInit(node); ++ RoutingQroutingInitTrace(node, nodeInput); ++ } ++ break; ++ } ++#endif ++#ifdef MP_OLSR ++ case ROUTING_PROTOCOL_MPOLSRv2_NIIGATA: ++ { ++ if (node->appData.olsrv2 == NULL) ++ { ++ RoutingMPOLSRv2_Niigata_Init(node, ++ nodeInput, ++ i, ++ NETWORK_IPV4); ++ } ++ else ++ { ++ RoutingMPOLSRv2_Niigata_AddInterface(node, ++ nodeInput, ++ i, ++ NETWORK_IPV4); ++ } ++ break; ++ } ++#endif ++#endif ++ + default: + { + break; +@@ -2174,6 +2220,11 @@ APP_InitializeApplications( + && strcmp(appStr, "MCBR") !=0 + && strcmp(appStr, "TRAFFIC-GEN") !=0 + && strcmp(appStr, "JAMMER") !=0 ++#ifdef USER_MODELS_LIB ++#ifdef UNFIXED_COMMS ++ && strcmp(appStr, "UNFIXED-COMMS") != 0 ++#endif ++#endif + && !modelIp6) + { + ERROR_ReportErrorArgs( +@@ -6827,6 +6878,59 @@ APP_InitializeApplications( + ERROR_ReportMissingLibrary(appStr, "SENSOR_NETWORKS"); + #endif //SENSOR_NETWORKS_LIB + } ++#ifdef USER_MODELS_LIB ++#ifdef UNFIXED_COMMS ++ else if (strcmp(appStr, "UNFIXED-COMMS") == 0) { ++ int interface = -1; ++ char startTimeStr[MAX_STRING_LENGTH]; ++ char endTimeStr[MAX_STRING_LENGTH]; ++ float drop = 0.0; ++ char sourceString[MAX_STRING_LENGTH]; ++ NodeAddress sourceNodeId = -2; ++ Address sourceAddr; ++ char delayStr[MAX_STRING_LENGTH]; ++ ++ //std::cout << "Input string: " << appInput.inputStrings[i] << std::endl; ++ ++ numValues = sscanf(appInput.inputStrings[i], ++ "%*s %s %i %f %s %s %s", ++ sourceString, ++ &interface, ++ &drop, ++ delayStr, ++ startTimeStr, ++ endTimeStr); ++ ++ if (numValues != 6) ++ { ++ char errorString[MAX_STRING_LENGTH]; ++ sprintf(errorString, ++ "Wrong unfixed-comms configuration format!\n" ++ "UNFIXED-COMMS <node> <interface> <drop> <delay> <start time> <stop time>\n"); ++ ERROR_ReportError(errorString); ++ } ++ ++ clocktype startTime = TIME_ConvertToClock(startTimeStr); ++ clocktype endTime = TIME_ConvertToClock(endTimeStr); ++ clocktype delay = TIME_ConvertToClock(delayStr); ++ ++ //std::cout << "Parsed values: " << sourceString << ";" << interface << ";" << drop << ";" << delayStr << std::endl; ++ ++ IO_AppParseSourceString( ++ firstNode, ++ appInput.inputStrings[i], ++ sourceString, ++ &sourceNodeId, ++ &sourceAddr); ++ ++ node = MAPPING_GetNodePtrFromHash(nodeHash, sourceNodeId); ++ if (node != NULL) ++ { ++ AppUnfixedCommsInit(node, startTime, endTime, delay, drop, interface); ++ } ++ } ++#endif ++#endif + else + { + std::string errorString; +@@ -7393,6 +7497,35 @@ void APP_ProcessEvent(Node *node, Message *msg) + } + //InsertPatch LAYER_FUNCTION + ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ case APP_ROUTING_QROUTING: ++ { ++ RoutingQroutingLayer(node, msg); ++ break; ++ } ++#endif ++#ifdef MP_OLSR ++ case APP_ROUTING_MPOLSRv2_NIIGATA: ++ { ++ if (ip->interfaceInfo[0]->routingProtocolType == ROUTING_PROTOCOL_OLSRv2_NIIGATA) { ++ RoutingOLSRv2_Niigata_Layer(node, msg); ++ } ++ else if (ip->interfaceInfo[0]->routingProtocolType == ROUTING_PROTOCOL_MPOLSRv2_NIIGATA) { ++ RoutingMPOLSRv2_Niigata_Layer(node, msg); ++ } ++ break; ++ } ++#endif ++#ifdef UNFIXED_COMMS ++ case APP_UNFIXED_COMMS: ++ { ++ AppUnfixedCommsLayer(node, msg); ++ break; ++ } ++#endif ++#endif ++ + #ifdef LTE_LIB + case APP_EPC_LTE: + { +@@ -7780,6 +7913,23 @@ APP_Finalize(Node *node) + //EndRIP + //InsertPatch FINALIZE_ROUTING_FUNCTION + ++#ifdef USER_MODELS_LIB ++#ifdef QROUTING ++ case ROUTING_PROTOCOL_QROUTING: ++ { ++ RoutingQroutingFinalize(node, i); ++ break; ++ } ++#endif ++#ifdef MP_OLSR ++ case ROUTING_PROTOCOL_MPOLSRv2_NIIGATA: ++ { ++ RoutingMPOLSRv2_Niigata_Finalize(node, i); ++ break; ++ } ++#endif ++#endif ++ + default: + break; + }//switch// +@@ -7819,6 +7969,16 @@ APP_Finalize(Node *node) + } + //EndRIPng + //InsertPatch FINALIZE_ROUTING_FUNCTION ++ ++#ifdef USER_MODELS_LIB ++#ifdef MP_OLSR ++ case ROUTING_PROTOCOL_MPOLSRv2_NIIGATA: ++ { ++ RoutingMPOLSRv2_Niigata_Finalize(node, i); ++ break; ++ } ++#endif ++#endif + default: + break; + }//switch// +@@ -8258,6 +8418,17 @@ APP_Finalize(Node *node) + break; + } + //InsertPatch FINALIZE_FUNCTION ++ ++#ifdef USER_MODELS_LIB ++#ifdef UNFIXED_COMMS ++ case APP_UNFIXED_COMMS: ++ { ++ AppUnfixedCommsFinalize(node); ++ break; ++ } ++#endif ++#endif ++ + default: + #ifndef EXATA + ERROR_ReportError("Unknown or disabled application"); +diff --git a/main/sliding_win.cpp b/main/sliding_win.cpp +index 0a26d87..1619dc5 100644 +--- a/main/sliding_win.cpp ++++ b/main/sliding_win.cpp +@@ -53,7 +53,11 @@ void MsTmWinClear(MsTmWin* pWin) + void MsTmWinReset(MsTmWin* pWin, clocktype sSize, int nSlot, double weight, + clocktype theTime) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int idx; ++#else + register int idx; ++#endif + clocktype time = theTime; + + MsTmWinClear(pWin); +@@ -71,7 +75,11 @@ void MsTmWinReset(MsTmWin* pWin, clocktype sSize, int nSlot, double weight, + + void MsTmWinNewData(MsTmWin* pWin, double data, clocktype theTime) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int tmp; ++#else + register int tmp; ++#endif + int idx; + int shift; + clocktype time = theTime; +@@ -97,7 +105,11 @@ void MsTmWinNewData(MsTmWin* pWin, double data, clocktype theTime) + + clocktype MsTmWinWinSize(MsTmWin* pWin, clocktype theTime) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int idx; ++#else + register int idx; ++#endif + clocktype time = theTime; + + // check the current time +@@ -114,7 +126,11 @@ clocktype MsTmWinWinSize(MsTmWin* pWin, clocktype theTime) + + double MsTmWinSum(MsTmWin* pWin, clocktype theTime) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int tmp; ++#else + register int tmp; ++#endif + int idx; + double sum; + int shift; +@@ -134,7 +150,11 @@ double MsTmWinSum(MsTmWin* pWin, clocktype theTime) + + double MsTmWinAvg(MsTmWin* pWin, clocktype theTime) + { ++#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) ++ int tmp; ++#else + register int tmp; ++#endif + int idx; + double avg; + double weight; diff --git a/patch_qualnet_8.2_to_9.2.patch b/patch_qualnet_8.2_to_9.2.patch index 651942933137b5398debd64210bee53ab51f70d7..c3c01a5a45211c06adf42c2c4ae1ef7b301405d1 100644 --- a/patch_qualnet_8.2_to_9.2.patch +++ b/patch_qualnet_8.2_to_9.2.patch @@ -1,24 +1,7 @@ diff --git a/libraries/user_models/src/routing_qrouting.cpp b/libraries/user_models/src/routing_qrouting.cpp index 5fbbf3e..ac18f4b 100644 --- a/libraries/user_models/src/routing_qrouting.cpp -+++ b/libraries_user_models_qrouting_src_routing_qrouting.cpp -@@ -30,6 +30,16 @@ As Qualnet uses events and messages, we reuse Bellman-Ford messages. - #include "aux_data_extractor.hpp" // data extractor - #include <future> - #endif -+ -+void QroutingHookToRedistribute( -+ Node* node, -+ NodeAddress destAddress, -+ NodeAddress destAddressMask, -+ NodeAddress nextHopAddress, -+ int interfaceIndex, -+ void* routeCost, -+ unsigned short receiverAsId); -+ - namespace qrouting { - //#define DEBUG_QTABLE - #define nDEBUG ++++ b/libraries/user_models/src/routing_qrouting.cpp @@ -1442,7 +1452,8 @@ void QroutingHookToRedistribute( NodeAddress destAddressMask, NodeAddress nextHopAddress, @@ -29,3 +12,18 @@ index 5fbbf3e..ac18f4b 100644 { using namespace qrouting; int cost = *(int*)routeCost; + +diff --git a/libraries/user_models/src/routing_qrouting.h b/libraries/user_models/src/routing_qrouting.h +index 4169034..f1047c7 100644 +--- a/libraries/user_models/src/routing_qrouting.h ++++ b/libraries/user_models/src/routing_qrouting.h +@@ -74,7 +74,8 @@ void QroutingHookToRedistribute( + NodeAddress destAddressMask, + NodeAddress nextHopAddress, + int interfaceIndex, +- void* routeCost); ++ void* routeCost, ++ unsigned short receiverAsId); + + // + // FUNCTION :: RoutingQroutingPrintTraceXML