Commit 52e1d869 authored by Yann Garcia's avatar Yann Garcia
Browse files

Add NGAP resources

parent cb639353
Loading
Loading
Loading
Loading
+38 −16
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ endif
ifeq (,$(TTCN3_DIR))
 $(error TTCN3_DIR shall be defined in config.mk)
endif

first: all

define IncludeModule
@@ -18,13 +19,13 @@ undefine sources
undefine modules
undefine includes
include $(1)/module.mk
$$(foreach S, $$(sources),  $$(eval all_sources +=  $(1)/$$(S)))
$$(foreach I, $$(includes), $$(eval all_includes += $(1)/$$(I)))
$$(foreach M, $$(modules),  $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(M), $(1)/$$(M)))))
$$(foreach S, $$(sources),  $$(eval all_sources +=  $$(if $$(filter /%, $$(S)), $$(TOPDIR)$$(S), $(1)/$$(S))))
$$(foreach I, $$(includes), $$(eval all_includes += $$(if $$(filter /%, $$(I)), $$(TOPDIR)$$(I), $(1)/$$(I))))
$$(foreach M, $$(modules),  $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(TOPDIR)$$(M), $(1)/$$(M)))))
endef

all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src /usr/include/libxml2
defines  += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) AS_USE_SSL
all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src /usr/include/jsoncpp /usr/include/libxml2
defines  += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS)  AS_USE_SSL _GNU_SOURCE
libs     += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs

ifeq (Windows_NT,$(OS))
@@ -39,15 +40,15 @@ defines += LINUX
libs += -lpcap -lrt -lpthread
endif

libs += -lssl -lcrypto -lxml2 -L$(OSIP_LIB) -losipparser2
libs += -lssl -lcrypto -lxml2 -ljsoncpp -L$(OSIP_LIB) -losipparser2 -lsctp

$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS)))

outdir := $(TOPDIR)/build/$(ATS)
bindir := $(TOPDIR)/bin

sources     := $(sort $(all_sources))
includes    := $(outdir) $(outdir)/.. $(all_includes) $(NPCAP_INCLUDE) $(OSIP_INCLUDE)
sources     := $(all_sources)
includes    := $(outdir) $(outdir)/.. $(outdir)/asn1 $(all_includes) $(NPCAP_INCLUDE) $(OSIP_INCLUDE) 

ifeq (Windows_NT,$(OS))
  EXE=.exe
@@ -55,20 +56,26 @@ endif

ttcn_sources  := $(filter %.ttcn , $(sources))
ttcn3_sources := $(filter %.ttcn3, $(sources))
asn_sources   := $(filter %.asn,   $(sources))
asn1_sources  := $(filter %.asn1,  $(sources))
xsd_sources   := $(filter %.xsd,   $(sources))

tt_sources    := $(ttcn_sources) $(ttcn3_sources) $(xsd_sources)
tt_sources    := $(ttcn_sources) $(ttcn3_sources) $(xsd_sources) $(asn_sources) $(asn1_sources)
cc_sources    := $(filter %.cc,    $(sources))

gen_ttcn_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn,  %.cc, $(ttcn_sources))))
gen_ttcn_headers  := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn,  %.hh, $(ttcn_sources))))
gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources))))
gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources))))
gen_asn_sources   := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn,   %.cc, $(asn_sources))))
gen_asn_headers   := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn,   %.hh, $(asn_sources))))
gen_asn1_sources  := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1,  %.cc, $(asn1_sources))))
gen_asn1_headers  := $(addprefix $(outdir)/, $(notdir $(patsubst %.asn1,  %.hh, $(asn1_sources))))
gen_xsd_sources   := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd,   %.cc, $(xsd_sources))))
gen_xsd_headers   := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd,   %.hh, $(xsd_sources))))

gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_xsd_sources)
gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_xsd_headers)
gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_xsd_sources) $(gen_asn_sources) $(gen_asn1_sources)
gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_xsd_headers) $(gen_asn_headers) $(gen_asn1_headers)

gen_objects := $(patsubst %.cc, %.o, $(gen_sources))
cc_objects  := $(patsubst  %.cc, $(outdir)/%.o, $(cc_sources))
@@ -95,7 +102,19 @@ regen: force_regen $(outdir)/.generate
force_regen:
	rm -f $(outdir)/.generate

$(outdir) $(bindir):
t3q: all
	@echo -e "Code checking in progress..."
	@java -Xmx3g -Xss512m -jar $(T3Q_PATH)/t3q.jar --config $(T3Q_PATH)/$(T3Q_CONFIG) $(tt_sources) > $(outdir)/t3q.out 2>&1 ; cd -
	@echo -e "Code checking in done..."
	@echo -e "Output file is located here: $(outdir)/t3q.out"

t3d: all
	@echo -e "TTCN-3 doc generation in progress..."
	@java -Xmx3g -Xss512m -jar $(T3D_PATH)/t3d.jar --config $(T3D_PATH)/$(T3D_CONFIG) $(tt_sources) > $(outdir)/t3d.out 2>&1 ; cd -
	@echo -e "TTCN-3 doc generation done..."
	@echo -e "Output file is located here: $(outdir)/t3d.out"

$(outdir) $(outdir)/asn1 $(bindir):
	mkdir -p $@

$(bindir)/$(ATS)$(EXE): $(gen_objects) $(cc_objects) 
@@ -108,6 +127,9 @@ $(cc_objects) : $(outdir)/%.o : %.cc
	mkdir -p $(dir $@)
	g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $<

#$(gen_sources):
#	$(TTCN3_DIR)/bin/asn1_compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources)

$(gen_sources): $(outdir)/.generate

$(outdir)/.generate: Makefile $(tt_sources)
@@ -116,5 +138,5 @@ $(outdir)/.generate: Makefile $(tt_sources)

$(foreach S, $(ttcn_sources),  $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc,  $(S))): $(S)))
$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S)))
$(foreach S, $(xsd_sources),   $(eval $(outdir)/$(notdir $(patsubst %.xsd, %.cc,   $(S))): $(S)))
$(foreach S, $(asn1_sources),  $(eval $(outdir)/$(notdir $(patsubst %.asn1, %.cc,  $(S))): $(S)))
$(foreach S, $(asn_sources),   $(eval $(outdir)/$(notdir $(patsubst %.asn, %.cc,   $(S))): $(S)))
+139 −0
Original line number Diff line number Diff line
/*!
 * \file      NGAPPort.cc
 * \brief     CC file for NGAPPort.
 * \author    ETSI TTF041
 * \copyright ETSI Copyright Notification
 *            No part may be reproduced except as authorized by written permission.
 *            The copyright and the foregoing restriction extend to reproduction in all media.
 *            All rights reserved.
 * \version   0.1
 */

#include "loggers.hh"

#include "LibNGAP_Interface.hh"
#include "NGAP_PDU_Descriptions.hh"
#include "ngap_layer_factory.hh"
#include "layer.hh"
#include "params.hh"

namespace NGAP__PDU__Descriptions{
  class NGAP__PDU;
}
namespace LibNGAP__Interface {

  NGAPPort::NGAPPort(const char *par_port_name): NGAPPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("NGAPPort::") {
    // Nothing to do
  } // End of constructor

  NGAPPort::~NGAPPort() {
    loggers::get_instance().log(">>> NGAPPort::~NGAPPort");

    if (_layer != nullptr) {
      delete _layer;
    }
  } // End of destructor

  void NGAPPort::set_parameter(const char * parameter_name, const char * parameter_value)
  {
    loggers::get_instance().log("NGAPPort::set_parameter: %s=%s", parameter_name, parameter_value);
    _cfg_params.insert(std::pair<std::string, std::string>(std::string(parameter_name), std::string(parameter_value)));
  }

  /*void HttpPort::Handle_Fd_Event(int fd, boolean is_readable,
    boolean is_writable, boolean is_error) {}*/
  
  void NGAPPort::Handle_Fd_Event_Error(int /*fd*/)
  {

  }

  void NGAPPort::Handle_Fd_Event_Writable(int /*fd*/)
  {

  }

  void NGAPPort::Handle_Fd_Event_Readable(int /*fd*/)
  {

  }

  /*void HttpPort::Handle_Timeout(double time_since_last_call) {}*/
  
  void NGAPPort::user_map(const char * system_port)
  {
    loggers::get_instance().log(">>> NGAPPort::user_map: %s", system_port);
    // Build layer stack
    params::iterator it = _cfg_params.find(std::string("params"));
    if (it != _cfg_params.end()) {
      loggers::get_instance().log("NGAPPort::user_map: %s", it->second.c_str());
      // Setup parameters
      params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless
      // Create layer
      _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str());

      if (static_cast<ngap_layer*>(_layer) == nullptr) {
        loggers::get_instance().error("NGAPPort::user_map: Invalid stack configurationi - NOT SCTP: %s", it->second.c_str());
      }
      static_cast<ngap_layer*>(_layer)->add_upper_port(this);
     
      /*IJ commented out // Create layer
      _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str());
      if (static_cast<ngap_layer*>(_layer) == NULL) {
        loggers::get_instance().error("NGAPPort::user_map: Invalid stack configuration: %s", it->second.c_str());
      } 
      static_cast<ngap_layer*>(_layer)->add_upper_port(this);*/
    } else {
      loggers::get_instance().error("NGAPPort::user_map: No layers defined in configuration file");
    }
  } // End of user_map method

  void NGAPPort::user_unmap(const char * system_port)
  {
    loggers::get_instance().log(">>> NGAPPort:user_unmap: %s", system_port);

    // Reset layers
    if (_layer != nullptr) {
      delete _layer;
      _layer = nullptr;
    }
  } // End of user_unmap method

  void NGAPPort::user_start()
  {
    loggers::get_instance().log(">>> NGAPPort::user_start");

  } // End of user_start method

  void NGAPPort::user_stop()
  {
    loggers::get_instance().log(">>> NGAPPort::user_stop");

  } // End of user_stop method

  void NGAPPort::outgoing_send(const NGAP__PDU__Descriptions::NGAP__PDU& send_par)
  {
    loggers::get_instance().log_msg(">>> NGAPPort::outgoing_send: payload=", send_par);
    
    float duration;
    loggers::get_instance().set_start_time(_time_key);
    params params;
        static_cast<ngap_layer*>(_layer)->sendMsg(send_par, params);
    loggers::get_instance().set_stop_time(_time_key, duration);
  }

  void NGAPPort::receiveMsg (const  NGAP__PDU__Descriptions::NGAP__PDU& p_ind, const params& p_params) {
    loggers::get_instance().log_msg(">>> NGAPPort::receive_msg: ", p_ind);
    float duration;
    loggers::get_instance().set_start_time(_time_key);
    // Sanity check
    if (!p_ind.is_bound()) {
      return;
    }

    incoming_message(p_ind);
    loggers::get_instance().set_stop_time(_time_key, duration);
  }
  
} // End of namespace LibNGAP__Interface
+59 −0
Original line number Diff line number Diff line
/*!
 * \file      NGAPPort.hh
 * \brief     Header file for NGAPPort.
 * \author    ETSI TTF041
 * \copyright ETSI Copyright Notification
 *            No part may be reproduced except as authorized by written permission.
 *            The copyright and the foregoing restriction extend to reproduction in all media.
 *            All rights reserved.
 * \version   0.1
 */

#pragma once

#include "LibNGAP_Interface.hh"
#include "NGAP_PDU_Descriptions.hh"

#include "layer.hh"
#include "params.hh"

namespace NGAP__PDU__Descriptions{
  class NGAP__PDU;
}
namespace LibNGAP__Interface {

  class  NGAPPort : public NGAPPort_BASE {
    params _cfg_params;
    params _layer_params;
    layer* _layer;
    std::string _time_key;
  public:
     NGAPPort(const char *par_port_name);
    ~ NGAPPort();
    
    //inline const char *get_name() const { return port_name; }
    void set_parameter(const char *parameter_name, const char *parameter_value);
    void receiveMsg (const NGAP__PDU__Descriptions::NGAP__PDU& p_ind, const params& p_params);
    
  private:
    /* void Handle_Fd_Event(int fd, boolean is_readable,
       boolean is_writable, boolean is_error); */
    void Handle_Fd_Event_Error(int fd);
    void Handle_Fd_Event_Writable(int fd);
    void Handle_Fd_Event_Readable(int fd);
    /* void Handle_Timeout(double time_since_last_call); */

  protected:
    const char *port_name;
    void user_map(const char *system_port);
    void user_unmap(const char *system_port);

    void user_start();
    void user_stop();

  protected:
    void outgoing_send(const NGAP__PDU__Descriptions::NGAP__PDU& send_par);
  }; // End of class  NGAPPort

} // End of namespace LibNGAP__Interface
+3 −0
Original line number Diff line number Diff line
sources := NGAPPort.cc
includes := .
+1 −1
Original line number Diff line number Diff line
TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -M -O -R -U none
TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -O -P NGAP-PDU-Descriptions.NGAP-PDU -R -U none -x
TTCN3_DIR      := $(HOME)/frameworks/titan/titan.core/Install
#WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll
#NPCAP_INCLUDE  := /cygdrive/c/PROGRA~1/Npcap/sdk/include
Loading