Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangjie
OpenXG-RAN
Commits
a8def02f
Commit
a8def02f
authored
Jun 20, 2016
by
Sandeep Kumar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
starting to add if4 specific eth read, write
parent
f2e183fb
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
119 additions
and
6 deletions
+119
-6
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+92
-2
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+17
-4
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
+10
-0
No files found.
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
View file @
a8def02f
...
...
@@ -140,7 +140,7 @@ int trx_eth_write_raw(openair0_device *device, openair0_timestamp timestamp, voi
//sendto_flag|=flags;
eth
->
tx_nsamps
=
nsamps
;
for
(
i
=
0
;
i
<
cc
;
i
++
)
{
/* buff[i] points to the position in tx buffer where the payload to be sent is
buff2 points to the position in tx buffer where the packet header will be placed */
...
...
@@ -198,6 +198,48 @@ int trx_eth_write_raw(openair0_device *device, openair0_timestamp timestamp, voi
}
int
trx_eth_write_raw_IF4
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
,
int
flags
)
{
int
nblocks
=
nsamps
;
int
bytes_sent
=
0
;
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
int
Mod_id
=
device
->
Mod_id
;
ssize_t
packet_size
;
if
(
flags
==
IF4_PDLFFT
)
{
packet_size
=
RAW_IF4_PDLFFT_SIZE_BYTES
(
nblocks
);
}
else
if
(
flags
==
IF4_PULFFT
)
{
packet_size
=
RAW_IF4_PULFFT_SIZE_BYTES
(
nblocks
);
}
else
{
packet_size
=
RAW_IF4_PRACH_SIZE_BYTES
(
nblocks
);
}
eth
->
tx_nsamps
=
nblocks
;
memcpy
(
buff
[
0
],
(
void
*
)
&
eh
,
MAC_HEADER_SIZE_BYTES
);
bytes_sent
=
send
(
eth
->
sockfd
[
Mod_id
],
buff
[
0
],
packet_size
,
0
);
if
(
bytes_sent
==
-
1
)
{
eth
->
num_tx_errors
++
;
perror
(
"ETHERNET WRITE: "
);
exit
(
-
1
);
}
else
{
eth
->
tx_actual_nsamps
=
bytes_sent
>>
1
;
eth
->
tx_count
++
;
}
return
(
bytes_sent
-
MAC_HEADER_SIZE_BYTES
);
}
int
trx_eth_read_raw
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
)
{
int
bytes_received
=
0
;
...
...
@@ -256,7 +298,55 @@ int trx_eth_read_raw(openair0_device *device, openair0_timestamp *timestamp, voi
return
(
bytes_received
-
APP_HEADER_SIZE_BYTES
-
MAC_HEADER_SIZE_BYTES
)
>>
2
;
}
int
trx_eth_read_raw_IF4
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
)
{
int
bytes_received
=
0
;
int
i
=
0
;
eth_state_t
*
eth
=
(
eth_state_t
*
)
device
->
priv
;
int
Mod_id
=
device
->
Mod_id
;
int
rcvfrom_flag
=
0
;
eth
->
rx_nsamps
=
nsamps
;
/* buff[i] points to the position in rx buffer where the payload to be received will be placed
buff2 points to the position in rx buffer where the packet header will be placed */
void
*
buff2
=
(
void
*
)(
buff
[
i
]
-
APP_HEADER_SIZE_BYTES
-
MAC_HEADER_SIZE_BYTES
);
/* we don't want to ovewrite with the header info the previous rx buffer data so we store it*/
struct
ether_header
temp
=
*
(
struct
ether_header
*
)
buff2
;
int32_t
temp0
=
*
(
int32_t
*
)(
buff2
+
MAC_HEADER_SIZE_BYTES
);
openair0_timestamp
temp1
=
*
(
openair0_timestamp
*
)(
buff2
+
MAC_HEADER_SIZE_BYTES
+
sizeof
(
int32_t
));
bytes_received
=
0
;
while
(
bytes_received
<
RAW_PACKET_SIZE_BYTES
(
nsamps
))
{
bytes_received
+=
recv
(
eth
->
sockfd
[
Mod_id
],
buff2
,
RAW_PACKET_SIZE_BYTES
(
nsamps
),
rcvfrom_flag
);
if
(
bytes_received
==-
1
)
{
eth
->
num_rx_errors
++
;
perror
(
"ETHERNET READ: "
);
exit
(
-
1
);
}
else
{
/* store the timestamp value from packet's header */
*
timestamp
=
*
(
openair0_timestamp
*
)(
buff2
+
MAC_HEADER_SIZE_BYTES
+
sizeof
(
int32_t
));
eth
->
rx_actual_nsamps
=
bytes_received
>>
2
;
eth
->
rx_count
++
;
}
}
/* tx buffer values restored */
*
(
struct
ether_header
*
)
buff2
=
temp
;
*
(
int32_t
*
)(
buff2
+
MAC_HEADER_SIZE_BYTES
)
=
temp0
;
*
(
openair0_timestamp
*
)(
buff2
+
MAC_HEADER_SIZE_BYTES
+
sizeof
(
int32_t
))
=
temp1
;
return
(
bytes_received
-
APP_HEADER_SIZE_BYTES
-
MAC_HEADER_SIZE_BYTES
)
>>
2
;
}
int
eth_set_dev_conf_raw
(
openair0_device
*
device
)
{
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
a8def02f
...
...
@@ -313,8 +313,14 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth
if
(
eth_params
->
transp_preference
==
1
)
{
eth
->
flags
=
ETH_RAW_MODE
;
}
else
{
}
else
if
(
eth_params
->
transp_preference
==
0
)
{
eth
->
flags
=
ETH_UDP_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
3
)
{
eth
->
flags
=
ETH_RAW_IF4_MODE
;
}
else
if
(
eth_params
->
transp_preference
==
2
)
{
eth
->
flags
=
ETH_UDP_IF4_MODE
;
}
else
{
AssertFatal
(
0
==
4
,
"transport_init: Unknown transport preference %d"
,
eth_params
->
transp_preference
);
}
printf
(
"[ETHERNET]: Initializing openair0_device for %s ...
\n
"
,
((
device
->
host_type
==
BBU_HOST
)
?
"BBU"
:
"RRH"
));
...
...
@@ -330,14 +336,21 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth
device
->
trx_set_freq_func
=
trx_eth_set_freq
;
device
->
trx_set_gains_func
=
trx_eth_set_gains
;
if
((
eth
->
flags
&
ETH_RAW_MODE
)
!=
0
)
{
/// handle if4 eth read and write functions
if
(
eth
->
flags
==
ETH_RAW_MODE
)
{
device
->
trx_write_func
=
trx_eth_write_raw
;
device
->
trx_read_func
=
trx_eth_read_raw
;
}
else
{
}
else
if
(
eth
->
flags
==
ETH_UDP_MODE
)
{
device
->
trx_write_func
=
trx_eth_write_udp
;
device
->
trx_read_func
=
trx_eth_read_udp
;
}
else
if
(
eth
->
flags
==
ETH_RAW_IF4_MODE
)
{
device
->
trx_write_func
=
trx_eth_write_raw_IF4
;
device
->
trx_read_func
=
trx_eth_read_raw_IF4
;
}
else
{
device
->
trx_write_func
=
trx_eth_write_udp_IF4
;
device
->
trx_read_func
=
trx_eth_read_udp_IF4
;
}
eth
->
if_name
[
device
->
Mod_id
]
=
eth_params
->
local_if_name
;
device
->
priv
=
eth
;
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
View file @
a8def02f
...
...
@@ -54,6 +54,8 @@
#define ETH_RAW_MODE 1
#define ETH_UDP_MODE 0
#define ETH_RAW_IF4_MODE 3
#define ETH_UDP_IF4_MODE 2
#define TX_FLAG 1
#define RX_FLAG 0
...
...
@@ -65,6 +67,10 @@
#define UDP_PACKET_SIZE_BYTES(nsamps) (APP_HEADER_SIZE_BYTES + PAYLOAD_SIZE_BYTES(nsamps))
#define RAW_PACKET_SIZE_BYTES(nsamps) (APP_HEADER_SIZE_BYTES + MAC_HEADER_SIZE_BYTES + PAYLOAD_SIZE_BYTES(nsamps))
#define DATA_BLOCK_SIZE_BYTES(scaled_nblocks) (2*scaled_nblocks)
#define RAW_IF4_PDLFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_dl_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
#define RAW_IF4_PULFFT_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_ul_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
#define RAW_IF4_PRACH_SIZE_BYTES(nblocks) (MAC_HEADER_SIZE_BYTES + sizeof_IF4_prach_header_t + DATA_BLOCK_SIZE_BYTES(nblocks))
/*!\brief opaque ethernet data structure */
typedef
struct
{
...
...
@@ -212,6 +218,8 @@ int ethernet_tune(openair0_device *device, unsigned int option, int value);
int
eth_socket_init_udp
(
openair0_device
*
device
);
int
trx_eth_write_udp
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
,
int
flags
);
int
trx_eth_read_udp
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
);
//int trx_eth_write_udp_IF4(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags);
//int trx_eth_read_udp_IF4(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc);
int
eth_get_dev_conf_udp
(
openair0_device
*
device
);
/*! \fn static int eth_set_dev_conf_udp(openair0_device *device)
...
...
@@ -226,6 +234,8 @@ int eth_set_dev_conf_udp(openair0_device *device);
int
eth_socket_init_raw
(
openair0_device
*
device
);
int
trx_eth_write_raw
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
,
int
flags
);
int
trx_eth_read_raw
(
openair0_device
*
device
,
openair0_timestamp
*
timestamp
,
void
**
buff
,
int
nsamps
,
int
cc
);
//int trx_eth_write_raw_IF4(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps,int cc, int flags);
//int trx_eth_read_raw_IF4(openair0_device *device, openair0_timestamp *timestamp, void **buff, int nsamps, int cc);
int
eth_get_dev_conf_raw
(
openair0_device
*
device
);
int
eth_set_dev_conf_raw
(
openair0_device
*
device
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment