Fixed compile errors and warnings for IPv6 on Win32 port.

This commit is contained in:
skarg
2016-10-02 21:11:50 +00:00
parent ea3b5e0479
commit bc61349fe9
3 changed files with 58 additions and 37 deletions
+18 -18
View File
@@ -204,18 +204,18 @@ extern "C" {
BACNET_ADDRESS * addr, BACNET_ADDRESS * addr,
uint32_t *device_id); uint32_t *device_id);
int bvlc6_encode_header( int bvlc6_encode_header(
uint8_t * pdu, uint8_t * pdu,
uint16_t pdu_size, uint16_t pdu_size,
uint8_t message_type, uint8_t message_type,
uint16_t length); uint16_t length);
int bvlc6_decode_header( int bvlc6_decode_header(
uint8_t * pdu, uint8_t * pdu,
uint16_t pdu_len, uint16_t pdu_len,
uint8_t * message_type, uint8_t * message_type,
uint16_t * length); uint16_t * length);
int bvlc6_encode_result( int bvlc6_encode_result(
uint8_t * pdu, uint8_t * pdu,
uint16_t pdu_size, uint16_t pdu_size,
uint32_t vmac, uint32_t vmac,
@@ -226,13 +226,13 @@ extern "C" {
uint32_t * vmac, uint32_t * vmac,
uint16_t * result_code); uint16_t * result_code);
int bvlc6_encode_original_unicast( int bvlc6_encode_original_unicast(
uint8_t * pdu, uint8_t * pdu,
uint16_t pdu_size, uint16_t pdu_size,
uint32_t vmac_src, uint32_t vmac_src,
uint32_t vmac_dst, uint32_t vmac_dst,
uint8_t * npdu, uint8_t * npdu,
uint16_t npdu_len); uint16_t npdu_len);
int bvlc6_decode_original_unicast( int bvlc6_decode_original_unicast(
uint8_t * pdu, uint8_t * pdu,
uint16_t pdu_len, uint16_t pdu_len,
+33 -9
View File
@@ -38,6 +38,7 @@
#include <stdbool.h> /* for the standard bool type. */ #include <stdbool.h> /* for the standard bool type. */
#include "bacdcode.h" #include "bacdcode.h"
#include "config.h" #include "config.h"
#include "device.h"
#include "bip6.h" #include "bip6.h"
#include "net.h" #include "net.h"
@@ -54,6 +55,29 @@ void bip6_set_interface(
} }
/**
* Set the BACnet IPv6 UDP port number
*
* @param port - IPv6 UDP port number
*/
void bip6_set_port(
uint16_t port)
{
BIP6_Addr.port = port;
BIP6_Broadcast_Addr.port = port;
}
/**
* Get the BACnet IPv6 UDP port number
*
* @return IPv6 UDP port number
*/
uint16_t bip6_get_port(
void)
{
return BIP6_Addr.port;
}
/** /**
* Get the BACnet broadcast address for my interface. * Get the BACnet broadcast address for my interface.
* Used as dest address in messages sent as BROADCAST * Used as dest address in messages sent as BROADCAST
@@ -298,11 +322,11 @@ bool bip6_init(
char *ifname) char *ifname)
{ {
WSADATA wd; WSADATA wd;
int i, NumSocks, RetVal, FromLen, AmountRead; int i, RetVal;
SOCKADDR_STORAGE From; struct addrinfo Hints, *AddrInfo, *AI;
ADDRINFO Hints, *AddrInfo, *AI;
SOCKET ServSock[FD_SETSIZE]; SOCKET ServSock[FD_SETSIZE];
fd_set SockSet; char port[6] = "";
int sockopt = 0;
// Ask for Winsock version 2.2. // Ask for Winsock version 2.2.
if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wd)) != 0) { if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wd)) != 0) {
@@ -322,7 +346,8 @@ bool bip6_init(
Hints.ai_family = PF_INET6; Hints.ai_family = PF_INET6;
Hints.ai_socktype = SOCK_DGRAM; Hints.ai_socktype = SOCK_DGRAM;
Hints.ai_flags = AI_NUMERICHOST | AI_PASSIVE; Hints.ai_flags = AI_NUMERICHOST | AI_PASSIVE;
RetVal = getaddrinfo(ifname, BIP6_Addr.port, &Hints, &AddrInfo); snprintf(port, sizeof(port), "%u", BIP6_Addr.port);
RetVal = getaddrinfo(ifname, &port[0], &Hints, &AddrInfo);
if (RetVal != 0) { if (RetVal != 0) {
fprintf(stderr, "getaddrinfo failed with error %d: %s\n", fprintf(stderr, "getaddrinfo failed with error %d: %s\n",
RetVal, gai_strerror(RetVal)); RetVal, gai_strerror(RetVal));
@@ -359,9 +384,8 @@ bool bip6_init(
continue; continue;
} }
if ((AI->ai_family == PF_INET6) && if ((AI->ai_family == PF_INET6) &&
IN6_IS_ADDR_LINKLOCAL((IN6_ADDR *) INETADDR_ADDRESS(AI->ai_addr)) && IN6_IS_ADDR_LINKLOCAL(AI->ai_addr) &&
(((SOCKADDR_IN6 *) (AI->ai_addr))->sin6_scope_id == 0) (((SOCKADDR_IN6 *) (AI->ai_addr))->sin6_scope_id == 0)) {
) {
fprintf(stderr, fprintf(stderr,
"IPv6 link local addresses should specify a scope ID!\n"); "IPv6 link local addresses should specify a scope ID!\n");
} }
@@ -369,7 +393,7 @@ bool bip6_init(
/* This makes sure that the src port is correct when sending */ /* This makes sure that the src port is correct when sending */
sockopt = 1; sockopt = 1;
RetVal = RetVal =
setsockopt(BIP6_Socket, SOL_SOCKET, SO_REUSEADDR, &sockopt, setsockopt(BIP6_Socket, SOL_SOCKET, SO_REUSEADDR, (char *)&sockopt,
sizeof(sockopt)); sizeof(sockopt));
if (RetVal < 0) { if (RetVal < 0) {
closesocket(BIP6_Socket); closesocket(BIP6_Socket);
+7 -10
View File
@@ -28,16 +28,8 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#define STRICT 1 #define STRICT 1
/* WindowsXP - minimum */ /* Windows XP minimum */
#define _NTDDI_VERSION_FROM_WIN32_WINNT2(ver) ver##0000 #define _WIN32_WINNT 0x501
#define _NTDDI_VERSION_FROM_WIN32_WINNT(ver) _NTDDI_VERSION_FROM_WIN32_WINNT2(ver)
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x501
#endif
#ifndef NTDDI_VERSION
# define NTDDI_VERSION _NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
#endif
#include <windows.h> #include <windows.h>
#if (!defined(USE_INADDR) || (USE_INADDR == 0)) && \ #if (!defined(USE_INADDR) || (USE_INADDR == 0)) && \
@@ -47,6 +39,11 @@
#include <windows.h> #include <windows.h>
#include <winsock2.h> #include <winsock2.h>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#ifndef IPPROTO_IPV6
// If the version of winsock does not by default include IPV6 then
// use the tech preview if it is avaliable.
#include <tpipv6.h>
#endif
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#ifdef __MINGW32__ #ifdef __MINGW32__