Files
KLALB/AGENTS.md
T
SerinaNya be82f55277 feat(srv6)!: add node-info update invalidation
Publish node metadata through Tiny and Full queries, synchronize Swing and
web topology details, and document the updated protocol workflow.

BREAKING CHANGE: RouterInfo no longer carries device names; peers must use
Tiny node-info queries.
2026-08-28 23:14:04 +08:00

3.3 KiB

KLALB Repository Guide

KLALB is a Java SRv6/load-balancing system. The executable entrypoint is org.kne.cloud.network.klalb.KLALBMain; runtime configuration is klalb-config.json in the repository root.

Build And Run

  • This is a plain Eclipse/IntelliJ Java project: sources are src/, vendored dependencies are lib/, and output is bin/. There is no Maven or Gradle.
  • .classpath targets JavaSE-25. Sources contain Chinese text, so manual compilation must use UTF-8:
& "C:\Program Files\Zulu\zulu-25\bin\javac.exe" -encoding UTF-8 -cp "lib/*" -d bin (Get-ChildItem -Recurse src -Filter *.java | ForEach-Object FullName)
  • Run from the repository root. Manual javac does not copy resources, so keep src on the runtime classpath:
& "C:\Program Files\Zulu\zulu-25\bin\java.exe" --enable-native-access=ALL-UNNAMED "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED" -cp "bin;src;lib/*" org.kne.cloud.network.klalb.KLALBMain
  • The native libraries and klalb-config.json are resolved from the current directory. Restart a running JVM after recompiling.
  • TUN creation normally needs elevation. For non-admin UI/routing checks, set "enableTUN": false.
  • Current full compilation emits 11 pre-existing varargs/deprecation warnings; exit code 0 is success.

Dashboard

  • dashboard/ is a Git submodule. Commit dashboard changes inside it, then update the parent repository's submodule pointer.
  • Run frontend commands from dashboard/ with pnpm:
pnpm install --frozen-lockfile
pnpm lint
pnpm typecheck
pnpm build
pnpm dev
  • pnpm build runs tsc -b then Vite and writes dashboard/dist, which the Java web server hosts. Vite development proxies /api to http://127.0.0.1:4665.
  • Add shadcn components through pnpm dlx shadcn@latest add <component>; do not hand-create replacements for installed shadcn primitives.

Verification

  • There is no CI or automated test suite. *Test* classes are manual harnesses that require real network peers.
  • For Java changes, compile and launch the app. For dashboard changes, run pnpm typecheck and pnpm build.

Important Boundaries

  • KLALBConfigItem is a polymorphic JSON array keyed by Type. Adding a type requires a subclass and cases in both default config serializer and deserializer; unknown types must remain preserved.
  • /api/config is field-by-field parsing, not whole-object Gson mapping. Keep legacy key aliases in sync with new fields.
  • Vendored Gson is 2.1: responses that are JsonElement instances must be serialized with JsonElement.toString(), not reflective gson.toJson(Object).
  • UI strings use UIEnv.getRsb(); add keys to both src/klalb_zh_CN.properties and src/klalb_en_US.properties.
  • KLALBController.PublishedNodeInfo is the thread-safe source for Tiny/Full node-info responses. Publish name, description, external endpoints, and Extra Routes through the controller method so snapshots and Tiny/Full update flags stay consistent.
  • RouterInfo no longer carries a device name. Its wire format retains an empty legacy UTF slot and RouterInfoPacket has optional Tiny/Full invalidation flags. Treat codec changes as compatibility work: preserve old-reader behavior and review a whole-mesh rollout.
  • Full node-info carries extraRoutes separately from the endpoint data list. Keep absent fields compatible with older peers.