Aros/开发者/NICDriversDev
SANA2 规范(版本 2 可从 Aminet 获得,sana2_v2.lha 来自 通用 FTP 德国 FTP 或 英国 html 并在网上阅读 此处。
Aminet comm/tcp 和 Aminet comm/net 并搜索 搜索 Aminet
与 SANA II 兼容意味着它将支持 AROS 的所有主要网络协议。
组播:(第一个字节的最低有效位 - 字节中低位优先传输)广播
Sana2IOReq
- 6 个字节的目标地址(以太网地址由 47 位地址信息和 1 位组播标志组成)
- 6 个字节的源地址
- 2 个字节的类型,
- 64 到 1500 个字节的数据(数据包)
- (后面是 4 个字节的 CRC 值,覆盖上述所有内容,由硬件生成和检查,因此即使在原始数据包中也不包含)
施乐(TM)数据包类型编号
[编辑 | 编辑源代码]decimal Hex Description ------- --- ----------- 000 0000-05DC IEEE 802.3 Length Field 2048 0800 TCP/IP -- IP 2054 0806 TCP/IP -- ARP 32821 8035 TCP/IP -- RARP 32923 809B Appletalk 33011 80F3 AppleTalk AARP (Kinetics) 33100 814C SNMP 33079 8137-8138 Novell, Inc.
setup tx (transfer/driver) & rx (receive) descriptors and data buffers set packet size, split data into packets and queue serially (one after the other) handshaking/data integrity check per packet poll until all rx packets received
一个典型的以太网驱动程序在 workbench/devs/networks/ 中有这些与之关联的文件
device.c - (APTR)DevOpen, (APTR)DevClose, (APTR)DevExpunge, (APTR)DevReserved, (APTR)DevBeginIO, (APTR)DevAbortIO, aros-device.c - AROSDevInit, AROSDevOpen, AROSDevClose, AROSDevExpunge, AROSDevReserved, AROSDevBeginIO, AROSDevAbortIO, RXFunction, TXFunction, *DMATXFunction, AROSInt, expansion.c - GetExpansionCount(), *AllocExpansionCard(), FreeExpansionCard(), AddExpansionIntServer(), RemExpansionIntServer(), pci.c - GetPCICount(), *GetPCIUnit(), *FindPCIUnit(), *CreatePCIUnit(), DeletePCIUnit(), *AllocCard(), FreeCard(), AddPCIIntServer(), RemPCIIntServer(), IsCardCompatible(), Product_Codes, unit.c - *CreateUnit(), DeleteUnit(), InitialiseAdapter(), ConfigureAdapter(), FillConfigData(), GoOnline(), GoOffline(), AddMulticastRange(), RemMulticastRange(), *FindMulticastRange(), SetMulticast(), *FindTypeStats(), FlushUnit(), StatusInt(), RXInt(), CopyPacket(), AddressFilter(), TXInt(), TXEndInt(), UpdateStats(), ReportEvents(), UnitTask(), ReadMII(), WriteMII(), BusyMicroDelay(), GetEEPROMAddressSize(), ReadEEPROM(), ReadEEPROMBits(), WriteEEPROMBits(), ReadEEPROMBit(), WriteEEPROMBit, request.c - ServiceRequest(), CmdInvalid(), CmdRead(), CmdWrite(), CmdFlush(), CmdS2DeviceQuery(), PutRequest(), CmdGetStationAddress(), CmdConfigInterface(), CmdBroadcast(), CmdTrackType(), CmdUntrackType(), CmdGetTypeStats(), CmdGetSpecialStats(), CmdGetGlobalStats(), CmdOnEvent(), CmdReadOrphan(), CmdOnline(), CmdOffline(), CmdDeviceQuery(), CmdAddMulticastAddresses(), CmdDelMulticastAddresses(),
一个典型的无线驱动程序在 workbench/devs/networks/ 中有这些与之关联的文件
aros-device.c device.c encryption.c request.c startup.c unit.c
http://en.wikipedia.org/wiki/Device_driver 和 http://lwn.net/Kernel/LDD3/ 和 https://wikibooks.cn/wiki/The_Linux_Kernel
有谁知道为什么我们的网络栈有以下限制
- 每个任务都需要打开自己的库基址
- 任务 A 创建的套接字不能在没有进行一些“共享魔法”的情况下被任务 B 使用
此限制是将多线程网络软件从 Linux 世界移植过来的一个重大障碍,因为在那里,没有这样的限制。
因为有些东西是基于信号的,而信号属于某个任务。此外,没有其他方法可以拥有线程安全的 errno 和 DNS 查询。这来自于原始 AmiTCP 的设计,Miami 也是一样的。只有 Roadshow(OS4 栈)提供共享 SocketBase。这可以通过查询 SocketBaseTag 来查询,我不记得细节了。在 AROSTCP 中,可以通过将任务上下文与 SocketBase 分开,并使用 AVL 树将上下文与任务关联来实现相同的功能。这对于 Exec Signalling 设置是正确的 - 所有任务都分配自己的信号(这是来自原始 exec 的)。或者等待 relbase 补丁提交并使用该机制。然后它将为你完成。
AROS 是否需要重新编写 TCP 堆栈,以便拥有一个带有共享库基座的通用库,以及作为附加数据的每个调用者专业数据?以及是否可以*选择*设置每个任务私有数据?每个任务数据仍然需要有一个关联查找机制。
这是从 AmiTCP 网络堆栈和 Miami Classic Amiga 网络堆栈实现中保留的,当网络应用程序(AmiTCP 或 Miami 或 MiamiDX)启动时,会创建 bsdsocket.library 本身。
这也是从 Classic Exec 的任务/进程模型中保留的,允许每个库打开者拥有一个自定义库基座。
“众所周知,每个使用 bsdsocket.library 的进程都必须仅出于其自身目的打开该库 - 库的数据库与进程相关联,并且无法在其他进程之间共享。”(来源:http://aminet.net/package/comm/tcp/networksnooper)
大多数主要的 UAE 版本都有内存专用的 bsdsocket.library(包括所有其他“虚拟”设备,如 uaehf.device、uaescsi.device 等)。我认为某些端口确实(曾经有?)“真实”库,但它很可能只包含 m68k<>host C-例程跳转表魔法。
AmiTCP/IP 文档 到 Aminet。
我梦想着一个基于 Amiga 消息传递系统的完整 TCP/IP。因此,例如,会有 ip.device、tcp.device、udp.device 等。
参考资料
[edit | edit source]每个 sana2 设备都拥有
AbortIO CloseDevice CMD_CLEAR CMD_FLUSH CMD_INVALID CMD_READ CMD_RESET CMD_START CMD_STOP CMD_UPDATE CMD_WRITE OpenDevice S2_ADDMULTICASTADDRESS S2_BROADCAST S2_CONFIGINTERFACE S2_DELMULTICASTADDRESS S2_DEVICEQUERY S2_GETGLOBALSTATS S2_GETSPECIALSTATS S2_GETSTATIONADDRESS S2_GETTYPESTATS S2_MULTICAST S2_OFFLINE S2_ONEVENT S2_ONLINE S2_READORPHAN S2_TRACKTYPE S2_UNTRACKTYPE