From 30711940c416bcab77ac7a33b54984e367d936b2 Mon Sep 17 00:00:00 2001 From: hackerman-kl Date: Sun, 26 Apr 2026 21:04:26 +0200 Subject: [PATCH] milan-avb: aecp: route VENDOR_UNIQUE_COMMAND through msg_info table --- src/modules/module-avb/aecp.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/modules/module-avb/aecp.c b/src/modules/module-avb/aecp.c index fbe1afab2..4c5077708 100644 --- a/src/modules/module-avb/aecp.c +++ b/src/modules/module-avb/aecp.c @@ -38,6 +38,24 @@ static int reply_not_implemented(struct aecp *aecp, const void *p, int len) return avb_server_send_packet(server, h->src, AVB_TSN_ETH, buf, len); } +/* Milan v1.2 Section 5.4.3 / Section 5.4.4 VENDOR_UNIQUE_COMMAND dispatcher. */ +static int handle_vendor_unique_command(struct aecp *aecp, + const void *m, int len) +{ + struct server *server = aecp->server; + int rc; + + if (server->avb_mode != AVB_MODE_MILAN_V12) + return reply_not_implemented(aecp, m, len); + + rc = aecp_vendor_unique_milan_v12_handle_command(aecp, m, len); + if (rc < 0) + return rc; + if (rc == 0) + return reply_not_implemented(aecp, m, len); + return 0; +} + static const struct msg_info msg_info[] = { { AVB_AECP_MESSAGE_TYPE_AEM_COMMAND, "aem-command", avb_aecp_aem_handle_command, }, { AVB_AECP_MESSAGE_TYPE_AEM_RESPONSE, "aem-response", avb_aecp_aem_handle_response, }, @@ -45,7 +63,7 @@ static const struct msg_info msg_info[] = { { AVB_AECP_MESSAGE_TYPE_ADDRESS_ACCESS_RESPONSE, "address-access-response", NULL, }, { AVB_AECP_MESSAGE_TYPE_AVC_COMMAND, "avc-command", NULL, }, { AVB_AECP_MESSAGE_TYPE_AVC_RESPONSE, "avc-response", NULL, }, - { AVB_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_COMMAND, "vendor-unique-command", NULL, }, + { AVB_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_COMMAND, "vendor-unique-command", handle_vendor_unique_command, }, { AVB_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_RESPONSE, "vendor-unique-response", NULL, }, { AVB_AECP_MESSAGE_TYPE_EXTENDED_COMMAND, "extended-command", NULL, }, { AVB_AECP_MESSAGE_TYPE_EXTENDED_RESPONSE, "extended-response", NULL, }, @@ -84,18 +102,6 @@ static int aecp_message(void *data, uint64_t now, const void *message, int len) message_type = AVB_PACKET_AECP_GET_MESSAGE_TYPE(p); - /* Milan v1.2 Section 5.4.4: AECP VENDOR_UNIQUE_COMMAND with the Milan MVU - * protocol_id is dispatched separately. The handler returns 1 if it - * recognised the protocol_id (sent a response or NOT_IMPLEMENTED for - * the specific MVU command); 0 means "not Milan MVU, fall through". */ - if (message_type == AVB_AECP_MESSAGE_TYPE_VENDOR_UNIQUE_COMMAND && - server->avb_mode == AVB_MODE_MILAN_V12) { - int rc = aecp_vendor_unique_milan_v12_handle_command(aecp, - message, len); - if (rc != 0) - return rc < 0 ? rc : 0; - } - info = find_msg_info(message_type, NULL); if (info == NULL) return reply_not_implemented(aecp, message, len);