Commit 3fbaf01e authored by Javier Morgade's avatar Javier Morgade

Minor changes to also nable MBMS TUN interfaces with S1

	ACKNOWLEDGEMENT:
 	1. This commit was developed at Vicomtech (https://www.vicomtech.org) under UE project CDN-X-ALL: "CDN edge-cloud computing for efficient cache and reliable streaming aCROSS Aggregated unicast-multicast LinkS"
 	2. Project funded by Fed4FIRE+ OC5 (https://www.fed4fire.eu)
Signed-off-by: default avatarJavier Morgade <javier.morgade@ieee.org>
parent 143214e7
...@@ -1344,9 +1344,10 @@ pdcp_mbms_run ( ...@@ -1344,9 +1344,10 @@ pdcp_mbms_run (
// //
// IP/NAS -> PDCP traffic : TX, read the pkt from the upper layer buffer // IP/NAS -> PDCP traffic : TX, read the pkt from the upper layer buffer
// if (LINK_ENB_PDCP_TO_GTPV1U && ctxt_pP->enb_flag == ENB_FLAG_NO) { // if (LINK_ENB_PDCP_TO_GTPV1U && ctxt_pP->enb_flag == ENB_FLAG_NO) {
if (!EPC_MODE_ENABLED || ctxt_pP->enb_flag == ENB_FLAG_NO ) { //if (EPC_MODE_ENABLED || ctxt_pP->enb_flag == ENB_FLAG_NO ) {
pdcp_fifo_read_input_mbms_sdus_fromtun(ctxt_pP); pdcp_fifo_read_input_mbms_sdus_fromtun(ctxt_pP);
} //}
// PDCP -> NAS/IP traffic: RX // PDCP -> NAS/IP traffic: RX
// if (ctxt_pP->enb_flag) { // if (ctxt_pP->enb_flag) {
...@@ -2300,14 +2301,25 @@ uint64_t pdcp_module_init( uint64_t pdcp_optmask ) { ...@@ -2300,14 +2301,25 @@ uint64_t pdcp_module_init( uint64_t pdcp_optmask ) {
} else if(ENB_NAS_USE_TUN) { } else if(ENB_NAS_USE_TUN) {
netlink_init_tun("enb",1); netlink_init_tun("enb",1);
nas_config(1, 1, 1, "enb"); nas_config(1, 1, 1, "enb");
if(pdcp_optmask & ENB_NAS_USE_TUN_W_MBMS_BIT){
netlink_init_mbms_tun("enm",1); netlink_init_mbms_tun("enm",1);
nas_config_mbms(1, 2, 1, "enm"); nas_config_mbms(1, 2, 1, "enm");
LOG_I(PDCP, "ENB pdcp will use mbms tun interface\n");
}
LOG_I(PDCP, "ENB pdcp will use tun interface\n"); LOG_I(PDCP, "ENB pdcp will use tun interface\n");
} else { } else {
LOG_I(PDCP, "pdcp will use kernel modules\n"); LOG_I(PDCP, "pdcp will use kernel modules\n");
netlink_init(); netlink_init();
} }
}else{
if(pdcp_optmask & ENB_NAS_USE_TUN_W_MBMS_BIT){
LOG_W(PDCP, "ENB pdcp will use tun interface for MBMS\n");
netlink_init_mbms_tun("enm",1);
nas_config_mbms_s1(1, 2, 1, "enm");
}else
LOG_E(PDCP, "ENB pdcp will not use tun interface\n");
} }
return pdcp_params.optmask ; return pdcp_params.optmask ;
} }
......
...@@ -62,6 +62,7 @@ typedef boolean_t (*pdcp_data_ind_func_t)( const protocol_ctxt_t *, const srb_fl ...@@ -62,6 +62,7 @@ typedef boolean_t (*pdcp_data_ind_func_t)( const protocol_ctxt_t *, const srb_fl
/* UEs beyond that will be multiplexed on the same tun */ /* UEs beyond that will be multiplexed on the same tun */
#define MAX_NUMBER_NETIF 16 #define MAX_NUMBER_NETIF 16
#define ENB_NAS_USE_TUN_W_MBMS_BIT (1<< 10)
#define PDCP_USE_NETLINK_BIT (1<< 11) #define PDCP_USE_NETLINK_BIT (1<< 11)
#define LINK_ENB_PDCP_TO_IP_DRIVER_BIT (1<< 13) #define LINK_ENB_PDCP_TO_IP_DRIVER_BIT (1<< 13)
#define LINK_ENB_PDCP_TO_GTPV1U_BIT (1<< 14) #define LINK_ENB_PDCP_TO_GTPV1U_BIT (1<< 14)
......
...@@ -269,6 +269,48 @@ int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifn ...@@ -269,6 +269,48 @@ int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifn
return returnValue; return returnValue;
} }
int nas_config_mbms_s1(int interface_id, int thirdOctet, int fourthOctet, char *ifname) {
//char buf[5];
char ipAddress[20];
char broadcastAddress[20];
char interfaceName[20];
int returnValue;
//if(strcmp(ifname,"ue") == 0)
//sprintf(ipAddress, "%s.%d.%d", "20.0",thirdOctet,fourthOctet);
////else
sprintf(ipAddress, "%s.%d.%d","10.0",thirdOctet,fourthOctet);
sprintf(broadcastAddress, "%s.%d.255","10.0", thirdOctet);
sprintf(interfaceName, "%s%s%d", "oaitun_",ifname,interface_id);
bringInterfaceUp(interfaceName, 0);
// sets the machine address
returnValue= setInterfaceParameter(interfaceName, ipAddress,SIOCSIFADDR);
// sets the machine network mask
if(!returnValue)
returnValue= setInterfaceParameter(interfaceName, "255.255.255.0",SIOCSIFNETMASK);
printf("returnValue %d\n",returnValue);
// sets the machine broadcast address
if(!returnValue)
returnValue= setInterfaceParameter(interfaceName, broadcastAddress,SIOCSIFBRDADDR);
printf("returnValue %d\n",returnValue);
if(!returnValue)
bringInterfaceUp(interfaceName, 1);
printf("returnValue %d\n",returnValue);
if(!returnValue)
LOG_I(OIP,"Interface %s successfuly configured, ip address %s, mask %s broadcast address %s\n",
interfaceName, ipAddress, "255.255.255.0", broadcastAddress);
else
LOG_E(OIP,"Interface %s couldn't be configured (ip address %s, mask %s broadcast address %s)\n",
interfaceName, ipAddress, "255.255.255.0", broadcastAddress);
return returnValue;
}
// non blocking full configuration of the interface (address, and the two lest octets of the address) // 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, char *ifname) { int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifname) {
//char buf[5]; //char buf[5];
......
...@@ -76,6 +76,20 @@ int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix ...@@ -76,6 +76,20 @@ int nas_config(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix
*/ */
int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix); int nas_config_mbms(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
/*! \fn int nas_config_mbms_s1(char*, int, int)
* \brief This function initializes the nasmesh interface using the basic values,
* basic address, network mask and broadcast address, as the default configured
* ones
* \param[in] interfaceName, the name of the interface, e.g. nasmesh0 or nasmesh1
* \param[in] third octet of the ip address e.g. for the 10.1.2.3 address would be 2
* \param[in] fourth octet of the ip address e.g. for the 10.1.2.3 address would be 3
* \return 0 on success, otherwise 1, if couldn't open a socket and 2 if the ioctl fails
* \note
* @ingroup ?????
*/
int nas_config_mbms_s1(int interface_id, int thirdOctet, int fourthOctet, char *ifsuffix);
/*! \fn int blocking_NAS_config(char*, char*, char*, char*) /*! \fn int blocking_NAS_config(char*, char*, char*, char*)
* \brief This function initializes the nasmesh interface, in a blocking way, * \brief This function initializes the nasmesh interface, in a blocking way,
......
...@@ -496,6 +496,8 @@ void init_pdcp(void) { ...@@ -496,6 +496,8 @@ void init_pdcp(void) {
if (IS_SOFTMODEM_NOS1) if (IS_SOFTMODEM_NOS1)
pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT ; pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_BIT | SOFTMODEM_NOKRNMOD_BIT ;
pdcp_initmask = pdcp_initmask | ENB_NAS_USE_TUN_W_MBMS_BIT;
pdcp_module_init(pdcp_initmask); pdcp_module_init(pdcp_initmask);
if (NODE_IS_CU(RC.rrc[0]->node_type)) { if (NODE_IS_CU(RC.rrc[0]->node_type)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment