New merge with develop-nr. DL IP traffic reaching up to UE's MAC layer now successfully.
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
#ifeq ($(NAS_FLAG),1)
|
||||
NAS_OBJS = $(OPENAIR2_TOP)/RRC/NAS/nas_config.o
|
||||
NAS_OBJS += $(OPENAIR2_TOP)/RRC/NAS/rb_config.o
|
||||
#endif
|
||||
@@ -44,48 +44,56 @@
|
||||
|
||||
#include "nas_config.h"
|
||||
#include "common/utils/LOG/log.h"
|
||||
|
||||
#include "targets/RT/USER/lte-softmodem.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
|
||||
//default values according to the examples,
|
||||
|
||||
char *baseNetAddress = "10.0" ;
|
||||
char *netMask = "255.255.255.0" ;
|
||||
char *broadcastAddr = "10.0.255.255" ;
|
||||
char *baseNetAddress ;
|
||||
char *netMask ;
|
||||
char *broadcastAddr ;
|
||||
#define NASHLP_NETPREFIX "<NAS network prefix, two first bytes of network addresses>\n"
|
||||
#define NASHLP_NETMASK "<NAS network mask>\n"
|
||||
#define NASHLP_BROADCASTADDR "<NAS network broadcast address>\n"
|
||||
void nas_getparams(void) {
|
||||
paramdef_t nasoptions[] = {
|
||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* configuration parameters for netlink, includes network parameters when running in noS1 mode */
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
{"NetworkPrefix", NASHLP_NETPREFIX, 0, strptr:&baseNetAddress, defstrval:"10.0", TYPE_STRING, 0 },
|
||||
{"NetworkMask", NASHLP_NETMASK, 0, strptr:&netMask, defstrval:"255.255.255.0", TYPE_STRING, 0 },
|
||||
{"BroadcastAddr", NASHLP_BROADCASTADDR, 0, strptr:&broadcastAddr, defstrval:"10.0.255.255", TYPE_STRING, 0 },
|
||||
};
|
||||
config_get( nasoptions,sizeof(nasoptions)/sizeof(paramdef_t),"nas.noS1");
|
||||
}
|
||||
|
||||
|
||||
void setBaseNetAddress (char* baseAddr)
|
||||
{
|
||||
void setBaseNetAddress (char *baseAddr) {
|
||||
strcpy(baseNetAddress,baseAddr);
|
||||
}
|
||||
|
||||
char* getBaseNetAddress (void)
|
||||
{
|
||||
char *getBaseNetAddress (void) {
|
||||
return baseNetAddress;
|
||||
}
|
||||
|
||||
void setNetMask (char* baseAddr)
|
||||
{
|
||||
void setNetMask (char *baseAddr) {
|
||||
strcpy(netMask,baseAddr);
|
||||
}
|
||||
|
||||
char* getNetMask (void)
|
||||
{
|
||||
char *getNetMask (void) {
|
||||
return netMask;
|
||||
}
|
||||
|
||||
void setBroadcastAddress (char* baseAddr)
|
||||
{
|
||||
void setBroadcastAddress (char *baseAddr) {
|
||||
strcpy(broadcastAddr, baseAddr);
|
||||
}
|
||||
|
||||
char* getBroadcastAddress (void)
|
||||
{
|
||||
char *getBroadcastAddress (void) {
|
||||
return broadcastAddr;
|
||||
}
|
||||
|
||||
//Add Gateway to the interface
|
||||
int set_gateway(char *interfaceName, char *gateway)
|
||||
{
|
||||
int set_gateway(char *interfaceName, char *gateway) {
|
||||
int sock_fd;
|
||||
struct rtentry rt;
|
||||
struct sockaddr_in addr;
|
||||
@@ -96,20 +104,16 @@ int set_gateway(char *interfaceName, char *gateway)
|
||||
}
|
||||
|
||||
memset (&rt, 0, sizeof (rt));
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
/*set Destination addr*/
|
||||
inet_aton("0.0.0.0",&addr.sin_addr);
|
||||
memcpy(&rt.rt_dst, &addr, sizeof(struct sockaddr_in));
|
||||
|
||||
/*set gateway addr*/
|
||||
inet_aton(gateway,&addr.sin_addr);
|
||||
memcpy(&rt.rt_gateway, &addr, sizeof(struct sockaddr_in));
|
||||
|
||||
/*set genmask addr*/
|
||||
inet_aton("0.0.0.0",&addr.sin_addr);
|
||||
memcpy(&rt.rt_genmask, &addr, sizeof(struct sockaddr_in));
|
||||
|
||||
rt.rt_dev = interfaceName;
|
||||
//rt.rt_flags = RTF_UP|RTF_GATEWAY|RTF_DEFAULT;
|
||||
/* SR: rt_flags on 16 bits but RTF_DEFAULT = 0x00010000
|
||||
@@ -129,19 +133,16 @@ int set_gateway(char *interfaceName, char *gateway)
|
||||
LOG_I(OIP,"set_gateway OK!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
close(sock_fd);
|
||||
|
||||
LOG_D(OIP,"Set Gateway OK!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// sets a genneric interface parameter
|
||||
// (SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFFLAGS)
|
||||
int setInterfaceParameter(char *interfaceName, char *settingAddress, int operation)
|
||||
{
|
||||
int setInterfaceParameter(char *interfaceName, char *settingAddress, int operation) {
|
||||
int sock_fd;
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_in addr;
|
||||
@@ -154,10 +155,8 @@ int setInterfaceParameter(char *interfaceName, char *settingAddress, int operati
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strncpy(ifr.ifr_name, interfaceName, sizeof(ifr.ifr_name)-1);
|
||||
|
||||
memset(&addr, 0, sizeof(struct sockaddr_in));
|
||||
addr.sin_family = AF_INET;
|
||||
|
||||
inet_aton(settingAddress,&addr.sin_addr);
|
||||
memcpy(&ifr.ifr_ifru.ifru_addr,&addr,sizeof(struct sockaddr_in));
|
||||
|
||||
@@ -169,15 +168,12 @@ int setInterfaceParameter(char *interfaceName, char *settingAddress, int operati
|
||||
}
|
||||
|
||||
close(sock_fd);
|
||||
|
||||
// printf("Set OK!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// sets a genneric interface parameter
|
||||
// (SIOCSIFADDR, SIOCSIFNETMASK, SIOCSIFBRDADDR, SIOCSIFFLAGS)
|
||||
int bringInterfaceUp(char *interfaceName, int up)
|
||||
{
|
||||
int bringInterfaceUp(char *interfaceName, int up) {
|
||||
int sock_fd;
|
||||
struct ifreq ifr;
|
||||
|
||||
@@ -213,8 +209,7 @@ int bringInterfaceUp(char *interfaceName, int up)
|
||||
return 0;
|
||||
}
|
||||
// non blocking full configuration of the interface (address, net mask, and broadcast mask)
|
||||
int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress)
|
||||
{
|
||||
int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress) {
|
||||
bringInterfaceUp(interfaceName, 0);
|
||||
// sets the machine address
|
||||
int returnValue= setInterfaceParameter(interfaceName, ipAddress,SIOCSIFADDR);
|
||||
@@ -229,26 +224,23 @@ int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *br
|
||||
|
||||
// if(!returnValue)
|
||||
// returnValue=set_gateway(interfaceName, broadcastAddress);
|
||||
|
||||
bringInterfaceUp(interfaceName, 1);
|
||||
if(!returnValue)
|
||||
returnValue = bringInterfaceUp(interfaceName, 1);
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
// non blocking full configuration of the interface (address, and the two lest octets of the address)
|
||||
int nas_config(int interface_id, int thirdOctet, int fourthOctet)
|
||||
{
|
||||
int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifname) {
|
||||
//char buf[5];
|
||||
char ipAddress[20];
|
||||
char broadcastAddress[20];
|
||||
char interfaceName[8];
|
||||
char interfaceName[20];
|
||||
int returnValue;
|
||||
sprintf(ipAddress, "10.0.%d.%d", thirdOctet,fourthOctet);
|
||||
|
||||
sprintf(broadcastAddress, "10.0.%d.255", thirdOctet);
|
||||
|
||||
sprintf(interfaceName, "oai%d", interface_id);
|
||||
|
||||
sprintf(ipAddress, "%s.%d.%d", baseNetAddress,thirdOctet,fourthOctet);
|
||||
sprintf(broadcastAddress, "%s.%d.255",baseNetAddress, thirdOctet);
|
||||
sprintf(interfaceName, "%s%s%d", (UE_NAS_USE_TUN || ENB_NAS_USE_TUN)?"oaitun_":ifname,
|
||||
UE_NAS_USE_TUN?"ue": (ENB_NAS_USE_TUN?"enb":""),interface_id);
|
||||
bringInterfaceUp(interfaceName, 0);
|
||||
// sets the machine address
|
||||
returnValue= setInterfaceParameter(interfaceName, ipAddress,SIOCSIFADDR);
|
||||
@@ -261,19 +253,23 @@ int nas_config(int interface_id, int thirdOctet, int fourthOctet)
|
||||
if(!returnValue)
|
||||
returnValue= setInterfaceParameter(interfaceName, broadcastAddress,SIOCSIFBRDADDR);
|
||||
|
||||
bringInterfaceUp(interfaceName, 1);
|
||||
if(!returnValue)
|
||||
returnValue=bringInterfaceUp(interfaceName, 1);
|
||||
|
||||
if(!returnValue)
|
||||
LOG_I(OIP,"Interface %s successfuly configured, ip address %s, mask %s broadcast address %s\n",
|
||||
interfaceName, ipAddress, netMask, broadcastAddress);
|
||||
else
|
||||
LOG_E(OIP,"Interface %s couldn't be configured (ip address %s, mask %s broadcast address %s)\n",
|
||||
interfaceName, ipAddress, netMask, broadcastAddress);
|
||||
|
||||
return returnValue;
|
||||
|
||||
}
|
||||
|
||||
// Blocking full configuration of the interface (address, net mask, and broadcast mask)
|
||||
int blocking_NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress)
|
||||
{
|
||||
|
||||
int blocking_NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *broadcastAddress) {
|
||||
char command[200];
|
||||
command[0]='\0';
|
||||
|
||||
strcat(command, "ifconfig ");
|
||||
strncat(command, interfaceName, sizeof(command) - strlen(command) - 1);
|
||||
strncat(command, " ", sizeof(command) - strlen(command) - 1);
|
||||
@@ -282,16 +278,13 @@ int blocking_NAS_config(char *interfaceName, char *ipAddress, char *networkMask,
|
||||
strncat(command, networkMask, sizeof(command) - strlen(command) - 1);
|
||||
strncat(command, " broadcast ", sizeof(command) - strlen(command) - 1);
|
||||
strncat(command, broadcastAddress, sizeof(command) - strlen(command) - 1);
|
||||
|
||||
// ifconfig nasmesh0 10.0.1.1 networkMask 255.255.255.0 broadcast 10.0.1.255
|
||||
int i = system (command);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
// program help
|
||||
void helpOptions(char **argv)
|
||||
{
|
||||
void helpOptions(char **argv) {
|
||||
printf("Help for %s\n", argv[0]);
|
||||
printf(" -i <interfaceName>\n");
|
||||
printf(" -a <IP address>\n");
|
||||
@@ -303,13 +296,11 @@ void helpOptions(char **argv)
|
||||
printf(" IP Address: 10.0.1.1\n");
|
||||
printf(" Net mask: 255.255.255.0\n");
|
||||
printf(" Broadcast address: [Beginning of the IP address].255\n");
|
||||
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// creates the broadcast address if it wasn't set before
|
||||
void createBroadcast(char *broadcastAddress)
|
||||
{
|
||||
void createBroadcast(char *broadcastAddress) {
|
||||
int pos=strlen(broadcastAddress)-1;
|
||||
|
||||
while(broadcastAddress[pos]!='.')
|
||||
@@ -331,7 +322,6 @@ int main(int argc,char **argv)
|
||||
char ipAddress[100];
|
||||
char networkMask[100];
|
||||
char broadcastAddress[100];
|
||||
|
||||
strcpy(interfaceName, "oai0");
|
||||
strcpy(ipAddress, "10.0.1.1");
|
||||
strcpy(networkMask, "255.255.255.0");
|
||||
@@ -339,38 +329,38 @@ int main(int argc,char **argv)
|
||||
|
||||
while ((c = getopt (argc, argv, "i:a:n:b:h")) != -1)
|
||||
switch (c) {
|
||||
case 'h':
|
||||
helpOptions(argv);
|
||||
break;
|
||||
case 'h':
|
||||
helpOptions(argv);
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
strcpy(interfaceName,optarg);
|
||||
break;
|
||||
case 'i':
|
||||
strcpy(interfaceName,optarg);
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
strcpy(ipAddress,optarg);
|
||||
break;
|
||||
case 'a':
|
||||
strcpy(ipAddress,optarg);
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
strcpy(networkMask,optarg);
|
||||
break;
|
||||
case 'n':
|
||||
strcpy(networkMask,optarg);
|
||||
break;
|
||||
|
||||
case 'b':
|
||||
strcpy(broadcastAddress,optarg);
|
||||
break;
|
||||
case 'b':
|
||||
strcpy(broadcastAddress,optarg);
|
||||
break;
|
||||
|
||||
case '?':
|
||||
if (isprint (optopt))
|
||||
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
|
||||
else
|
||||
fprintf (stderr,
|
||||
"Unknown option character `\\x%x'.\n",
|
||||
optopt);
|
||||
case '?':
|
||||
if (isprint (optopt))
|
||||
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
|
||||
else
|
||||
fprintf (stderr,
|
||||
"Unknown option character `\\x%x'.\n",
|
||||
optopt);
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
|
||||
default:
|
||||
abort ();
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
|
||||
if(strlen(broadcastAddress)==0) {
|
||||
@@ -383,7 +373,6 @@ int main(int argc,char **argv)
|
||||
//test
|
||||
// setBaseNetAddress("11.11");
|
||||
// nas_config(interfaceName, 33, 44);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -31,6 +31,13 @@
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
/*! \fn void void nas_getparams(void)(void)
|
||||
* \brief This function get parameters used to configure network interface when running in noS1 mode
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
void nas_getparams(void);
|
||||
|
||||
/*! \fn int NAS_config(char*, char*, char*, char*)
|
||||
* \brief This function initializes the nasmesh interface
|
||||
* \param[in] interfaceName, the name of the interface, e.g. nasmesh0 or nasmesh1
|
||||
@@ -54,7 +61,7 @@ int NAS_config(char *interfaceName, char *ipAddress, char *networkMask, char *br
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
int nas_config(int interface_id, int thirdOctet, int fourthOctet);
|
||||
int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
|
||||
|
||||
/*! \fn int blocking_NAS_config(char*, char*, char*, char*)
|
||||
* \brief This function initializes the nasmesh interface, in a blocking way,
|
||||
@@ -98,7 +105,7 @@ int set_gateway(char *interfaceName, char *gateway);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
void setBaseNetAddress(char* baseAddr);
|
||||
void setBaseNetAddress(char *baseAddr);
|
||||
|
||||
/*! \fn char* getBaseNetAddress()
|
||||
* \brief This function returns the basic network address used
|
||||
@@ -106,7 +113,7 @@ void setBaseNetAddress(char* baseAddr);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
char* getBaseNetAddress(void);
|
||||
char *getBaseNetAddress(void);
|
||||
|
||||
/*! \fn void setNetMask(char*)
|
||||
* \brief This function sets the new default network mask used
|
||||
@@ -114,7 +121,7 @@ char* getBaseNetAddress(void);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
void setNetMask(char* baseAddr);
|
||||
void setNetMask(char *baseAddr);
|
||||
|
||||
/*! \fn char* getNetMask()
|
||||
* \brief This function returns the network mask address in use
|
||||
@@ -122,7 +129,7 @@ void setNetMask(char* baseAddr);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
char* getNetMask(void);
|
||||
char *getNetMask(void);
|
||||
|
||||
/*! \fn coid setBroadcastAddress(char*)
|
||||
* \brief This function sets the new broadcast address used
|
||||
@@ -130,7 +137,7 @@ char* getNetMask(void);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
void setBroadcastAddress(char* baseAddr);
|
||||
void setBroadcastAddress(char *baseAddr);
|
||||
|
||||
/*! \fn char* getBroadcastAddress()
|
||||
* \brief This function returns the broadcast address in use
|
||||
@@ -138,7 +145,7 @@ void setBroadcastAddress(char* baseAddr);
|
||||
* \note
|
||||
* @ingroup ?????
|
||||
*/
|
||||
char* getBroadcastAddress(void);
|
||||
char *getBroadcastAddress(void);
|
||||
|
||||
int bringInterfaceUp(char *interfaceName, int up);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user