From 0c5809cc37b70578e86011bc3d9933a45845c64c Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 4 May 2005 23:17:30 +0000 Subject: [PATCH] adding BACnet/IP to the linux port --- bacnet-stack/Makefile | 4 +- bacnet-stack/ports/linux/bip.c | 10 ++-- bacnet-stack/ports/linux/net.h | 97 ++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 bacnet-stack/ports/linux/net.h diff --git a/bacnet-stack/Makefile b/bacnet-stack/Makefile index e6f366be..96e04bee 100644 --- a/bacnet-stack/Makefile +++ b/bacnet-stack/Makefile @@ -6,8 +6,8 @@ BASEDIR = . #CFLAGS = -Wall -I. -O2 -g # Note: you can strip out symbols using the strip command # to get an idea of how big the compile really is. -CFLAGS = -Wall -I. -g -DBACDL_ETHERNET=1 -#CFLAGS = -Wall -I. -Iports/linux -g -DBACDL_BIP=1 +#CFLAGS = -Wall -I. -g -DBACDL_ETHERNET=1 +CFLAGS = -Wall -I. -Iports/linux -g -DBACDL_BIP=1 SRCS = ports/linux/main.c \ ports/linux/ethernet.c \ diff --git a/bacnet-stack/ports/linux/bip.c b/bacnet-stack/ports/linux/bip.c index 33147f90..1b5f2038 100644 --- a/bacnet-stack/ports/linux/bip.c +++ b/bacnet-stack/ports/linux/bip.c @@ -129,11 +129,11 @@ static int bip_send( uint8_t *pdu, // any data to be sent - may be null unsigned pdu_len) // number of bytes of data { - int status = -1; /* initially fail status */ int bip_send_socket = -1; uint8_t mtu[MAX_MPDU] = { 0 }; int mtu_len = 0; - int rv = 0; /* return value from socket calls */ + int bytes_sent = 0; + int status = 0; // assumes that the driver has already been initialized // FIXME: can we use the same socket over and over? @@ -163,17 +163,17 @@ static int bip_send( mtu_len += pdu_len; /* Send the packet */ - status = sendto(bip_send_socket, (char *)mtu, mtu_len, 0, + bytes_sent = sendto(bip_send_socket, (char *)mtu, mtu_len, 0, (struct sockaddr *)bip_dest, sizeof(struct sockaddr)); close(bip_send_socket); - return status; + return bytes_sent; } /* function to send a packet out the BACnet/IP socket (Annex J) */ -/* returns zero on success, non-zero on failure */ +/* returns number of bytes sent on success, negative on failure */ int bip_send_pdu( BACNET_ADDRESS *dest, // destination address uint8_t *pdu, // any data to be sent - may be null diff --git a/bacnet-stack/ports/linux/net.h b/bacnet-stack/ports/linux/net.h new file mode 100644 index 00000000..a75c375d --- /dev/null +++ b/bacnet-stack/ports/linux/net.h @@ -0,0 +1,97 @@ +/************************************************************************** +* +* Copyright (C) 2005 Steve Karg +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +*********************************************************************/ + +#ifndef NET_H +#define NET_H + +/* common unix sockets headers needed */ +#include /* basic system data types */ +#include /* timeval{} for select() */ +#include /* timespec{} for pselect() */ +#include /* sockaddr_in{} and other Internet defns */ +#include /* inet(3) functions */ +#include /* for nonblocking */ +#include +#include +#include +#include +#include +#include +#include /* for S_xxx file mode constants */ +#include /* for iovec{} and readv/writev */ +#include +#include +#include /* for Unix domain sockets */ + +#ifdef HAVE_SYS_SELECT_H +# include /* for convenience */ +#endif + +#ifdef HAVE_POLL_H +# include /* for convenience */ +#endif + +#ifdef HAVE_STRINGS_H +# include /* for convenience */ +#endif + +/* Three headers are normally needed for socket/file ioctl's: + * , , and . + */ +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_SYS_FILIO_H +# include +#endif +#ifdef HAVE_SYS_SOCKIO_H +# include +#endif + +#ifdef HAVE_PTHREAD_H +# include +#endif + + +#define ENUMS +#include +#include +#include +#include /* for the glibc version number */ +#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 +#include +#include /* the L2 protocols */ +#else +#include +#include +#include /* The L2 protocols */ +#endif +#include +#include +#include +#include +#include + +#endif