added mobipass interface and tested sending dummy and starting stream, no reply yet
This commit is contained in:
@@ -963,6 +963,7 @@ set(PHY_SRC
|
|||||||
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/print_stats.c
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/print_stats.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/initial_sync.c
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/initial_sync.c
|
||||||
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/if4_tools.c
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/if4_tools.c
|
||||||
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/if5_mobipass_tools.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c
|
${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c
|
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c
|
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ void enb_config_display(void)
|
|||||||
printf( "\ttx_scheduling_advance :\t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_scheduling_advance);
|
printf( "\ttx_scheduling_advance :\t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_scheduling_advance);
|
||||||
printf( "\ttx_sample_advance : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_sample_advance);
|
printf( "\ttx_sample_advance : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].tx_sample_advance);
|
||||||
printf( "\tiq_txshift : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].iq_txshift);
|
printf( "\tiq_txshift : \t%d:\n",enb_properties.properties[i]->rrh_gw_config[j].iq_txshift);
|
||||||
printf( "\ttransport : \t%s Ethernet:\n",(enb_properties.properties[i]->rrh_gw_config[j].raw == 1)? "RAW" : (enb_properties.properties[i]->rrh_gw_config[j].rawif4 == 1)? "RAW_IF4" : (enb_properties.properties[i]->rrh_gw_config[j].udpif4 == 1)? "UDP_IF4" : "UDP");
|
printf( "\ttransport : \t%s Ethernet:\n",(enb_properties.properties[i]->rrh_gw_config[j].raw == 1)? "RAW" : (enb_properties.properties[i]->rrh_gw_config[j].rawif4 == 1)? "RAW_IF4" : (enb_properties.properties[i]->rrh_gw_config[j].udpif4 == 1)? "UDP_IF4" : (enb_properties.properties[i]->rrh_gw_config[j].rawif5_mobipass == 1)? "RAW_IF5_MOBIPASS" : "UDP");
|
||||||
if (enb_properties.properties[i]->rrh_gw_config[j].exmimo == 1) {
|
if (enb_properties.properties[i]->rrh_gw_config[j].exmimo == 1) {
|
||||||
printf( "\tRF target : \tEXMIMO:\n\n");
|
printf( "\tRF target : \tEXMIMO:\n\n");
|
||||||
} else if (enb_properties.properties[i]->rrh_gw_config[j].usrp_b200 == 1) {
|
} else if (enb_properties.properties[i]->rrh_gw_config[j].usrp_b200 == 1) {
|
||||||
@@ -2246,6 +2246,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
|
|||||||
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udpif4 = 1;
|
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udpif4 = 1;
|
||||||
} else if (strcmp(tr_preference, "raw_if4") == 0) {
|
} else if (strcmp(tr_preference, "raw_if4") == 0) {
|
||||||
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].rawif4 = 1;
|
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].rawif4 = 1;
|
||||||
|
} else if (strcmp(tr_preference, "raw_if5_mobipass") == 0) {
|
||||||
|
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].rawif5_mobipass = 1;
|
||||||
} else {//if (strcmp(preference, "no") == 0)
|
} else {//if (strcmp(preference, "no") == 0)
|
||||||
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udp = 1;
|
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].udp = 1;
|
||||||
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].raw = 1;
|
enb_properties.properties[enb_properties_index]->rrh_gw_config[j].raw = 1;
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ typedef struct rrh_gw_config_s {
|
|||||||
uint16_t remote_port;
|
uint16_t remote_port;
|
||||||
uint8_t udpif4;
|
uint8_t udpif4;
|
||||||
uint8_t rawif4;
|
uint8_t rawif4;
|
||||||
|
uint8_t rawif5_mobipass;
|
||||||
int tx_scheduling_advance;
|
int tx_scheduling_advance;
|
||||||
int tx_sample_advance;
|
int tx_sample_advance;
|
||||||
int iq_txshift;
|
int iq_txshift;
|
||||||
|
|||||||
@@ -53,6 +53,7 @@
|
|||||||
#include "ethernet_lib.h"
|
#include "ethernet_lib.h"
|
||||||
#include "if_defs.h"
|
#include "if_defs.h"
|
||||||
#include "openair1/PHY/LTE_TRANSPORT/if4_tools.h"
|
#include "openair1/PHY/LTE_TRANSPORT/if4_tools.h"
|
||||||
|
#include "openair1/PHY/LTE_TRANSPORT/if5_mobipass_tools.h"
|
||||||
|
|
||||||
#define DEBUG 0
|
#define DEBUG 0
|
||||||
|
|
||||||
@@ -123,8 +124,11 @@ int eth_socket_init_raw(openair0_device *device) {
|
|||||||
/* Construct the Ethernet header */
|
/* Construct the Ethernet header */
|
||||||
ether_aton_r(local_mac, (struct ether_addr *)(&(eth->eh.ether_shost)));
|
ether_aton_r(local_mac, (struct ether_addr *)(&(eth->eh.ether_shost)));
|
||||||
ether_aton_r(remote_mac, (struct ether_addr *)(&(eth->eh.ether_dhost)));
|
ether_aton_r(remote_mac, (struct ether_addr *)(&(eth->eh.ether_dhost)));
|
||||||
eth->eh.ether_type = htons((short)device->openair0_cfg->my_port);
|
// if (((*) device->priv)->flags == ETH_RAW_IF5_MOBIPASS) {
|
||||||
|
eth->eh.ether_type = htons(0xbffe);
|
||||||
|
// } else {
|
||||||
|
// eth->eh.ether_type = htons((short)device->openair0_cfg->my_port);
|
||||||
|
// }
|
||||||
printf("[%s] binding mod_%d to hardware address %x:%x:%x:%x:%x:%x\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"),Mod_id,eth->eh.ether_shost[0],eth->eh.ether_shost[1],eth->eh.ether_shost[2],eth->eh.ether_shost[3],eth->eh.ether_shost[4],eth->eh.ether_shost[5]);
|
printf("[%s] binding mod_%d to hardware address %x:%x:%x:%x:%x:%x\n",((device->host_type == BBU_HOST) ? "BBU": "RRH"),Mod_id,eth->eh.ether_shost[0],eth->eh.ether_shost[1],eth->eh.ether_shost[2],eth->eh.ether_shost[3],eth->eh.ether_shost[4],eth->eh.ether_shost[5]);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -214,6 +218,8 @@ int trx_eth_write_raw_IF4(openair0_device *device, openair0_timestamp timestamp,
|
|||||||
packet_size = RAW_IF4_PDLFFT_SIZE_BYTES(nblocks);
|
packet_size = RAW_IF4_PDLFFT_SIZE_BYTES(nblocks);
|
||||||
} else if (flags == IF4_PULFFT) {
|
} else if (flags == IF4_PULFFT) {
|
||||||
packet_size = RAW_IF4_PULFFT_SIZE_BYTES(nblocks);
|
packet_size = RAW_IF4_PULFFT_SIZE_BYTES(nblocks);
|
||||||
|
} else if (flags == IF5_MOBIPASS) {
|
||||||
|
packet_size = RAW_IF5_MOBIPASS_SIZE_BYTES;
|
||||||
} else {
|
} else {
|
||||||
packet_size = RAW_IF4_PRACH_SIZE_BYTES;
|
packet_size = RAW_IF4_PRACH_SIZE_BYTES;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,17 @@ int trx_eth_start(openair0_device *device) {
|
|||||||
} else if (eth->flags == ETH_UDP_IF4_MODE) {
|
} else if (eth->flags == ETH_UDP_IF4_MODE) {
|
||||||
|
|
||||||
|
|
||||||
|
} else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
|
||||||
|
if (eth_socket_init_raw(device)!=0) return -1;
|
||||||
|
/* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
|
||||||
|
//if (device->host_type == BBU_HOST) {
|
||||||
|
//if(eth_set_dev_conf_raw_IF4(device)!=0) return -1;
|
||||||
|
//} else {
|
||||||
|
//if(eth_get_dev_conf_raw_IF4(device)!=0) return -1;
|
||||||
|
//
|
||||||
|
/* adjust MTU wrt number of samples per packet */
|
||||||
|
// if(ethernet_tune (device,MTU_SIZE,RAW_PACKET_SIZE_BYTES(device->openair0_cfg->samples_per_packet))!=0) return -1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (eth_socket_init_udp(device)!=0) return -1;
|
if (eth_socket_init_udp(device)!=0) return -1;
|
||||||
/* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
|
/* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
|
||||||
@@ -334,6 +345,8 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth
|
|||||||
eth->flags = ETH_RAW_IF4_MODE;
|
eth->flags = ETH_RAW_IF4_MODE;
|
||||||
} else if (eth_params->transp_preference == 2) {
|
} else if (eth_params->transp_preference == 2) {
|
||||||
eth->flags = ETH_UDP_IF4_MODE;
|
eth->flags = ETH_UDP_IF4_MODE;
|
||||||
|
} else if (eth_params->transp_preference == 4) {
|
||||||
|
eth->flags = ETH_RAW_IF5_MOBIPASS;
|
||||||
} else {
|
} else {
|
||||||
printf("transport_init: Unknown transport preference %d - default to RAW", eth_params->transp_preference);
|
printf("transport_init: Unknown transport preference %d - default to RAW", eth_params->transp_preference);
|
||||||
eth->flags = ETH_RAW_MODE;
|
eth->flags = ETH_RAW_MODE;
|
||||||
@@ -361,6 +374,9 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth
|
|||||||
} else if (eth->flags == ETH_RAW_IF4_MODE) {
|
} else if (eth->flags == ETH_RAW_IF4_MODE) {
|
||||||
device->trx_write_func = trx_eth_write_raw_IF4;
|
device->trx_write_func = trx_eth_write_raw_IF4;
|
||||||
device->trx_read_func = trx_eth_read_raw_IF4;
|
device->trx_read_func = trx_eth_read_raw_IF4;
|
||||||
|
} else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
|
||||||
|
device->trx_write_func = trx_eth_write_raw_IF4;
|
||||||
|
device->trx_read_func = trx_eth_read_raw_IF4;
|
||||||
} else {
|
} else {
|
||||||
//device->trx_write_func = trx_eth_write_udp_IF4;
|
//device->trx_write_func = trx_eth_write_udp_IF4;
|
||||||
//device->trx_read_func = trx_eth_read_udp_IF4;
|
//device->trx_read_func = trx_eth_read_udp_IF4;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#define ETH_RAW_MODE 1
|
#define ETH_RAW_MODE 1
|
||||||
#define ETH_UDP_IF4_MODE 2
|
#define ETH_UDP_IF4_MODE 2
|
||||||
#define ETH_RAW_IF4_MODE 3
|
#define ETH_RAW_IF4_MODE 3
|
||||||
|
#define ETH_RAW_IF5_MOBIPASS 4
|
||||||
|
|
||||||
// Time domain RRH packet sizes
|
// Time domain RRH packet sizes
|
||||||
#define MAC_HEADER_SIZE_BYTES (sizeof(struct ether_header))
|
#define MAC_HEADER_SIZE_BYTES (sizeof(struct ether_header))
|
||||||
@@ -61,3 +62,7 @@
|
|||||||
#define RAW_IF4_PDLFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
|
#define RAW_IF4_PDLFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
|
||||||
#define RAW_IF4_PULFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
|
#define RAW_IF4_PULFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
|
||||||
#define RAW_IF4_PRACH_SIZE_BYTES (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + PRACH_BLOCK_SIZE_BYTES)
|
#define RAW_IF4_PRACH_SIZE_BYTES (MAC_HEADER_SIZE_BYTES + sizeof_IF4_header_t + PRACH_BLOCK_SIZE_BYTES)
|
||||||
|
|
||||||
|
// Mobipass packet sizes
|
||||||
|
#define RAW_IF5_MOBIPASS_BLOCK_SIZE_BYTES 1280
|
||||||
|
#define RAW_IF5_MOBIPASS_SIZE_BYTES (MAC_HEADER_SIZE_BYTES + sizeof_IF5_mobipass_header_t + RAW_IF5_MOBIPASS_BLOCK_SIZE_BYTES)
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||||
|
|
||||||
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
#include "PHY/LTE_TRANSPORT/if4_tools.h"
|
||||||
|
#include "PHY/LTE_TRANSPORT/if5_mobipass_tools.h"
|
||||||
|
|
||||||
#include "PHY/extern.h"
|
#include "PHY/extern.h"
|
||||||
#include "SCHED/extern.h"
|
#include "SCHED/extern.h"
|
||||||
@@ -547,7 +548,7 @@ static void* eNB_thread_rxtx( void* param ) {
|
|||||||
|
|
||||||
} else if (PHY_vars_eNB_g[0][proc->CC_id]->node_function == eNodeB_3GPP_BBU) {
|
} else if (PHY_vars_eNB_g[0][proc->CC_id]->node_function == eNodeB_3GPP_BBU) {
|
||||||
/// **** trx_write_func to IF device **** ///
|
/// **** trx_write_func to IF device **** ///
|
||||||
|
// send_IF5(PHY_vars_eNB_g[0][proc->CC_id], proc, 0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/// **** send_IF4 of txdataF to RRU **** ///
|
/// **** send_IF4 of txdataF to RRU **** ///
|
||||||
@@ -624,10 +625,11 @@ static void* eNB_thread_rx_common( void* param ) {
|
|||||||
eNB_proc_t *proc = (eNB_proc_t*)param;
|
eNB_proc_t *proc = (eNB_proc_t*)param;
|
||||||
PHY_VARS_eNB *eNB = PHY_vars_eNB_g[0][proc->CC_id];
|
PHY_VARS_eNB *eNB = PHY_vars_eNB_g[0][proc->CC_id];
|
||||||
LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
|
LTE_DL_FRAME_PARMS *fp = &eNB->frame_parms;
|
||||||
|
|
||||||
|
uint8_t seqno=0;
|
||||||
FILE *rx_time_file = NULL;
|
FILE *rx_time_file = NULL;
|
||||||
char rx_time_name[101];
|
char rx_time_name[101];
|
||||||
//int i;
|
int i;
|
||||||
struct timespec wait;
|
struct timespec wait;
|
||||||
|
|
||||||
wait.tv_sec=0;
|
wait.tv_sec=0;
|
||||||
@@ -762,7 +764,15 @@ static void* eNB_thread_rx_common( void* param ) {
|
|||||||
if (eNB->rfdevice.trx_start_func(&eNB->rfdevice) != 0 )
|
if (eNB->rfdevice.trx_start_func(&eNB->rfdevice) != 0 )
|
||||||
LOG_E(HW,"Could not start the RF device\n");
|
LOG_E(HW,"Could not start the RF device\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// proc->proc_rxtx[0].timestamp_tx = 0;
|
||||||
|
// seqno = send_IF5(eNB, &proc->proc_rxtx[0], 0);
|
||||||
|
|
||||||
|
// for (i=0; i<1000;i++) {
|
||||||
|
// seqno = send_IF5(eNB, &proc->proc_rxtx[0], seqno);
|
||||||
|
// proc->proc_rxtx[0].timestamp_tx += 7680*2;
|
||||||
|
// }
|
||||||
|
|
||||||
// This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
|
// This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
|
||||||
while (!oai_exit) {
|
while (!oai_exit) {
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX, 0 );
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_PROC_RX, 0 );
|
||||||
|
|||||||
@@ -1071,6 +1071,8 @@ static void get_options (int argc, char **argv)
|
|||||||
(eth_params+j)->transp_preference = ETH_RAW_IF4_MODE;
|
(eth_params+j)->transp_preference = ETH_RAW_IF4_MODE;
|
||||||
} else if (enb_properties->properties[i]->rrh_gw_config[j].udpif4 == 1) {
|
} else if (enb_properties->properties[i]->rrh_gw_config[j].udpif4 == 1) {
|
||||||
(eth_params+j)->transp_preference = ETH_UDP_IF4_MODE;
|
(eth_params+j)->transp_preference = ETH_UDP_IF4_MODE;
|
||||||
|
} else if (enb_properties->properties[i]->rrh_gw_config[j].rawif5_mobipass == 1) {
|
||||||
|
(eth_params+j)->transp_preference = ETH_RAW_IF5_MOBIPASS;
|
||||||
} else {
|
} else {
|
||||||
(eth_params+j)->transp_preference = ETH_UDP_MODE;
|
(eth_params+j)->transp_preference = ETH_UDP_MODE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user