Commit 6277038d authored by nikaeinn's avatar nikaeinn

remove the OMG SUMO related files and update te top-level OMG and cmakefiles

parent 4787c975
......@@ -870,21 +870,16 @@ set(UTIL_SRC
${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_filename.c
${OPENAIR2_DIR}/UTIL/OCG/OCG_parse_XML.c
${OPENAIR2_DIR}/UTIL/OCG/OCG_save_XML.c
${OPENAIR2_DIR}/UTIL/OMG/client_traci_OMG.c
${OPENAIR2_DIR}/UTIL/OMG/common.c
${OPENAIR2_DIR}/UTIL/OMG/grid.c
${OPENAIR2_DIR}/UTIL/OMG/id_manager.c
${OPENAIR2_DIR}/UTIL/OMG/job.c
${OPENAIR2_DIR}/UTIL/OMG/mobility_parser.c
${OPENAIR2_DIR}/UTIL/OMG/omg.c
${OPENAIR2_DIR}/UTIL/OMG/omg_hashtable.c
${OPENAIR2_DIR}/UTIL/OMG/rwalk.c
${OPENAIR2_DIR}/UTIL/OMG/rwp.c
${OPENAIR2_DIR}/UTIL/OMG/sumo.c
${OPENAIR2_DIR}/UTIL/OMG/socket_traci_OMG.c
${OPENAIR2_DIR}/UTIL/OMG/static.c
${OPENAIR2_DIR}/UTIL/OMG/steadystaterwp.c
${OPENAIR2_DIR}/UTIL/OMG/storage_traci_OMG.c
${OPENAIR2_DIR}/UTIL/OMG/trace.c
${OPENAIR2_DIR}/UTIL/OMG/trace_hashtable.c
${OPENAIR2_DIR}/UTIL/OPT/probe.c
......@@ -897,6 +892,15 @@ set(UTIL_SRC
)
add_library(UTIL ${UTIL_SRC})
#set(OMG_SUMO_SRC
# ${OPENAIR2_DIR}/UTIL/OMG/client_traci_OMG.c
# ${OPENAIR2_DIR}/UTIL/OMG/id_manager.c
# ${OPENAIR2_DIR}/UTIL/OMG/sumo.c
# ${OPENAIR2_DIR}/UTIL/OMG/socket_traci_OMG.c
# ${OPENAIR2_DIR}/UTIL/OMG/storage_traci_OMG.c
# )
#add_library(OMG_SUMO ${OMG_SUMO_SRC})
set(SECU_OSA_SRC
${OPENAIR2_DIR}/UTIL/OSA/osa_key_deriver.c
${OPENAIR2_DIR}/UTIL/OSA/osa_rijndael.c
......@@ -1752,7 +1756,6 @@ add_executable(oaisim
${OPENAIR_TARGETS}/SIMU/USER/oaisim.c
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
${OPENAIR2_DIR}/UTIL/OMG/sumo.c
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
${GTPU_need_ITTI}
${OPENAIR_TARGETS}/COMMON/create_tasks.c
......
----------------------------------------------------------------------------------
OpenAir Mobility Generator (OMG) - Mobility provided by the SUMO simulator
----------------------------------------------------------------------------------
Notes:
- The Simulation of Urban Mobility (SUMO) needs to be downloaded, configured and compiled. Please download the sources from this address
http://sumo.sourceforge.net/
or alternatively chechout from the following SUMO svn
svn co https://sumo.svn.sourceforge.net/svnroot/sumo/trunk/sumo sumo
(among the other required packages for SUMO, you also need the following tools for SUMO compilation. Please use the following command to install:
sudo apt-get install build-essential autoconf buildtool)
and follow the installation instructions at http://sumo.sourceforge.net/doc/current/docs/userdoc/Installing.html
- OMG will look for the SUMO and SUMO-GUI exectuable from this SUMO folder.
- SUMO/SCENARIOS is the default folder for SUMO scenarios. Please add all required scenario on that folder.
- OMG will launch SUMO with one single SUMO config file. Please regoup all your SUMO XML files (network, route et others) in one .cfg file. More details on the SUMO website.
- SUMO will be lauched using the following command
sumo -c scen.sumo.cfg -b 0 -e 1000 -v
or, if you want to enable TraCI server (here as example listening on port 8883). Please bear in mind that this launch will be blocking upon a TraCI client
sumo -c scen.sumo.cfg -b 0 -e 1000 -remote-port 8883 -v
or, if you prefer the SUMO GUI and select manually the scenario file on the GUI window
sumo-gui
- Once installation completed, please check that SUMO is working properly by following the STANDALONE scenario
- GUI: lauch: sumo-gui
load: scen.sumo.cfg
- CommandLine: sumo -c scen.sumo.cfg -b 0 -e 1000 -v
----------------------------------------------------------------------------------
The OpenAirInterface Team
openair_tech@eurecom.fr
----------------------------------------------------------------------------------
<configuration>
<input>
<net-file value="traci_ex_Map.net.xml"/>
<route-files value="traci_ex_ROU.rou.xml"/>
<!-- <additional-files value="test.add.xml"/> -->
</input>
</configuration>
Sumo version used 0.12.3:
to start sumo with the existing route and network files below command was used.
sumo -n traci_ex_Map.net.xml -r traci_ex_ROU.rou.xml -b 0 -e 1000 --remote-port 8883 -v
\ No newline at end of file
<configuration>
<input>
<net-file value="traci_ex_Map.net.xml"/>
<route-files value="traci_ex_ROU.rou.xml"/>
<!-- <additional-files value="test.add.xml"/> -->
</input>
<simulation>
<begin>0</begin>
<end>200</end>
</simulation>
<traci_server>
<remote-port>8890</remote-port>
</traci_server>
</configuration>
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
#ifndef TRACICONSTANTS_H
#define TRACICONSTANTS_H
// command: subscribe simulation variable
#define CMD_SUBSCRIBE_SIM_VARIABLE 0xdb
// departed vehicle ids (get: simulation)
#define VAR_DEPARTED_VEHICLES_IDS 0x74
// command: simulation step (new version)
#define CMD_SIMSTEP2 0x02
// command: close sumo
#define CMD_CLOSE 0x7F
// command: get vehicle variable
#define CMD_GET_VEHICLE_VARIABLE 0xa4
// command: Scenario
#define CMD_SCENARIO 0x73
// max count of vehicles
#define DOMVAR_MAXCOUNT 0x0A
// 32 bit integer
#define TYPE_INTEGER 0x09
// speed of a node
#define DOMVAR_SPEED 0x04
// position of a domain object
#define DOMVAR_POSITION 0x02
// position (2D) (get: vehicle, poi, set: poi)
#define VAR_POSITION 0x42
// speed (get: vehicle)
#define VAR_SPEED 0x40
// position of a domain object
#define DOMVAR_POSITION 0x02
// ids of arrived vehicles (get: simulation)
#define VAR_ARRIVED_VEHICLES_IDS 0x7a
// ****************************************
// RESULT TYPES
// ****************************************
// result type: Ok
#define RTYPE_OK 0x00
#endif
\ No newline at end of file
This diff is collapsed.
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file client_traci_OMG.h
* \brief The OMG TraCI to send/receive commands from/to SUMO via socket interfaces.
* \author S. Uppoor, J. Harri
* \date 2012
* \version 0.1
* \company INRIA, Eurecom
* \email: sandesh.uppor@inria.fr, haerri@eurecom.fr
* \note
* \warning
*/
#ifndef TRACICLIENT_OMG_H
#define TRACICLIENT_OMG_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "omg.h"
//#include "TraCIConstants.h"
#include "storage_traci_OMG.h"
#include "socket_traci_OMG.h"
#define MAX_ATTEMPTS 5; // number of connection attemps to SUMO
int targetTime;
char *description;
string_list* departed; // string list of all vehicles appearing in SUMO at the current time step
string_list* arrived; // string list of all vehicles leaving SUMO at the current time step
/**
* Global parameters defined in storage_traci_OMG.h
*/
extern storage *head;
extern storage *storageStart;
extern storage *tracker;
extern int descLen;
/**
* \fn handshake(char *,int)
* \brief Talks to SUMO by establishing connection
* \param Accepts host name and port number
*/
int handshake(char *,int);
/**
* \fn extractCommandStatus(storage *, unsigned char , char *)
* \brief Validates the RESPONSE recieved by SUMO
* \param Accepts storage pointer where data is read and stored, command ID for which response is recieved, description
*/
int extractCommandStatus(storage *, unsigned char , char *);
/**
* \fn commandSimulationStep(double)
* \brief Advances the SUMO Simulation
* \param Accepts number of steps or seconds SUMO should Simulate
*/
void commandSimulationStep(double);
/**
* \fn commandClose(void);
* \brief Send termination command to SUMO
*/
void commandClose(void);
/**
* \fn commandGetVehicleVariable(char *vehID, int varID)
* \brief Gets the position position and speed info
* \param Accepts vehicle ID and variable ID, here variable ID is the comaand type
*/
void commandGetVehicleVariable(char *vehID, int varID);
/**
* \fn get_num_sumo_nodes(void)
* \brief Return the total number of nodes to be simulated in SUMO
*/
int commandGetMaxSUMONodesVariable(void);
/**
* \fn init(int max_sim_time)
* \brief Initialize SUMO and set the periodic subscriptions
*/
void init(int max_sim_time);
/**
* \fn void processSubscriptions(String_list departed, String_list arrived)
* \brief process the subscription values sent by SUMO at each SUMO time step
*/
void processSubscriptions(void);
/**
* \fn void GetSpeed(NodePtr node, char * sumo_id);
* \brief ask SUMO to return the speed for the indicated vehicle ID
* \param NodePtr node the pointer to the OAISim node
* \param char *sumo_id the SUMO ID of the target node
*/
void GetSpeed(node_struct* node, char * sumo_id);
/**
* \fn void Position(NodePtr node, char * sumo_id);
* \brief ask SUMO to return the position (X,Y) for the indicated vehicle ID
* \param NodePtr node the pointer to the OAISim node
* \param char *sumo_id the SUMO ID of the target node
*/
void GetPosition(node_struct* node, char * sumo_id);
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file id_manager.c
* \brief Main function containing the OMG ID Manager
* \author J. Harri
* \date 2012
* \version 0.1
* \company Eurecom
* \email:
* \note
* \warning
*/
#include "id_manager.h"
#include "assertions.h"
#include <stdio.h>
#include <string.h>
MapPtr create_map(void)
{
MapPtr ptr;
ptr = malloc(sizeof(map_struct));
return ptr;
}
IDManagerPtr create_IDManager(void)
{
IDManagerPtr ptr;
ptr = malloc(sizeof(id_manager_struct));
ptr->map_oai2sumo = NULL;
ptr->map_sumo2oai = NULL;
return ptr;
}
Map_list add_map_entry(MapPtr map, Map_list Map_Vector)
{
Map_list entry = malloc(sizeof(map_list_struct));
entry->map = map;
entry->next = NULL;
if (Map_Vector == NULL) {
//printf("Map-vector is NULL, assigning a new entry\n");
return entry;
} else {
Map_list tmp = Map_Vector;
while (tmp->next != NULL) {
//printf("getting the tail...\n");
tmp = tmp->next;
}
//printf("got it...adding entry...\n");
tmp->next = entry;
return Map_Vector;
}
}
Map_list remove_entry(MapPtr map, Map_list Map_Vector)
{
Map_list entry = malloc(sizeof(map_list_struct));
entry->map = map;
entry->next = NULL;
if (Map_Vector == NULL) {
return entry;
} else {
Map_list tmp = Map_Vector;
while (tmp->next != NULL) {
tmp = tmp->next;
}
tmp->next = entry;
return Map_Vector;
}
}
char* get_SumoID_by_OAI(int oai_id, IDManagerPtr ID_manager)
{
if(ID_manager->map_oai2sumo == NULL)
return NULL;
else {
return get_sumo_entry(oai_id, ID_manager->map_oai2sumo);
}
}
int get_oaiID_by_SUMO(char *sumo_id, IDManagerPtr ID_manager)
{
if(ID_manager->map_sumo2oai == NULL) {
//printf("ID_Manager: get_oaiID_by_SUMO: uninitialized map\n");
return -1;
}
else {
//printf("ID_Manager: get_oaiID_by_SUMO: OAI_entry is: %d \n", get_oai_entry(sumo_id, ID_manager->map_sumo2oai));
return get_oai_entry(sumo_id, ID_manager->map_sumo2oai);
}
}
void remove_oaiID_by_SUMO(char *sumo_id, IDManagerPtr ID_manager)
{
if(ID_manager->map_sumo2oai == NULL) {
printf("ID_Manager: remove_oaiID_by_SUMO: uninitialized map\n");
return;
} else {
ID_manager->map_sumo2oai = remove_oai_entry(sumo_id, ID_manager->map_sumo2oai);
if(ID_manager->map_oai2sumo !=NULL) {
ID_manager->map_oai2sumo = remove_oai_entry(sumo_id, ID_manager->map_oai2sumo); // need to remove in the other list as well
}
//return ID_manager->map_sumo2oai;
}
}
char* get_sumo_entry(int oai_id, Map_list Map_Vector)
{
Map_list tmp = Map_Vector;
AssertFatal( Map_Vector, "bug here..should not be NULL" );
AssertFatal( Map_Vector->map, "bug here..map should have been initialized" );
if (tmp->map->oai_id == oai_id) {
//printf("got it...at the head and value is %s \n",tmp->map->sumo_id);
return tmp->map->sumo_id;
} else {
//printf("here...\n");
while (tmp->next != NULL) {
tmp = tmp->next;
if (tmp->map->oai_id == oai_id) {
//printf("got it...in main value is %s \n",tmp->map->sumo_id);
return tmp->map->sumo_id;
}
}
}
return NULL;
}
int get_oai_entry(char *sumo_id, Map_list Map_Vector)
{
Map_list tmp = Map_Vector;
if (strcmp(tmp->map->sumo_id, sumo_id) == 0) {
//printf("found it %s \n",tmp->map->sumo_id);
return tmp->map->oai_id;
} else {
while (tmp->next != NULL) {
tmp = tmp->next;
if (strcmp(tmp->map->sumo_id, sumo_id) == 0) {
return tmp->map->oai_id;
}
}
}
return -1;
}
Map_list remove_oai_entry(char *sumo_id, Map_list Map_Vector)
{
Map_list tmp = Map_Vector;
// Map_list entry;
//printf("removing entry %s \n",sumo_id);
if (strcmp(tmp->map->sumo_id, sumo_id) == 0) {
//printf("1: found it %s \n",tmp->map->sumo_id);
// int id = tmp->map->oai_id;
// free(tmp);
if(tmp->next == NULL)
return NULL;
else {
return tmp->next;
}
//if(strcmp(tmp->map->sumo_id, "0") == 0) {
//printf("OAI ID is %d \n",id);
//exit(-1);
//}
//return id;
} else {
//printf("removing entry %s \n",sumo_id);
while (tmp->next != NULL) {
if (strcmp(tmp->next->map->sumo_id, sumo_id) == 0) {
//printf("2: found it %s \n",tmp->next->map->sumo_id);
// int id = tmp->next->map->oai_id;
// entry = tmp->next; // save the entry to remove
tmp->next = tmp->next->next; // jump over the entry to be removed
// free(entry); // freeing the entry
//if(strcmp(tmp->next->map->sumo_id, "0") == 0)
// exit(-1);
//return id;
}
tmp = tmp->next;
}
}
return Map_Vector;
}
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.0 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file id_manager.h
* \brief Prototypes of the OMG ID Manager to handle the mapping between OAI ID and SUMO ID
* \author J. Harri
* \date 2012
* \version 0.1
* \company Eurecom
* \email:
* \note
* \warning
*/
#ifndef __IDMANAGER_H_
#define __IDMANAGER_H_
#include <stdlib.h>
/*!A sructure that represents a mapping (OAI_ID, SUMO_ID), i.e the node ID given by OAI and the node ID given by SUMO */
typedef struct map_struct {
int oai_id; /*!< the oai ID as an integer */
char *sumo_id; /*!< SUMO gives IDs as strings */
} map_struct;
typedef struct map_struct* MapPtr; /*!< The typedef that reflects a #map_struct*/
/*!A sructure that gathers all the existing ID Maping */
struct map_list_struct {
map_struct *map; /*!< Avariable of type #MapPtr. It represents a node */
struct map_list_struct *next; /*!< A pointer to the next element */
} map_list_struct;
typedef struct map_list_struct* Map_list; /*!< The typedef that reflects a #map_list_struct*/
/*!A sructure that includes all characteristics of an ID management Unit */
typedef struct id_manager_struct {
struct map_list_struct *map_oai2sumo; /*!< Avariable of type #MapPtr. It represents the mapping from OAI ID to SUMO ID for one noe */
struct map_list_struct *map_sumo2oai; /*!< Avariable of type #MapPtr. It represents the mapping from SUMO ID to OAI ID for one noe */
} id_manager_struct;
typedef struct id_manager_struct* IDManagerPtr; /*!< The typedef that reflects a #id_manager_struct*/
/**
* \fn MapPtr create_map(void)
* \brief Create and allocate memory for a map object (OAI ID / SUMO ID).
* \return a pointer to the newly created Map
*/
MapPtr create_map(void);
/**
* \fn IDManangerPtr create_IDManager(void)
* \brief Create and allocate memory for a the ID Manager.
* \return a pointer to the ID Manager
*/
IDManagerPtr create_IDManager(void);
/**
* \fn Map_list add_entry(MapPtr map, Map_list Map_Vector)
* \brief Add a mapping entry to the MapList
* \param map the pointer to the map to be added to the Map_list
* \param Map_Vector the reference to the Map_list (pointing to the HEAD if not NULL)
* \retun the pointer to the updated/created map list (pointing to the HEAD)
*/
Map_list add_map_entry(MapPtr map, Map_list Map_Vector);
/**
* \fn char* get_SumoID_by_OAI(int oai_id, IDManagerPtr ID_manager)
* \brief map a SUMO ID from a OAI ID; return NULL if the mapping does not exist
* \param oai_id the OAI ID to be mapped to the SUMO ID
* \param ID_manager the reference to the ID Manager
* \return the SUMO ID in string format
*/
char* get_sumoID_by_OAI(int oai_id, IDManagerPtr ID_manager);
/**
* \fn int get_OaiID_by_SUMO(char* sumo_id, IDManagerPtr ID_manager)
* \brief map a OAI ID from a SUMO ID; return -1 if the mapping does not exist
* \param sumo_id the SUMO ID to be mapped to the OAI ID
* \param ID_manager the reference to the ID Manager
* \return the OAI ID in int format
*/
int get_oaiID_by_SUMO(char* sumo_id, IDManagerPtr ID_manager);
/**
* \fn int remove_OaiID_by_SUMO(char *sumo_id, IDManagerPtr ID_manager);
* \brief remove an OAI-SUMO mapping from a SUMO ID, and return the ID; return -1 if the mapping does not exist
* \param sumo_id the SUMO ID used to remove the mapping
* \param ID_manager the reference to the ID Manager
* \return the updated pointer to the Map_list
*/
void remove_oaiID_by_SUMO(char *sumo_id, IDManagerPtr ID_manager);
/**
* \fn char* get_sumo_entry(int oai_id, Map_list Map_Vector)
* \brief retrieve the SUMO ID from a OAI ID from the OAI_SUMO map; return NULL if not found
* \param oai_id the OAI ID to retrive the corresponding SUMO ID
* \param Map_Vector the reference to the OAI_2_SUMO Map list
* \return the SUMO ID in string format
*/
char* get_sumo_entry(int oai_id, Map_list Map_Vector);
/**
* \fn get_oai_entry(char* sumo_id, Map_list Map_Vector)
* \brief retrieve the OAI ID from a SUMO ID from the SUMO_OAI map; returns -1 if not found
* \param sumo_id the SUMO ID to retrieve the corresponding OAI ID
* \param Map_Vector the reference to the SUMO_2_OAI Map list
* \return the OAI ID in int format
*/
int get_oai_entry(char*, Map_list);
/**
* \fn int remove_oai_entry(char *sumo_id, Map_list Map_Vector);
* \brief remove the SUMO-OAI mapping, from a SUMO ID; returns the found OAI ID; returns -1 if the mapping does not exist.
* \param sumo_id the SUMO ID used to remove the mapping.
* \param Map_Vector the reference to the SUMO_2_OAI Map list
* \return the updated pointer to the Map_list
*/
Map_list remove_oai_entry(char *sumo_id, Map_list Map_Vector);
#endif /* __IDMANAGER_H_ */
......@@ -45,7 +45,9 @@
#include "trace.h"
#include "grid.h"
#include "steadystaterwp.h"
#ifdef SUMO_IF
#include "sumo.h"
#endif
#include "../OMV/structures.h"
//#define STANDALONE
......@@ -109,11 +111,11 @@ init_mobility_generator (omg_global_param omg_param_list[])
case TRACE:
start_trace_generator (omg_param_list[node_t]);
break;
#ifdef SUMO_IF
case SUMO:
start_sumo_generator (omg_param_list[node_t]);
break;
#endif
case STEADY_RWP:
start_steadystaterwp_generator (omg_param_list[node_t]);
break;
......@@ -152,12 +154,12 @@ stop_mobility_generator (omg_global_param * omg_param_list)
case STEADY_RWP:
break;
#ifdef SUMO_IF
case SUMO:
stop_sumo_generator ();
//LOG_D(OMG," --------OMG will interface with SUMO for mobility generation-------- \n");
break;
#endif
default:
LOG_N (OMG, "Unsupported generator\n");
}
......@@ -198,12 +200,12 @@ update_node_vector (int mobility_type, double cur_time)
case TRACE:
update_trace_nodes (cur_time);
break;
#ifdef SUMO_IF
case SUMO:
// printf("in SUMO case \n");
update_sumo_nodes (cur_time);
break;
#endif
case STEADY_RWP:
update_steadystaterwp_nodes (cur_time);
break;
......@@ -248,12 +250,12 @@ get_nodes_positions (int mobility_type, double cur_time)
case TRACE:
get_trace_positions_updated (cur_time);
break;
#ifdef SUMO_IF