Bugfix/ipv6 leave multicast on foreign device registration (#899)

* Fixed IPv6 handler to ignore original-broadcast when registered as a foreign-device

* Fixed IPv6 to leave multicast when registering as foreign device.
This commit is contained in:
Steve Karg
2025-02-17 09:07:27 -06:00
committed by GitHub
parent adff1f9c0f
commit aa87bd8051
7 changed files with 224 additions and 70 deletions
+6 -1
View File
@@ -1059,6 +1059,7 @@ int bvlc6_handler(
int bvlc6_register_with_bbmd(
const BACNET_IP6_ADDRESS *bbmd_addr, uint16_t ttl_seconds)
{
int len;
uint8_t mtu[BIP6_MPDU_MAX] = { 0 };
uint16_t mtu_len = 0;
uint32_t vmac_src = 0;
@@ -1070,8 +1071,12 @@ int bvlc6_register_with_bbmd(
vmac_src = Device_Object_Instance_Number();
mtu_len = bvlc6_encode_register_foreign_device(
&mtu[0], sizeof(mtu), vmac_src, ttl_seconds);
len = bip6_send_mpdu(bbmd_addr, &mtu[0], mtu_len);
if (len > 0) {
bip6_leave_group();
}
return bip6_send_mpdu(bbmd_addr, &mtu[0], mtu_len);
return len;
}
/** Get the remote BBMD address that was used to Register as a foreign device
+4
View File
@@ -39,6 +39,10 @@ bool bip6_init(char *ifname);
BACNET_STACK_EXPORT
void bip6_cleanup(void);
BACNET_STACK_EXPORT
void bip6_join_group(void);
BACNET_STACK_EXPORT
void bip6_leave_group(void);
BACNET_STACK_EXPORT
void bip6_get_broadcast_address(BACNET_ADDRESS *my_address);
BACNET_STACK_EXPORT
void bip6_get_my_address(BACNET_ADDRESS *my_address);