Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
OAI-RAN-5G-sheduler_MaxTBS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MAQ5G-PFC
OAI-RAN-5G-sheduler_MaxTBS
Commits
41e926ef
Commit
41e926ef
authored
10 years ago
by
Raymond Knopp
Browse files
Options
Downloads
Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@5925
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
da4320fc
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+196
-0
196 additions, 0 deletions
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
+15
-0
15 additions, 0 deletions
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
with
211 additions
and
0 deletions
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
0 → 100644
+
196
−
0
View file @
41e926ef
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
/** ethernet_lib : API to stream I/Q samples over standard ethernet
*
* Authors: Pedro Dinis <pedrodinis20@gmail.com>
* Lucio Ferreira <lucio.ferreira@inov.pt>
* Raymond Knopp <raymond.knopp@eurecom.fr>
*
* Changelog:
* 06.10.2014: Initial version
*/
#include
<arpa/inet.h>
#include
<linux/if_packet.h>
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<sys/ioctl.h>
#include
<sys/socket.h>
#include
<net/if.h>
#include
<netinet/ether.h>
#include
"common_lib.h"
#define DEFAULT_IF "eth0"
#define BUF_SIZ 8960
/*Jumbo frame size*/
#define MAX_INST 4
int
sockfd
[
MAX_INST
];
struct
sockaddr_in
dest_addr
[
MAX_INST
];
int
dest_addr_len
[
MAX_INST
];
int
i
;
int
tx_len
=
0
;
char
sendbuf
[
MAX_INST
][
BUF_SIZ
];
/*TODO*/
/**PDF: Initialization of UDP Socket to communicate with one DEST */
int
ethernet_socket_init
(
int
Mod_id
,
char
*
dest_ip
,
int
dest_port
)
{
/**PDF: To be passed by input argument*/
// DEST_port = 32000;
struct
sockaddr_in
*
dest
=
&
dest_addr
[
Mod_id
];
char
str
[
INET_ADDRSTRLEN
];
/* Open RAW socket to send on */
if
((
sockfd
[
Mod_id
]
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
))
==
-
1
)
{
perror
(
"ETHERNET: Error opening socket"
);
exit
(
0
);
}
bzero
((
void
*
)
dest
,
sizeof
(
struct
sockaddr
));
dest
->
sin_family
=
AF_INET
;
dest
->
sin_addr
.
s_addr
=
inet_addr
(
dest_ip
);
dest
->
sin_port
=
htons
(
dest_port
);
dest_addr_len
[
Mod_id
]
=
sizeof
(
struct
sockaddr
);
inet_ntop
(
AF_INET
,
&
(
dest
->
sin_addr
),
str
,
INET_ADDRSTRLEN
);
printf
(
"Connecting to %s
\n
"
,
str
);
}
int
ethernet_write_data
(
int
Mod_id
,
openair0_timestamp
timestamp
,
const
void
*
buff
,
int
antenna_id
,
int
nsamps
)
{
void
*
buff2
=
(
void
*
)
buff
-
sizeof
(
openair0_timestamp
)
-
(
sizeof
(
int16_t
)
*
2
);
int32_t
temp0
=
*
(
int32_t
*
)
buff2
;
openair0_timestamp
temp1
=
*
(
openair0_timestamp
*
)(
buff2
+
(
sizeof
(
int16_t
)
*
2
));
int
n_written
;
n_written
=
0
;
((
int16_t
*
)
buff2
)[
0
]
=
1
+
(
antenna_id
<<
1
);
((
int16_t
*
)
buff2
)[
1
]
=
nsamps
;
*
((
openair0_timestamp
*
)(
buff2
+
(
sizeof
(
int16_t
)
*
2
)))
=
timestamp
;
while
(
n_written
<
nsamps
)
{
/* Send packet */
if
((
n_written
+=
sendto
(
sockfd
[
Mod_id
],
buff2
,
(
nsamps
<<
2
)
+
sizeof
(
openair0_timestamp
)
+
(
2
*
sizeof
(
int16_t
)),
0
,
(
struct
sockaddr
*
)
&
dest_addr
[
Mod_id
],
dest_addr_len
[
Mod_id
]))
<
0
)
{
printf
(
"Send failed for Mod_id %d
\n
"
,
Mod_id
);
exit
(
-
1
);
}
}
*
(
int32_t
*
)
buff2
=
temp0
;
*
(
openair0_timestamp
*
)(
buff2
+
2
*
sizeof
(
int16_t
))
=
temp1
;
return
n_written
;
}
int
ethernet_read_data
(
int
Mod_id
,
openair0_timestamp
*
timestamp
,
void
*
buff
,
int
antenna_id
,
int
nsamps
)
{
void
*
buff2
=
buff
-
sizeof
(
openair0_timestamp
);
int
samples_received
;
openair0_timestamp
temp
=
*
(
openair0_timestamp
*
)
buff2
;
int16_t
mesg
[
2
];
char
str
[
INET_ADDRSTRLEN
];
mesg
[
0
]
=
0
+
(
antenna_id
<<
1
);
mesg
[
1
]
=
nsamps
;
inet_ntop
(
AF_INET
,
&
(
dest_addr
[
Mod_id
].
sin_addr
),
str
,
INET_ADDRSTRLEN
);
// send command RX for nsamps samples
printf
(
"requesting %d samples from (%s:%d)
\n
"
,
nsamps
,
str
,
ntohs
(
dest_addr
[
Mod_id
].
sin_port
));
sendto
(
sockfd
[
Mod_id
],
mesg
,
4
,
0
,(
struct
sockaddr
*
)
&
dest_addr
[
Mod_id
],
dest_addr_len
[
Mod_id
]);
printf
(
"Waiting for %d samples
\n
"
,
nsamps
);
samples_received
=
recvfrom
(
sockfd
[
Mod_id
],
buff2
,
(
nsamps
<<
2
)
+
sizeof
(
openair0_timestamp
),
0
,
(
struct
sockaddr
*
)
&
dest_addr
[
Mod_id
],
&
dest_addr_len
[
Mod_id
]);
printf
(
"Received %d samples
\n
"
,
samples_received
);
*
timestamp
=
*
(
openair0_timestamp
*
)(
buff
-
sizeof
(
openair0_timestamp
));
*
(
openair0_timestamp
*
)(
buff
-
sizeof
(
openair0_timestamp
))
=
temp
;
return
samples_received
>>
2
;
}
int
trx_eth_start
(
openair0_device
*
openair0
)
{
return
(
ethernet_socket_init
(
openair0
->
openair0_cfg
.
Mod_id
,
openair0
->
openair0_cfg
.
rrh_ip
,
openair0
->
openair0_cfg
.
rrh_port
));
}
void
trx_eth_write
(
openair0_device
*
device
,
openair0_timestamp
timestamp
,
const
void
*
buff
,
int
nsamps
,
int
flags
)
{
ethernet_write_data
(
device
->
Mod_id
,
timestamp
,
buff
,
0
,
nsamps
);
}
int
trx_eth_read
(
openair0_device
*
device
,
openair0_timestamp
*
ptimestamp
,
void
*
buff
,
int
nsamps
)
{
return
(
ethernet_read_data
(
device
->
Mod_id
,
ptimestamp
,
buff
,
0
,
nsamps
));
}
void
trx_eth_end
(
openair0_device
*
device
)
{
}
int
num_devices
=
0
;
int
openair0_device_init
(
openair0_device
*
device
,
openair0_config_t
*
openair0_cfg
)
{
printf
(
"ETHERNET: Initializing openair0_device
\n
"
);
device
->
Mod_id
=
num_devices
++
;
device
->
trx_start_func
=
trx_eth_start
;
device
->
trx_end_func
=
trx_eth_end
;
device
->
trx_read_func
=
trx_eth_read
;
device
->
trx_write_func
=
trx_eth_write
;
memcpy
((
void
*
)
&
device
->
openair0_cfg
,(
void
*
)
openair0_cfg
,
sizeof
(
openair0_config_t
));
}
This diff is collapsed.
Click to expand it.
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h
0 → 100644
+
15
−
0
View file @
41e926ef
#include
<arpa/inet.h>
#include
<linux/if_packet.h>
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<sys/ioctl.h>
#include
<sys/socket.h>
#include
<net/if.h>
#include
<netinet/ether.h>
int
ethernet_socket_init
(
int
Mod_id
,
char
*
dest_ip
,
int
dest_port
);
int
ethernet_write_data
(
int
Mod_id
,
const
void
*
buff
,
int
nsamps
);
int
ethernet_read_data
(
int
Mod_id
,
void
*
buff
,
int
nsamps
);
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment