diff --git a/src/bacnet/basic/bbmd/h_bbmd.c b/src/bacnet/basic/bbmd/h_bbmd.c index 7c4bfb85..b86d8cf7 100644 --- a/src/bacnet/basic/bbmd/h_bbmd.c +++ b/src/bacnet/basic/bbmd/h_bbmd.c @@ -1269,6 +1269,30 @@ int bvlc_register_with_bbmd( return bip_send_mpdu(bbmd_addr, &BVLC_Buffer[0], BVLC_Buffer_Len); } +/** Become a normal (non-foreign) device and delete self from a BBMD if + * registered + * @return Positive number (of bytes sent) on success, + * 0 if no delete request is sent, or + * -1 if delete fails. + */ +int bvlc_delete_from_bbmd(void) +{ + int status; + BACNET_IP_ADDRESS addr; + BACNET_IP_ADDRESS bbmd_addr; + bip_get_addr(&addr); + bvlc_address_copy(&bbmd_addr, &Remote_BBMD); + memset(&Remote_BBMD, 0, sizeof(Remote_BBMD)); + Remote_BBMD_TTL_Seconds = 0; + status = 0; + if (bbmd_addr.port) { + BVLC_Buffer_Len = bvlc_encode_delete_foreign_device( + &BVLC_Buffer[0], sizeof(BVLC_Buffer), &addr); + status = bip_send_mpdu(&Remote_BBMD, &BVLC_Buffer[0], BVLC_Buffer_Len); + } + return status; +} + /** Get the remote BBMD address that was used to Register as a foreign device * @param bbmd_addr - IPv4 address of BBMD with which to register * @return Positive number (of bytes sent) on success, diff --git a/src/bacnet/basic/bbmd/h_bbmd.h b/src/bacnet/basic/bbmd/h_bbmd.h index c84a7460..cc1e0894 100644 --- a/src/bacnet/basic/bbmd/h_bbmd.h +++ b/src/bacnet/basic/bbmd/h_bbmd.h @@ -94,6 +94,8 @@ BACNET_STACK_EXPORT int bvlc_register_with_bbmd( const BACNET_IP_ADDRESS *address, uint16_t time_to_live_seconds); BACNET_STACK_EXPORT +int bvlc_delete_from_bbmd(void); +BACNET_STACK_EXPORT void bvlc_remote_bbmd_address(BACNET_IP_ADDRESS *address); BACNET_STACK_EXPORT uint16_t bvlc_remote_bbmd_lifetime(void);