From 701674399a8dea40f21e766504dd69810d39f6d0 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Wed, 15 Apr 2026 18:14:28 +0200 Subject: [PATCH] Release v1.0.0 under Apache-2.0 license --- LICENSE | 217 ++++++++++++++++-- cmd/client/color.go | 2 +- cmd/client/commands.go | 2 +- cmd/client/complete.go | 2 +- cmd/client/main.go | 2 +- cmd/client/shell.go | 2 +- cmd/client/tree.go | 2 +- cmd/client/tree_test.go | 2 +- cmd/client/watch.go | 2 +- cmd/frontend/assets.go | 2 +- cmd/frontend/broker.go | 2 +- cmd/frontend/broker_test.go | 2 +- cmd/frontend/client.go | 2 +- cmd/frontend/handlers.go | 2 +- cmd/frontend/main.go | 2 +- cmd/frontend/types.go | 2 +- cmd/frontend/web/src/App.tsx | 2 + cmd/frontend/web/src/api/admin.ts | 2 + cmd/frontend/web/src/api/rest.ts | 2 + cmd/frontend/web/src/api/sse.ts | 2 + .../web/src/components/BackendActionsMenu.tsx | 2 + cmd/frontend/web/src/components/Flash.tsx | 2 + cmd/frontend/web/src/components/Modal.tsx | 2 + .../web/src/components/ProbeHeartbeat.tsx | 2 + .../web/src/components/ScopeSelector.tsx | 2 + .../web/src/components/StatusBadge.tsx | 2 + cmd/frontend/web/src/components/Zippy.tsx | 2 + cmd/frontend/web/src/env.d.ts | 2 + cmd/frontend/web/src/main.tsx | 2 + cmd/frontend/web/src/stores/events.ts | 2 + cmd/frontend/web/src/stores/mode.ts | 2 + cmd/frontend/web/src/stores/scope.ts | 2 + cmd/frontend/web/src/stores/state.ts | 2 + cmd/frontend/web/src/stores/tick.ts | 2 + cmd/frontend/web/src/stores/zippy.ts | 2 + cmd/frontend/web/src/styles/reset.css | 2 + cmd/frontend/web/src/styles/theme.css | 2 + cmd/frontend/web/src/types.ts | 2 + cmd/frontend/web/src/views/BackendRow.tsx | 2 + cmd/frontend/web/src/views/DebugPanel.tsx | 2 + cmd/frontend/web/src/views/FrontendCard.tsx | 2 + cmd/frontend/web/src/views/Overview.tsx | 2 + cmd/frontend/web/src/views/VPPInfoPanel.tsx | 2 + cmd/frontend/web/vite.config.ts | 2 + cmd/server/main.go | 2 +- cmd/tester/main.go | 2 +- cmd/tester/model.go | 2 +- cmd/tester/probe.go | 2 +- cmd/tester/stats.go | 2 +- cmd/tester/view.go | 2 +- cmd/version.go | 2 +- debian/build-deb.sh | 1 + internal/checker/checker.go | 2 +- internal/checker/checker_test.go | 2 +- internal/config/config.go | 2 +- internal/config/config_test.go | 2 +- internal/grpcapi/loghandler.go | 2 +- internal/grpcapi/server.go | 2 +- internal/grpcapi/server_test.go | 2 +- internal/health/state.go | 2 +- internal/health/state_test.go | 2 +- internal/health/weights.go | 2 +- internal/health/weights_test.go | 2 +- internal/metrics/metrics.go | 2 +- internal/prober/http.go | 2 +- internal/prober/http_test.go | 2 +- internal/prober/icmp.go | 2 +- internal/prober/netns.go | 2 +- internal/prober/prober.go | 2 +- internal/prober/tcp.go | 2 +- internal/prober/tls.go | 2 +- internal/vpp/apilog.go | 2 +- internal/vpp/client.go | 2 +- internal/vpp/fibstats.go | 2 +- internal/vpp/lbconf.go | 2 +- internal/vpp/lbstate.go | 2 +- internal/vpp/lbstats.go | 2 +- internal/vpp/lbsync.go | 2 +- internal/vpp/lbsync_test.go | 2 +- internal/vpp/reconciler.go | 2 +- internal/vpp/warmup.go | 2 +- internal/vpp/warmup_test.go | 2 +- tests/01-maglevd/maglevd-lab/start.sh | 1 + tests/rf-run.sh | 1 + 84 files changed, 309 insertions(+), 71 deletions(-) diff --git a/LICENSE b/LICENSE index 32123e0..4fc01d6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,22 +1,201 @@ -Copyright (c) 2026, Pim van Pelt -All rights reserved. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + 1. Definitions. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for describing the origin of the Work and + reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Support. While redistributing the Work or + Derivative Works thereof, You may choose to offer, and charge a + fee for, acceptance of support, warranty, indemnity, or other + liability obligations and/or rights consistent with this License. + However, in accepting such obligations, You may act only on Your + own behalf and on Your sole responsibility, not on behalf of any + other Contributor, and only if You agree to indemnify, defend, + and hold each Contributor harmless for any liability incurred by, + or claims asserted against, such Contributor by reason of your + accepting any such warranty or support. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Pim van Pelt + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/cmd/client/color.go b/cmd/client/color.go index 3364b8a..b97db20 100644 --- a/cmd/client/color.go +++ b/cmd/client/color.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/commands.go b/cmd/client/commands.go index 14b53e7..4799754 100644 --- a/cmd/client/commands.go +++ b/cmd/client/commands.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/complete.go b/cmd/client/complete.go index a513b02..ad3a0ab 100644 --- a/cmd/client/complete.go +++ b/cmd/client/complete.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/main.go b/cmd/client/main.go index 071a534..216b0ca 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/shell.go b/cmd/client/shell.go index 55c85bd..c955edd 100644 --- a/cmd/client/shell.go +++ b/cmd/client/shell.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/tree.go b/cmd/client/tree.go index ac3b713..10070d9 100644 --- a/cmd/client/tree.go +++ b/cmd/client/tree.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/tree_test.go b/cmd/client/tree_test.go index e09aed3..2d7c935 100644 --- a/cmd/client/tree_test.go +++ b/cmd/client/tree_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/client/watch.go b/cmd/client/watch.go index 213dd53..0e55c3c 100644 --- a/cmd/client/watch.go +++ b/cmd/client/watch.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/assets.go b/cmd/frontend/assets.go index a465756..356a3fb 100644 --- a/cmd/frontend/assets.go +++ b/cmd/frontend/assets.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/broker.go b/cmd/frontend/broker.go index b37cba4..c52b9d4 100644 --- a/cmd/frontend/broker.go +++ b/cmd/frontend/broker.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/broker_test.go b/cmd/frontend/broker_test.go index 5551ec0..1c0058e 100644 --- a/cmd/frontend/broker_test.go +++ b/cmd/frontend/broker_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/client.go b/cmd/frontend/client.go index 647fca9..366871e 100644 --- a/cmd/frontend/client.go +++ b/cmd/frontend/client.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/handlers.go b/cmd/frontend/handlers.go index 5f176d7..e641e67 100644 --- a/cmd/frontend/handlers.go +++ b/cmd/frontend/handlers.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/main.go b/cmd/frontend/main.go index 707bc68..f76bfa9 100644 --- a/cmd/frontend/main.go +++ b/cmd/frontend/main.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/types.go b/cmd/frontend/types.go index 828cbd8..9795933 100644 --- a/cmd/frontend/types.go +++ b/cmd/frontend/types.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/frontend/web/src/App.tsx b/cmd/frontend/web/src/App.tsx index 4f69cc3..16b4f54 100644 --- a/cmd/frontend/web/src/App.tsx +++ b/cmd/frontend/web/src/App.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { Show, createSignal, onMount, type Component } from "solid-js"; import { fetchAllState, fetchVersion } from "./api/rest"; import { openEventStream } from "./api/sse"; diff --git a/cmd/frontend/web/src/api/admin.ts b/cmd/frontend/web/src/api/admin.ts index c482112..e42fbd5 100644 --- a/cmd/frontend/web/src/api/admin.ts +++ b/cmd/frontend/web/src/api/admin.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import type { BackendSnapshot, FrontendSnapshot } from "../types"; export type BackendAction = "pause" | "resume" | "enable" | "disable"; diff --git a/cmd/frontend/web/src/api/rest.ts b/cmd/frontend/web/src/api/rest.ts index d42e293..82d7ede 100644 --- a/cmd/frontend/web/src/api/rest.ts +++ b/cmd/frontend/web/src/api/rest.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import type { MaglevdInfo, StateSnapshot, VersionInfo } from "../types"; async function getJSON(path: string): Promise { diff --git a/cmd/frontend/web/src/api/sse.ts b/cmd/frontend/web/src/api/sse.ts index 615f0bb..dc181ad 100644 --- a/cmd/frontend/web/src/api/sse.ts +++ b/cmd/frontend/web/src/api/sse.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import type { BackendEventPayload, BrowserEvent, diff --git a/cmd/frontend/web/src/components/BackendActionsMenu.tsx b/cmd/frontend/web/src/components/BackendActionsMenu.tsx index d1cd7c5..53170cb 100644 --- a/cmd/frontend/web/src/components/BackendActionsMenu.tsx +++ b/cmd/frontend/web/src/components/BackendActionsMenu.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { For, Show, createEffect, createSignal, onCleanup, type Component } from "solid-js"; import { runBackendAction, setBackendWeight, type BackendAction } from "../api/admin"; import Modal from "./Modal"; diff --git a/cmd/frontend/web/src/components/Flash.tsx b/cmd/frontend/web/src/components/Flash.tsx index 1cce6b2..23f7222 100644 --- a/cmd/frontend/web/src/components/Flash.tsx +++ b/cmd/frontend/web/src/components/Flash.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createEffect, createMemo, on, type Component, type JSX } from "solid-js"; type Props = { diff --git a/cmd/frontend/web/src/components/Modal.tsx b/cmd/frontend/web/src/components/Modal.tsx index f1e9b6e..4c5ead4 100644 --- a/cmd/frontend/web/src/components/Modal.tsx +++ b/cmd/frontend/web/src/components/Modal.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createEffect, onCleanup, type Component, type JSX } from "solid-js"; import { Portal } from "solid-js/web"; diff --git a/cmd/frontend/web/src/components/ProbeHeartbeat.tsx b/cmd/frontend/web/src/components/ProbeHeartbeat.tsx index a97baa6..7e20587 100644 --- a/cmd/frontend/web/src/components/ProbeHeartbeat.tsx +++ b/cmd/frontend/web/src/components/ProbeHeartbeat.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createEffect, createSignal, onCleanup, type Component } from "solid-js"; import { events } from "../stores/events"; import type { LogEventPayload } from "../types"; diff --git a/cmd/frontend/web/src/components/ScopeSelector.tsx b/cmd/frontend/web/src/components/ScopeSelector.tsx index b4e878d..8453336 100644 --- a/cmd/frontend/web/src/components/ScopeSelector.tsx +++ b/cmd/frontend/web/src/components/ScopeSelector.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { For, type Component } from "solid-js"; import { scope, setScope } from "../stores/scope"; import { state } from "../stores/state"; diff --git a/cmd/frontend/web/src/components/StatusBadge.tsx b/cmd/frontend/web/src/components/StatusBadge.tsx index 2aafad0..d6f72e7 100644 --- a/cmd/frontend/web/src/components/StatusBadge.tsx +++ b/cmd/frontend/web/src/components/StatusBadge.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import type { Component } from "solid-js"; type Props = { state: string; label?: string }; diff --git a/cmd/frontend/web/src/components/Zippy.tsx b/cmd/frontend/web/src/components/Zippy.tsx index 070fb4e..3e74678 100644 --- a/cmd/frontend/web/src/components/Zippy.tsx +++ b/cmd/frontend/web/src/components/Zippy.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import type { Component, JSX } from "solid-js"; import { isZippyOpen, setZippyOpen } from "../stores/zippy"; diff --git a/cmd/frontend/web/src/env.d.ts b/cmd/frontend/web/src/env.d.ts index a9d3704..adf8852 100644 --- a/cmd/frontend/web/src/env.d.ts +++ b/cmd/frontend/web/src/env.d.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + /// declare module "*.svg" { diff --git a/cmd/frontend/web/src/main.tsx b/cmd/frontend/web/src/main.tsx index 110b53a..60e7395 100644 --- a/cmd/frontend/web/src/main.tsx +++ b/cmd/frontend/web/src/main.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + /* @refresh reload */ import { render } from "solid-js/web"; import App from "./App"; diff --git a/cmd/frontend/web/src/stores/events.ts b/cmd/frontend/web/src/stores/events.ts index 926e133..b82bf95 100644 --- a/cmd/frontend/web/src/stores/events.ts +++ b/cmd/frontend/web/src/stores/events.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createSignal } from "solid-js"; import type { BrowserEvent } from "../types"; diff --git a/cmd/frontend/web/src/stores/mode.ts b/cmd/frontend/web/src/stores/mode.ts index eb4e236..0c4d125 100644 --- a/cmd/frontend/web/src/stores/mode.ts +++ b/cmd/frontend/web/src/stores/mode.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + // isAdmin is fixed at page-load based on the URL. The SAME App.tsx // drives both /view/* and /admin/* — importing this constant lets any // component render admin-only affordances (e.g. the backend actions diff --git a/cmd/frontend/web/src/stores/scope.ts b/cmd/frontend/web/src/stores/scope.ts index e9dd167..aef2578 100644 --- a/cmd/frontend/web/src/stores/scope.ts +++ b/cmd/frontend/web/src/stores/scope.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createSignal } from "solid-js"; // Persisted selection of which maglevd the SPA is currently scoped to. diff --git a/cmd/frontend/web/src/stores/state.ts b/cmd/frontend/web/src/stores/state.ts index dda89ae..5ffc019 100644 --- a/cmd/frontend/web/src/stores/state.ts +++ b/cmd/frontend/web/src/stores/state.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createStore, produce } from "solid-js/store"; import type { BackendEventPayload, diff --git a/cmd/frontend/web/src/stores/tick.ts b/cmd/frontend/web/src/stores/tick.ts index 369e9b0..764b88f 100644 --- a/cmd/frontend/web/src/stores/tick.ts +++ b/cmd/frontend/web/src/stores/tick.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createSignal } from "solid-js"; // Global 5-second ticker used by relative-time helpers so their output diff --git a/cmd/frontend/web/src/stores/zippy.ts b/cmd/frontend/web/src/stores/zippy.ts index ff51ccc..7174f43 100644 --- a/cmd/frontend/web/src/stores/zippy.ts +++ b/cmd/frontend/web/src/stores/zippy.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { createSignal } from "solid-js"; // Persistence layer for collapsible (Zippy) panels. The cookie is a diff --git a/cmd/frontend/web/src/styles/reset.css b/cmd/frontend/web/src/styles/reset.css index fdf643c..b938ba1 100644 --- a/cmd/frontend/web/src/styles/reset.css +++ b/cmd/frontend/web/src/styles/reset.css @@ -1,3 +1,5 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + *, *::before, *::after { diff --git a/cmd/frontend/web/src/styles/theme.css b/cmd/frontend/web/src/styles/theme.css index c27643e..d5c4bee 100644 --- a/cmd/frontend/web/src/styles/theme.css +++ b/cmd/frontend/web/src/styles/theme.css @@ -1,3 +1,5 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + :root { --bg: #fafafa; --bg-soft: #f0f0f0; diff --git a/cmd/frontend/web/src/types.ts b/cmd/frontend/web/src/types.ts index ef039a7..05620f2 100644 --- a/cmd/frontend/web/src/types.ts +++ b/cmd/frontend/web/src/types.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + // TS mirror of cmd/frontend/types.go — keep in sync. export type MaglevdInfo = { diff --git a/cmd/frontend/web/src/views/BackendRow.tsx b/cmd/frontend/web/src/views/BackendRow.tsx index 7c61777..4975230 100644 --- a/cmd/frontend/web/src/views/BackendRow.tsx +++ b/cmd/frontend/web/src/views/BackendRow.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { Show, createMemo, type Component } from "solid-js"; import type { BackendSnapshot, PoolBackendSnapshot } from "../types"; import StatusBadge from "../components/StatusBadge"; diff --git a/cmd/frontend/web/src/views/DebugPanel.tsx b/cmd/frontend/web/src/views/DebugPanel.tsx index 54e81bc..7c83a73 100644 --- a/cmd/frontend/web/src/views/DebugPanel.tsx +++ b/cmd/frontend/web/src/views/DebugPanel.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { For, createEffect, createMemo, createSignal, type Component } from "solid-js"; import Zippy from "../components/Zippy"; import { events } from "../stores/events"; diff --git a/cmd/frontend/web/src/views/FrontendCard.tsx b/cmd/frontend/web/src/views/FrontendCard.tsx index ab668c0..e794b7c 100644 --- a/cmd/frontend/web/src/views/FrontendCard.tsx +++ b/cmd/frontend/web/src/views/FrontendCard.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { For, Show, type Component } from "solid-js"; import type { FrontendSnapshot, StateSnapshot } from "../types"; import BackendRow from "./BackendRow"; diff --git a/cmd/frontend/web/src/views/Overview.tsx b/cmd/frontend/web/src/views/Overview.tsx index d6d7622..9e4485f 100644 --- a/cmd/frontend/web/src/views/Overview.tsx +++ b/cmd/frontend/web/src/views/Overview.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { For, Show, type Component } from "solid-js"; import { scope } from "../stores/scope"; import { state } from "../stores/state"; diff --git a/cmd/frontend/web/src/views/VPPInfoPanel.tsx b/cmd/frontend/web/src/views/VPPInfoPanel.tsx index d413719..6b4dadd 100644 --- a/cmd/frontend/web/src/views/VPPInfoPanel.tsx +++ b/cmd/frontend/web/src/views/VPPInfoPanel.tsx @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { Show, createEffect, createSignal, onCleanup, type Component } from "solid-js"; import Zippy from "../components/Zippy"; import Flash from "../components/Flash"; diff --git a/cmd/frontend/web/vite.config.ts b/cmd/frontend/web/vite.config.ts index c95c3bb..bfdc2d1 100644 --- a/cmd/frontend/web/vite.config.ts +++ b/cmd/frontend/web/vite.config.ts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 + import { defineConfig } from "vite"; import solid from "vite-plugin-solid"; diff --git a/cmd/server/main.go b/cmd/server/main.go index da1c8ab..0a354fa 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/tester/main.go b/cmd/tester/main.go index ae0fb04..f26abf5 100644 --- a/cmd/tester/main.go +++ b/cmd/tester/main.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 // maglevt is a tiny TUI that reads maglev.yaml, enumerates every VIP // and hits it on a tight cadence (default 100ms) from outside the load diff --git a/cmd/tester/model.go b/cmd/tester/model.go index 83accbc..cb0f2b1 100644 --- a/cmd/tester/model.go +++ b/cmd/tester/model.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/tester/probe.go b/cmd/tester/probe.go index e5f63b4..84c420e 100644 --- a/cmd/tester/probe.go +++ b/cmd/tester/probe.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/tester/stats.go b/cmd/tester/stats.go index 86fb75f..36b4673 100644 --- a/cmd/tester/stats.go +++ b/cmd/tester/stats.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/tester/view.go b/cmd/tester/view.go index 929edc7..050eaf4 100644 --- a/cmd/tester/view.go +++ b/cmd/tester/view.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package main diff --git a/cmd/version.go b/cmd/version.go index 4141cbc..fe24c7c 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package cmd diff --git a/debian/build-deb.sh b/debian/build-deb.sh index 46aa0cc..79a3384 100755 --- a/debian/build-deb.sh +++ b/debian/build-deb.sh @@ -1,4 +1,5 @@ #!/bin/bash +# SPDX-License-Identifier: Apache-2.0 # Build one vpp-maglev* Debian package for one architecture. # Usage: build-deb.sh # diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 46f6432..de89fb8 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package checker diff --git a/internal/checker/checker_test.go b/internal/checker/checker_test.go index 44e45aa..ed22a2f 100644 --- a/internal/checker/checker_test.go +++ b/internal/checker/checker_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package checker diff --git a/internal/config/config.go b/internal/config/config.go index 9aa307c..e9c63ba 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package config diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 556a00d..b1976f2 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package config diff --git a/internal/grpcapi/loghandler.go b/internal/grpcapi/loghandler.go index acf8b8e..f00bd37 100644 --- a/internal/grpcapi/loghandler.go +++ b/internal/grpcapi/loghandler.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package grpcapi diff --git a/internal/grpcapi/server.go b/internal/grpcapi/server.go index 9c7360a..8f91f28 100644 --- a/internal/grpcapi/server.go +++ b/internal/grpcapi/server.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package grpcapi diff --git a/internal/grpcapi/server_test.go b/internal/grpcapi/server_test.go index b2d79f1..5494450 100644 --- a/internal/grpcapi/server_test.go +++ b/internal/grpcapi/server_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package grpcapi diff --git a/internal/health/state.go b/internal/health/state.go index acc3e16..b377b18 100644 --- a/internal/health/state.go +++ b/internal/health/state.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package health diff --git a/internal/health/state_test.go b/internal/health/state_test.go index 38f2822..98151d9 100644 --- a/internal/health/state_test.go +++ b/internal/health/state_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package health diff --git a/internal/health/weights.go b/internal/health/weights.go index 1c80844..25a7167 100644 --- a/internal/health/weights.go +++ b/internal/health/weights.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package health diff --git a/internal/health/weights_test.go b/internal/health/weights_test.go index 776aa86..5abfdea 100644 --- a/internal/health/weights_test.go +++ b/internal/health/weights_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package health diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go index 4ff91ae..1f230a9 100644 --- a/internal/metrics/metrics.go +++ b/internal/metrics/metrics.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 // Package metrics exposes Prometheus metrics for maglevd. // diff --git a/internal/prober/http.go b/internal/prober/http.go index dc1bf7a..354f92b 100644 --- a/internal/prober/http.go +++ b/internal/prober/http.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/http_test.go b/internal/prober/http_test.go index a6294d0..8d21e3a 100644 --- a/internal/prober/http_test.go +++ b/internal/prober/http_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/icmp.go b/internal/prober/icmp.go index 97a186f..937e6ef 100644 --- a/internal/prober/icmp.go +++ b/internal/prober/icmp.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/netns.go b/internal/prober/netns.go index b1c41b9..ab2d3c2 100644 --- a/internal/prober/netns.go +++ b/internal/prober/netns.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/prober.go b/internal/prober/prober.go index 7e90c8a..5251f06 100644 --- a/internal/prober/prober.go +++ b/internal/prober/prober.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/tcp.go b/internal/prober/tcp.go index 1961544..4892a2c 100644 --- a/internal/prober/tcp.go +++ b/internal/prober/tcp.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/prober/tls.go b/internal/prober/tls.go index 8f93083..afc18a8 100644 --- a/internal/prober/tls.go +++ b/internal/prober/tls.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package prober diff --git a/internal/vpp/apilog.go b/internal/vpp/apilog.go index b697095..8ac2388 100644 --- a/internal/vpp/apilog.go +++ b/internal/vpp/apilog.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/client.go b/internal/vpp/client.go index 2736fcc..0b553dd 100644 --- a/internal/vpp/client.go +++ b/internal/vpp/client.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 // Package vpp manages the connection to a local VPP instance over its // binary API and stats sockets. The Client reconnects automatically when diff --git a/internal/vpp/fibstats.go b/internal/vpp/fibstats.go index 93a60d7..7e62be9 100644 --- a/internal/vpp/fibstats.go +++ b/internal/vpp/fibstats.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/lbconf.go b/internal/vpp/lbconf.go index a2b58dd..1f675e4 100644 --- a/internal/vpp/lbconf.go +++ b/internal/vpp/lbconf.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/lbstate.go b/internal/vpp/lbstate.go index ce6b2aa..81f3ced 100644 --- a/internal/vpp/lbstate.go +++ b/internal/vpp/lbstate.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/lbstats.go b/internal/vpp/lbstats.go index 2fcfdbd..5be5341 100644 --- a/internal/vpp/lbstats.go +++ b/internal/vpp/lbstats.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/lbsync.go b/internal/vpp/lbsync.go index 30ce678..70a97e6 100644 --- a/internal/vpp/lbsync.go +++ b/internal/vpp/lbsync.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/lbsync_test.go b/internal/vpp/lbsync_test.go index b6a68e3..eddd5c8 100644 --- a/internal/vpp/lbsync_test.go +++ b/internal/vpp/lbsync_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/reconciler.go b/internal/vpp/reconciler.go index 2068cd4..360235d 100644 --- a/internal/vpp/reconciler.go +++ b/internal/vpp/reconciler.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/warmup.go b/internal/vpp/warmup.go index 729b985..ba811b2 100644 --- a/internal/vpp/warmup.go +++ b/internal/vpp/warmup.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/internal/vpp/warmup_test.go b/internal/vpp/warmup_test.go index d2a0417..4edfd44 100644 --- a/internal/vpp/warmup_test.go +++ b/internal/vpp/warmup_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2026, Pim van Pelt +// SPDX-License-Identifier: Apache-2.0 package vpp diff --git a/tests/01-maglevd/maglevd-lab/start.sh b/tests/01-maglevd/maglevd-lab/start.sh index 3ed436a..40c6ef1 100755 --- a/tests/01-maglevd/maglevd-lab/start.sh +++ b/tests/01-maglevd/maglevd-lab/start.sh @@ -1,4 +1,5 @@ #!/bin/sh +# SPDX-License-Identifier: Apache-2.0 ARCH=$(uname -m) case "$ARCH" in x86_64) ARCH=amd64 ;; diff --git a/tests/rf-run.sh b/tests/rf-run.sh index 1dbca5c..c0dd140 100755 --- a/tests/rf-run.sh +++ b/tests/rf-run.sh @@ -1,4 +1,5 @@ #!/bin/bash +# SPDX-License-Identifier: Apache-2.0 # Run Robot Framework tests for vpp-containerlab. # Arguments: # $1 - container runtime: [docker, podman]