milan-avb: ACMP status use the status of the FSM rather than the connection count to decide if bound or not

This commit is contained in:
hackerman-kl 2026-04-26 13:41:01 +02:00 committed by Wim Taymans
parent 52c6c0a0cf
commit 25e3556050

View file

@ -398,9 +398,13 @@ static void prepare_get_rx_response_success(struct acmp *acmp,
{
struct avb_ethernet_header *h_reply = (struct avb_ethernet_header *)outbuf;
struct avb_packet_acmp *reply = SPA_PTROFF(h_reply, sizeof(*h_reply), void);
/* Milan v1.2 Section 5.5.3.5: bound iff the listener FSM is not in UNBOUND. */
bool bound = (stream->acmp_sta.fsm_acmp_state !=
FSM_ACMP_STATE_MILAN_V12_UNBOUND);
uint16_t flags;
memcpy(outbuf, m, len);
/** Prepare packet according to Milan v1.2 Table 5.34 */
/** Prepare packet according to Milan v1.2 Table 5.37 */
AVB_PACKET_ACMP_SET_STATUS(reply, AVB_ACMP_STATUS_SUCCESS);
AVB_PACKET_ACMP_SET_MESSAGE_TYPE(reply,
AVB_ACMP_MESSAGE_TYPE_GET_RX_STATE_RESPONSE);
@ -408,10 +412,16 @@ static void prepare_get_rx_response_success(struct acmp *acmp,
memset(reply->stream_dest_mac, 0, sizeof(reply->stream_dest_mac));
reply->talker_guid = htobe64(stream_talker_entity_id(stream));
reply->talker_unique_id = htons(stream_talker_unique_id(stream));
reply->connection_count = htons(1);
reply->flags |= htons(AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED
| AVB_ACMP_FLAG_STREAMING_WAIT);
reply->connection_count = htons(bound ? 1 : 0);
flags = ntohs(reply->flags);
if (bound)
flags |= AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED
| AVB_ACMP_FLAG_STREAMING_WAIT;
else
flags &= ~(AVB_ACMP_FLAG_SRP_REGISTRATION_FAILED
| AVB_ACMP_FLAG_STREAMING_WAIT);
reply->flags = htons(flags);
}
static bool bindings_match_message_talker(struct acmp *acmp,