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://wikibook.tw/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