mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
#225 fixed svsessions __tostring for sessions, refactored s_addr to src_addr
This commit is contained in:
parent
55dab6d675
commit
e16b0d237e
@ -311,7 +311,7 @@ function svsessions.establish_plc_session(source_addr, for_reactor, version)
|
|||||||
|
|
||||||
local mt = {
|
local mt = {
|
||||||
---@param s plc_session_struct
|
---@param s plc_session_struct
|
||||||
__to_string = function (s) return util.c("PLC [", s.instance.get_id(), "] for reactor #", s.reactor,
|
__tostring = function (s) return util.c("PLC [", s.instance.get_id(), "] for reactor #", s.reactor,
|
||||||
" (@", s.s_addr, ")") end
|
" (@", s.s_addr, ")") end
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,7 +357,7 @@ function svsessions.establish_rtu_session(source_addr, advertisement, version)
|
|||||||
|
|
||||||
local mt = {
|
local mt = {
|
||||||
---@param s rtu_session_struct
|
---@param s rtu_session_struct
|
||||||
__to_string = function (s) return util.c("RTU [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
__tostring = function (s) return util.c("RTU [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
||||||
}
|
}
|
||||||
|
|
||||||
setmetatable(rtu_s, mt)
|
setmetatable(rtu_s, mt)
|
||||||
@ -398,7 +398,7 @@ function svsessions.establish_crd_session(source_addr, version)
|
|||||||
|
|
||||||
local mt = {
|
local mt = {
|
||||||
---@param s crd_session_struct
|
---@param s crd_session_struct
|
||||||
__to_string = function (s) return util.c("CRD [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
__tostring = function (s) return util.c("CRD [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
||||||
}
|
}
|
||||||
|
|
||||||
setmetatable(crd_s, mt)
|
setmetatable(crd_s, mt)
|
||||||
@ -441,7 +441,7 @@ function svsessions.establish_pdg_session(source_addr, version)
|
|||||||
|
|
||||||
local mt = {
|
local mt = {
|
||||||
---@param s pdg_session_struct
|
---@param s pdg_session_struct
|
||||||
__to_string = function (s) return util.c("PDG [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
__tostring = function (s) return util.c("PDG [", s.instance.get_id(), "] (@", s.s_addr, ")") end
|
||||||
}
|
}
|
||||||
|
|
||||||
setmetatable(pdg_s, mt)
|
setmetatable(pdg_s, mt)
|
||||||
|
@ -20,7 +20,7 @@ local supervisor = require("supervisor.supervisor")
|
|||||||
|
|
||||||
local svsessions = require("supervisor.session.svsessions")
|
local svsessions = require("supervisor.session.svsessions")
|
||||||
|
|
||||||
local SUPERVISOR_VERSION = "v0.17.1"
|
local SUPERVISOR_VERSION = "v0.17.2"
|
||||||
|
|
||||||
local println = util.println
|
local println = util.println
|
||||||
local println_ts = util.println_ts
|
local println_ts = util.println_ts
|
||||||
|
@ -135,14 +135,14 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
if packet ~= nil then
|
if packet ~= nil then
|
||||||
local l_chan = packet.scada_frame.local_channel()
|
local l_chan = packet.scada_frame.local_channel()
|
||||||
local r_chan = packet.scada_frame.remote_channel()
|
local r_chan = packet.scada_frame.remote_channel()
|
||||||
local s_addr = packet.scada_frame.src_addr()
|
local src_addr = packet.scada_frame.src_addr()
|
||||||
local protocol = packet.scada_frame.protocol()
|
local protocol = packet.scada_frame.protocol()
|
||||||
|
|
||||||
if l_chan ~= svr_channel then
|
if l_chan ~= svr_channel then
|
||||||
log.debug("received packet on unconfigured channel " .. l_chan, true)
|
log.debug("received packet on unconfigured channel " .. l_chan, true)
|
||||||
elseif r_chan == plc_channel then
|
elseif r_chan == plc_channel then
|
||||||
-- look for an associated session
|
-- look for an associated session
|
||||||
local session = svsessions.find_plc_session(s_addr)
|
local session = svsessions.find_plc_session(src_addr)
|
||||||
|
|
||||||
if protocol == PROTOCOL.RPLC then
|
if protocol == PROTOCOL.RPLC then
|
||||||
---@cast packet rplc_frame
|
---@cast packet rplc_frame
|
||||||
@ -163,7 +163,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
||||||
-- establish a new session
|
-- establish a new session
|
||||||
local last_ack = self.last_est_acks[s_addr]
|
local last_ack = self.last_est_acks[src_addr]
|
||||||
|
|
||||||
-- validate packet and continue
|
-- validate packet and continue
|
||||||
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
||||||
@ -181,7 +181,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
-- PLC linking request
|
-- PLC linking request
|
||||||
if packet.length == 4 and type(packet.data[4]) == "number" then
|
if packet.length == 4 and type(packet.data[4]) == "number" then
|
||||||
local reactor_id = packet.data[4]
|
local reactor_id = packet.data[4]
|
||||||
local plc_id = svsessions.establish_plc_session(s_addr, reactor_id, firmware_v)
|
local plc_id = svsessions.establish_plc_session(src_addr, reactor_id, firmware_v)
|
||||||
|
|
||||||
if plc_id == false then
|
if plc_id == false then
|
||||||
-- reactor already has a PLC assigned
|
-- reactor already has a PLC assigned
|
||||||
@ -192,8 +192,8 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.COLLISION)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.COLLISION)
|
||||||
else
|
else
|
||||||
-- got an ID; assigned to a reactor successfully
|
-- got an ID; assigned to a reactor successfully
|
||||||
println(util.c("PLC (", firmware_v, ") [@", s_addr, "] \xbb reactor ", reactor_id, " connected"))
|
println(util.c("PLC (", firmware_v, ") [@", src_addr, "] \xbb reactor ", reactor_id, " connected"))
|
||||||
log.info(util.c("PLC_ESTABLISH: PLC (", firmware_v, ") [@", s_addr, "] reactor unit ", reactor_id, " PLC connected with session ID ", plc_id))
|
log.info(util.c("PLC_ESTABLISH: PLC (", firmware_v, ") [@", src_addr, "] reactor unit ", reactor_id, " PLC connected with session ID ", plc_id))
|
||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -210,14 +210,14 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding PLC SCADA_MGMT packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding PLC SCADA_MGMT packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
log.debug(util.c("illegal packet type ", protocol, " on PLC channel"))
|
log.debug(util.c("illegal packet type ", protocol, " on PLC channel"))
|
||||||
end
|
end
|
||||||
elseif r_chan == rtu_channel then
|
elseif r_chan == rtu_channel then
|
||||||
-- look for an associated session
|
-- look for an associated session
|
||||||
local session = svsessions.find_rtu_session(s_addr)
|
local session = svsessions.find_rtu_session(src_addr)
|
||||||
|
|
||||||
if protocol == PROTOCOL.MODBUS_TCP then
|
if protocol == PROTOCOL.MODBUS_TCP then
|
||||||
---@cast packet modbus_frame
|
---@cast packet modbus_frame
|
||||||
@ -237,7 +237,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
||||||
-- establish a new session
|
-- establish a new session
|
||||||
local last_ack = self.last_est_acks[s_addr]
|
local last_ack = self.last_est_acks[src_addr]
|
||||||
|
|
||||||
-- validate packet and continue
|
-- validate packet and continue
|
||||||
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
||||||
@ -255,10 +255,10 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
if packet.length == 4 then
|
if packet.length == 4 then
|
||||||
-- this is an RTU advertisement for a new session
|
-- this is an RTU advertisement for a new session
|
||||||
local rtu_advert = packet.data[4]
|
local rtu_advert = packet.data[4]
|
||||||
local s_id = svsessions.establish_rtu_session(s_addr, rtu_advert, firmware_v)
|
local s_id = svsessions.establish_rtu_session(src_addr, rtu_advert, firmware_v)
|
||||||
|
|
||||||
println(util.c("RTU (", firmware_v, ") [@", s_addr, "] \xbb connected"))
|
println(util.c("RTU (", firmware_v, ") [@", src_addr, "] \xbb connected"))
|
||||||
log.info(util.c("RTU_ESTABLISH: RTU (",firmware_v, ") [@", s_addr, "] connected with session ID ", s_id))
|
log.info(util.c("RTU_ESTABLISH: RTU (",firmware_v, ") [@", src_addr, "] connected with session ID ", s_id))
|
||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW)
|
||||||
else
|
else
|
||||||
log.debug("RTU_ESTABLISH: packet length mismatch")
|
log.debug("RTU_ESTABLISH: packet length mismatch")
|
||||||
@ -274,14 +274,14 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding RTU SCADA_MGMT packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding RTU SCADA_MGMT packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
log.debug(util.c("illegal packet type ", protocol, " on RTU channel"))
|
log.debug(util.c("illegal packet type ", protocol, " on RTU channel"))
|
||||||
end
|
end
|
||||||
elseif r_chan == crd_channel then
|
elseif r_chan == crd_channel then
|
||||||
-- look for an associated session
|
-- look for an associated session
|
||||||
local session = svsessions.find_crd_session(s_addr)
|
local session = svsessions.find_crd_session(src_addr)
|
||||||
|
|
||||||
if protocol == PROTOCOL.SCADA_MGMT then
|
if protocol == PROTOCOL.SCADA_MGMT then
|
||||||
---@cast packet mgmt_frame
|
---@cast packet mgmt_frame
|
||||||
@ -291,7 +291,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
||||||
-- establish a new session
|
-- establish a new session
|
||||||
local last_ack = self.last_est_acks[s_addr]
|
local last_ack = self.last_est_acks[src_addr]
|
||||||
|
|
||||||
-- validate packet and continue
|
-- validate packet and continue
|
||||||
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
||||||
@ -307,7 +307,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.BAD_VERSION)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.BAD_VERSION)
|
||||||
elseif dev_type == DEVICE_TYPE.CRDN then
|
elseif dev_type == DEVICE_TYPE.CRDN then
|
||||||
-- this is an attempt to establish a new coordinator session
|
-- this is an attempt to establish a new coordinator session
|
||||||
local s_id = svsessions.establish_crd_session(s_addr, firmware_v)
|
local s_id = svsessions.establish_crd_session(src_addr, firmware_v)
|
||||||
|
|
||||||
if s_id ~= false then
|
if s_id ~= false then
|
||||||
local cfg = { num_reactors }
|
local cfg = { num_reactors }
|
||||||
@ -316,13 +316,13 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
table.insert(cfg, cooling_conf[i].TURBINES)
|
table.insert(cfg, cooling_conf[i].TURBINES)
|
||||||
end
|
end
|
||||||
|
|
||||||
println(util.c("CRD (", firmware_v, ") [@", s_addr, "] \xbb connected"))
|
println(util.c("CRD (", firmware_v, ") [@", src_addr, "] \xbb connected"))
|
||||||
log.info(util.c("CRD_ESTABLISH: coordinator (", firmware_v, ") [@", s_addr, "] connected with session ID ", s_id))
|
log.info(util.c("CRD_ESTABLISH: coordinator (", firmware_v, ") [@", src_addr, "] connected with session ID ", s_id))
|
||||||
|
|
||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW, cfg)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.ALLOW, cfg)
|
||||||
else
|
else
|
||||||
if last_ack ~= ESTABLISH_ACK.COLLISION then
|
if last_ack ~= ESTABLISH_ACK.COLLISION then
|
||||||
log.info("CRD_ESTABLISH: denied new coordinator [@" .. s_addr .. "] due to already being connected to another coordinator")
|
log.info("CRD_ESTABLISH: denied new coordinator [@" .. src_addr .. "] due to already being connected to another coordinator")
|
||||||
end
|
end
|
||||||
|
|
||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.COLLISION)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.COLLISION)
|
||||||
@ -337,7 +337,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding coordinator SCADA_MGMT packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding coordinator SCADA_MGMT packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
elseif protocol == PROTOCOL.SCADA_CRDN then
|
elseif protocol == PROTOCOL.SCADA_CRDN then
|
||||||
---@cast packet crdn_frame
|
---@cast packet crdn_frame
|
||||||
@ -347,14 +347,14 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding coordinator SCADA_CRDN packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding coordinator SCADA_CRDN packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
log.debug(util.c("illegal packet type ", protocol, " on coordinator channel"))
|
log.debug(util.c("illegal packet type ", protocol, " on coordinator channel"))
|
||||||
end
|
end
|
||||||
elseif r_chan == pkt_channel then
|
elseif r_chan == pkt_channel then
|
||||||
-- look for an associated session
|
-- look for an associated session
|
||||||
local session = svsessions.find_pdg_session(s_addr)
|
local session = svsessions.find_pdg_session(src_addr)
|
||||||
|
|
||||||
if protocol == PROTOCOL.SCADA_MGMT then
|
if protocol == PROTOCOL.SCADA_MGMT then
|
||||||
---@cast packet mgmt_frame
|
---@cast packet mgmt_frame
|
||||||
@ -364,7 +364,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
||||||
-- establish a new session
|
-- establish a new session
|
||||||
local last_ack = self.last_est_acks[s_addr]
|
local last_ack = self.last_est_acks[src_addr]
|
||||||
|
|
||||||
-- validate packet and continue
|
-- validate packet and continue
|
||||||
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
if packet.length >= 3 and type(packet.data[1]) == "string" and type(packet.data[2]) == "string" then
|
||||||
@ -380,7 +380,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
_send_establish(packet.scada_frame, ESTABLISH_ACK.BAD_VERSION)
|
_send_establish(packet.scada_frame, ESTABLISH_ACK.BAD_VERSION)
|
||||||
elseif dev_type == DEVICE_TYPE.PKT then
|
elseif dev_type == DEVICE_TYPE.PKT then
|
||||||
-- this is an attempt to establish a new pocket diagnostic session
|
-- this is an attempt to establish a new pocket diagnostic session
|
||||||
local s_id = svsessions.establish_pdg_session(s_addr, firmware_v)
|
local s_id = svsessions.establish_pdg_session(src_addr, firmware_v)
|
||||||
|
|
||||||
println(util.c("PKT (", firmware_v, ") [:", r_chan, "] \xbb connected"))
|
println(util.c("PKT (", firmware_v, ") [:", r_chan, "] \xbb connected"))
|
||||||
log.info(util.c("PDG_ESTABLISH: pocket (", firmware_v, ") [:", r_chan, "] connected with session ID ", s_id))
|
log.info(util.c("PDG_ESTABLISH: pocket (", firmware_v, ") [:", r_chan, "] connected with session ID ", s_id))
|
||||||
@ -396,7 +396,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding pocket SCADA_MGMT packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding pocket SCADA_MGMT packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
elseif protocol == PROTOCOL.SCADA_CRDN then
|
elseif protocol == PROTOCOL.SCADA_CRDN then
|
||||||
---@cast packet crdn_frame
|
---@cast packet crdn_frame
|
||||||
@ -406,7 +406,7 @@ function supervisor.comms(_version, modem, fp_ok)
|
|||||||
session.in_queue.push_packet(packet)
|
session.in_queue.push_packet(packet)
|
||||||
else
|
else
|
||||||
-- any other packet should be session related, discard it
|
-- any other packet should be session related, discard it
|
||||||
log.debug(util.c("discarding pocket SCADA_CRDN packet without a known session from computer ", s_addr))
|
log.debug(util.c("discarding pocket SCADA_CRDN packet without a known session from computer ", src_addr))
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
log.debug(util.c("illegal packet type ", protocol, " on pocket channel"))
|
log.debug(util.c("illegal packet type ", protocol, " on pocket channel"))
|
||||||
|
Loading…
Reference in New Issue
Block a user