From 817896028fa75d1cbd45b8355b6631f02c621a72 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Tue, 2 Jun 2026 19:46:01 +0000 Subject: [PATCH] docs: split timesync selector notes --- AI.md | 21 +++++++++++++++- TODO.md | 21 ++++++++++++++-- src/nwconn.c | 71 ++++++++++++++++++++++++++++++++++------------------ 3 files changed, 85 insertions(+), 28 deletions(-) diff --git a/AI.md b/AI.md index b39fa89..6900f8f 100644 --- a/AI.md +++ b/AI.md @@ -1138,4 +1138,23 @@ Next patch number should be `0253`. migrated-file state, support-module registration, capacity accounting, migrator status, RTDM verbs, and file-migration attribute persistence. -Next patch number should be `0254`. +## 2026-06-02 - Patch 0254 TimeSync selector split 114/01..12 + +- Continued NDK-first after SDK `90` Data Migration with the planned NetWare-4.x + Time Synchronization family in `src/nwconn.c`: + - `114/01` Timesync Get Time + - `114/02` Timesync Exchange Time + - `114/05` Timesync Get Server List + - `114/06` Timesync Set Server List + - `114/12` Timesync Get Version +- The source already had selector coverage behind `MARS_NWE_4`, but the cases + were grouped with fall-through to one shared unsupported return. Patch `0254` + splits them so each selector has its own `case`, own `Request:` summary, own + `Response:` summary, and own `0xfb` return. +- Runtime behavior remains unchanged: TimeSync remains unsupported until a real + server-management/time provider exists. +- Do not emulate the NDK note that `114/06` returns success in all cases until + there is an explicit TimeSync compatibility policy and real server-list state. + +Next patch number should be `0255`. + diff --git a/TODO.md b/TODO.md index 5d02f7b..a470cf2 100644 --- a/TODO.md +++ b/TODO.md @@ -213,10 +213,11 @@ Present in the code but not yet fully endpoint-audited: records `111/00`..`111/04` as disabled `#if 0` selector slots in `src/nwconn.c` so the future semaphore provider can bridge both families. - SDK `0x2222/114` / wire `0x72` Time Synchronization is source-stub-audited - as a NetWare-4.x time-service compatibility family. Patch 0229 records + as a NetWare-4.x time-service compatibility family. Patch 0254 keeps the disabled `MARS_NWE_4` selector slots for `114/01` Get Time, `114/02` Exchange Time, `114/05` Get Server List, `114/06` Set Server List, and - `114/12` Get Version in `src/nwconn.c`. Future ownership belongs to a + `114/12` Get Version in `src/nwconn.c`, split into one case-local + Request/Response comment per selector. Future ownership belongs to a server-management/time provider, not `nwnds`; do not emulate the documented success behavior of Set Server List until there is a real TimeSync policy. - SDK `0x2222/90` / wire `0x5a` Data Migration / tree metadata is @@ -1778,3 +1779,19 @@ Follow-up: - Continue NDK-first with the next documented NetWare 1.x/2.x/3.x endpoint or planned 4.x endpoint after SDK `90` Data Migration, keeping one case-local Request/Response comment per selector and skipping 5.x-only endpoints. + +### SDK 114 TimeSync selector split + +Current status: + +- Patch `0254` revisits the planned NetWare-4.x Time Synchronization family in + `src/nwconn.c` and splits the old grouped fall-through selector notes into + individual cases for `114/01`, `114/02`, `114/05`, `114/06`, and `114/12`. +- Runtime behavior is unchanged; all TimeSync selectors still return `0xfb` + until a real server-management/time provider and compatibility policy exist. + +Follow-up: + +- Continue NDK-first with the next documented NetWare 1.x/2.x/3.x endpoint or + planned 4.x endpoint after Time Synchronization, keeping one case-local + Request/Response comment per selector and skipping 5.x-only endpoints. diff --git a/src/nwconn.c b/src/nwconn.c index 6cd528e..7731d37 100644 --- a/src/nwconn.c +++ b/src/nwconn.c @@ -7870,35 +7870,56 @@ static int handle_ncp_serv(void) switch (ts_subfunc) { case 0x01: /* 114/01 Timesync Get Time. * Request: SubFuncStrucLen=1, SubFuncCode=1. - * Reply: theTime long[3], eventOffset int64, + * Response: theTime long[3], eventOffset int64, * eventTime long, eventParm pointer/opaque. */ - case 0x02: /* 114/02 Timesync Exchange Time. - * Request/Reply: SubFuncStrucLen=103, - * SubFuncCode=2, protocolFlags, nodeFlags, - * source/target timestamps, event fields, and - * serverName char[50]. - */ - case 0x05: /* 114/05 Timesync Get Server List. - * Request: SubFuncStrucLen=5, SubFuncCode=5, - * StartNumber long. - * Reply: nameType, serverName[48], - * serverListFlags, startNumberFlag. - */ - case 0x06: /* 114/06 Timesync Set Server List. - * Request: SubFuncStrucLen=5, SubFuncCode=6, - * StartNumber long. - * Reply matches Get Server List; NDK remarks - * say this NCP returns success in all cases. - * Do not emulate that success until there is a - * real TimeSync compatibility decision. - */ - case 0x0c: /* 114/12 Timesync Get Version. - * Request: SubFuncStrucLen=1, SubFuncCode=12. - * Reply: version long. - */ completition = 0xfb; break; + + case 0x02: /* 114/02 Timesync Exchange Time. + * Request: SubFuncStrucLen=103, SubFuncCode=2, + * protocolFlags long, nodeFlags long, + * sourceOriginateTime int64, + * targetReceiveTime int64, + * targetTransmitTime int64, + * sourceReturnTime int64, eventOffset int64, + * eventTime long, serverName char[50]. + * Response: SubFuncStrucLen=103, SubFuncCode=2, + * protocolFlags long, nodeFlags long, + * source/target timestamps, event fields, and + * serverName char[50]. + */ + completition = 0xfb; + break; + + case 0x05: /* 114/05 Timesync Get Server List. + * Request: SubFuncStrucLen=5, SubFuncCode=5, + * StartNumber long. + * Response: nameType word, serverName char[48], + * serverListFlags long, startNumberFlag word. + */ + completition = 0xfb; + break; + + case 0x06: /* 114/06 Timesync Set Server List. + * Request: SubFuncStrucLen=5, SubFuncCode=6, + * StartNumber long. + * Response: nameType word, serverName char[48], + * serverListFlags long, startNumberFlag word. + * NDK remarks say this NCP returns success in + * all cases; do not emulate that success until + * there is a real TimeSync compatibility policy. + */ + completition = 0xfb; + break; + + case 0x0c: /* 114/12 Timesync Get Version. + * Request: SubFuncStrucLen=1, SubFuncCode=12. + * Response: version long. + */ + completition = 0xfb; + break; + default: completition = 0xfb; break; }