Skip to content

Commit 8ae9bc7

Browse files
committed
Add subnet mask of interface for the SGi connection
1 parent 45486b6 commit 8ae9bc7

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

srsepc/hdr/spgw/spgw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ typedef struct {
4646
std::string gtpu_bind_addr;
4747
std::string sgi_if_addr;
4848
std::string sgi_if_name;
49+
std::string sgi_if_netmask;
4950
uint32_t max_paging_queue;
5051
} spgw_args_t;
5152

srsepc/src/main.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ void parse_args(all_args_t* args, int argc, char* argv[])
8787
string spgw_bind_addr;
8888
string sgi_if_addr;
8989
string sgi_if_name;
90+
string sgi_if_netmask;
9091
string dns_addr;
9192
string hss_db_file;
9293
string hss_auth_algo;
@@ -119,6 +120,7 @@ void parse_args(all_args_t* args, int argc, char* argv[])
119120
("spgw.gtpu_bind_addr", bpo::value<string>(&spgw_bind_addr)->default_value("127.0.0.1"), "IP address of SP-GW for the S1-U connection")
120121
("spgw.sgi_if_addr", bpo::value<string>(&sgi_if_addr)->default_value("176.16.0.1"), "IP address of TUN interface for the SGi connection")
121122
("spgw.sgi_if_name", bpo::value<string>(&sgi_if_name)->default_value("srs_spgw_sgi"), "Name of TUN interface for the SGi connection")
123+
("spgw.sgi_if_netmask", bpo::value<string>(&sgi_if_netmask)->default_value("255.255.255.0"), "IP mask of TUN interface for the SGi connection")
122124
("spgw.max_paging_queue", bpo::value<uint32_t>(&max_paging_queue)->default_value(100), "Max number of packets in paging queue")
123125

124126
("pcap.enable", bpo::value<bool>(&args->mme_args.s1ap_args.pcap_enable)->default_value(false), "Enable S1AP PCAP")
@@ -275,6 +277,7 @@ void parse_args(all_args_t* args, int argc, char* argv[])
275277
args->spgw_args.gtpu_bind_addr = spgw_bind_addr;
276278
args->spgw_args.sgi_if_addr = sgi_if_addr;
277279
args->spgw_args.sgi_if_name = sgi_if_name;
280+
args->spgw_args.sgi_if_netmask = sgi_if_netmask;
278281
args->spgw_args.max_paging_queue = max_paging_queue;
279282
args->hss_args.db_file = hss_db_file;
280283

srsepc/src/spgw/gtpc.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,11 +567,12 @@ int spgw::gtpc::init_ue_ip(spgw_args_t* args, const std::map<std::string, uint64
567567
}
568568
}
569569

570-
// XXX TODO add an upper bound to ip addr range via config, use 254 for now
570+
uint32_t hosts_bound = (~ntohl(inet_addr(args->sgi_if_netmask.c_str()))) - 1;
571+
571572
// first address is allocated to the epc tun interface, start w/next addr
572-
for (uint32_t n = 1; n < 254; ++n) {
573+
for (uint32_t n = 1; n < hosts_bound; ++n) {
573574
struct in_addr ue_addr;
574-
ue_addr.s_addr = inet_addr(args->sgi_if_addr.c_str()) + htonl(n);
575+
ue_addr.s_addr = htonl(ntohl(inet_addr(args->sgi_if_addr.c_str())) + n);
575576

576577
std::map<std::string, uint64_t>::const_iterator iter = ip_to_imsi.find(inet_ntoa(ue_addr));
577578
if (iter != ip_to_imsi.end()) {

srsepc/src/spgw/gtpu.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ int spgw::gtpu::init_sgi(spgw_args_t* args)
155155
}
156156

157157
ifr.ifr_netmask.sa_family = AF_INET;
158-
((struct sockaddr_in*)&ifr.ifr_netmask)->sin_addr.s_addr = inet_addr("255.255.255.0");
158+
((struct sockaddr_in*)&ifr.ifr_netmask)->sin_addr.s_addr = inet_addr(args->sgi_if_netmask.c_str());
159159
if (ioctl(sgi_sock, SIOCSIFNETMASK, &ifr) < 0) {
160160
m_gtpu_log->error("Failed to set TUN interface Netmask. Error: %s\n", strerror(errno));
161161
close(m_sgi);

0 commit comments

Comments
 (0)