Skip to content

Commit

Permalink
Add transport over UDP IPv4.
Browse files Browse the repository at this point in the history
Signed-off-by: Richard Cochran <[email protected]>
  • Loading branch information
richardcochran committed Nov 6, 2011
1 parent e930bc4 commit 60f3a85
Show file tree
Hide file tree
Showing 6 changed files with 499 additions and 1 deletion.
36 changes: 36 additions & 0 deletions fd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* @file fd.h
* @brief Defines a array of file descriptors, useful for polling.
* @note Copyright (C) 2011 Richard Cochran <[email protected]>
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef HAVE_FD_H
#define HAVE_FD_H

enum {
FD_EVENT,
FD_GENERAL,
FD_ANNOUNCE_TIMER,
FD_DELAY_TIMER,
N_POLLFD,
};

struct fdarray {
int fd[N_POLLFD];
int cnt;
};

#endif
2 changes: 1 addition & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ CFLAGS = -Wall $(INC) $(DEBUG)
LDFLAGS =
LDLIBS = -lm -lrt
PRG = linuxptp
OBJ = bmc.o fsm.o phc.o print.o util.o
OBJ = bmc.o fsm.o phc.o print.o transport.o udp.o util.o

SRC = $(OBJ:.o=.c)
DEPEND = $(OBJ:.o=.d)
Expand Down
43 changes: 43 additions & 0 deletions transport.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* @file transport.c
* @note Copyright (C) 2011 Richard Cochran <[email protected]>
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include "transport.h"
#include "udp.h"

static struct transport udp = {
.close = udp_close,
.open = udp_open,
.recv = udp_recv,
.send = udp_send,
};

struct transport *transport_find(enum transport_type type)
{
switch (type) {
case TRANS_UDP_IPV4:
return &udp;
case TRANS_UDP_IPV6:
case TRANS_IEEE_802_3:
case TRANS_DEVICENET:
case TRANS_CONTROLNET:
case TRANS_PROFINET:
break;
}
return NULL;
}
62 changes: 62 additions & 0 deletions transport.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**
* @file transport.h
* @brief Defines an abstract transport layer.
* @note Copyright (C) 2011 Richard Cochran <[email protected]>
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef HAVE_TRANSPORT_H
#define HAVE_TRANSPORT_H

#include <time.h>

#include "fd.h"

enum transport_type {
TRANS_UDP_IPV4,
TRANS_UDP_IPV6,
TRANS_IEEE_802_3,
TRANS_DEVICENET,
TRANS_CONTROLNET,
TRANS_PROFINET,
};

enum timestamp_type {
TS_SOFTWARE,
TS_HARDWARE,
TS_LEGACY_HW,
};

struct hw_timestamp {
enum timestamp_type type;
struct timespec ts;
};

struct transport {
int (*close)(struct fdarray *fda);
int (*open)(char *name, struct fdarray *fda, enum timestamp_type tt);
int (*recv)(int fd, void *buf, int buflen, struct hw_timestamp *hwts);
int (*send)(struct fdarray *fda, int event,
void *buf, int buflen, struct hw_timestamp *hwts);
};

/**
* Obtain a pointer to the specified transport.
* @param type Which transport to obtain.
* @return Pointer to a static global.
*/
struct transport *transport_find(enum transport_type type);

#endif
Loading

0 comments on commit 60f3a85

Please sign in to comment.