new mesh messages for routing debug
This commit is contained in:
parent
304d35c057
commit
40c4e98816
2 changed files with 42 additions and 9 deletions
|
@ -29,8 +29,8 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
self.remove_dst_nodes(self.dst_nodes)
|
self.remove_dst_nodes(self.dst_nodes)
|
||||||
|
|
||||||
def send_msg(self, msg):
|
def send_msg(self, msg):
|
||||||
print("sending", msg)
|
# print("sending", msg)
|
||||||
self.log_text(msg.dst, "sending %s" % msg)
|
# self.log_text(msg.dst, "sending %s" % msg)
|
||||||
self.send(bytes_data=msg.encode())
|
self.send(bytes_data=msg.encode())
|
||||||
|
|
||||||
def receive(self, text_data=None, bytes_data=None):
|
def receive(self, text_data=None, bytes_data=None):
|
||||||
|
@ -47,7 +47,7 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
# todo: this message isn't for us, forward it
|
# todo: this message isn't for us, forward it
|
||||||
return
|
return
|
||||||
|
|
||||||
print('Received message:', msg)
|
#print('Received message:', msg)
|
||||||
|
|
||||||
src_node, created = MeshNode.objects.get_or_create(address=msg.src)
|
src_node, created = MeshNode.objects.get_or_create(address=msg.src)
|
||||||
|
|
||||||
|
@ -85,10 +85,10 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
self.log_received_message(src_node, msg)
|
self.log_received_message(src_node, msg)
|
||||||
|
|
||||||
if isinstance(msg, messages.MeshAddDestinationsMessage):
|
if isinstance(msg, messages.MeshAddDestinationsMessage):
|
||||||
self.add_dst_nodes(addresses=msg.mac_addresses)
|
self.add_dst_nodes(addresses=msg.addresses)
|
||||||
|
|
||||||
if isinstance(msg, messages.MeshRemoveDestinationsMessage):
|
if isinstance(msg, messages.MeshRemoveDestinationsMessage):
|
||||||
self.remove_dst_nodes(addresses=msg.mac_addresses)
|
self.remove_dst_nodes(addresses=msg.addresses)
|
||||||
|
|
||||||
def mesh_uplink_consumer(self, data):
|
def mesh_uplink_consumer(self, data):
|
||||||
# message handler: if we are not the given uplink, leave this group
|
# message handler: if we are not the given uplink, leave this group
|
||||||
|
@ -106,7 +106,7 @@ class MeshConsumer(WebsocketConsumer):
|
||||||
self.send_msg(MeshMessage.fromjson(data["msg"]))
|
self.send_msg(MeshMessage.fromjson(data["msg"]))
|
||||||
|
|
||||||
def log_received_message(self, src_node: MeshNode, msg: messages.MeshMessage):
|
def log_received_message(self, src_node: MeshNode, msg: messages.MeshMessage):
|
||||||
self.log_text(msg.src, "received %s" % msg)
|
# self.log_text(msg.src, "received %s" % msg)
|
||||||
NodeMessage.objects.create(
|
NodeMessage.objects.create(
|
||||||
uplink_node=self.uplink_node,
|
uplink_node=self.uplink_node,
|
||||||
src_node=src_node,
|
src_node=src_node,
|
||||||
|
|
|
@ -28,6 +28,9 @@ class MeshMessageType(IntEnum):
|
||||||
MESH_LAYER_ANNOUNCE = 0x04
|
MESH_LAYER_ANNOUNCE = 0x04
|
||||||
MESH_ADD_DESTINATIONS = 0x05
|
MESH_ADD_DESTINATIONS = 0x05
|
||||||
MESH_REMOVE_DESTINATIONS = 0x06
|
MESH_REMOVE_DESTINATIONS = 0x06
|
||||||
|
MESH_ROUTE_REQUEST = 0x07
|
||||||
|
MESH_ROUTE_RESPONSE = 0x08
|
||||||
|
MESH_ROUTE_TRACE = 0x09
|
||||||
|
|
||||||
CONFIG_DUMP = 0x10
|
CONFIG_DUMP = 0x10
|
||||||
CONFIG_FIRMWARE = 0x11
|
CONFIG_FIRMWARE = 0x11
|
||||||
|
@ -217,10 +220,10 @@ class MeshLayerAnnounceMessage(MeshMessage, msg_id=MeshMessageType.MESH_LAYER_AN
|
||||||
@dataclass
|
@dataclass
|
||||||
class BaseDestinationsMessage(MeshMessage, c_struct_name="destinations"):
|
class BaseDestinationsMessage(MeshMessage, c_struct_name="destinations"):
|
||||||
""" downstream node announces served/no longer served destination """
|
""" downstream node announces served/no longer served destination """
|
||||||
mac_addresses: list[str] = field(default_factory=list, metadata={
|
addresses: list[str] = field(default_factory=list, metadata={
|
||||||
"format": MacAddressesListFormat(),
|
"format": MacAddressesListFormat(),
|
||||||
"doc": "mac adresses of the destinations",
|
"doc": "adresses of the destinations",
|
||||||
"c_name": "mac",
|
"c_name": "addresses",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,6 +239,36 @@ class MeshRemoveDestinationsMessage(BaseDestinationsMessage, msg_id=MeshMessageT
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MeshRouteRequestMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_REQUEST):
|
||||||
|
""" request routing information for node """
|
||||||
|
request_id: int = field(metadata={"format": SimpleFormat('I')})
|
||||||
|
address: str = field(metadata={
|
||||||
|
"format": MacAddressFormat(),
|
||||||
|
"doc": "target address for the route"
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MeshRouteResponseMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_RESPONSE):
|
||||||
|
""" reporting the routing table entry to the given address """
|
||||||
|
request_id: int = field(metadata={"format": SimpleFormat('I')})
|
||||||
|
route: str = field(metadata={
|
||||||
|
"format": MacAddressFormat(),
|
||||||
|
"doc": "routing table entry or 00:00:00:00:00:00"
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MeshRouteTraceMessage(MeshMessage, msg_id=MeshMessageType.MESH_ROUTE_TRACE):
|
||||||
|
""" special message, collects all hop adresses on its way """
|
||||||
|
request_id: int = field(metadata={"format": SimpleFormat('I')})
|
||||||
|
trace: list[str] = field(default_factory=list, metadata={
|
||||||
|
"format": MacAddressesListFormat(),
|
||||||
|
"doc": "addresses encountered by this message",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP):
|
class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP):
|
||||||
""" request for the node to dump its config """
|
""" request for the node to dump its config """
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue