Skip to content

Commit a92d76e

Browse files
authored
fix: Source route table checking issue (#23)
1 parent d560e1b commit a92d76e

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zigbee-on-host",
3-
"version": "0.1.6",
3+
"version": "0.1.7",
44
"description": "ZigBee stack designed to run on a host and communicate with a radio co-processor (RCP)",
55
"engines": {
66
"node": ">=20.17.0"

src/drivers/ot-rcp-driver.ts

+11-10
Original file line numberDiff line numberDiff line change
@@ -4270,22 +4270,23 @@ export class OTRCPDriver extends EventEmitter<AdapterDriverEventMap> {
42704270
}
42714271

42724272
for (const existingEntry of existingEntries) {
4273-
if (newEntry.pathCost !== existingEntry.pathCost) {
4274-
return false;
4275-
}
4273+
if (newEntry.pathCost === existingEntry.pathCost && newEntry.relayAddresses.length === existingEntry.relayAddresses.length) {
4274+
let matching = true;
42764275

4277-
if (newEntry.relayAddresses.length !== existingEntry.relayAddresses.length) {
4278-
return false;
4279-
}
4276+
for (let i = 0; i < newEntry.relayAddresses.length; i++) {
4277+
if (newEntry.relayAddresses[i] !== existingEntry.relayAddresses[i]) {
4278+
matching = false;
4279+
break;
4280+
}
4281+
}
42804282

4281-
for (const relay of newEntry.relayAddresses) {
4282-
if (!existingEntry.relayAddresses.includes(relay)) {
4283-
return false;
4283+
if (matching) {
4284+
return true;
42844285
}
42854286
}
42864287
}
42874288

4288-
return true;
4289+
return false;
42894290
}
42904291

42914292
/**

test/ot-rcp-driver.test.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -1365,14 +1365,23 @@ describe("OT RCP Driver", () => {
13651365
});
13661366

13671367
it("checks if source route exists in entries for a given device", () => {
1368-
driver.sourceRouteTable.set(0x4b8e, [{ relayAddresses: [1, 2], pathCost: 3 }]);
1368+
driver.sourceRouteTable.set(0x4b8e, [
1369+
{ relayAddresses: [1, 2], pathCost: 3 },
1370+
{ relayAddresses: [11, 22], pathCost: 3 },
1371+
{ relayAddresses: [33, 22, 44], pathCost: 4 },
1372+
{ relayAddresses: [], pathCost: 1 },
1373+
]);
13691374
const existingEntries = driver.sourceRouteTable.get(0x4b8e)!;
13701375

1376+
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [], pathCost: 1 }, existingEntries)).toStrictEqual(true);
1377+
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [], pathCost: 2 }, existingEntries)).toStrictEqual(false);
13711378
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [1, 2], pathCost: 3 }, existingEntries)).toStrictEqual(true);
1379+
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [2, 1], pathCost: 3 }, existingEntries)).toStrictEqual(false);
13721380
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [1, 2], pathCost: 2 }, existingEntries)).toStrictEqual(false);
13731381
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [3], pathCost: 2 }, existingEntries)).toStrictEqual(false);
13741382
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [4, 5], pathCost: 3 }, existingEntries)).toStrictEqual(false);
13751383
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [1, 2], pathCost: 3 })).toStrictEqual(true);
1384+
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [2, 1], pathCost: 3 })).toStrictEqual(false);
13761385
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [1, 2], pathCost: 2 })).toStrictEqual(false);
13771386
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [3], pathCost: 2 })).toStrictEqual(false);
13781387
expect(driver.hasSourceRoute(0x4b8e, { relayAddresses: [4, 5], pathCost: 3 })).toStrictEqual(false);

0 commit comments

Comments
 (0)