问题标签 [raw-ethernet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 便携式硬实时 C 或 C++ 原始以太网协议库
我正在尝试创建一个具有硬实时功能的爱好者便携式机器人库(Windows 和 Linux)。它应该能够通过标准以太网连接到微控制器,将固件上传到该设备,通过现场总线连接到其他设备,并将固件上传到运行专用控制器的其他微控制器。如果需要硬实时,则 NIC 将是 RTnet 支持的那些。我希望典型的伺服速率至少为 1 kHz,但最好是 2 kHz 或更高。它将运行一个完全自定义的协议(不是 TCP 或 IP 上的 UDP),因此开销最小,并且高速现场总线可以在不接收或传输帧的情况下饱和。然后可以解释以太网帧中的有效负载或将其发送到连接的设备。
1) 我更喜欢将协议保留在 C++ 中,但知道使用“new”关键字不适用于实时编程。如果我选择使用 C++ 语言而不是将项目转换为 C,我会遇到哪些其他限制?人们是否推荐教如何使用 C++ 并满足严格的实时截止日期的书籍或网站?我相信这是可能的,并且我希望能够继续使用 C++,因为 Orocos 项目使用实时 C++。我宁愿不使用 C 代码。
2) 为了保持可移植协议库的通用性,程序应该如何处理同时在非实时以太网适配器和 RTnet 以太网适配器上运行的协议?
我遇到的一个具体问题是关于可以使用 boost 或 Xenomai 互斥锁的可移植互斥锁类的问题。
问题 2 的解决方案 1 可能如下:如果应用程序也已使用 Xenomai 库编译,则可以使用布尔标志构造互斥锁,以说明哪些方法(boost 或 Xenomai)将在运行时包装以进行锁定和解锁. 如果库是为 Xenomai 编译的,它可能包含 boost 互斥锁和 Xenomai 互斥锁。我不喜欢这个解决方案,因为如果项目是为 Xenomai 编译的,那么它将包含用于 boost 和 Xenomai 的互斥锁的私有变量,这似乎是一种不太优雅的方式,而不是只拥有一个需要的互斥锁。
问题 2 的解决方案 2 可能如下:将 2 个不同的派生类从纯虚拟接口方法的抽象类写入互斥锁,一个用于 boost,一个用于 Xenomai。我更喜欢这种方式,但是在运行时告诉使用哪个类很麻烦。我可能必须有一个提升池和 Xenomai 互斥体。这是大多数硬实时 C++ 程序解决问题的方式吗?
我提出的这个问题不仅仅是一个互斥锁,而是希望收到反馈,因为我不想从一开始就复制糟糕的设计模式。
3) 我相信 Beckoff 的 TwinCAT 可以在 Windows 7 下实时运行 EtherCAT。在 Windows 7 下支持至少一个具有硬实时的 NIC 或之后?也许有一个开源的 Hypervisor 项目。
4)此外,人们如何加载系统,以便他们的四核计算机使用每个内核的 100%,以便他们可以判断他们的系统是否没有实时运行?
ethernet - 用于从 phy 层读取位的低级以太网驱动程序
是否可以从标准计算机以太网接口直接从物理以太网连接接口读取位?
例如,假设我想将笔记本电脑的以太网插孔用作差分逻辑探头(使用标准以太网电缆)。我是否可以潜在地编写一个驱动程序来获取位或驱动程序可以达到多低的限制?
本质上,物理层只是将比特流发送到设备驱动程序,还是进行任何会影响比特解释或导致设备故障(例如使用不同的编码方案)的解码。
我想归根结底是,我们是否可以通过编写合适的驱动程序将以太网端口用作任何标准的数字差分通信链路,或者我们是否仅限于 ieee 规范(8b/10b 等)。
vhdl - 什么是可以发送的以太网帧样本?
我想将以太网帧从 FPGA 发送到我的 PC 以供 Wireshark 接收
我将有效负载传递给 CRC 生成器以获取 CRC 结果,但我猜是 CRC 错误,因为wireshark 没有收到任何我的有效负载
我有 2 个想法
networking - 使用 TUN / TAP 测试用户空间 TCP/IP 堆栈
是否可以使用 TUN/TAP 接口测试 TCP 堆栈?我正在考虑这样的机制:
顶盒是(比方说)一个标准的未修改的 HTTP 服务器,侦听已路由到 TUN 设备的 IP 地址。底部框是一个自定义 TCP/IP 堆栈,它适用于原始以太网帧。
问题:
- 是否可以像这样背靠背连接两个 TAP/TUN 设备?
- 这里需要“桥”吗?他们还怎么背靠背说话?
- 最后:有没有更好的方法来做到这一点?
提前谢谢。
PS:我将在同一台机器上运行所有这些。“盒子”更像是这里的过程或集合或过程。
java - How to send Ethernet-Frames in Java without TCP/IP Stack
My Java application should control an external device (EtherCAT Bus technology) directly connected to the network interface of my computer(Ubuntu and Windows). No other network devices are connected. The communication has do be done on Standard IEEE 802.3 Ethernet Frames without IP stack.
Example for sending data:
I tried JNetPcap, which uses the pcap native library. The given API was fine, but there were multithreading issues on heavy load, which forced me to give up.
netty.io was also a candidate. I am not sure, but a TCP/IP stack is mandatory. Am I right?
Are there other ideas to communicate with low level Ethernet Frames? I would prefer a pure java library like netty.io, if one exists.
Of course JNA/JNI is an option, too. But I don't want to write C code.
Other alternatives?
ethernet - 发送/接收原始以太网帧
我必须在 Linux 上编写一个应用程序,该应用程序需要与具有自定义以太网类型的设备进行通信。甚至在如何编写这样的应用程序中也有很多解决方案。一个缺点是需要 root 访问权限(AFAIK)。之后释放 root 权限可能是一种选择,但它提出了程序是在 IDE 中开发的问题,我不喜欢以 root 身份运行。在我的特殊情况下,主应用程序是用 Python 编写的,这意味着授予对整个 Python 解释器的 root 访问权限。我正在寻找可能的替代方案。例如
编写一个微型 UDP/TCP 服务器,通过 TCP/UDP 重定向每个原始数据包。这也可以用 Python 编写。只有这个小应用程序需要 root 权限。
使用 socat 进行重定向,不幸的是,我找不到只关心一种以太网类型而不会被 IP 数据包溢出的选项。
还有其他想法吗?
c - 原始套接字在虚拟网络上发送两个数据包
当我尝试发送原始以太网数据包时,我的代码中的 sendto 函数出现问题。
我使用的是 Ubuntu 12.04.01 LTS,通过两个 vde_switches 和一个 dpipe 连接了两个 Tap 设备
例子:
我的发送程序创建如下所示的数据包,程序由来自tap0的套接字绑定并将数据包发送到tap1。在 tap1 上,一个接收器等待套接字上的所有数据包。
我的原始以太网数据包看起来是这样的:
目的地地址__ __ _源地址_ _ __ _ ___ 类型/长度__ _数据
00:00:01:00:00:00 _ __ 00:00:01:00:00:01 _ ___字节长度_一些数据
要发送的示例数据包:
但是当我查看wireshark时,我的程序会生成两个数据包:
第一个数据包是 IPX 数据包和 [Malformed Packet],看起来像十六进制(数据 = 测试)
第二个数据包未知协议
从我的源代码中删除
请我需要一些帮助来找出我的错误。
谢谢转发。
visual-c++ - 使用 NDIS 传输数据
我正在研究 fpga 固件,我想在其中使用以太网进行非常快速的数据传输。我从 FPGA 论坛获得了帮助,他们说建议使用轻量级互联网协议 (LWIP) 进行数据传输设计。
这与使用 NDIS 传输数据有何不同。如果您能建议我一些指南,将我的 Visual C++ 应用程序连接到网络指南并传输数据,我将不胜感激。
许多人提前打招呼。
c++ - c++ 无法使用 Ubuntu 和 Netbeans 6.9 打开原始套接字
我正在尝试在 Ubuntu 下发送/接收原始以太网。
我通过终端在c中运行代码没有问题。
但是,当我尝试使用 Netbeans IDE 6.9 将代码转换为 c++ 时,它无法打开原始套接字。调用:
总是返回-1。错误:“不允许操作”