C usbnet驱动程序和网络子系统

C usbnet驱动程序和网络子系统,c,linux,sockets,networking,C,Linux,Sockets,Networking,我在一个项目“AVB”桥接工作。我们正在通过以太网进行音频视频流传输。数据包通过USB传输。它类似于USB-ETH(MAC)芯片,USB连接到主机端。我们正在使用“usbnet.c”驱动程序。我们有两个应用程序(用户空间进程): 1) 提供同步的守护进程 2) 发送音频包的说话者程序(1722) usbnet中实现了一个名为.ndo\u start\u xmit的函数指针。我们已经使用这个函数指针注册了我们的函数,所以只要有一个数据包要从上层传输,我们实现的函数就会被调用。当我们单独运行守护进程

我在一个项目“AVB”桥接工作。我们正在通过以太网进行音频视频流传输。数据包通过USB传输。它类似于USB-ETH(MAC)芯片,USB连接到主机端。我们正在使用“usbnet.c”驱动程序。我们有两个应用程序(用户空间进程):

1) 提供同步的守护进程

2) 发送音频包的说话者程序(1722)

usbnet中实现了一个名为.ndo\u start\u xmit的函数指针。我们已经使用这个函数指针注册了我们的函数,所以只要有一个数据包要从上层传输,我们实现的函数就会被调用。当我们单独运行守护进程时,系统运行得非常好。 但是,一旦我们并行启动talker程序,对于来自守护进程的一些数据包,就不会调用xmit函数。 与守护进程发送的数据包相比,talker程序发送数据包的频率要高得多。 因此,就像talker程序一样,它也通过相同的接口发送数据包,因此会影响守护进程的行为。但是否解决这一问题仍然进退两难

让我澄清一下

现在假设有两个应用程序通过相同的接口传输数据包,例如eth6。根据感知到的知识,我们知道当有一个数据包要传输时,调用ndo\u start\u xmit。但其中一个应用程序要求在125毫秒内将数据包准确地从MAC发送出去。 当我运行第一个应用程序时,让我们将其命名为“A”,数据包每计算125毫秒离开MAC。此定时由应用程序本身控制。但当我开始执行应用程序“B”时,“A”应用程序数据包不会每隔125毫秒从数据包中传输出去。因为应用程序B以8000/秒的速度发送数据包,“A”以8/秒的速度发送数据包

我认为子系统中的软件队列对来自套接字的所有数据包进行排队,它将所有“A”应用程序数据包与许多“B”应用程序数据包一起堆积起来,然后为所有堆积起来的“A”应用程序数据包调用ndo_start_xmit进行传输。
因此,我们无法在MAC上每隔125毫秒发送一次数据包。

我想你要找的是API。

除非你的应用下面的发送队列可以优先排序,否则我看不到任何明显的信息答案。你已经提供了。是否可以检查较低级别的tx队列计数,以减少其内容,或减小其大小,从而减少延迟问题?。或者,当处理并成功传输数据包时,是否可以收到另一个通知,某种类型的完成事件?有一个名为netif_queue_stopped()的函数:测试传输队列是否被流阻塞,我计划实现它以了解与ndo\u start\u xmit链接的队列的状态。将很快更新结果:)-SumeetNow由于该队列属于n/w子系统类别,我认为我们可以使用它的可能性最小。我在网上查看了一些usbnet.c代码dev->net->stats.tx_packets++”也许你可以用它来限制排队包的数量。如果它当时也调用了用户提供的函数,那就太好了,因此如果未完成的数据包数量下降到某个低水位线,您可以发出信号量,但是没有:(嘿,朋友,您能详细说明一下这个问题吗?。哪种队列(硬件)这里正在讨论我如何实施它。这将是一个很大的帮助。-苏米特