Added TUN SGi interface to SP-GW.

This commit is contained in:
Pedro Alvarez 2017-11-17 18:01:06 +00:00
parent eac3ee26c1
commit f9b2c6434a
3 changed files with 39 additions and 10 deletions

View File

@ -68,6 +68,7 @@ private:
bool m_running; bool m_running;
srslte::byte_buffer_pool *m_pool; srslte::byte_buffer_pool *m_pool;
bool m_if_up;
int m_sgi_if; int m_sgi_if;
int m_sgi_sock; int m_sgi_sock;
/*Logs*/ /*Logs*/

View File

@ -29,6 +29,7 @@
#include "srslte/common/bcd_helpers.h" #include "srslte/common/bcd_helpers.h"
#include "mme/mme.h" #include "mme/mme.h"
#include "hss/hss.h" #include "hss/hss.h"
#include "spgw/spgw.h"
using namespace std; using namespace std;
using namespace srsepc; using namespace srsepc;
@ -49,9 +50,10 @@ typedef struct {
typedef struct{ typedef struct{
mme_args_t mme_args; mme_args_t mme_args;
hss_args_t hss_args; hss_args_t hss_args;
log_args_t log_args; spgw_args_t spgw_args;
log_args_t log_args;
}all_args_t; }all_args_t;
/********************************************************************** /**********************************************************************
@ -197,6 +199,11 @@ main (int argc,char * argv[] )
hss_log.init("HSS ",logger); hss_log.init("HSS ",logger);
hss_log.set_level(srslte::LOG_LEVEL_DEBUG); hss_log.set_level(srslte::LOG_LEVEL_DEBUG);
hss_log.set_hex_limit(32); hss_log.set_hex_limit(32);
srslte::log_filter spgw_log;
spgw_log.init("SPGW",logger);
spgw_log.set_level(srslte::LOG_LEVEL_DEBUG);
spgw_log.set_hex_limit(32);
mme *mme = mme::get_instance(); mme *mme = mme::get_instance();
if (mme->init(&args.mme_args, &s1ap_log)) { if (mme->init(&args.mme_args, &s1ap_log)) {
@ -209,15 +216,24 @@ main (int argc,char * argv[] )
cout << "Error initializing HSS" << endl; cout << "Error initializing HSS" << endl;
exit(1); exit(1);
} }
spgw *spgw = spgw::get_instance();
if (spgw->init(&args.spgw_args,&spgw_log)) {
cout << "Error initializing SP-GW" << endl;
exit(1);
}
mme->start(); mme->start();
spgw->start();
while(running) { while(running) {
sleep(1); sleep(1);
} }
mme->stop(); mme->stop();
mme->cleanup(); mme->cleanup();
spgw->stop();
cout << "--- exiting ---" << endl; spgw->cleanup();
cout << std::endl <<"--- exiting ---" << endl;
return 0; return 0;
} }

View File

@ -40,7 +40,8 @@ spgw* spgw::m_instance = NULL;
boost::mutex spgw_instance_mutex; boost::mutex spgw_instance_mutex;
spgw::spgw(): spgw::spgw():
m_running(false) m_running(false),
m_if_up(false)
{ {
m_pool = srslte::byte_buffer_pool::get_instance(); m_pool = srslte::byte_buffer_pool::get_instance();
return; return;
@ -92,6 +93,13 @@ spgw::stop()
m_running = false; m_running = false;
thread_cancel(); thread_cancel();
wait_thread_finish(); wait_thread_finish();
//Clean up interface
if(m_if_up)
{
close(m_sgi_if);
close(m_sgi_sock);
}
} }
return; return;
} }
@ -114,6 +122,12 @@ spgw::init_sgi_if()
char dev[IFNAMSIZ] = "srs_spgw_sgi"; char dev[IFNAMSIZ] = "srs_spgw_sgi";
struct ifreq ifr; struct ifreq ifr;
if(m_if_up)
{
return(srslte::ERROR_ALREADY_STARTED);
}
// Construct the TUN device // Construct the TUN device
m_sgi_if = open("/dev/net/tun", O_RDWR); m_sgi_if = open("/dev/net/tun", O_RDWR);
m_spgw_log->info("TUN file descriptor = %d\n", m_sgi_if); m_spgw_log->info("TUN file descriptor = %d\n", m_sgi_if);
@ -149,10 +163,8 @@ spgw::init_sgi_if()
return(srslte::ERROR_CANT_START); return(srslte::ERROR_CANT_START);
} }
//if_up = true; m_if_up = true;
return(srslte::ERROR_NONE); return(srslte::ERROR_NONE);
} }
} //namespace srsepc } //namespace srsepc