summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Miklas <marcin.miklas@harman.com>2015-12-08 10:40:03 +0100
committerMarcin Miklas <marcin.miklas@harman.com>2015-12-09 11:17:55 +0100
commit6f2aad1fc8976af7a1300d57b26fa13d7dbd9e64 (patch)
tree7aa917eafe83923a235c228ab17a447d4c9b4a3b
parent01d4ac52885e18bc3f6c37ef5a0e583186b02d17 (diff)
downloadOpen-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.c12
-rw-r--r--lib/avtp_pipeline/tl/openavb_talker_no_endpoint.c6
-rwxr-xr-xlib/avtp_pipeline/tl/openavb_tl.c1
-rwxr-xr-xlib/avtp_pipeline/tl/openavb_tl_pub.h5
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;