int main(int argc, char* argv[])
{
  NwRcT                         rc;
  uint32_t                        logLevel;
  uint8_t*                        logLevelStr;

  NwGtpv2cStackHandleT          hGtpv2cStack = 0;

  NwGtpv2cUlpEntityT            ulp;
  NwGtpv2cUdpEntityT            udp;
  NwGtpv2cTimerMgrEntityT       tmrMgr;
  NwGtpv2cLogMgrEntityT         logMgr;

  printf("EGTPING 0.1, Copyright (C) 2011 Amit Chawre.\n");
  rc = nwEgtPingParseCmdLineOpts(argc, argv);

  if(rc != NW_OK) {
    rc = nwEgtPingHelp();
    exit(rc);
  }

  logLevelStr = getenv ("NW_LOG_LEVEL");

  if(logLevelStr == NULL) {
    logLevel = NW_LOG_LEVEL_INFO;
  } else {
    if(strncmp(logLevelStr, "EMER",4) == 0)
      logLevel = NW_LOG_LEVEL_EMER;
    else if(strncmp(logLevelStr, "ALER",4) == 0)
      logLevel = NW_LOG_LEVEL_ALER;
    else if(strncmp(logLevelStr, "CRIT",4) == 0)
      logLevel = NW_LOG_LEVEL_CRIT;
    else if(strncmp(logLevelStr, "ERRO",4) == 0)
      logLevel = NW_LOG_LEVEL_ERRO ;
    else if(strncmp(logLevelStr, "WARN",4) == 0)
      logLevel = NW_LOG_LEVEL_WARN;
    else if(strncmp(logLevelStr, "NOTI",4) == 0)
      logLevel = NW_LOG_LEVEL_NOTI;
    else if(strncmp(logLevelStr, "INFO",4) == 0)
      logLevel = NW_LOG_LEVEL_INFO;
    else if(strncmp(logLevelStr, "DEBG",4) == 0)
      logLevel = NW_LOG_LEVEL_DEBG;
  }

  /*---------------------------------------------------------------------------
   *  Initialize event library
   *--------------------------------------------------------------------------*/

  NW_EVT_INIT();

  /*---------------------------------------------------------------------------
   *  Initialize Log Manager
   *--------------------------------------------------------------------------*/
  nwMiniLogMgrInit(nwMiniLogMgrGetInstance(), logLevel);

  /*---------------------------------------------------------------------------
   *  Initialize Gtpv2c Stack Instance
   *--------------------------------------------------------------------------*/
  rc = nwGtpv2cInitialize(&hGtpv2cStack);

  if(rc != NW_OK) {
    NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to create gtpv2c stack instance. Error '%u' occured", rc);
    exit(1);
  }

  rc = nwGtpv2cSetLogLevel(hGtpv2cStack, logLevel);

  /*---------------------------------------------------------------------------
   * Set up Ulp Entity
   *--------------------------------------------------------------------------*/
  rc = nwGtpv2cUlpInit(&ulpObj, hGtpv2cStack, egtPing.localIpStr);
  NW_ASSERT(NW_OK == rc);

  ulp.hUlp = (NwGtpv2cUlpHandleT) &ulpObj;
  ulp.ulpReqCallback = nwGtpv2cUlpProcessStackReqCallback;

  rc = nwGtpv2cSetUlpEntity(hGtpv2cStack, &ulp);
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   * Set up Udp Entity
   *--------------------------------------------------------------------------*/
  rc = nwGtpv2cUdpInit(&udpObj, hGtpv2cStack, egtPing.localIpStr);
  NW_ASSERT(NW_OK == rc);

  udp.hUdp = (NwGtpv2cUdpHandleT) &udpObj;
  udp.udpDataReqCallback = nwGtpv2cUdpDataReq;

  rc = nwGtpv2cSetUdpEntity(hGtpv2cStack, &udp);
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   * Set up Log Entity
   *--------------------------------------------------------------------------*/
  tmrMgr.tmrMgrHandle = 0;
  tmrMgr.tmrStartCallback = nwTimerStart;
  tmrMgr.tmrStopCallback = nwTimerStop;

  rc = nwGtpv2cSetTimerMgrEntity(hGtpv2cStack, &tmrMgr);
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   * Set up Log Entity
   *--------------------------------------------------------------------------*/
  logMgr.logMgrHandle   = (NwGtpv2cLogMgrHandleT) nwMiniLogMgrGetInstance();
  logMgr.logReqCallback  = nwMiniLogMgrLogRequest;

  rc = nwGtpv2cSetLogMgrEntity(hGtpv2cStack, &logMgr);
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   *  Send Message Request to Gtpv2c Stack Instance
   *--------------------------------------------------------------------------*/
  NW_LOG(NW_LOG_LEVEL_NOTI, "EGTPING %s ("NW_IPV4_ADDR")", egtPing.targetIpStr, NW_IPV4_ADDR_FORMAT(inet_addr(egtPing.targetIpStr)));
  rc = nwGtpv2cUlpPing(&ulpObj,
                       inet_addr(egtPing.targetIpStr),
                       egtPing.pingCount,
                       egtPing.pingInterval,
                       2,
                       3);
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   * Install signal handler
   *--------------------------------------------------------------------------*/
  signal(SIGINT, nwEgtPingHandleSignal);

  /*---------------------------------------------------------------------------
   * Event loop
   *--------------------------------------------------------------------------*/

  NW_EVT_LOOP();
  NW_LOG(NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!");

  /*---------------------------------------------------------------------------
   *  Destroy Gtpv2c Stack Instance
   *--------------------------------------------------------------------------*/
  rc = nwGtpv2cFinalize(hGtpv2cStack);

  if(rc != NW_OK) {
    NW_LOG(NW_LOG_LEVEL_ERRO, "Failed to finalize gtpv2c stack instance. Error '%u' occured", rc);
  }

  return rc;
}
Пример #2
0
int main(int argc, char* argv[])
{
  NwRcT rc; 

  NwMmeT                    mme;
  NwGtpv2cUlpEntityT        ulp;
  NwGtpv2cUdpEntityT        udp;
  NwGtpv2cTimerMgrEntityT   tmrMgr;
  NwGtpv2cLogMgrEntityT     logMgr;


  /*---------------------------------------------------------------------------
   *  Initialize LogMgr
   *--------------------------------------------------------------------------*/

  rc = nwLogMgrInit(nwLogMgrGetInstance(), (NwU8T*)"NW-MME", getpid());
  NW_ASSERT(NW_OK == rc);

  /*---------------------------------------------------------------------------
   *  Parse Commandline Arguments 
   *--------------------------------------------------------------------------*/

  rc = nwMmeParseCmdLineOpts(&mme, argc, argv);
  if(rc != NW_OK)
  {
    printf("Usage error. Please refer help.\n");
    printf("Example usage: %s --sgw-ip <a.b.c.d> --mme-ip <x.y.z.a> --pgw-ip <e.f.g.h> --num-of-ue 10\n", argv[0]);
    exit(0);
  }

  /*---------------------------------------------------------------------------
   *  Initialize event library
   *--------------------------------------------------------------------------*/

  NW_EVT_INIT();

  /*---------------------------------------------------------------------------
   * Create Data Plane instance.
   *--------------------------------------------------------------------------*/

  mme.dataPlane.pDpe    = nwMmeDpeInitialize();

  if(mme.dataPlane.gtpuIpv4Addr)
  {
    rc = nwMmeDpeCreateGtpuService(mme.dataPlane.pDpe, mme.dataPlane.gtpuIpv4Addr);
  }

  if(strlen(mme.dataPlane.tunNwIfName) !=0)
  {
    rc = nwMmeDpeCreateIpv4Service(mme.dataPlane.pDpe, mme.dataPlane.tunNwIfName);
  }

  /*---------------------------------------------------------------------------
   *  Initialize GTPv2c Stack Instance
   *--------------------------------------------------------------------------*/

  rc = nwGtpv2cInitialize(&mme.hGtpcStack);

  if(rc != NW_OK)
  {
    NW_MME_LOG(NW_LOG_LEVEL_ERRO, "Failed to create GTPv2c stack instance. Error '%u' occured", rc);
    exit(1);
  }

  NW_MME_LOG(NW_LOG_LEVEL_INFO, "GTP-Cv2 Stack Handle '%X' Creation Successful!", mme.hGtpcStack);

  /* Set up Log Entity */ 

  logMgr.logMgrHandle   = (NwGtpv2cLogMgrHandleT) nwLogMgrGetInstance();
  logMgr.logReqCallback  = nwLog;

  rc = nwGtpv2cSetLogMgrEntity(mme.hGtpcStack, &logMgr);
  NW_ASSERT( NW_OK == rc );

  rc = nwGtpv2cSetLogLevel(mme.hGtpcStack, nwLogMgrGetLogLevel(nwLogMgrGetInstance()));
  NW_ASSERT( NW_OK == rc );

  /* Set up Timer Entity */

  tmrMgr.tmrMgrHandle   = 0;
  tmrMgr.tmrStartCallback= nwGtpv2TimerStartIndication;
  tmrMgr.tmrStopCallback = nwGtpv2TimerStopIndication;

  rc = nwGtpv2cSetTimerMgrEntity(mme.hGtpcStack, &tmrMgr);
  NW_ASSERT( NW_OK == rc );

  /* Initialize and Set up Ulp Entity */

  rc = nwMmeUlpInit(&mme.ulp, mme.numOfUe, mme.sessionTimeout, mme.mmeIpAddr, mme.sgwIpAddr, mme.pgwIpAddr, mme.rps, mme.dataPlane.pDpe, mme.hGtpcStack);
  NW_ASSERT( NW_OK == rc );

  ulp.hUlp = (NwGtpv2cUlpHandleT) &mme.ulp;
  ulp.ulpReqCallback = nwMmeUlpStackReqCallback;

  rc = nwGtpv2cSetUlpEntity(mme.hGtpcStack, &ulp);
  NW_ASSERT( NW_OK == rc );


  /* Initialize and Set up Udp Entity */

  rc = nwUdpInit(&mme.udp, mme.mmeIpAddr, mme.hGtpcStack);
  NW_ASSERT( NW_OK == rc );

  udp.hUdp              = (NwGtpv2cUdpHandleT)&mme.udp;
  udp.udpDataReqCallback = nwUdpDataReq;
  rc = nwGtpv2cSetUdpEntity(mme.hGtpcStack, &udp);
  NW_ASSERT( NW_OK == rc );


  /*---------------------------------------------------------------------------
   * Start Network Entry Procedure from ULP 
   *--------------------------------------------------------------------------*/

  rc = nwMmeUlpStartNetworkEntry(&mme.ulp);
  NW_ASSERT( NW_OK == rc );


  /*---------------------------------------------------------------------------
   * Event Loop 
   *--------------------------------------------------------------------------*/

  NW_EVT_LOOP();

  NW_MME_LOG(NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!");

  /*---------------------------------------------------------------------------
   *  Destroy ULP instance 
   *--------------------------------------------------------------------------*/

  rc = nwMmeUlpDestroy(&mme.ulp);
  NW_ASSERT( NW_OK == rc );


  /*---------------------------------------------------------------------------
   *  Destroy GTPv2c Stack Instance
   *--------------------------------------------------------------------------*/

  rc = nwGtpv2cFinalize(mme.hGtpcStack);

  if(rc != NW_OK)
  {
    NW_MME_LOG(NW_LOG_LEVEL_ERRO, "Failed to finalize GTPv2c stack instance. Error '%u' occured", rc);
  }
  else
  {
    NW_MME_LOG(NW_LOG_LEVEL_INFO, "GTP-Cv2 Stack Handle '%x' Finalize Successful!", mme.hGtpcStack);
  }

  return rc;
}
Пример #3
0
int
main (
  int argc,
  char *argv[])
{
  NwRcT                                   rc;
  uint32_t                                logLevel;
  uint8_t                                *logLevelStr;
  NwGtpv2cStackHandleT                    hGtpv2cStack = 0;
  NwGtpv2cNodeUlpT                        ulpObj;
  NwGtpv2cNodeUdpT                        udpObj;
  NwGtpv2cUlpEntityT                      ulp;
  NwGtpv2cUdpEntityT                      udp;
  NwGtpv2cTimerMgrEntityT                 tmrMgr;
  NwGtpv2cLogMgrEntityT                   logMgr;

  if (argc != 3) {
    printf ("Usage: %s <local-ip> <peer-ip>\n", argv[0]);
    exit (0);
  }

  logLevelStr = getenv ("NW_LOG_LEVEL");

  if (logLevelStr == NULL) {
    logLevel = NW_LOG_LEVEL_INFO;
  } else {
    if (strncmp (logLevelStr, "EMER", 4) == 0)
      logLevel = NW_LOG_LEVEL_EMER;
    else if (strncmp (logLevelStr, "ALER", 4) == 0)
      logLevel = NW_LOG_LEVEL_ALER;
    else if (strncmp (logLevelStr, "CRIT", 4) == 0)
      logLevel = NW_LOG_LEVEL_CRIT;
    else if (strncmp (logLevelStr, "ERRO", 4) == 0)
      logLevel = NW_LOG_LEVEL_ERRO;
    else if (strncmp (logLevelStr, "WARN", 4) == 0)
      logLevel = NW_LOG_LEVEL_WARN;
    else if (strncmp (logLevelStr, "NOTI", 4) == 0)
      logLevel = NW_LOG_LEVEL_NOTI;
    else if (strncmp (logLevelStr, "INFO", 4) == 0)
      logLevel = NW_LOG_LEVEL_INFO;
    else if (strncmp (logLevelStr, "DEBG", 4) == 0)
      logLevel = NW_LOG_LEVEL_DEBG;
  }

  /*---------------------------------------------------------------------------
      Initialize event library
    --------------------------------------------------------------------------*/
  NW_EVT_INIT ();
  /*---------------------------------------------------------------------------
      Initialize Log Manager
    --------------------------------------------------------------------------*/
  nwMiniLogMgrInit (nwMiniLogMgrGetInstance (), logLevel);
  /*---------------------------------------------------------------------------
      Initialize Gtpv2c Stack Instance
    --------------------------------------------------------------------------*/
  rc = nwGtpv2cInitialize (&hGtpv2cStack);

  if (rc != NW_OK) {
    NW_LOG (NW_LOG_LEVEL_ERRO, "Failed to create gtpv2c stack instance. Error '%u' occured", rc);
    exit (1);
  }

  NW_LOG (NW_LOG_LEVEL_INFO, "Gtpv2c Stack Handle '%X' Creation Successful!", hGtpv2cStack);
  rc = nwGtpv2cSetLogLevel (hGtpv2cStack, logLevel);
  /*---------------------------------------------------------------------------
     Set up Ulp Entity
    --------------------------------------------------------------------------*/
  rc = nwGtpv2cUlpInit (&ulpObj, hGtpv2cStack, argv[2]);
  NW_ASSERT (NW_OK == rc);
  ulp.hUlp = (NwGtpv2cUlpHandleT) & ulpObj;
  ulp.ulpReqCallback = nwGtpv2cUlpProcessStackReqCallback;
  rc = nwGtpv2cSetUlpEntity (hGtpv2cStack, &ulp);
  NW_ASSERT (NW_OK == rc);
  /*---------------------------------------------------------------------------
     Set up Udp Entity
    --------------------------------------------------------------------------*/
  rc = nwGtpv2cUdpInit (&udpObj, hGtpv2cStack, (argv[1]));
  NW_ASSERT (NW_OK == rc);
  udp.hUdp = (NwGtpv2cUdpHandleT) & udpObj;
  udp.udpDataReqCallback = nwGtpv2cUdpDataReq;
  rc = nwGtpv2cSetUdpEntity (hGtpv2cStack, &udp);
  NW_ASSERT (NW_OK == rc);
  /*---------------------------------------------------------------------------
     Set up Log Entity
    --------------------------------------------------------------------------*/
  tmrMgr.tmrMgrHandle = 0;
  tmrMgr.tmrStartCallback = nwTimerStart;
  tmrMgr.tmrStopCallback = nwTimerStop;
  rc = nwGtpv2cSetTimerMgrEntity (hGtpv2cStack, &tmrMgr);
  NW_ASSERT (NW_OK == rc);
  /*---------------------------------------------------------------------------
     Set up Log Entity
    --------------------------------------------------------------------------*/
  logMgr.logMgrHandle = (NwGtpv2cLogMgrHandleT) nwMiniLogMgrGetInstance ();
  logMgr.logReqCallback = nwMiniLogMgrLogRequest;
  rc = nwGtpv2cSetLogMgrEntity (hGtpv2cStack, &logMgr);
  NW_ASSERT (NW_OK == rc);
  /*---------------------------------------------------------------------------
      Send Message Request to Gtpv2c Stack Instance
    --------------------------------------------------------------------------*/
  //rc = nwGtpv2cUlpCreateSessionRequestToPeer(&ulpObj);
  rc = nwGtpv2cUlpSenEchoRequestToPeer (&ulpObj, inet_addr (argv[2]));
  NW_ASSERT (NW_OK == rc);
  /*---------------------------------------------------------------------------
     Event loop
    --------------------------------------------------------------------------*/
  NW_EVT_LOOP ();
  NW_LOG (NW_LOG_LEVEL_ERRO, "Exit from eventloop, no events to process!");
  /*---------------------------------------------------------------------------
      Destroy Gtpv2c Stack Instance
    --------------------------------------------------------------------------*/
  rc = nwGtpv2cFinalize (hGtpv2cStack);

  if (rc != NW_OK) {
    NW_LOG (NW_LOG_LEVEL_ERRO, "Failed to finalize gtpv2c stack instance. Error '%u' occured", rc);
  } else {
    NW_LOG (NW_LOG_LEVEL_INFO, "Gtpv2c Stack Handle '%X' Finalize Successful!", hGtpv2cStack);
  }

  return rc;
}