Compare commits

...

3 Commits

Author SHA1 Message Date
Amanda Cameron 1b8929b129
Merge 8c1c25f79e into 071a692f11 2024-03-28 11:37:50 -04:00
Izaya 071a692f11 Check network device MTUs and split packets accordingly depending on capacity and overhead.
Tally of packet overhead:
 - 16 bytes packet ID
 - 8 bytes type
 - N bytes dest
 - N bytes source
 - 8 bytes port
 - N bytes data
 - 6*2 bytes network card overhead
2024-03-16 12:30:25 +10:00
Amanda Cameron 8c1c25f79e microtel: Add support for broadcast and multicast. 2020-11-16 09:28:41 -05:00
2 changed files with 23 additions and 10 deletions

View File

@ -74,6 +74,17 @@ function computer.pullSignal(t)
else
packetQueue[eventTab[11]] = nil
end
elseif eventTab[8]:sub(1,1) == "~" then
if eventTab[8] == "~" then
computer.pushSignal("net_broadcast", eventTab[9], eventTab[10], eventTab[11])
else
for d in eventTab[8]:gmatch("~([^~]+)") do
if d == net.hostname then
computer.pushSignal("net_msg",eventTab[9],eventTab[10],eventTab[11])
break
end
end
end
elseif net.route and checkCache(eventTab[6]) then
rawSendPacket(eventTab[6],eventTab[7],eventTab[8],eventTab[9],eventTab[10],eventTab[11])
end

View File

@ -1,12 +1,18 @@
local computer = require "computer"
local event = require "event"
local net = {}
net.mtu = 4096
net.mtu = 8192
net.streamdelay = 30
net.minport = 32768
net.maxport = 65535
net.openports = {}
for k,v in pairs(computer.getDeviceInfo()) do
if v.class == "network" then
net.mtu = math.min(net.mtu, tonumber(v.capacity))
end
end
function net.genPacketID()
local npID = ""
for i = 1, 16 do
@ -31,17 +37,13 @@ function net.rsend(to,port,data,block)
end
-- ordered packet delivery, layer 4?
function net.send(to,port,ldata)
local tdata = {}
if ldata:len() > net.mtu then
for i = 1, ldata:len(), net.mtu do
tdata[#tdata+1] = ldata:sub(1,net.mtu)
ldata = ldata:sub(net.mtu+1)
end
else
tdata = {ldata}
local tdata, hsize = {}, 44 + #(os.getenv("HOSTNAME") or computer.address():sub(1,8)) + #to
while hsize+#ldata > net.mtu do
tdata[#tdata+1] = ldata:sub(1, net.mtu - hsize)
ldata = ldata:sub(#tdata[#tdata]+1)
end
tdata[#tdata+1] = ldata
for k,v in ipairs(tdata) do
if not net.rsend(to,port,v) then return false end
end