diff --git a/src/c3nav/mesh/consumers.py b/src/c3nav/mesh/consumers.py index 27fd4648..8dd451ea 100644 --- a/src/c3nav/mesh/consumers.py +++ b/src/c3nav/mesh/consumers.py @@ -29,8 +29,8 @@ class MeshConsumer(WebsocketConsumer): self.remove_dst_nodes(self.dst_nodes) def send_msg(self, msg): - print("sending", msg) - self.log_text(msg.dst, "sending %s" % msg) + # print("sending", msg) + # self.log_text(msg.dst, "sending %s" % msg) self.send(bytes_data=msg.encode()) 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 return - print('Received message:', msg) + #print('Received message:', msg) 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) 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): - self.remove_dst_nodes(addresses=msg.mac_addresses) + self.remove_dst_nodes(addresses=msg.addresses) def mesh_uplink_consumer(self, data): # 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"])) 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( uplink_node=self.uplink_node, src_node=src_node, diff --git a/src/c3nav/mesh/messages.py b/src/c3nav/mesh/messages.py index da238a1a..f968e79e 100644 --- a/src/c3nav/mesh/messages.py +++ b/src/c3nav/mesh/messages.py @@ -28,6 +28,9 @@ class MeshMessageType(IntEnum): MESH_LAYER_ANNOUNCE = 0x04 MESH_ADD_DESTINATIONS = 0x05 MESH_REMOVE_DESTINATIONS = 0x06 + MESH_ROUTE_REQUEST = 0x07 + MESH_ROUTE_RESPONSE = 0x08 + MESH_ROUTE_TRACE = 0x09 CONFIG_DUMP = 0x10 CONFIG_FIRMWARE = 0x11 @@ -217,10 +220,10 @@ class MeshLayerAnnounceMessage(MeshMessage, msg_id=MeshMessageType.MESH_LAYER_AN @dataclass class BaseDestinationsMessage(MeshMessage, c_struct_name="destinations"): """ 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(), - "doc": "mac adresses of the destinations", - "c_name": "mac", + "doc": "adresses of the destinations", + "c_name": "addresses", }) @@ -236,6 +239,36 @@ class MeshRemoveDestinationsMessage(BaseDestinationsMessage, msg_id=MeshMessageT 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 class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP): """ request for the node to dump its config """