diff options
author | Marcin Miklas <marcin.miklas@harman.com> | 2015-12-08 10:40:03 +0100 |
---|---|---|
committer | Marcin Miklas <marcin.miklas@harman.com> | 2015-12-09 11:17:55 +0100 |
commit | 6f2aad1fc8976af7a1300d57b26fa13d7dbd9e64 (patch) | |
tree | 7aa917eafe83923a235c228ab17a447d4c9b4a3b | |
parent | 01d4ac52885e18bc3f6c37ef5a0e583186b02d17 (diff) | |
download | Open-AVB-6f2aad1fc8976af7a1300d57b26fa13d7dbd9e64.tar.gz |
New: VLAN ID can be configured for no endpoint builds.
Details: You can specify VLAN Identifier in talker ini file.
Syntax is vlan_id = 5; Default value is 2 for both class A and class B streams.
-rw-r--r-- | lib/avtp_pipeline/platform/Linux/tl/openavb_tl_osal.c | 12 | ||||
-rw-r--r-- | lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c | 6 | ||||
-rwxr-xr-x | lib/avtp_pipeline/tl/openavb_tl.c | 1 | ||||
-rwxr-xr-x | lib/avtp_pipeline/tl/openavb_tl_pub.h | 5 |
4 files changed, 22 insertions, 2 deletions
diff --git a/lib/avtp_pipeline/platform/Linux/tl/openavb_tl_osal.c b/lib/avtp_pipeline/platform/Linux/tl/openavb_tl_osal.c index 44d5b1c4..d6ca4264 100644 --- a/lib/avtp_pipeline/platform/Linux/tl/openavb_tl_osal.c +++ b/lib/avtp_pipeline/platform/Linux/tl/openavb_tl_osal.c @@ -303,6 +303,18 @@ static int openavbTLCfgCallback(void *user, const char *tlSection, const char *n valOK = TRUE; } } + else if (MATCH(name, "vlan_id")) { + errno = 0; + long tmp; + tmp = strtol(value, &pEnd, 0); + // vlanID is 12 bit field + if (*pEnd == '\0' && errno == 0 + && tmp >= 0x0 + && tmp <= 0xFFF) { + pCfg->vlan_id = tmp; + valOK = TRUE; + } + } else if (MATCH(name, "map_lib")) { if (pTLState->mapLib.libName) diff --git a/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c b/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c index 5d1aec64..d7e08225 100644 --- a/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c +++ b/lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c @@ -74,12 +74,14 @@ bool openavbTLRunTalkerInit(tl_state_t *pTLState) pTalkerData->streamID.uniqueID = pCfg->stream_uid;
if (pCfg->sr_class == SR_CLASS_A) {
pTalkerData->classRate = 8000;
- pTalkerData->vlanID = SR_CLASS_A_DEFAULT_VID;
+ pTalkerData->vlanID = pCfg->vlan_id == VLAN_NULL ?
+ SR_CLASS_A_DEFAULT_VID : pCfg->vlan_id;
pTalkerData->vlanPCP = SR_CLASS_A_DEFAULT_PRIORITY;
}
else if (pCfg->sr_class == SR_CLASS_B) {
pTalkerData->classRate = 4000;
- pTalkerData->vlanID = SR_CLASS_B_DEFAULT_VID;
+ pTalkerData->vlanID = pCfg->vlan_id == VLAN_NULL ?
+ SR_CLASS_B_DEFAULT_VID : pCfg->vlan_id;
pTalkerData->vlanPCP = SR_CLASS_B_DEFAULT_PRIORITY;
}
memcpy(&pTalkerData->destAddr, &pCfg->dest_addr.mac->ether_addr_octet, ETH_ALEN);
diff --git a/lib/avtp_pipeline/tl/openavb_tl.c b/lib/avtp_pipeline/tl/openavb_tl.c index f22191a9..eb9ee145 100755 --- a/lib/avtp_pipeline/tl/openavb_tl.c +++ b/lib/avtp_pipeline/tl/openavb_tl.c @@ -395,6 +395,7 @@ EXTERN_DLL_EXPORT void openavbTLInitCfg(openavb_tl_cfg_t *pCfg) pCfg->rx_signal_mode = 1;
pCfg->pMapInitFn = NULL;
pCfg->pIntfInitFn = NULL;
+ pCfg->vlan_id = VLAN_NULL;
AVB_TRACE_EXIT(AVB_TRACE_TL);
}
diff --git a/lib/avtp_pipeline/tl/openavb_tl_pub.h b/lib/avtp_pipeline/tl/openavb_tl_pub.h index 58b59dfd..6e46494b 100755 --- a/lib/avtp_pipeline/tl/openavb_tl_pub.h +++ b/lib/avtp_pipeline/tl/openavb_tl_pub.h @@ -75,6 +75,9 @@ typedef enum { /// Maximum size of interface name #define IFNAMSIZE 16 +/// Indicatates that VLAN ID is not set in configuration +#define VLAN_NULL UINT16_MAX + /// Structure containing configuration of the host typedef struct { /// Role of the host @@ -122,6 +125,8 @@ typedef struct { bool tx_blocking_in_intf; /// Network interface name. Not used on all platforms. char ifname[IFNAMSIZE]; + /// VLAN ID + U16 vlan_id; /// When set incoming packets will trigger a signal to the stream task to wakeup. bool rx_signal_mode; |