avnu / openavnu Goto Github PK
View Code? Open in Web Editor NEWOpenAvnu - an Avnu sponsored repository for Time Sensitive Network (TSN and AVB) technology
OpenAvnu - an Avnu sponsored repository for Time Sensitive Network (TSN and AVB) technology
At the beginning of the igb_clean() method, there is an if condition inside the for loop which returns in case the first queue available descriptor is equal to adapter->num_tx_desc. This causes a problem if we use only class B traffic (and not class A traffic). In this case, we never managed to clean up the class B descriptors since this function returns immediately.
for (i = 0; i < adapter->num_queues; i++) {
txr = &adapter->tx_rings[i];
if (txr->tx_avail == adapter->num_tx_desc) {
txr->queue_status = IGB_QUEUE_IDLE;
return;
}
...
Instead of this "if (0 != memcmp(test_stream_id, stream_id, sizeof(STREAM_ID_SIZE))) " It should just be "if (0 != memcmp(test_stream_id, stream_id, STREAM_ID_SIZE ))" .
You have already defined STREAM_ID_SIZE to be 8.
When we have multiple talkers and multiple listeners this will simply fail.
Issue reproduced and resolution available, awaiting internal validation to complete prior to release. Target is week of 16-August.
Hi,
Curently i am studying ethernet AVB protocols and i am trying to implement the open AVB stack in my PC, this open AVB stack comprises of daemons, Kmod, lib etc.Please clarify the following doubts
PS: I am new to this field, please provide the answers for the above queries. Thanks in advance
Regards,
Shiek Mohammed
call to LinuxSharedMemoryIPC::init() fails if group 'ptp' does not exist.
grp = getgrnam( group_name );
if( grp == NULL ) {
XPTPD_ERROR( "Group %s not found", group_name );
goto exit_error;
}
Daemon appears to start and run, but shared memory segment fails to be created and clients (like simple_talker) will segfault trying to open and use the reference.
Hi Andrew,
I read the document that you advise me but it doesn´t say how the listener and talker interact with the mrp and gptp daemons(applications).
In a first approach I tried a simple virtual switch to connect the listener and the talker(with wireshark monitoring). The point is to put all running in the same machine for simulation purprose(prove of concept) .Is that possible?
But the talker didn´t work(asked root permissions but it had all permissions), the gptp returned an error(probably it was a problem of usage).
As you see I have just get started on this platform. Could you help me? Is there any specs about this entities?
Many thanks and all the best.
Ricardo Sousa
Add the generated files that are not pushed to git to .gitignore file. Add also build directory, which is created by travis.sh script
Hi,
While going through the gPTP daemon we didnot find a single instance about how the "system time regsiters" of MAC(PTP Domain) are getting updated depending on the offsets calculated in the daemon.
Nor any of the functions in "igb_ptp.c" like igb_ptp_adjtime are being called.
So our main query is how these registers are getting updated based on the FreqOffset and MasterTimeOffset.
Regards,
Sumeet Jain
Gstreamer-avb-plugins
LDFLAGS='-L/Open-AVB-master/lib/igb' CPPFLAGS='-I/Open-AVB-master/lib/igb' LIBS='-ligb -lpci -lrt -lpthread -lm -lgstapp-1.0' ./configure
displays error
"checking for gcc... gcc
checking whether the C compiler works... no
configure: error: C compiler cannot create executables
./configure seems to work fine without LDFLAGS
I would like to remove branch open-avb-1.0.
I assume no-one is actually using it right now?
I'll give folks one week to voice objections.
Hi,
We have "i210" on both the PC(One of them working as Talker and Other as Listener). Now when we run the daemon on listener side, we came across the fact that not a single time "igb_ptp_adjtime_i210" is being called.
"igb_ptp_init.c" is initializing the PTP clock registers(System Time Registers) using gettimeofday API. And hence I deduce that it should have called "igb_ptp_adjtime_i210" atleast once given both the PTP clocks working at the same frequency.
Or is it like some other implemention has been done in the daemon that is eluding our attention ?.
Regards,
Sumeet Jain
When we run gPTP for an extended period and use system time to "deduce" PTP time, we are running in to issues about 10 times in a 12 hours run where there is a discontinuity (about 60 usec).
So far we have tracked the issue down to daemons/gptp/common/ptp_message.cpp.
In function PTPMessageFollowUp:;processMessage()
https://github.com/AVnu/Open-AVB/blob/open-avb-next/daemons/gptp/common/ptp_message.cpp#L864
it seems like the mapping calculations do not always work correctly.
Hello,
I am currently trying to understand credit based shaper algorithm. but I don't understand how to calculate hi credit. low credit , send slop and ideal slop values?
Can anybody provide some equation to calculate these values?
Hi,
I am new to the AVB development platform and require help regarding Compiling the open source code.
Can you please tell me what are the basic tools and software needed to compile the open source code on Ubantu and what are the basic steps to compile different kernel provided in open source,please let me know which source cod should i download from Github and start simple talker and listener program .
Regards
In msrp.c, the logic to detect when a frame is "too full" is not correct. Crashes (segmentation faults) have been observed when many attributes are declared. The problem is that the conditional used in the while() loop to encode attributes is incorrect. This definitely applies to msrp_emit_XXXXX() functions. It may also apply to equivalent mvrp and mmrp functions.
Hi!
I have a question concerning the mrpd and StreamIDs. I encountered the following strange behaviour:
When I declare two streams with consecutive StreamIDs the second stream gets the same parameters as the first one no matter what I declare.
Example:
I send using a modified mrpctl the following Commands:
"S++:S=FFEEDDCCBBAA9987,A=112233445568,V=0005,Z=1000,I=2,P=96,L=1000"
"S++:S=FFEEDDCCBBAA9988,A=112233445567,V=0005,Z=576,I=3,P=64,L=1000"
Resulting Stream Reservation in the Switch is:
Stream Id Destination Port Dec Vid Cls/Rn BW
----------------------- ----------------- ---- ---- ---- ------ ---------
ff:ee:dd:cc:bb:aa:99:87 11:22:33:44:55:68 2 Adv 5 A/0 133.504 Mb
ff:ee:dd:cc:bb:aa:99:88 11:22:33:44:55:69 2 Adv 5 A/0 133.504 Mb
So you see the Packets, PacketsPerIntervall and the traffic class is completely ignored. The destination MAC is increased by one (in the declaration it's one less).
Okay, so to find the source I started Wireshark. And saw the following MSRP Packet:
Message: Talker Advertise (1)
Attribute Type: Talker Advertise (1)
Attribute Length: 25
Attribute List Length: 30
Attribute List
Vector Attribute
Vector Header: 0x0002, Leave All Event: Null
000. .... .... .... = Leave All Event: Null (0)
...0 0000 0000 0010 = Number of Values: 2
First Value
Stream ID: 0xffeeddccbbaa9987
Stream DA: 11:22:33:44:55:68 (11:22:33:44:55:68)
VLAN ID: 0x0005
TSpec Max Frame Size: 1000
TSpec Max Frame Interval: 2
Priority and Rank: 0x60, Priority: Traffic Class A, Rank: Emergency, Reserved: Reserved-0
011. .... = Priority: Traffic Class A (3)
...0 .... = Rank: Emergency (0)
.... 0000 = Reserved: Reserved-0 (0)
Accumulated Latency: 1000
Attribute Event: New (0)
Attribute Event: New (0)
End Mark: 0x0000
So I guess it's part of MSRP that you can group Streams that are identical by setting this "Number of Values" to two.
But I defined different parameters for the two connections. So my question is: is it defined somewhere, that streams with consecutive IDs have identical parameters? Or is this a bug in mrpd?
Hie,
We are running talker and listener programs for streaming audio/video data. We are using Intel I210 ethernet AVB cards on both the sides. We are using AVB protocol stack downloaded from this github. When we establish a direct connection between the talker and listener we are able to get the expected Inter packet Gap(IPG) of 125usec but after deploying AVB ethernet switch the expected value gets disturbed and it shows around 900-1000usec.
What I am assuming is that the msrp module that we are running on talker side is failing to reserve the resources(bandwidth) along the talker-switch-listener path.
Is my assumption correct ? And if not what can be factors that are affecting IPG of packets received at listener side ?
Any help will be a great relief.
Regards,
Sumeet Jain
Hi all,
kudos to Intel and everyone who has contributed to this repository.
It's a pleasure to work with the driver and tools in here.
However, there's no fixed coding style and indentation is a mess throughout the repo.
I'm glad that someone has fixed trailing white space in a previous commit but there is still a potpourri of spaces and tabs for indentation.
Has anyone in charge an idea how to solve this? A commit containing only conversions to (spaces | tabs)? A reference to a style guide?
Best
Marc
Currently i am working on use case to create Open AVB demo for one of tour application on IVI(In Vehicle Interface).
Followings are my queries
Many Thanks
Anand
Hi Chris,
While building Open-AVB source, I got below errors, can you please point me how to proceed further.
Error:
root@rtp1-desktop:~/work/chiranjeevi/Open-AVB-master/daemons/gptp/linux/build# make
g++-4.4 -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/home/chris/headers/include/ -c ../src/linux_hal.cpp -o obj/linux_hal.o
../src/linux_hal.cpp:39: fatal error: pci/pci.h: No such file or directory
compilation terminated.
make: *** [obj/linux_hal.o] Error 1
Basically there is no header file pci/pci.h in open-AVB source.
Currently I am using 11.10 ubuntu version, and kernel version is 3.0.0-12-generic.
Should I include any external header files & should I upgrade my ubuntu with newer version ??Please help me out of this & I am eagerly waiting for your solution ....
Thanks
Chiranjeevi
gPTP should be marked as not capable (asCapable = false/NULL etc) when the neighbour delay is bigger than a threshold.
The default pdelay threshold for various hardware link types is specified in IEEE Std 802.1AS-Cor1-2013 Table 11-0 "Value of neighborPropDelayThresh for various links”, in clause 11.2.2. It needs to be configurable because a user may be using a converter to fibre and the software won’t know until the administrator changes it.
To whom it may concern,
There appears to be some missing header file(s) that Chris put as the "ALTERNATE_LINUX_INCPATH=/home/chris/headers/include/
Maybe there is a prerequisite that the README does not talk about???
I get this build error under Ubuntu 12.04 LTS:
jeff2@jeff2-ThinkCentre-M57p:~/Documents/OpenAVB/daemons/gptp/linux/build$ make
g++ -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/usr/src/linux-headers-3.8.0-37-generic/ -c ../../common/ptp_message.cpp -o obj/ptp_message.o
g++ -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/usr/src/linux-headers-3.8.0-37-generic/ -c ../../common/avbts_osnet.cpp -o obj/avbts_osnet.o
g++ -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/usr/src/linux-headers-3.8.0-37-generic/ -c ../../common/ieee1588port.cpp -o obj/ieee1588port.o
g++ -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/usr/src/linux-headers-3.8.0-37-generic/ -c ../../common/ieee1588clock.cpp -o obj/ieee1588clock.o
g++ -Wall -g -Wnon-virtual-dtor -I. -I../../common -I../src -I../../../../lib/igb/ -I/usr/src/linux-headers-3.8.0-37-generic/ -c ../src/linux_hal.cpp -o obj/linux_hal.o
In file included from ../src/linux_hal.cpp:34:0:
../src/linux_hal.hpp: In member function ‘int LinuxTimestamper::findPhcIndex(InterfaceLabel_)’:
../src/linux_hal.hpp:256:26: error: aggregate ‘LinuxTimestamper::findPhcIndex(InterfaceLabel_)::ethtool_ts_info info’ has incomplete type and cannot be defined
../src/linux_hal.hpp:272:14: error: ‘ETHTOOL_GET_TS_INFO’ was not declared in this scope
../src/linux_hal.hpp:284:2: warning: control reaches end of non-void function [-Wreturn-type]
make: *** [obj/linux_hal.o] Error 1
List all differences we have on gPTP against SW API best practices and keep them as close as possible.
Hello,
I am currently runnin gptp daemon. In that I could not find the calculation for coarse correction method. If there is drift between master and slave and if your talker is running as gptp slave, than we need to tune hardware registers. So can anybody point out me where all calculations are implemented in daemon?
In mrp.c, the applicant state machine sets each attribute's tx flag if that attribute should be transmitted. When msrp_txpdu() in msrp.c is run, an attribute's tx flag should be reset as the attribute is encoded in the PDU to be sent on the wire.
Hi,
I am currently trying to understand the source code of this project. But I couldn't understand this particular piece of codes, found in msrp_event() function in daemons/mrpd/msrp.c:
case MRP_EVENT_NEW:
mrp_registrar_fsm(&(attrib->registrar),
&(MSRP_db->mrp_db), MRP_EVENT_RNEW);
break;
Unless I missed something, I don't recall the official IEEE802.1Q-2011 document mentioning that a declaring-participant (a talker for example) must register the attribute that is being declared. This is contrary to what is implemented in this daemon; Every time there is a MRP_EVENT_NEW or MRP_EVENT_JOIN, the daemon will notify the registrar as if there is MRP_EVENT_RNEW or MRP_EVENT_RJOININ/MT, thus registering the attribute.
From what I understand, MRP_EVENT_RNEW and MRP_EVENT_RJOININ/MT events are only generated when the mrp participant receives an MRPDU containing New, JoinIn or JoinMt of the concerned attribute.
I hope somebody could enlighten me over this matter.
Thanks
compare_ether_addr() is removed since kernel v3.14. ether_addr_equal() is used instead, while it has an opposite polarity in return value.
https://lkml.org/lkml/2013/12/5/595
Build error is pasted here:
[ 59s] /home/abuild/rpmbuild/BUILD/openavb-20130814/kmod/igb/igb_main.c:2075:5: warning: initialization from incompatible pointer type [enabled by default]
[ 59s] .ndo_select_queue = igb_select_queue,
[ 59s] ^
[ 59s] /home/abuild/rpmbuild/BUILD/openavb-20130814/kmod/igb/igb_main.c:2075:5: warning: (near initialization for 'igb_netdev_ops.ndo_select_queue') [enabled by default]
[ 60s] /home/abuild/rpmbuild/BUILD/openavb-20130814/kmod/igb/igb_main.c: In function 'igb_del_mac_filter':
[ 60s] /home/abuild/rpmbuild/BUILD/openavb-20130814/kmod/igb/igb_main.c:9051:3: error: implicit declaration of function 'compare_ether_addr' [-Werror=implicit-function-declaration]
[ 60s] if (!compare_ether_addr(addr, adapter->mac_table[i].addr) &&
[ 60s] ^
Please make the kernel module work with the latest upstream kernel.
The gstreamer plugins in the example directory aren't currently being built, and require (as per their README) some manual steps to build. We should:
See
https://code.google.com/p/address-sanitizer/
this allows detection of many common memory issues.
May need to turn on clang building for best results.
Create unit test for gPTP
Hello,
I have been trying to set up two AVB Endpoints and have them connect to each other. For this I have two Linux computers with an Intel i210 Networkadapter. In compiled and installed the igb_avb network driver, the gptp daemon and the mrpd daemon on both machines. I also installed simple_talker on one and simple_listener on the other.
I connected the two machines directly to each other (no switch).
GPTP seems to work fine.
But when I run mrpd (sudo ./mrpd -mvs -i eth0)I get malformed MMRP-packets in wireshark. Strangely on either machine only the outgoing packets are labled as malformed.
When I ignored this and tried the simple_talker -> simple_listener setup I got a bunch of packets that only contained numbers (wireshark did not recognize a protocoll or anything. they were just numbers)
Does anyone have an idea what might be wrong? Or at least what to do to get some more usful information?
Max
Another fun MRP issue!
Background is that receipt of a JoinIn attribute event is causing the join timer to start which in turn causes a leaveAll to be sent which someone has observed to stop streams on an Extreme switch. Specifically mrpd sends a LVA for domain class A and in response to a later (250ms) domain class B JoinIn, sends another LVA that is "too close" to the class A LVA thereby causing class A reservation to no longer be defended.
Applicant state table (Table 10-3) does not show any state combinations for a rJoinIn! event that should cause the join timer to start (operPointToPointMAC is true).
msrp.c unconditionally calls mrp_jointimer_start() when msrp_event() processes an MRP_EVENT_RJOININ. I can add some code to msrp_event() to prevent this, but the "correct" approach I believe is to update mrp_applicant_fsm() so that it returns a join_request flag. That way the state transitions listed in note 6 can be more accurately detected. Comments?
Hello,
Currently I am planning to test Open AVB stack with switch. So want to know that is current gptp and msrp support switch as well or not?
Thanks & Regards,
Keyur Parekh.
Hello,
I am currently debugging gptp daemon. I have intel card hardware. Now how can I make sure that local time in gptp daemon and Intel hardware counter time is in sync? Can you let me know how I can get those two times?
Thanks & Regards,
Keyur Parekh
Dear Sir,
We are using Intel I210 ethernet AVB cards to test Talker Listener functionality. We download Open AVB stack and running Simple listener and simple talker on Inter I210 cards. Now when we start transmitting Audio stream from talker we measure time at listener side for receiving each audio packets. It takes around 125 us to reach each packet at listener side. But some time we found it taker more than 1ms time to reach to listener, even in one talker and one listener scenario.
After that we use AVB-SW from dsp4you company. When we insert switch between talker-listener than it creates more problem. Listener getting data at around 900us. So we are getting delay of 900us between each packets.
Below I have provided link for AVB switch.
http://www.dsp4you.com/products/avb-oem-series/avb-sw
So, I want to know that, do we need to change gptp daemon or MRPD daemon to use it with AVB-SW or I can use it straight forward with switch?
Let me know your inputs.
Thanks & Regards,
Keyur Parekh.
hi,
sorry to bother you again...
I have been trying to compile the maap daemon and the gstreamer-plugin with little to no success so far.
If I try compiling the GStreamer-plugin and I get this message:
make[2]: *** No rule to make target libgstplugin.c', needed by
libgstplugin_la-libgstplugin.lo'. Stop.
From what I gather this is caused by the makefile. Am I correct in the assumption that the whole thing should compile without me having to change anything?
I also tried my luck with the maap daemon:
/usr/bin/ld: cannot open output file ../build/maap_daemon: No such file or directory
I don't really think there is something wrong with the two packages.... So does anyone have an idea what I might be doing wrong?
Hello all. I got xmos avb boards and connect with iptime switch. So I installed openavb under linux. However open-avb say it used I210. Mine is I82540EM ethernet controller. I checked it
under ubuntu 13 using lspci -nn | grep Eth command.
daemon_cl and simple talker did not work for me.
a) daemon_cl says failed to get interface address: no such device failed to initialize port.
(In my openion above error is because of different ethernet controller)
Is it right?
IF yes how to solve this problem?
there is some issue that I knew. ./daemon_cl eth0 gives :failed to configure timestamping..
but ./daemon_cl -i eth0 gives error (a).
b) ./simple_talker -i eth0 -t 2 gives connect to failed (Success) - are you running as root?
(a) and (b) are because of my ethernet controller(I82540EM)?
also in /dev/ptp* does not exist.
Please discuss on this issue thank you.
Hello,
I'm using Open-AVB in a soft switch. I've been trying to find documentation about this platform besides the instructions in the "Read me" files.
Are there more detailed documents.
Many thanks
Ricardo Sousa
Hi,
Incoming and outgoing packets are timestamped in gptp using the SO_TIMESTAMPING socket option. The socket API is returning system time and the device time when the flags SOF_TIMESTAMPING_SYS_HARDWARE, SOF_TIMESTAMPING_RAW_HARDWARE are set.
Can any one please explain me what each of these times represent and where are these values populated. I can see in the igb driver hwtstamp of skb is being updated. I guess this is the device time.
Thanks,
Anil
Current code to emit a sequence of vectors does not gracefully handle the case where the message buffer becomes full.
I finally figured out how to use JACK and have the jackd_talker/listener working. I am using the built-in sound cards on two machines running Ubuntu 12.04 LTS. After about 30 seconds, the listener starts reporting underruns and (obviously) I hear these artifacts. I am using rtprio at 86 (both ends) and RT scheduling in the talker at 89. Buffers are at 2048. Made no difference. I assume the underruns are due to my clock domains drifting with respect to one another. A few questions:
I have developed several readme files for both simple listener/talker and jackd versions. I also have created scripts to set everything up (all daemons, applications, etc.). I can submit these if anyone cares. Most of this would fall under "Documentation". I also fixed the jackd_talker so it would connect the ports automatically (internal sound card to the jackd_talker) without requiring this to be done manually. I presume Adrian did not do this because of the clock drift issues and he was using some external USB sound card.
I have been playing around with the examples.
I compiled the live stream example and tried to run it.
I used the exact commands stated in the readme but I get somewhat confusing error messages:
ERROR: pipeline could not be constructed: no element "alsasrc".
for the talker side.
And
WARNING: erroneous pipeline: no element "audioparse"
for the listener side.
I did run as root. And I checked the list of loaded GST plugins... alsasrc and audioparse were both there.
The readme was not helpful.
Any ideas what I might have gotten wrong?
Current configuration interface is done through switches upon gPTP initialization. Improve the current one to support more parameters.
Here the current configuration switches we have:
./daemon_cl [-S] [-P] [-M ] [-A ] [-G ] [-R <priority 1>]
-S start syntonization
-P pulse per second
-M save/restore state
-A initial accelerated sync count
-G group id for shared memory
-R <priority 1> priority 1 value
-T force master
-L force slave
We could embed that on a gPTP.cfg and read this file on its initialization. Eventually we will need more parameters, as for instance the phy delay, which currently has to be manually set on a define (and hence recompile the gPTP). Code below:
linux/src/linux_hal_generic.cpp:52:#define TX_PHY_TIME 184
linux/src/linux_hal_generic.cpp:53:#define RX_PHY_TIME 382
linux/src/linux_hal_generic.cpp:55://#define TX_PHY_TIME 8000
linux/src/linux_hal_generic.cpp:56://#define RX_PHY_TIME 8000
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.