Indented with standard indent rules.

This commit is contained in:
skarg
2008-08-23 12:38:26 +00:00
parent 36c5c765b4
commit 0ffbb64c13
26 changed files with 1139 additions and 1155 deletions
+1 -2
View File
@@ -273,8 +273,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance); Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance);
/* loop forever */ /* loop forever */
+1 -2
View File
@@ -431,8 +431,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
found = found =
address_bind_request(Target_Device_Object_Instance, &max_apdu, address_bind_request(Target_Device_Object_Instance, &max_apdu,
+25 -25
View File
@@ -49,8 +49,8 @@ static void npdu_encode_npdu_network(
if (npdu_data) { if (npdu_data) {
npdu_data->data_expecting_reply = false; npdu_data->data_expecting_reply = false;
npdu_data->protocol_version = BACNET_PROTOCOL_VERSION; npdu_data->protocol_version = BACNET_PROTOCOL_VERSION;
npdu_data->network_layer_message = true; /* false if APDU */ npdu_data->network_layer_message = true; /* false if APDU */
npdu_data->network_message_type = network_message_type; /* optional */ npdu_data->network_message_type = network_message_type; /* optional */
npdu_data->vendor_id = 0; /* optional, if net message type is > 0x80 */ npdu_data->vendor_id = 0; /* optional, if net message type is > 0x80 */
npdu_data->priority = priority; npdu_data->priority = priority;
npdu_data->hop_count = 255; npdu_data->hop_count = 255;
@@ -59,7 +59,7 @@ static void npdu_encode_npdu_network(
/* find a specific router, or use -1 for limit if you want unlimited */ /* find a specific router, or use -1 for limit if you want unlimited */
void Send_Who_Is_Router_To_Network( void Send_Who_Is_Router_To_Network(
BACNET_ADDRESS *dst, BACNET_ADDRESS * dst,
int dnet) int dnet)
{ {
int len = 0; int len = 0;
@@ -68,8 +68,7 @@ void Send_Who_Is_Router_To_Network(
BACNET_NPDU_DATA npdu_data; BACNET_NPDU_DATA npdu_data;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data,
NETWORK_MESSAGE_WHO_IS_ROUTER_TO_NETWORK, NETWORK_MESSAGE_WHO_IS_ROUTER_TO_NETWORK, MESSAGE_PRIORITY_NORMAL);
MESSAGE_PRIORITY_NORMAL);
/* fixme: should dnet/dlen/dadr be set in NPDU? */ /* fixme: should dnet/dlen/dadr be set in NPDU? */
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
@@ -78,7 +77,7 @@ void Send_Who_Is_Router_To_Network(
len = encode_unsigned16(&Handler_Transmit_Buffer[pdu_len], dnet); len = encode_unsigned16(&Handler_Transmit_Buffer[pdu_len], dnet);
pdu_len += len; pdu_len += len;
#if PRINT_ENABLED #if PRINT_ENABLED
fprintf(stderr, "Send Who-Is-Router-To-Network message to %u\n",dnet); fprintf(stderr, "Send Who-Is-Router-To-Network message to %u\n", dnet);
#endif #endif
} else { } else {
#if PRINT_ENABLED #if PRINT_ENABLED
@@ -90,7 +89,8 @@ void Send_Who_Is_Router_To_Network(
pdu_len); pdu_len);
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, "Failed to Send Who-Is-Router-To-Network Request (%s)!\n", fprintf(stderr,
"Failed to Send Who-Is-Router-To-Network Request (%s)!\n",
strerror(errno)); strerror(errno));
#endif #endif
} }
@@ -98,7 +98,7 @@ void Send_Who_Is_Router_To_Network(
/* pDNET_list: list of networks for which I am a router, /* pDNET_list: list of networks for which I am a router,
terminated with -1 */ terminated with -1 */
void Send_I_Am_Router_To_Network( void Send_I_Am_Router_To_Network(
const int DNET_list[]) const int DNET_list[])
{ {
int len = 0; int len = 0;
int pdu_len = 0; int pdu_len = 0;
@@ -109,8 +109,7 @@ void Send_I_Am_Router_To_Network(
unsigned index = 0; unsigned index = 0;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data,
NETWORK_MESSAGE_I_AM_ROUTER_TO_NETWORK, NETWORK_MESSAGE_I_AM_ROUTER_TO_NETWORK, MESSAGE_PRIORITY_NORMAL);
MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
/* encode the optional DNET list portion of the packet */ /* encode the optional DNET list portion of the packet */
@@ -123,7 +122,7 @@ void Send_I_Am_Router_To_Network(
pdu_len += len; pdu_len += len;
index++; index++;
#if PRINT_ENABLED #if PRINT_ENABLED
fprintf(stderr, "%u\n",dnet); fprintf(stderr, "%u\n", dnet);
#endif #endif
} }
/* I-Am-Router-To-Network shall always be transmitted with /* I-Am-Router-To-Network shall always be transmitted with
@@ -134,15 +133,16 @@ void Send_I_Am_Router_To_Network(
pdu_len); pdu_len);
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, "Failed to send I-Am-Router-To-Network message (%s)!\n", fprintf(stderr,
"Failed to send I-Am-Router-To-Network message (%s)!\n",
strerror(errno)); strerror(errno));
#endif #endif
} }
/* */ /* */
void Send_Initialize_Routing_Table( void Send_Initialize_Routing_Table(
BACNET_ADDRESS *dst, BACNET_ADDRESS * dst,
BACNET_ROUTER_PORT *router_port_list) BACNET_ROUTER_PORT * router_port_list)
{ {
int len = 0; int len = 0;
int pdu_len = 0; int pdu_len = 0;
@@ -150,10 +150,9 @@ void Send_Initialize_Routing_Table(
BACNET_NPDU_DATA npdu_data; BACNET_NPDU_DATA npdu_data;
uint8_t number_of_ports = 0; uint8_t number_of_ports = 0;
BACNET_ROUTER_PORT *router_port; BACNET_ROUTER_PORT *router_port;
unsigned i = 0; /* counter */ unsigned i = 0; /* counter */
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data, NETWORK_MESSAGE_INIT_RT_TABLE,
NETWORK_MESSAGE_INIT_RT_TABLE,
MESSAGE_PRIORITY_NORMAL); MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
@@ -167,8 +166,8 @@ void Send_Initialize_Routing_Table(
if (number_of_ports) { if (number_of_ports) {
router_port = router_port_list; router_port = router_port_list;
while (router_port) { while (router_port) {
len = encode_unsigned16( len =
&Handler_Transmit_Buffer[pdu_len], encode_unsigned16(&Handler_Transmit_Buffer[pdu_len],
router_port->dnet); router_port->dnet);
pdu_len += len; pdu_len += len;
Handler_Transmit_Buffer[pdu_len++] = router_port->id; Handler_Transmit_Buffer[pdu_len++] = router_port->id;
@@ -180,29 +179,29 @@ void Send_Initialize_Routing_Table(
} }
} }
#if PRINT_ENABLED #if PRINT_ENABLED
fprintf(stderr, "Send Initialize-Routing-Table message\n"); fprintf(stderr, "Send Initialize-Routing-Table message\n");
#endif #endif
bytes_sent = bytes_sent =
datalink_send_pdu(dst, &npdu_data, &Handler_Transmit_Buffer[0], datalink_send_pdu(dst, &npdu_data, &Handler_Transmit_Buffer[0],
pdu_len); pdu_len);
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, "Failed to send Initialize-Routing-Table message (%s)!\n", fprintf(stderr,
"Failed to send Initialize-Routing-Table message (%s)!\n",
strerror(errno)); strerror(errno));
#endif #endif
} }
/* */ /* */
void Send_Initialize_Routing_Table_Ack( void Send_Initialize_Routing_Table_Ack(
BACNET_ROUTER_PORT *router_port_list) BACNET_ROUTER_PORT * router_port_list)
{ {
int pdu_len = 0; int pdu_len = 0;
BACNET_ADDRESS dest; BACNET_ADDRESS dest;
int bytes_sent = 0; int bytes_sent = 0;
BACNET_NPDU_DATA npdu_data; BACNET_NPDU_DATA npdu_data;
npdu_encode_npdu_network(&npdu_data, npdu_encode_npdu_network(&npdu_data, NETWORK_MESSAGE_INIT_RT_TABLE_ACK,
NETWORK_MESSAGE_INIT_RT_TABLE_ACK,
MESSAGE_PRIORITY_NORMAL); MESSAGE_PRIORITY_NORMAL);
pdu_len = pdu_len =
npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data); npdu_encode_pdu(&Handler_Transmit_Buffer[0], NULL, NULL, &npdu_data);
@@ -213,7 +212,8 @@ void Send_Initialize_Routing_Table_Ack(
pdu_len); pdu_len);
#if PRINT_ENABLED #if PRINT_ENABLED
if (bytes_sent <= 0) if (bytes_sent <= 0)
fprintf(stderr, "Failed to Send Initialize-Routing-Table-Ack message (%s)!\n", fprintf(stderr,
"Failed to Send Initialize-Routing-Table-Ack message (%s)!\n",
strerror(errno)); strerror(errno));
#endif #endif
} }
+14 -15
View File
@@ -191,42 +191,41 @@ static void Init_DataLink(
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
unsigned arg_count = 0; unsigned arg_count = 0;
if (argc < 2) { if (argc < 2) {
printf("Usage: %s DNET [DNET] [DNET] [...]\r\n", printf("Usage: %s DNET [DNET] [DNET] [...]\r\n",
filename_remove_path(argv[0])); filename_remove_path(argv[0]));
return 0; return 0;
} }
if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) { if ((
argc > 1) && (
strcmp(argv[1],
"--help") == 0)) {
printf("Send BACnet I-Am-Router-To-Network message for \r\n" printf("Send BACnet I-Am-Router-To-Network message for \r\n"
"one or more networks.\r\n" "one or more networks.\r\n" "\r\nDNET:\r\n"
"\r\nDNET:\r\n"
"BACnet destination network number 0-65534\r\n" "BACnet destination network number 0-65534\r\n"
"To send a I-Am-Router-To-Network message for DNET 86:\r\n" "To send a I-Am-Router-To-Network message for DNET 86:\r\n"
"%s 86\r\n" "%s 86\r\n"
"To send a I-Am-Router-To-Network message for multiple DNETs\r\n" "To send a I-Am-Router-To-Network message for multiple DNETs\r\n"
"use the following command:\r\n" "use the following command:\r\n" "%s 86 42 24 14\r\n",
"%s 86 42 24 14\r\n", filename_remove_path(argv[0]), filename_remove_path(argv[0]));
filename_remove_path(argv[0]),
filename_remove_path(argv[0]));
return 0; return 0;
} }
/* decode the command line parameters */ /* decode the command line parameters */
if (argc > 1) { if (argc > 1) {
for (arg_count = 1; arg_count < argc; arg_count++) { for (arg_count = 1; arg_count < argc; arg_count++) {
if (arg_count > MAX_ROUTER_DNETS) { if (arg_count > MAX_ROUTER_DNETS) {
fprintf(stderr, fprintf(stderr, "Limited to %u DNETS. Sorry!\r\n",
"Limited to %u DNETS. Sorry!\r\n",
MAX_ROUTER_DNETS); MAX_ROUTER_DNETS);
break; break;
} }
Target_Router_Networks[arg_count-1] = strtol(argv[arg_count], NULL, 0); Target_Router_Networks[arg_count - 1] =
strtol(argv[arg_count], NULL, 0);
/* mark the end of list */ /* mark the end of list */
Target_Router_Networks[arg_count] = -1; Target_Router_Networks[arg_count] = -1;
/* invalid DNET? */ /* invalid DNET? */
if (Target_Router_Networks[arg_count-1] >= 65535) { if (Target_Router_Networks[arg_count - 1] >= 65535) {
fprintf(stderr, fprintf(stderr, "DNET=%u - it must be less than %u\r\n",
"DNET=%u - it must be less than %u\r\n", Target_Router_Networks[arg_count - 1], 65535);
Target_Router_Networks[arg_count-1], 65535);
return 1; return 1;
} }
} }
+22 -21
View File
@@ -50,6 +50,7 @@
/* buffer used for receive */ /* buffer used for receive */
static uint8_t Rx_Buf[MAX_MPDU] = { 0 }; static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
/* target address */ /* target address */
static BACNET_ADDRESS Target_Router_Address; static BACNET_ADDRESS Target_Router_Address;
static BACNET_ROUTER_PORT *Target_Router_Port_List; static BACNET_ROUTER_PORT *Target_Router_Port_List;
@@ -187,27 +188,27 @@ static void Init_DataLink(
#endif #endif
} }
static void address_parse(BACNET_ADDRESS *dst, int argc, char *argv[]) static void address_parse(BACNET_ADDRESS * dst,
{ int argc, char *argv[]) {
unsigned mac[6]; unsigned mac[6];
unsigned port; unsigned port;
int count = 0; int count = 0;
int index = 0; int index = 0;
if (argc > 0) { if (argc > 0) {
count = count =
sscanf(argv[0], "%u.%u.%u.%u:%u", &mac[0], sscanf(argv[0], "%u.%u.%u.%u:%u", &mac[0], &mac[1], &mac[2],
&mac[1], &mac[2], &mac[3], &port); &mac[3], &port);
if (count == 5) { if (count == 5) {
dst->mac_len = 6; dst->mac_len = 6;
for (index = 0; index < 4; index++) { for (index = 0; index < 4; index++) {
dst->mac[index] = mac[index]; dst->mac[index] = mac[index];
} } encode_unsigned16(&dst->mac[4],
encode_unsigned16(&dst->mac[4], port); port);
} else { } else {
count = count =
sscanf(argv[0], "%x:%x:%x:%x:%x:%x", &mac[0], sscanf(argv[0], "%x:%x:%x:%x:%x:%x", &mac[0], &mac[1], &mac[2],
&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); &mac[3], &mac[4], &mac[5]);
dst->mac_len = count; dst->mac_len = count;
for (index = 0; index < MAX_MAC_LEN; index++) { for (index = 0; index < MAX_MAC_LEN; index++) {
if (index < count) { if (index < count) {
@@ -232,29 +233,30 @@ int main(int argc, char *argv[]) {
filename_remove_path(argv[0])); filename_remove_path(argv[0]));
return 0; return 0;
} }
if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) { if ((
argc > 1) && (
strcmp(argv[1],
"--help") == 0)) {
printf("Send BACnet Initialize-Routing-Table message to a network\r\n" printf("Send BACnet Initialize-Routing-Table message to a network\r\n"
"and wait for responses. Displays their network information.\r\n" "and wait for responses. Displays their network information.\r\n"
"\r\n" "\r\n" "address:\r\n"
"address:\r\n"
"MAC address in xx:xx:xx:xx:xx:xx format or IP x.x.x.x:port\r\n" "MAC address in xx:xx:xx:xx:xx:xx format or IP x.x.x.x:port\r\n"
"number-of-ports:\r\n" "number-of-ports:\r\n"
"Number of ports to update along with port-info data\r\n" "Number of ports to update along with port-info data\r\n"
"To query the complete routing table, use 0.\r\n" "To query the complete routing table, use 0.\r\n"
"To query using Initialize-Routing-Table message to 192.168.0.18:\r\n" "To query using Initialize-Routing-Table message to 192.168.0.18:\r\n"
"%s 192.168.0.18:47808 0\r\n", "%s 192.168.0.18:47808 0\r\n", filename_remove_path(argv[0]));
filename_remove_path(argv[0]));
return 0; return 0;
} }
/* decode the command line parameters */ /* decode the command line parameters */
address_parse(&Target_Router_Address, argc-1, &argv[1]); address_parse(&Target_Router_Address, argc - 1, &argv[1]);
if (argc > 2) { if (argc > 2) {
/* FIXME: add port info parse */ /* FIXME: add port info parse */
/* BACNET_ROUTER_PORT *router_port_list /* BACNET_ROUTER_PORT *router_port_list
Target_Router_Port_List Target_Router_Port_List
ports_parse(&router_port[0], argc-2, &argv[2]); ports_parse(&router_port[0], argc-2, &argv[2]);
Target_Router_Port_List = router_port[0]; Target_Router_Port_List = router_port[0];
*/ */
} }
/* setup my info */ /* setup my info */
Device_Set_Object_Instance_Number(BACNET_MAX_INSTANCE); Device_Set_Object_Instance_Number(BACNET_MAX_INSTANCE);
@@ -262,8 +264,7 @@ int main(int argc, char *argv[]) {
address_init(); address_init();
Init_DataLink(); Init_DataLink();
/* send the request */ /* send the request */
Send_Initialize_Routing_Table( Send_Initialize_Routing_Table(&Target_Router_Address,
&Target_Router_Address,
Target_Router_Port_List); Target_Router_Port_List);
return 0; return 0;
+3 -6
View File
@@ -806,8 +806,7 @@ int Device_Encode_Property_APDU(
} }
break; break;
case PROP_MAX_APDU_LENGTH_ACCEPTED: case PROP_MAX_APDU_LENGTH_ACCEPTED:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], MAX_APDU);
encode_application_unsigned(&apdu[0],MAX_APDU);
break; break;
case PROP_SEGMENTATION_SUPPORTED: case PROP_SEGMENTATION_SUPPORTED:
apdu_len = apdu_len =
@@ -818,8 +817,7 @@ int Device_Encode_Property_APDU(
apdu_len = encode_application_unsigned(&apdu[0], apdu_timeout()); apdu_len = encode_application_unsigned(&apdu[0], apdu_timeout());
break; break;
case PROP_NUMBER_OF_APDU_RETRIES: case PROP_NUMBER_OF_APDU_RETRIES:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], apdu_retries());
encode_application_unsigned(&apdu[0], apdu_retries());
break; break;
case PROP_DEVICE_ADDRESS_BINDING: case PROP_DEVICE_ADDRESS_BINDING:
/* FIXME: encode the list here, if it exists */ /* FIXME: encode the list here, if it exists */
@@ -894,8 +892,7 @@ bool Device_Write_Property(
case PROP_NUMBER_OF_APDU_RETRIES: case PROP_NUMBER_OF_APDU_RETRIES:
if (value.tag == BACNET_APPLICATION_TAG_UNSIGNED_INT) { if (value.tag == BACNET_APPLICATION_TAG_UNSIGNED_INT) {
/* FIXME: bounds check? */ /* FIXME: bounds check? */
apdu_retries_set((uint8_t) value.type. apdu_retries_set((uint8_t) value.type.Unsigned_Int);
Unsigned_Int);
status = true; status = true;
} else { } else {
*error_class = ERROR_CLASS_PROPERTY; *error_class = ERROR_CLASS_PROPERTY;
+1 -2
View File
@@ -325,8 +325,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance); Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance);
/* loop forever */ /* loop forever */
+1 -2
View File
@@ -306,8 +306,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
found = found =
address_bind_request(Target_Device_Object_Instance, &max_apdu, address_bind_request(Target_Device_Object_Instance, &max_apdu,
+1 -2
View File
@@ -267,8 +267,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance); Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance);
/* loop forever */ /* loop forever */
+1 -1
View File
@@ -188,7 +188,7 @@ int main(int argc, char *argv[]) {
BACNET_ADDRESS src = { BACNET_ADDRESS src = {
0}; /* address where message came from */ 0}; /* address where message came from */
uint16_t pdu_len = 0; uint16_t pdu_len = 0;
unsigned timeout = 1000; /* milliseconds */ unsigned timeout = 1000; /* milliseconds */
time_t last_seconds = 0; time_t last_seconds = 0;
time_t current_seconds = 0; time_t current_seconds = 0;
uint32_t elapsed_seconds = 0; uint32_t elapsed_seconds = 0;
+2 -2
View File
@@ -212,8 +212,8 @@ int main(int argc, char *argv[]) {
filename_remove_path(argv[0]), filename_remove_path(argv[0])); filename_remove_path(argv[0]), filename_remove_path(argv[0]));
return 0; return 0;
} }
/* decode the command line parameters */ cov_data. /* decode the command line parameters */
subscriberProcessIdentifier = strtol(argv[1], NULL, 0); cov_data.subscriberProcessIdentifier = strtol(argv[1], NULL, 0);
cov_data.initiatingDeviceIdentifier = strtol(argv[2], NULL, 0); cov_data.initiatingDeviceIdentifier = strtol(argv[2], NULL, 0);
cov_data.monitoredObjectIdentifier.type = strtol(argv[3], NULL, 0); cov_data.monitoredObjectIdentifier.type = strtol(argv[3], NULL, 0);
cov_data.monitoredObjectIdentifier.instance = strtol(argv[4], NULL, 0); cov_data.monitoredObjectIdentifier.instance = strtol(argv[4], NULL, 0);
+16 -24
View File
@@ -188,17 +188,17 @@ static void Init_DataLink(
#endif #endif
} }
static void address_parse(BACNET_ADDRESS *dst, int argc, char *argv[]) static void address_parse(BACNET_ADDRESS * dst,
{ int argc, char *argv[]) {
int dnet = 0; int dnet = 0;
unsigned mac[6]; unsigned mac[6];
int count = 0; int count = 0;
int index = 0; int index = 0;
if (argc > 0) { if (argc > 0) {
count = count =
sscanf(argv[0], "%x:%x:%x:%x:%x:%x", &mac[0], sscanf(argv[0], "%x:%x:%x:%x:%x:%x", &mac[0], &mac[1], &mac[2],
&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); &mac[3], &mac[4], &mac[5]);
dst->mac_len = count; dst->mac_len = count;
for (index = 0; index < MAX_MAC_LEN; index++) { for (index = 0; index < MAX_MAC_LEN; index++) {
if (index < count) { if (index < count) {
@@ -215,8 +215,8 @@ static void address_parse(BACNET_ADDRESS *dst, int argc, char *argv[])
if (dnet) { if (dnet) {
if (argc > 2) { if (argc > 2) {
count = count =
sscanf(argv[2], "%x:%x:%x:%x:%x:%x", &mac[0], sscanf(argv[2], "%x:%x:%x:%x:%x:%x", &mac[0], &mac[1], &mac[2],
&mac[1], &mac[2], &mac[3], &mac[4], &mac[5]); &mac[3], &mac[4], &mac[5]);
dst->len = count; dst->len = count;
for (index = 0; index < MAX_MAC_LEN; index++) { for (index = 0; index < MAX_MAC_LEN; index++) {
if (index < count) { if (index < count) {
@@ -226,7 +226,7 @@ static void address_parse(BACNET_ADDRESS *dst, int argc, char *argv[])
} }
} }
} else { } else {
fprintf(stderr,"A non-zero DNET requires a DADR.\r\n"); fprintf(stderr, "A non-zero DNET requires a DADR.\r\n");
} }
} else { } else {
dst->len = 0; dst->len = 0;
@@ -248,25 +248,19 @@ int main(int argc, char *argv[]) {
time_t timeout_seconds = 0; time_t timeout_seconds = 0;
if (argc < 2) { if (argc < 2) {
printf("Usage: %s DNET [MAC]\r\n", printf("Usage: %s DNET [MAC]\r\n", filename_remove_path(argv[0]));
filename_remove_path(argv[0]));
return 0; return 0;
} }
if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) { if ((argc > 1) && (strcmp(argv[1], "--help") == 0)) {
printf("Send BACnet Who-Is-Router-To-Network message to a network.\r\n" printf("Send BACnet Who-Is-Router-To-Network message to a network.\r\n"
"\r\n" "\r\n" "DNET:\r\n" "BACnet destination network number 0-65534\r\n"
"DNET:\r\n" "MAC:\r\n" "Optional MAC address of router for unicast message\r\n"
"BACnet destination network number 0-65534\r\n"
"MAC:\r\n"
"Optional MAC address of router for unicast message\r\n"
"Format: xx[:xx:xx:xx:xx:xx] [dnet xx[:xx:xx:xx:xx:xx]]\r\n" "Format: xx[:xx:xx:xx:xx:xx] [dnet xx[:xx:xx:xx:xx:xx]]\r\n"
"Use hexidecimal MAC addresses.\r\n" "Use hexidecimal MAC addresses.\r\n" "\r\n"
"\r\n"
"To send a Who-Is-Router-To-Network request to DNET 86:\r\n" "To send a Who-Is-Router-To-Network request to DNET 86:\r\n"
"%s 86\r\n" "%s 86\r\n"
"To send a Who-Is-Router-To-Network request to all devices:\r\n" "To send a Who-Is-Router-To-Network request to all devices:\r\n"
"%s -1\r\n", "%s -1\r\n", filename_remove_path(argv[0]),
filename_remove_path(argv[0]),
filename_remove_path(argv[0])); filename_remove_path(argv[0]));
return 0; return 0;
} }
@@ -274,14 +268,13 @@ int main(int argc, char *argv[]) {
if (argc > 1) { if (argc > 1) {
Target_Router_Network = strtol(argv[1], NULL, 0); Target_Router_Network = strtol(argv[1], NULL, 0);
if (Target_Router_Network >= 65535) { if (Target_Router_Network >= 65535) {
fprintf(stderr, fprintf(stderr, "DNET=%u - it must be less than %u\r\n",
"DNET=%u - it must be less than %u\r\n",
Target_Router_Network, 65535); Target_Router_Network, 65535);
return 1; return 1;
} }
} }
if (argc > 2) { if (argc > 2) {
address_parse(&Target_Router_Address, argc-2, &argv[2]); address_parse(&Target_Router_Address, argc - 2, &argv[2]);
} else { } else {
datalink_get_broadcast_address(&Target_Router_Address); datalink_get_broadcast_address(&Target_Router_Address);
} }
@@ -294,8 +287,7 @@ int main(int argc, char *argv[]) {
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = apdu_timeout() / 1000; timeout_seconds = apdu_timeout() / 1000;
/* send the request */ /* send the request */
Send_Who_Is_Router_To_Network( Send_Who_Is_Router_To_Network(&Target_Router_Address,
&Target_Router_Address,
Target_Router_Network); Target_Router_Network);
/* loop forever */ /* loop forever */
for (;;) { for (;;) {
+1 -2
View File
@@ -282,8 +282,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance); Send_WhoIs(Target_Device_Object_Instance, Target_Device_Object_Instance);
/* loop forever */ /* loop forever */
+1 -2
View File
@@ -402,8 +402,7 @@ int main(int argc, char *argv[]) {
Init_DataLink(); Init_DataLink();
/* configure the timeout values */ /* configure the timeout values */
last_seconds = time(NULL); last_seconds = time(NULL);
timeout_seconds = timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
(apdu_timeout() / 1000) * apdu_retries();
/* try to bind with the device */ /* try to bind with the device */
found = found =
address_bind_request(Target_Device_Object_Instance, &max_apdu, address_bind_request(Target_Device_Object_Instance, &max_apdu,
+8 -4
View File
@@ -176,10 +176,14 @@ extern "C" {
uint8_t ** service_request, uint8_t ** service_request,
uint16_t * service_request_len); uint16_t * service_request_len);
uint16_t apdu_timeout(void); uint16_t apdu_timeout(
void apdu_timeout_set(uint16_t value); void);
uint8_t apdu_retries(void); void apdu_timeout_set(
void apdu_retries_set(uint8_t value); uint16_t value);
uint8_t apdu_retries(
void);
void apdu_retries_set(
uint8_t value);
void apdu_handler( void apdu_handler(
BACNET_ADDRESS * src, /* source address */ BACNET_ADDRESS * src, /* source address */
+5 -5
View File
@@ -110,15 +110,15 @@ extern "C" {
BACNET_OCTET_STRING * fileData); BACNET_OCTET_STRING * fileData);
void Send_Who_Is_Router_To_Network( void Send_Who_Is_Router_To_Network(
BACNET_ADDRESS *dst, BACNET_ADDRESS * dst,
int dnet); int dnet);
void Send_I_Am_Router_To_Network( void Send_I_Am_Router_To_Network(
const int DNET_list[]); const int DNET_list[]);
void Send_Initialize_Routing_Table( void Send_Initialize_Routing_Table(
BACNET_ADDRESS *dst, BACNET_ADDRESS * dst,
BACNET_ROUTER_PORT *router_port_list); BACNET_ROUTER_PORT * router_port_list);
void Send_Initialize_Routing_Table_Ack( void Send_Initialize_Routing_Table_Ack(
BACNET_ROUTER_PORT *router_port_list); BACNET_ROUTER_PORT * router_port_list);
+1 -1
View File
@@ -48,7 +48,7 @@ static void debug_printf(
const char *format, const char *format,
...) ...)
{ {
format=format; format = format;
} }
#endif #endif
+1 -1
View File
@@ -57,7 +57,7 @@ struct router_port_t;
typedef struct router_port_t { typedef struct router_port_t {
uint16_t dnet; uint16_t dnet;
uint8_t id; uint8_t id;
uint8_t info[256]; /* size could be 1-255 */ uint8_t info[256]; /* size could be 1-255 */
uint8_t info_len; uint8_t info_len;
struct router_port_t *next; /* linked list */ struct router_port_t *next; /* linked list */
} BACNET_ROUTER_PORT; } BACNET_ROUTER_PORT;
+3 -7
View File
@@ -397,8 +397,7 @@ int Device_Encode_Property_APDU(
} }
break; break;
case PROP_MAX_APDU_LENGTH_ACCEPTED: case PROP_MAX_APDU_LENGTH_ACCEPTED:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], MAX_APDU);
encode_application_unsigned(&apdu[0], MAX_APDU);
break; break;
case PROP_SEGMENTATION_SUPPORTED: case PROP_SEGMENTATION_SUPPORTED:
apdu_len = apdu_len =
@@ -406,13 +405,10 @@ int Device_Encode_Property_APDU(
Device_Segmentation_Supported()); Device_Segmentation_Supported());
break; break;
case PROP_APDU_TIMEOUT: case PROP_APDU_TIMEOUT:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], apdu_timeout());
encode_application_unsigned(&apdu[0], apdu_timeout());
break; break;
case PROP_NUMBER_OF_APDU_RETRIES: case PROP_NUMBER_OF_APDU_RETRIES:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], apdu_retries());
encode_application_unsigned(&apdu[0],
apdu_retries());
break; break;
case PROP_DEVICE_ADDRESS_BINDING: case PROP_DEVICE_ADDRESS_BINDING:
/* FIXME: encode the list here, if it exists */ /* FIXME: encode the list here, if it exists */
+17 -15
View File
@@ -75,7 +75,9 @@ void dlmstp_millisecond_timer(
INCREMENT_AND_LIMIT_UINT16(SilenceTime); INCREMENT_AND_LIMIT_UINT16(SilenceTime);
} }
void get_abstime(struct timespec *abstime, unsigned long milliseconds) void get_abstime(
struct timespec *abstime,
unsigned long milliseconds)
{ {
struct timeval tp; struct timeval tp;
unsigned long seconds; unsigned long seconds;
@@ -86,8 +88,8 @@ void get_abstime(struct timespec *abstime, unsigned long milliseconds)
abstime->tv_nsec = tp.tv_usec * 1000; abstime->tv_nsec = tp.tv_usec * 1000;
seconds = milliseconds / 1000; seconds = milliseconds / 1000;
abstime->tv_sec += seconds; abstime->tv_sec += seconds;
abstime->tv_nsec += ((milliseconds - (seconds * 1000))*(1000*1000)); abstime->tv_nsec += ((milliseconds - (seconds * 1000)) * (1000 * 1000));
seconds = abstime->tv_nsec / (1000*1000*1000); seconds = abstime->tv_nsec / (1000 * 1000 * 1000);
abstime->tv_sec += seconds; abstime->tv_sec += seconds;
} }
@@ -152,10 +154,8 @@ uint16_t dlmstp_receive(
(void) max_pdu; (void) max_pdu;
/* see if there is a packet available, and a place /* see if there is a packet available, and a place
to put the reply (if necessary) and process it */ to put the reply (if necessary) and process it */
get_abstime(&abstime,timeout); get_abstime(&abstime, timeout);
rv = pthread_cond_timedwait( rv = pthread_cond_timedwait(&Receive_Packet_Flag, &Receive_Packet_Mutex,
&Receive_Packet_Flag,
&Receive_Packet_Mutex,
&abstime); &abstime);
if (rv == 0) { if (rv == 0) {
if (Receive_Packet.ready) { if (Receive_Packet.ready) {
@@ -227,8 +227,8 @@ static void *dlmstp_master_fsm_task(
if (milliseconds) { if (milliseconds) {
get_abstime(&abstime, milliseconds); get_abstime(&abstime, milliseconds);
/* we want an OS effecient way to wait for a frame */ /* we want an OS effecient way to wait for a frame */
pthread_cond_timedwait(&Received_Frame_Flag, pthread_cond_timedwait(&Received_Frame_Flag, &Received_Frame_Mutex,
&Received_Frame_Mutex, &abstime); &abstime);
} }
MSTP_Master_Node_FSM(&MSTP_Port); MSTP_Master_Node_FSM(&MSTP_Port);
} }
@@ -622,26 +622,28 @@ bool dlmstp_init(
Receive_Packet.pdu_len = 0; Receive_Packet.pdu_len = 0;
rv = pthread_cond_init(&Receive_Packet_Flag, NULL); rv = pthread_cond_init(&Receive_Packet_Flag, NULL);
if (rv == -1) { if (rv == -1) {
fprintf(stderr, "MS/TP Interface: %s\n cannot allocate PThread Condition.\n", fprintf(stderr,
"MS/TP Interface: %s\n cannot allocate PThread Condition.\n",
ifname); ifname);
exit(1); exit(1);
} }
rv = pthread_cond_init(&Received_Frame_Flag, NULL); rv = pthread_cond_init(&Received_Frame_Flag, NULL);
if (rv == -1) { if (rv == -1) {
fprintf(stderr, "MS/TP Interface: %s\n cannot allocate PThread Condition.\n", fprintf(stderr,
"MS/TP Interface: %s\n cannot allocate PThread Condition.\n",
ifname); ifname);
exit(1); exit(1);
} }
rv = pthread_mutex_init(&Receive_Packet_Mutex, NULL); rv = pthread_mutex_init(&Receive_Packet_Mutex, NULL);
if (rv == -1) { if (rv == -1) {
fprintf(stderr, "MS/TP Interface: %s\n cannot allocate PThread Mutex.\n", fprintf(stderr,
ifname); "MS/TP Interface: %s\n cannot allocate PThread Mutex.\n", ifname);
exit(1); exit(1);
} }
rv = pthread_mutex_init(&Received_Frame_Mutex, NULL); rv = pthread_mutex_init(&Received_Frame_Mutex, NULL);
if (rv == -1) { if (rv == -1) {
fprintf(stderr, "MS/TP Interface: %s\n cannot allocate PThread Mutex.\n", fprintf(stderr,
ifname); "MS/TP Interface: %s\n cannot allocate PThread Mutex.\n", ifname);
exit(1); exit(1);
} }
/* initialize hardware */ /* initialize hardware */
+4 -4
View File
@@ -110,7 +110,7 @@ static int ethernet_bind(
/* alias net-pf-17 af_packet */ /* alias net-pf-17 af_packet */
/* Then follow it by: # modprobe af_packet */ /* Then follow it by: # modprobe af_packet */
/* Note: PF_INET/SOCK_PACKET has been replaced with /* Note: PF_INET/SOCK_PACKET has been replaced with
PF_PACKET/(SOCK_PACKET, SOCK_DGRAM, SOCK_RAW).*/ PF_PACKET/(SOCK_PACKET, SOCK_DGRAM, SOCK_RAW). */
/* Attempt to open the socket for 802.2 ethernet frames */ /* Attempt to open the socket for 802.2 ethernet frames */
if ((sock_fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_802_2))) < 0) { if ((sock_fd = socket(PF_INET, SOCK_PACKET, htons(ETH_P_802_2))) < 0) {
@@ -129,9 +129,9 @@ static int ethernet_bind(
/* It is very advisable to do a IP_HDRINCL call, to make sure /* It is very advisable to do a IP_HDRINCL call, to make sure
that the kernel knows the header is included in the data, that the kernel knows the header is included in the data,
and doesn't insert its own header into the packet before our data */ and doesn't insert its own header into the packet before our data */
if (setsockopt (sock_fd, IPPROTO_IP, IP_HDRINCL, &sockopt, if (setsockopt(sock_fd, IPPROTO_IP, IP_HDRINCL, &sockopt,
sizeof(sockopt)) < 0) { sizeof(sockopt)) < 0) {
printf ("Warning: Cannot set HDRINCL!\n"); printf("Warning: Cannot set HDRINCL!\n");
} }
#endif #endif
/* Bind the socket to an address */ /* Bind the socket to an address */
+14 -13
View File
@@ -117,12 +117,13 @@ uint16_t MSTP_Get_Reply(
return 0; return 0;
} }
static int network_init(const char *name, int protocol) static int network_init(
const char *name,
int protocol)
{ {
/* check to see if we are being run as root */ /* check to see if we are being run as root */
if (getuid() != 0) { if (getuid() != 0) {
fprintf(stderr, fprintf(stderr, "Requires root priveleges.\n");
"Requires root priveleges.\n");
return -1; return -1;
} }
@@ -162,9 +163,9 @@ static void snap_received_packet(
volatile struct mstp_port_struct_t *mstp_port, volatile struct mstp_port_struct_t *mstp_port,
int sockfd) int sockfd)
{ {
uint16_t mtu_len = 0; /* number of octets of packet saved in file */ uint16_t mtu_len = 0; /* number of octets of packet saved in file */
unsigned i = 0; /* counter */ unsigned i = 0; /* counter */
static uint8_t mtu[1500] = {0}; static uint8_t mtu[1500] = { 0 };
mtu[0] = 0; mtu[0] = 0;
mtu[1] = 0; mtu[1] = 0;
@@ -177,7 +178,7 @@ static void snap_received_packet(
mtu[8] = 0; mtu[8] = 0;
mtu[9] = 0; mtu[9] = 0;
mtu[10] = 0; mtu[10] = 0;
mtu[11]= mstp_port->SourceAddress; mtu[11] = mstp_port->SourceAddress;
/* length - 12, 13 */ /* length - 12, 13 */
mtu[14] = 0xaa; /* DSAP for SNAP */ mtu[14] = 0xaa; /* DSAP for SNAP */
mtu[15] = 0xaa; /* SSAP for SNAP */ mtu[15] = 0xaa; /* SSAP for SNAP */
@@ -199,15 +200,15 @@ static void snap_received_packet(
mtu_len = 31; mtu_len = 31;
if (mstp_port->DataLength) { if (mstp_port->DataLength) {
for (i = 0; i < mstp_port->DataLength; i++) { for (i = 0; i < mstp_port->DataLength; i++) {
mtu[31+i] = mstp_port->InputBuffer[i]; mtu[31 + i] = mstp_port->InputBuffer[i];
} }
mtu[31+mstp_port->DataLength] = mstp_port->DataCRCActualMSB; mtu[31 + mstp_port->DataLength] = mstp_port->DataCRCActualMSB;
mtu[31+mstp_port->DataLength+1] = mstp_port->DataCRCActualLSB; mtu[31 + mstp_port->DataLength + 1] = mstp_port->DataCRCActualLSB;
mtu_len += (mstp_port->DataLength+2); mtu_len += (mstp_port->DataLength + 2);
} }
/* Ethernet length is data only - not address or length bytes */ /* Ethernet length is data only - not address or length bytes */
encode_unsigned16(&mtu[12], mtu_len-14); encode_unsigned16(&mtu[12], mtu_len - 14);
write(sockfd,&mtu[0], mtu_len); write(sockfd, &mtu[0], mtu_len);
} }
+3 -7
View File
@@ -409,8 +409,7 @@ int Device_Encode_Property_APDU(
} }
break; break;
case PROP_MAX_APDU_LENGTH_ACCEPTED: case PROP_MAX_APDU_LENGTH_ACCEPTED:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], MAX_APDU);
encode_application_unsigned(&apdu[0], MAX_APDU);
break; break;
case PROP_SEGMENTATION_SUPPORTED: case PROP_SEGMENTATION_SUPPORTED:
apdu_len = apdu_len =
@@ -418,13 +417,10 @@ int Device_Encode_Property_APDU(
Device_Segmentation_Supported()); Device_Segmentation_Supported());
break; break;
case PROP_APDU_TIMEOUT: case PROP_APDU_TIMEOUT:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], apdu_timeout());
encode_application_unsigned(&apdu[0], apdu_timeout());
break; break;
case PROP_NUMBER_OF_APDU_RETRIES: case PROP_NUMBER_OF_APDU_RETRIES:
apdu_len = apdu_len = encode_application_unsigned(&apdu[0], apdu_retries());
encode_application_unsigned(&apdu[0],
apdu_retries());
break; break;
case PROP_DEVICE_ADDRESS_BINDING: case PROP_DEVICE_ADDRESS_BINDING:
/* FIXME: encode the list here, if it exists */ /* FIXME: encode the list here, if it exists */
+8 -4
View File
@@ -285,22 +285,26 @@ uint16_t apdu_decode_confirmed_service_request(
return len; return len;
} }
uint16_t apdu_timeout(void) uint16_t apdu_timeout(
void)
{ {
return Timeout_Milliseconds; return Timeout_Milliseconds;
} }
void apdu_timeout_set(uint16_t milliseconds) void apdu_timeout_set(
uint16_t milliseconds)
{ {
Timeout_Milliseconds = milliseconds; Timeout_Milliseconds = milliseconds;
} }
uint8_t apdu_retries(void) uint8_t apdu_retries(
void)
{ {
return Number_Of_Retries; return Number_Of_Retries;
} }
void apdu_retries_set(uint8_t value) void apdu_retries_set(
uint8_t value)
{ {
Number_Of_Retries = value; Number_Of_Retries = value;
} }
+1 -2
View File
@@ -49,8 +49,7 @@ int arf_encode_apdu(
if (apdu) { if (apdu) {
apdu[0] = PDU_TYPE_CONFIRMED_SERVICE_REQUEST; apdu[0] = PDU_TYPE_CONFIRMED_SERVICE_REQUEST;
apdu[1] = apdu[1] = encode_max_segs_max_apdu(0, MAX_APDU);
encode_max_segs_max_apdu(0, MAX_APDU);
apdu[2] = invoke_id; apdu[2] = invoke_id;
apdu[3] = SERVICE_CONFIRMED_ATOMIC_READ_FILE; /* service choice */ apdu[3] = SERVICE_CONFIRMED_ATOMIC_READ_FILE; /* service choice */
apdu_len = 4; apdu_len = 4;
+4 -4
View File
@@ -72,7 +72,7 @@ static inline void printf_receive(
const char *format, const char *format,
...) ...)
{ {
format=format; format = format;
} }
#endif #endif
@@ -83,7 +83,7 @@ static inline void printf_receive_data(
const char *format, const char *format,
...) ...)
{ {
format=format; format = format;
} }
#endif #endif
@@ -94,7 +94,7 @@ static inline void printf_receive_error(
const char *format, const char *format,
...) ...)
{ {
format=format; format = format;
} }
#endif #endif
@@ -105,7 +105,7 @@ static inline void printf_master(
const char *format, const char *format,
...) ...)
{ {
format=format; format = format;
} }
#endif #endif