Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Switch - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
86
Issues
86
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Switch - Software
Commits
ca626c92
Commit
ca626c92
authored
Nov 25, 2013
by
Alessandro Rubini
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
userspace: copy libptpnetif from ptp-noposix
Signed-off-by:
Alessandro Rubini
<
rubini@gnudd.com
>
parent
a5b624eb
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1152 additions
and
6 deletions
+1152
-6
Makefile
userspace/Makefile
+1
-1
Makefile
userspace/libptpnetif/Makefile
+24
-0
hal_client.c
userspace/libptpnetif/hal_client.c
+109
-0
hal_client.h
userspace/libptpnetif/hal_client.h
+11
-0
ptpd_netif.c
userspace/libptpnetif/ptpd_netif.c
+760
-0
ptpd_netif.h
userspace/libptpnetif/ptpd_netif.h
+242
-0
Makefile
userspace/tools/Makefile
+2
-2
Makefile
userspace/wrsw_rtud/Makefile
+3
-3
No files found.
userspace/Makefile
View file @
ca626c92
...
@@ -12,7 +12,7 @@ WR_INSTALL_ROOT ?= $(WRS_OUTPUT_DIR)/images/wr
...
@@ -12,7 +12,7 @@ WR_INSTALL_ROOT ?= $(WRS_OUTPUT_DIR)/images/wr
WRDEV_DIR
?=
$(WRS_BASE_DIR)
/..
WRDEV_DIR
?=
$(WRS_BASE_DIR)
/..
# subdirectories we want to compile
# subdirectories we want to compile
SUBDIRS
=
mini-rpc libswitchhw wrsw_hal wrsw_rtud tools
SUBDIRS
=
libptpnetif
mini-rpc libswitchhw wrsw_hal wrsw_rtud tools
# all variables are exported
# all variables are exported
export
export
...
...
userspace/libptpnetif/Makefile
0 → 100644
View file @
ca626c92
AS
=
$(CROSS_COMPILE)
as
LD
=
$(CROSS_COMPILE)
ld
CC
=
$(CROSS_COMPILE)
gcc
CPP
=
$(CC)
-E
AR
=
$(CROSS_COMPILE)
ar
NM
=
$(CROSS_COMPILE)
nm
STRIP
=
$(CROSS_COMPILE)
strip
OBJCOPY
=
$(CROSS_COMPILE)
objcopy
OBJDUMP
=
$(CROSS_COMPILE)
objdump
CFLAGS
=
-Wall
-ggdb
-O2
-I
../wrsw_hal
-I
../mini-rpc
all
:
libptpnetif.a
libptpnetif.a
:
ptpd_netif.o hal_client.o
$(AR)
r
$@
$^
clean
:
rm
-f
*
.a
*
.o
*
~
install
:
@
echo
"We have no install rule by now"
userspace/libptpnetif/hal_client.c
0 → 100644
View file @
ca626c92
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <minipc.h>
#define HAL_EXPORT_STRUCTURES
#include "hal_exports.h"
#define DEFAULT_TO 200000
/* ms */
static
struct
minipc_ch
*
hal_ch
;
int
halexp_check_running
()
{
//int res_int;
//return wripc_call(hal_ipc, "halexp_check_running", ;
return
0
;
}
int
halexp_reset_port
(
const
char
*
port_name
)
{
// TRACE(TRACE_INFO, "resetting port %s\n", port_name);
return
0
;
}
int
halexp_calibration_cmd
(
const
char
*
port_name
,
int
command
,
int
on_off
)
{
int
ret
,
rval
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_calibration_cmd
,
&
rval
,
port_name
,
command
,
on_off
);
if
(
ret
<
0
)
return
ret
;
return
rval
;
}
int
halexp_lock_cmd
(
const
char
*
port_name
,
int
command
,
int
priority
)
{
int
ret
,
rval
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_lock_cmd
,
&
rval
,
port_name
,
command
,
priority
);
if
(
ret
<
0
)
return
ret
;
return
rval
;
}
int
halexp_query_ports
(
hexp_port_list_t
*
list
)
{
int
ret
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_query_ports
,
list
/* return val */
);
return
ret
;
}
int
halexp_get_port_state
(
hexp_port_state_t
*
state
,
const
char
*
port_name
)
{
int
ret
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_get_port_state
,
state
/* retval */
,
port_name
);
return
ret
;
}
int
halexp_pps_cmd
(
int
cmd
,
hexp_pps_params_t
*
params
)
{
int
ret
,
rval
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_pps_cmd
,
&
rval
,
cmd
,
params
);
if
(
ret
<
0
)
return
ret
;
return
rval
;
}
int
halexp_get_timing_state
(
hexp_timing_state_t
*
tstate
)
{
int
ret
;
ret
=
minipc_call
(
hal_ch
,
DEFAULT_TO
,
&
__rpcdef_get_timing_state
,
tstate
);
if
(
ret
<
0
)
return
ret
;
return
0
;
}
int
halexp_client_try_connect
(
int
retries
,
int
timeout
)
{
for
(;;)
{
hal_ch
=
minipc_client_create
(
WRSW_HAL_SERVER_ADDR
,
MINIPC_FLAG_VERBOSE
);
if
(
hal_ch
==
0
)
retries
--
;
else
return
0
;
if
(
!
retries
)
return
-
1
;
usleep
(
timeout
);
}
return
-
1
;
}
int
halexp_client_init
()
{
return
halexp_client_try_connect
(
0
,
0
);
}
\ No newline at end of file
userspace/libptpnetif/hal_client.h
0 → 100644
View file @
ca626c92
#ifndef __HAL_CLIENT_H
#define __HAL_CLIENT_H
#include "hal_exports.h"
int
halexp_client_init
();
int
halexp_client_try_connect
(
int
retries
,
int
timeout
);
#endif
userspace/libptpnetif/ptpd_netif.c
0 → 100644
View file @
ca626c92
This diff is collapsed.
Click to expand it.
userspace/libptpnetif/ptpd_netif.h
0 → 100644
View file @
ca626c92
// Network API for WR-PTPd
#ifndef __PTPD_NETIF_H
#define __PTPD_NETIF_H
#include <stdio.h>
//#include <inttypes.h>
#define PTPD_SOCK_RAW_ETHERNET 1
#define PTPD_SOCK_UDP 2
#define PTPD_FLAGS_MULTICAST 0x1
// error codes (to be extended)
#define PTPD_NETIF_READY 1
#define PTPD_NETIF_OK 0
#define PTPD_NETIF_ERROR -1
#define PTPD_NETIF_NOT_READY -2
#define PTPD_NETIF_NOT_FOUND -3
// GCC-specific
#define PACKED __attribute__((packed))
#define PHYS_PORT_ANY (0xffff)
#define PTPD_NETIF_TX 1
#define PTPD_NETIF_RX 2
#define IFACE_NAME_LEN 16
#define SLAVE_PRIORITY_0 0
#define SLAVE_PRIORITY_1 1
#define SLAVE_PRIORITY_2 2
#define SLAVE_PRIORITY_3 3
#define SLAVE_PRIORITY_4 4
// Some system-independent definitions
typedef
uint8_t
mac_addr_t
[
6
];
typedef
uint32_t
ipv4_addr_t
;
// WhiteRabbit socket - it's void pointer as the real socket structure is private and probably platform-specific.
typedef
void
*
wr_socket_t
;
// Socket address for ptp_netif_ functions
typedef
struct
{
// Network interface name (eth0, ...)
char
if_name
[
IFACE_NAME_LEN
];
// Socket family (RAW ethernet/UDP)
int
family
;
// MAC address
mac_addr_t
mac
;
// Destination MASC address, filled by recvfrom() function on interfaces bound to multiple addresses
mac_addr_t
mac_dest
;
// IP address
ipv4_addr_t
ip
;
// UDP port
uint16_t
port
;
// RAW ethertype
uint16_t
ethertype
;
// physical port to bind socket to
uint16_t
physical_port
;
}
wr_sockaddr_t
;
PACKED
struct
_wr_timestamp
{
// Seconds
int64_t
sec
;
// Nanoseconds
int32_t
nsec
;
// Phase (in picoseconds), linearized for receive timestamps, zero for send timestamps
int32_t
phase
;
// phase(picoseconds)
/* Raw time (non-linearized) for debugging purposes */
int32_t
raw_phase
;
int32_t
raw_nsec
;
int32_t
raw_ahead
;
// correctness flag: when 0, the timestamp MAY be incorrect (e.g. generated during timebase adjustment)
int
correct
;
//int cntr_ahead;
};
typedef
struct
_wr_timestamp
wr_timestamp_t
;
/* OK. These functions we'll develop along with network card driver. You can write your own UDP-based stubs for testing purposes. */
// Initialization of network interface:
// - opens devices
// - does necessary ioctls()
// - initializes connection with the mighty HAL daemon
int
ptpd_netif_init
();
// Creates UDP or Ethernet RAW socket (determined by sock_type) bound to bind_addr. If PTPD_FLAG_MULTICAST is set, the socket is
// automatically added to multicast group. User can specify physical_port field to bind the socket to specific switch port only.
wr_socket_t
*
ptpd_netif_create_socket
(
int
sock_type
,
int
flags
,
wr_sockaddr_t
*
bind_addr
);
// Sends a UDP/RAW packet (data, data_length) to address provided in wr_sockaddr_t.
// For raw frames, mac/ethertype needs to be provided, for UDP - ip/port.
// Every transmitted frame has assigned a tag value, stored at tag parameter. This value is later used
// for recovering the precise transmit timestamp. If user doesn't need it, tag parameter can be left NULL.
int
ptpd_netif_sendto
(
wr_socket_t
*
sock
,
wr_sockaddr_t
*
to
,
void
*
data
,
size_t
data_length
,
wr_timestamp_t
*
tx_ts
);
// Receives an UDP/RAW packet. Data is written to (data) and length is returned. Maximum buffer length can be specified
// by data_length parameter. Sender information is stored in structure specified in 'from'. All RXed packets are timestamped and the timestamp
// is stored in rx_timestamp (unless it's NULL).
int
ptpd_netif_recvfrom
(
wr_socket_t
*
sock
,
wr_sockaddr_t
*
from
,
void
*
data
,
size_t
data_length
,
wr_timestamp_t
*
rx_timestamp
);
// Closes the socket.
int
ptpd_netif_close_socket
(
wr_socket_t
*
sock
);
int
ptpd_netif_poll
(
wr_socket_t
*
);
int
ptpd_netif_get_hw_addr
(
wr_socket_t
*
sock
,
mac_addr_t
*
mac
);
/*
* Function start HW locking of freq on WR Slave
* return:
* PTPD_NETIF_ERROR - locking not started
* PTPD_NETIF_OK - locking started
*/
int
ptpd_netif_locking_enable
(
int
txrx
,
const
char
*
ifaceName
,
int
priority
);
/*
*
* return:
*
* PTPD_NETIF_OK - locking started
*/
int
ptpd_netif_locking_disable
(
int
txrx
,
const
char
*
ifaceName
,
int
priority
);
int
ptpd_netif_locking_poll
(
int
txrx
,
const
char
*
ifaceName
,
int
priority
);
/*
* Function turns on calibration (measurement of delay)
* Tx or Rx depending on the txrx param
* return:
* PTPD_NETIF_NOT_READY - if there is calibratin going on on another port
* PTPD_NETIF_OK - calibration started
*/
int
ptpd_netif_calibrating_enable
(
int
txrx
,
const
char
*
ifaceName
);
/*
* Function turns off calibration (measurement of delay)
* Tx or Rx depending on the txrx param
* return:
* PTPD_NETIF_ERROR - if there is calibratin going on on another port
* PTPD_NETIF_OK - calibration started
*/
int
ptpd_netif_calibrating_disable
(
int
txrx
,
const
char
*
ifaceName
);
/*
* Function checks if Rx/Tx (depending on the param) calibration is finished
* if finished, returns measured delay in delta
* return:
*
* PTPD_NETIF_OK - locking started
*/
int
ptpd_netif_calibrating_poll
(
int
txrx
,
const
char
*
ifaceName
,
uint64_t
*
delta
);
/*
* Function turns on calibration pattern.
* return:
* PTPD_NETIF_NOT_READY - if WRSW is busy with calibration on other switch or error occured
* PTPD_NETIF_OK - calibration started
*/
int
ptpd_netif_calibration_pattern_enable
(
const
char
*
ifaceName
,
unsigned
int
calibrationPeriod
,
unsigned
int
calibrationPattern
,
unsigned
int
calibrationPatternLen
);
/*
* Function turns off calibration pattern
* return:
* PTPD_NETIF_ERROR - turning off not successful
* PTPD_NETIF_OK - turning off successful
*/
int
ptpd_netif_calibration_pattern_disable
(
const
char
*
ifaceName
);
/*
* Function reads calibration data if it's available, used at the beginning of PTPWRd to check if
* HW knows already the interface's deltax, and therefore no need for calibration
* return:
* PTPD_NETIF_NOT_FOUND - if deltas are not known
* PTPD_NETIF_OK - if deltas are known, in such case, deltaTx and deltaRx have valid data
*/
int
ptpd_netif_read_calibration_data
(
const
char
*
ifaceName
,
uint64_t
*
deltaTx
,
uint64_t
*
deltaRx
,
int32_t
*
fix_alpha
,
int32_t
*
clock_period
);
int
ptpd_netif_select
(
wr_socket_t
*
);
int
ptpd_netif_get_hw_addr
(
wr_socket_t
*
sock
,
mac_addr_t
*
mac
);
/*
* Function reads state of the given port (interface in our case), if the port is up, everything is OK, otherwise ERROR
* return:
* PTPD_NETIF_ERROR - if the port is down
* PTPD_NETIF_OK - if the port is up
*/
int
ptpd_netif_get_port_state
(
const
char
*
ifaceName
);
/*
* Function looks for a port (interface) for the port number 'number'
* it will return in the argument ifname the port name
* return:
* PTPD_NETIF_ERROR - port not found
* PTPD_NETIF_OK - if the port found
*/
int
ptpd_netif_get_ifName
(
char
*
ifname
,
int
number
);
/* Returns the millisecond "tics" counter value */
uint64_t
ptpd_netif_get_msec_tics
();
/*
* Function detects external source lock,
*
* return:
* HEXP_EXTSRC_STATUS_LOCKED 0
* HEXP_LOCK_STATUS_BUSY 1
* HEXP_EXTSRC_STATUS_NOSRC 2
*/
int
ptpd_netif_extsrc_detection
();
/* Timebase adjustment functions - the servo should not call the HAL directly */
int
ptpd_netif_adjust_counters
(
int64_t
adjust_sec
,
int32_t
adjust_nsec
);
int
ptpd_netif_adjust_phase
(
int32_t
phase_ps
);
int
ptpd_netif_adjust_in_progress
();
int
ptpd_netif_get_dmtd_phase
(
wr_socket_t
*
sock
,
int32_t
*
phase
);
void
ptpd_netif_linearize_rx_timestamp
(
wr_timestamp_t
*
ts
,
int32_t
dmtd_phase
,
int
cntr_ahead
,
int
transition_point
,
int
clock_period
);
int
ptpd_netif_enable_timing_output
(
int
enable
);
int
ptpd_netif_enable_phase_tracking
(
const
char
*
if_name
);
#endif
userspace/tools/Makefile
View file @
ca626c92
...
@@ -21,7 +21,7 @@ GIT_USR = $(shell git config --get-all user.name)
...
@@ -21,7 +21,7 @@ GIT_USR = $(shell git config --get-all user.name)
CFLAGS
=
-O2
-DDEBUG
-g
-Wall
\
CFLAGS
=
-O2
-DDEBUG
-g
-Wall
\
-I
$(LINUX)
/include
\
-I
$(LINUX)
/include
\
-I
$(LINUX)
/arch/arm/mach-at91/include
\
-I
$(LINUX)
/arch/arm/mach-at91/include
\
-I
../
ptp-noposix/
libptpnetif
\
-I
../libptpnetif
\
-I
../wrsw_hal
\
-I
../wrsw_hal
\
-I
../wrsw_rtud
\
-I
../wrsw_rtud
\
-I
../mini-rpc
\
-I
../mini-rpc
\
...
@@ -29,7 +29,7 @@ CFLAGS = -O2 -DDEBUG -g -Wall \
...
@@ -29,7 +29,7 @@ CFLAGS = -O2 -DDEBUG -g -Wall \
-I
../include
-I
../include
LDFLAGS
=
-L
../mini-rpc
\
LDFLAGS
=
-L
../mini-rpc
\
-L
../
ptp-noposix
\
-L
../
libptpnetif
\
-L
../libswitchhw
\
-L
../libswitchhw
\
-lminipc
-lptpnetif
-lswitchhw
-lminipc
-lptpnetif
-lswitchhw
...
...
userspace/wrsw_rtud/Makefile
View file @
ca626c92
PROGRAM
=
wrsw_rtud
PROGRAM
=
wrsw_rtud
SRCFILES
=
mac.c rtu_drv.c rtu_hash.c rtu_fd.c rtud.c
\
SRCFILES
=
mac.c rtu_drv.c rtu_hash.c rtu_fd.c rtud.c
\
rtud_exports.c utils.c
../ptp-noposix/libptpnetif/hal_client.c
rtud_exports.c utils.c
OBJFILES
=
$
(
patsubst %.c,%.o,
$(SRCFILES)
)
OBJFILES
=
$
(
patsubst %.c,%.o,
$(SRCFILES)
)
CC
=
$(CROSS_COMPILE)
gcc
CC
=
$(CROSS_COMPILE)
gcc
...
@@ -13,12 +13,12 @@ WR_INCLUDE = $(WR_INSTALL_ROOT)/include
...
@@ -13,12 +13,12 @@ WR_INCLUDE = $(WR_INSTALL_ROOT)/include
WR_LIB
=
$(WR_INSTALL_ROOT)
/lib
WR_LIB
=
$(WR_INSTALL_ROOT)
/lib
CFLAGS
=
-O2
-DDEBUG
-Wall
-ggdb
\
CFLAGS
=
-O2
-DDEBUG
-Wall
-ggdb
\
-I
../
ptp-noposix/
libptpnetif
-I
../wrsw_hal
\
-I
../libptpnetif
-I
../wrsw_hal
\
-I
../mini-rpc
-I
../include
-I
$(WR_INCLUDE)
-I
$(LINUX)
/include
-I
../mini-rpc
-I
../include
-I
$(WR_INCLUDE)
-I
$(LINUX)
/include
# -I$(CROSS_COMPILE_ARM_PATH)/../include
# -I$(CROSS_COMPILE_ARM_PATH)/../include
LDFLAGS
:=
-L
../libptpnetif
-L
../libswitchhw
-L
../mini-rpc
\
LDFLAGS
:=
-L
../libptpnetif
-L
../libswitchhw
-L
../mini-rpc
\
-lswitchhw
-lpthread
-lminipc
-lswitchhw
-lpt
pnetif
-lpt
hread
-lminipc
RM
:=
rm
-f
RM
:=
rm
-f
...
...
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