fix router apps action for unknown dnet (#454)

Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
Steve Karg
2023-07-13 16:52:30 -05:00
committed by GitHub
parent da4db7c65e
commit 9e7f8978fa
2 changed files with 21 additions and 6 deletions
+11 -3
View File
@@ -664,7 +664,8 @@ static void network_control_handler(uint16_t snet,
case NETWORK_MESSAGE_I_AM_ROUTER_TO_NETWORK:
/* add its DNETs to our routing table */
fprintf(stderr, "for Networks: ");
while (npdu_len) {
len = 2;
while (npdu_len >= len) {
len = decode_unsigned16(&npdu[npdu_offset], &dnet);
fprintf(stderr, "%hu", dnet);
dnet_add(snet, dnet, src);
@@ -912,8 +913,15 @@ static void routed_apdu_handler(uint16_t snet,
routed_src_address(&router_src, snet, src);
npdu_len = npdu_encode_pdu(&Tx_Buffer[0], dest, &router_src, npdu);
memmove(&Tx_Buffer[npdu_len], apdu, apdu_len);
datalink_send_pdu(
port->net, dest, npdu, &Tx_Buffer[0], npdu_len + apdu_len);
/* send to all other ports */
port = Router_Table_Head;
while (port != NULL) {
if (port->net != snet) {
datalink_send_pdu(port->net, dest, npdu, &Tx_Buffer[0],
npdu_len + apdu_len);
}
port = port->next;
}
/* If the next router is unknown, an attempt shall be made to
identify it using a Who-Is-Router-To-Network message. */
send_who_is_router_to_network(0, dest->net);
+10 -3
View File
@@ -902,7 +902,7 @@ static void routed_apdu_handler(uint16_t snet,
datalink_send_pdu(port->net, &remote_dest, npdu, &Tx_Buffer[0],
npdu_len + apdu_len);
}
} else if (port && dest->net) {
} else if (dest->net) {
debug_printf("Routing to Unknown Route %u\n", (unsigned)dest->net);
/* Case 3: a global broadcast is required. */
dest->mac_len = 0;
@@ -911,8 +911,15 @@ static void routed_apdu_handler(uint16_t snet,
routed_src_address(&router_src, snet, src);
npdu_len = npdu_encode_pdu(&Tx_Buffer[0], dest, &router_src, npdu);
memmove(&Tx_Buffer[npdu_len], apdu, apdu_len);
datalink_send_pdu(
port->net, dest, npdu, &Tx_Buffer[0], npdu_len + apdu_len);
/* send to all other ports */
port = Router_Table_Head;
while (port != NULL) {
if (port->net != snet) {
datalink_send_pdu(port->net, dest, npdu, &Tx_Buffer[0],
npdu_len + apdu_len);
}
port = port->next;
}
/* If the next router is unknown, an attempt shall be made to
identify it using a Who-Is-Router-To-Network message. */
send_who_is_router_to_network(0, dest->net);