diff options
author | Brant Thomsen <brant.thomsen@harman.com> | 2017-07-19 13:40:21 -0600 |
---|---|---|
committer | Brant Thomsen <brant.thomsen@harman.com> | 2017-07-19 13:40:21 -0600 |
commit | 238bda5ea30853fed984841d6e4ba9b75db91993 (patch) | |
tree | 2d61d82e11bd8840d49e44f48b4313e2bc348640 | |
parent | 89f3cee84a75a83ceebed1ac6eb366c4a0e86995 (diff) | |
download | Open-AVB-238bda5ea30853fed984841d6e4ba9b75db91993.tar.gz |
Stream class specified by AVDECC
AVDECC can overwrite the stream class specified by the original settings.
This causes the Talker/Listener and Endpoint to use the stream class specified
by the AVDECC controller, and AVDECC to report the current stream class being
used.
11 files changed, 41 insertions, 17 deletions
diff --git a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg.h b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg.h index 78c4f38e..135efc45 100644 --- a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg.h +++ b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg.h @@ -109,6 +109,7 @@ typedef struct { } openavbAvdeccMsgParams_ClientInitIdentify_t; typedef struct { + U8 sr_class; // SR_CLASS_A or SR_CLASS_B U8 stream_src_mac[6]; // MAC Address for the Talker U16 stream_uid; // Stream ID value U8 stream_dest_mac[6]; // Multicast address for the stream @@ -127,6 +128,7 @@ typedef struct { } openavbAvdeccMsgParams_VersionCallback_t; typedef struct { + U8 sr_class; // SR_CLASS_A or SR_CLASS_B U8 stream_src_mac[6]; // MAC Address for the Talker U16 stream_uid; // Stream ID value U8 stream_dest_mac[6]; // Multicast address for the stream @@ -172,12 +174,12 @@ bool openavbAvdeccMsgClntInitIdentify(int avdeccMsgHandle, const char * friendly bool openavbAvdeccMsgSrvrHndlInitIdentifyFromClient(int avdeccMsgHandle, char * friendly_name, U8 talker); // Client notify the server of the stream values for the Talker to use. -bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); -bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); +bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); +bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); // Server notify the client of the stream values for the Listener to use. -bool openavbAvdeccMsgSrvrListenerStreamID(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); -bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); +bool openavbAvdeccMsgSrvrListenerStreamID(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); +bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id); // Server state change requests, and client notifications of state changes. bool openavbAvdeccMsgSrvrChangeRequest(int avdeccMsgHandle, openavbAvdeccMsgStateType_t desiredState); diff --git a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_client.c b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_client.c index f2addd41..5e1c76cd 100644 --- a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_client.c +++ b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_client.c @@ -86,7 +86,7 @@ static bool openavbAvdeccMsgClntReceiveFromServer(int avdeccMsgHandle, openavbAv case OPENAVB_AVDECC_MSG_LISTENER_STREAM_ID: AVB_LOG_DEBUG("Message received: OPENAVB_AVDECC_MSG_LISTENER_STREAM_ID"); openavbAvdeccMsgClntHndlListenerStreamIDFromServer(avdeccMsgHandle, - msg->params.listenerStreamID.stream_src_mac, ntohs(msg->params.listenerStreamID.stream_uid), + msg->params.listenerStreamID.sr_class, msg->params.listenerStreamID.stream_src_mac, ntohs(msg->params.listenerStreamID.stream_uid), msg->params.listenerStreamID.stream_dest_mac, ntohs(msg->params.listenerStreamID.stream_vlan_id)); break; case OPENAVB_AVDECC_MSG_CLIENT_CHANGE_REQUEST: @@ -162,7 +162,7 @@ bool openavbAvdeccMsgClntInitIdentify(int avdeccMsgHandle, const char * friendly return ret; } -bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) +bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) { AVB_TRACE_ENTRY(AVB_TRACE_AVDECC_MSG); openavbAvdeccMessage_t msgBuf; @@ -191,6 +191,7 @@ bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, const U8 stream_src msgBuf.type = OPENAVB_AVDECC_MSG_TALKER_STREAM_ID; openavbAvdeccMsgParams_TalkerStreamID_t * pParams = &(msgBuf.params.talkerStreamID); + pParams->sr_class = sr_class; memcpy(pParams->stream_src_mac, stream_src_mac, 6); pParams->stream_uid = htons(stream_uid); memcpy(pParams->stream_dest_mac, stream_dest_mac, 6); @@ -201,7 +202,7 @@ bool openavbAvdeccMsgClntTalkerStreamID(int avdeccMsgHandle, const U8 stream_src return ret; } -bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) +bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) { AVB_TRACE_ENTRY(AVB_TRACE_AVDECC_MSG); @@ -220,10 +221,11 @@ bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, con // Determine if the supplied information differs from the current settings. openavb_tl_cfg_t * pCfg = &(pState->pTLState->cfg); - if (memcmp(pCfg->stream_addr.buffer.ether_addr_octet, stream_src_mac, 6) != 0 || - pCfg->stream_uid != stream_uid || - memcmp(pCfg->dest_addr.buffer.ether_addr_octet, stream_dest_mac, 6) != 0 || - pCfg->vlan_id != stream_vlan_id) { + if (pCfg->sr_class != sr_class || + memcmp(pCfg->stream_addr.buffer.ether_addr_octet, stream_src_mac, 6) != 0 || + pCfg->stream_uid != stream_uid || + memcmp(pCfg->dest_addr.buffer.ether_addr_octet, stream_dest_mac, 6) != 0 || + pCfg->vlan_id != stream_vlan_id) { // If the Listener is running, stop the Listener before updating the information. if (pState->pTLState->bRunning) { AVB_LOG_DEBUG("Forcing Listener to Stop to change streaming settings"); @@ -231,6 +233,7 @@ bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, con } // Update the stream information supplied by the server. + pCfg->sr_class = sr_class; memcpy(pCfg->stream_addr.buffer.ether_addr_octet, stream_src_mac, 6); pCfg->stream_addr.mac = &(pCfg->stream_addr.buffer); // Indicate that the MAC Address is valid. pCfg->stream_uid = stream_uid; @@ -239,6 +242,7 @@ bool openavbAvdeccMsgClntHndlListenerStreamIDFromServer(int avdeccMsgHandle, con pCfg->vlan_id = stream_vlan_id; } + AVB_LOGF_DEBUG("AVDECC-supplied sr_class: %u", pCfg->sr_class); AVB_LOGF_DEBUG("AVDECC-supplied stream_id: " ETH_FORMAT "/%u", ETH_OCTETS(pCfg->stream_addr.buffer.ether_addr_octet), pCfg->stream_uid); AVB_LOGF_DEBUG("AVDECC-supplied dest_addr: " ETH_FORMAT, @@ -413,7 +417,7 @@ void openavbAvdeccMsgRunTalker(avdecc_msg_state_t *pState) // Let the AVDECC Msg server know our stream ID. if (!openavbAvdeccMsgClntTalkerStreamID(pState->avdeccMsgHandle, - cfg->stream_addr.buffer.ether_addr_octet, cfg->stream_uid, + cfg->sr_class, cfg->stream_addr.buffer.ether_addr_octet, cfg->stream_uid, cfg->dest_addr.buffer.ether_addr_octet, cfg->vlan_id)) { AVB_LOG_ERROR("openavbAvdeccMsgClntTalkerStreamID() failed"); AVB_TRACE_EXIT(AVB_TRACE_AVDECC_MSG); diff --git a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_server.c b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_server.c index 3afcfc3d..fa1cd73c 100644 --- a/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_server.c +++ b/lib/avtp_pipeline/avdecc_msg/openavb_avdecc_msg_server.c @@ -99,6 +99,7 @@ static bool openavbAvdeccMsgSrvrReceiveFromClient(int avdeccMsgHandle, openavbAv case OPENAVB_AVDECC_MSG_TALKER_STREAM_ID: AVB_LOG_DEBUG("Message received: OPENAVB_AVDECC_MSG_TALKER_STREAM_ID"); ret = openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(avdeccMsgHandle, + msg->params.talkerStreamID.sr_class, msg->params.talkerStreamID.stream_src_mac, ntohs(msg->params.talkerStreamID.stream_uid), msg->params.talkerStreamID.stream_dest_mac, @@ -208,7 +209,7 @@ bool openavbAvdeccMsgSrvrHndlInitIdentifyFromClient(int avdeccMsgHandle, char * return true; } -bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) +bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) { AVB_TRACE_ENTRY(AVB_TRACE_AVDECC_MSG); @@ -227,12 +228,14 @@ bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, const } // Update the stream information supplied by the client. + pCfg->sr_class = sr_class; memcpy(pCfg->stream_addr.buffer.ether_addr_octet, stream_src_mac, 6); pCfg->stream_addr.mac = &(pCfg->stream_addr.buffer); // Indicate that the MAC Address is valid. pCfg->stream_uid = stream_uid; memcpy(pCfg->dest_addr.buffer.ether_addr_octet, stream_dest_mac, 6); pCfg->dest_addr.mac = &(pCfg->dest_addr.buffer); // Indicate that the MAC Address is valid. pCfg->vlan_id = stream_vlan_id; + AVB_LOGF_DEBUG("Talker-supplied sr_class: %u", pCfg->sr_class); AVB_LOGF_DEBUG("Talker-supplied stream_id: " ETH_FORMAT "/%u", ETH_OCTETS(pCfg->stream_addr.buffer.ether_addr_octet), pCfg->stream_uid); AVB_LOGF_DEBUG("Talker-supplied dest_addr: " ETH_FORMAT, @@ -246,7 +249,7 @@ bool openavbAvdeccMsgSrvrHndlTalkerStreamIDFromClient(int avdeccMsgHandle, const return true; } -bool openavbAvdeccMsgSrvrListenerStreamID(int avdeccMsgHandle, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) +bool openavbAvdeccMsgSrvrListenerStreamID(int avdeccMsgHandle, U8 sr_class, const U8 stream_src_mac[6], U16 stream_uid, const U8 stream_dest_mac[6], U16 stream_vlan_id) { AVB_TRACE_ENTRY(AVB_TRACE_AVDECC_MSG); openavbAvdeccMessage_t msgBuf; @@ -262,6 +265,7 @@ bool openavbAvdeccMsgSrvrListenerStreamID(int avdeccMsgHandle, const U8 stream_s msgBuf.type = OPENAVB_AVDECC_MSG_LISTENER_STREAM_ID; openavbAvdeccMsgParams_ListenerStreamID_t * pParams = &(msgBuf.params.listenerStreamID); + pParams->sr_class = sr_class; memcpy(pParams->stream_src_mac, stream_src_mac, 6); pParams->stream_uid = htons(stream_uid); memcpy(pParams->stream_dest_mac, stream_dest_mac, 6); diff --git a/lib/avtp_pipeline/endpoint/openavb_endpoint.c b/lib/avtp_pipeline/endpoint/openavb_endpoint.c index 0238487d..30d8114a 100644 --- a/lib/avtp_pipeline/endpoint/openavb_endpoint.c +++ b/lib/avtp_pipeline/endpoint/openavb_endpoint.c @@ -354,6 +354,7 @@ openavbRC strmAttachCb(void* pv, x_cfg.ifname, ps->destAddr, lsnrDecl, + ps->srClass, ps->classRate, ps->vlanID, ps->priority, diff --git a/lib/avtp_pipeline/endpoint/openavb_endpoint.h b/lib/avtp_pipeline/endpoint/openavb_endpoint.h index 9e6708ae..cf7af178 100644 --- a/lib/avtp_pipeline/endpoint/openavb_endpoint.h +++ b/lib/avtp_pipeline/endpoint/openavb_endpoint.h @@ -99,6 +99,7 @@ typedef struct { char ifname[IFNAMSIZ + 10]; // Include space for the socket type prefix (e.g. "simple:eth0") U8 destAddr[ETH_ALEN]; openavbSrpLsnrDeclSubtype_t lsnrDecl; + U8 srClass; U32 classRate; U16 vlanID; U8 priority; @@ -241,6 +242,7 @@ void openavbEptSrvrNotifyTlkrOfSrpCb(int h, char *ifname, U8 destAddr[], openavbSrpLsnrDeclSubtype_t lsnrDecl, + U8 srClass, U32 classRate, U16 vlanID, U8 priority, @@ -250,6 +252,7 @@ void openavbEptClntNotifyTlkrOfSrpCb(int h, char *ifname, U8 destAddr[], openavbSrpLsnrDeclSubtype_t lsnrDecl, + U8 srClass, U32 classRate, U16 vlanID, U8 priority, diff --git a/lib/avtp_pipeline/endpoint/openavb_endpoint_client.c b/lib/avtp_pipeline/endpoint/openavb_endpoint_client.c index 14b54497..4d2b64cf 100644 --- a/lib/avtp_pipeline/endpoint/openavb_endpoint_client.c +++ b/lib/avtp_pipeline/endpoint/openavb_endpoint_client.c @@ -81,13 +81,14 @@ static bool openavbEptClntReceiveFromServer(int h, openavbEndpointMessage_t *msg msg->params.talkerCallback.ifname, msg->params.talkerCallback.destAddr, msg->params.talkerCallback.lsnrDecl, + msg->params.talkerCallback.srClass, msg->params.talkerCallback.classRate, msg->params.talkerCallback.vlanID, msg->params.talkerCallback.priority, msg->params.talkerCallback.fwmark); break; case OPENAVB_ENDPOINT_LISTENER_CALLBACK: - openavbEptClntNotifyLstnrOfSrpCb(h, + openavbEptClntNotifyLstnrOfSrpCb(h, &msg->streamID, msg->params.listenerCallback.ifname, msg->params.listenerCallback.destAddr, diff --git a/lib/avtp_pipeline/endpoint/openavb_endpoint_server.c b/lib/avtp_pipeline/endpoint/openavb_endpoint_server.c index 7736184c..ae2cf8fb 100644 --- a/lib/avtp_pipeline/endpoint/openavb_endpoint_server.c +++ b/lib/avtp_pipeline/endpoint/openavb_endpoint_server.c @@ -119,6 +119,7 @@ void openavbEptSrvrNotifyTlkrOfSrpCb(int h, char *ifname, U8 destAddr[ETH_ALEN], openavbSrpLsnrDeclSubtype_t lsnrDecl, + U8 srClass, U32 classRate, U16 vlanID, U8 priority, @@ -139,6 +140,7 @@ void openavbEptSrvrNotifyTlkrOfSrpCb(int h, strncpy(msgBuf.params.talkerCallback.ifname, ifname, IFNAMSIZ - 1); memcpy(msgBuf.params.talkerCallback.destAddr, destAddr, ETH_ALEN); msgBuf.params.talkerCallback.lsnrDecl = lsnrDecl; + msgBuf.params.talkerCallback.srClass = srClass; msgBuf.params.talkerCallback.classRate = classRate; msgBuf.params.talkerCallback.vlanID = vlanID; msgBuf.params.talkerCallback.priority = priority; diff --git a/lib/avtp_pipeline/platform/Linux/avdecc/openavb_avdecc_pipeline_interaction.c b/lib/avtp_pipeline/platform/Linux/avdecc/openavb_avdecc_pipeline_interaction.c index 5ff27285..be38cf67 100644 --- a/lib/avtp_pipeline/platform/Linux/avdecc/openavb_avdecc_pipeline_interaction.c +++ b/lib/avtp_pipeline/platform/Linux/avdecc/openavb_avdecc_pipeline_interaction.c @@ -67,6 +67,7 @@ bool openavbAVDECCRunListener(openavb_aem_descriptor_stream_io_t *pDescriptorStr // Send the Stream ID to the client.
// The client will stop a running Listener if the settings differ from its current values.
if (!openavbAvdeccMsgSrvrListenerStreamID(pDescriptorStreamInput->stream->client->avdeccMsgHandle,
+ ((pListenerStreamInfo->flags & OPENAVB_ACMP_FLAG_CLASS_B) != 0 ? SR_CLASS_B : SR_CLASS_A),
pListenerStreamInfo->stream_id, /* The first 6 bytes of the steam_id are the source MAC Address */
(((U16) pListenerStreamInfo->stream_id[6]) << 8 | (U16) pListenerStreamInfo->stream_id[7]),
pListenerStreamInfo->stream_dest_mac,
diff --git a/lib/avtp_pipeline/tl/openavb_talker.h b/lib/avtp_pipeline/tl/openavb_talker.h index b886c363..0bdcf1ea 100644 --- a/lib/avtp_pipeline/tl/openavb_talker.h +++ b/lib/avtp_pipeline/tl/openavb_talker.h @@ -44,6 +44,7 @@ typedef struct { AVBStreamID_t streamID; U8 destAddr[ETH_ALEN]; AVBTSpec_t tSpec; + U8 srClass; U32 classRate; U32 fwmark; U16 vlanID; diff --git a/lib/avtp_pipeline/tl/openavb_talker_endpoint.c b/lib/avtp_pipeline/tl/openavb_talker_endpoint.c index b20c5188..24262665 100644 --- a/lib/avtp_pipeline/tl/openavb_talker_endpoint.c +++ b/lib/avtp_pipeline/tl/openavb_talker_endpoint.c @@ -58,6 +58,7 @@ void openavbEptClntNotifyTlkrOfSrpCb(int endpointHandle, char *ifname, U8 destAddr[], openavbSrpLsnrDeclSubtype_t lsnrDecl, + U8 srClass, U32 classRate, U16 vlanID, U8 priority, @@ -95,6 +96,7 @@ void openavbEptClntNotifyTlkrOfSrpCb(int endpointHandle, } memcpy(&pTalkerData->streamID, streamID, sizeof(AVBStreamID_t)); memcpy(&pTalkerData->destAddr, destAddr, ETH_ALEN); + pTalkerData->srClass = srClass; pTalkerData->classRate = classRate; pTalkerData->vlanID = vlanID; pTalkerData->vlanPCP = priority; @@ -113,6 +115,7 @@ void openavbEptClntNotifyTlkrOfSrpCb(int endpointHandle, } memcpy(&pTalkerData->streamID, streamID, sizeof(AVBStreamID_t)); memcpy(&pTalkerData->destAddr, destAddr, ETH_ALEN); + pTalkerData->srClass = srClass; pTalkerData->classRate = classRate; pTalkerData->vlanID = vlanID; pTalkerData->vlanPCP = priority; @@ -131,7 +134,7 @@ void openavbEptClntNotifyTlkrOfSrpCb(int endpointHandle, // Let the AVDECC Msg server know our current stream ID, in case it was updated by MAAP. if (pTLState->avdeccMsgHandle != AVB_AVDECC_MSG_HANDLE_INVALID) { if (!openavbAvdeccMsgClntTalkerStreamID(pTLState->avdeccMsgHandle, - pTalkerData->streamID.addr, pTalkerData->streamID.uniqueID, + pTalkerData->srClass, pTalkerData->streamID.addr, pTalkerData->streamID.uniqueID, pTalkerData->destAddr, pTalkerData->vlanID)) { AVB_LOG_ERROR("openavbAvdeccMsgClntTalkerStreamID() failed"); } diff --git a/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c b/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c index 4a4768a8..2e9a29d7 100644 --- a/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c +++ b/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c @@ -74,6 +74,7 @@ bool openavbTLRunTalkerInit(tl_state_t *pTLState) } pTalkerData->streamID.uniqueID = pCfg->stream_uid; + pTalkerData->srClass = pCfg->sr_class; if (pCfg->sr_class == SR_CLASS_A) { pTalkerData->classRate = 8000; pTalkerData->vlanID = pCfg->vlan_id == VLAN_NULL ? @@ -132,7 +133,7 @@ bool openavbTLRunTalkerInit(tl_state_t *pTLState) // Let the AVDECC Msg server know our current stream ID, in case it is waiting for an update. if (pTLState->avdeccMsgHandle != AVB_AVDECC_MSG_HANDLE_INVALID) { if (!openavbAvdeccMsgClntTalkerStreamID(pTLState->avdeccMsgHandle, - pTalkerData->streamID.addr, pTalkerData->streamID.uniqueID, + pTalkerData->srClass, pTalkerData->streamID.addr, pTalkerData->streamID.uniqueID, pTalkerData->destAddr, pTalkerData->vlanID)) { AVB_LOG_ERROR("openavbAvdeccMsgClntTalkerStreamID() failed"); } @@ -153,6 +154,7 @@ AVBStreamID_t *streamID, char *ifname, U8 destAddr[], openavbSrpLsnrDeclSubtype_t lsnrDecl, +U8 srClass, U32 classRate, U16 vlanID, U8 priority, |