Release v3.1.0a5

This commit is contained in:
grossmj 2026-08-19 18:06:12 +02:00
parent 51c6440403
commit 582412bac3
No known key found for this signature in database
GPG Key ID: 1E7DD6DBB53FF3D7
3 changed files with 171 additions and 3 deletions

168
CHANGELOG
View File

@ -1,5 +1,173 @@
# Change Log
## 3.1.0a5 19/08/2026
* Bundle web-ui v3.1.0a5
* Sync appliances
* copilot: sync CONSOLE_TYPES with the server ConsoleType enum
* feat: Enhance information displayed on the system status dashboard
* docker: cap GNS3_STOP_TIMEOUT at 210 s (controller stop budget)
* docker: harden the shm/devices/extra_configs/masking work (code review)
* docker: make the vendor graceful-stop grace period configurable (GNS3_STOP_TIMEOUT)
* docker: graceful stop for vendor NOS containers (SIGTERM + 60s grace)
* fix: UDP port allocation race causing link self-loop (one-way links)
* add support basic support for OpenBSD.
* docker: use the container's chown (not busybox) in vendor volume/perms path
* docker: mask systemd-udevd in privileged containers (GNS3_MASK_UDEV)
* docker: persist extra_configs in the template DB table
* docker: inject config files into containers via extra_configs
* docker: warn about low inotify/file-max and missing FUSE at connect
* docker: inject /dev/shm size and host devices via HostConfig from env
* appliance: expose custom_adapters on the v1-6 appliance model
* appliance: accept docker_exec console type in Docker appliances
* fix: recreate docker_exec console on reconnect after CLI exit
* vendor: drop the hardcoded /etc/network mount for SKIP_INIT containers
* vendor: skip /etc/network in volume bridge and permission passes
* fix: run _fix_permissions container-side on /gns3volumes mount targets
* fix: host-side permission fix + SKIP_INIT volume persistence docs
* refactor: move vendor NOS Docker support into VendorDockerVM subclass
* docker_exec console: wrap exec command in while-true loop so sr_cli restarts on quit
* Prototype: vendor NOS Docker node support (SR Linux etc.) — docker_exec console via Docker exec API (pty + hijacked HTTP + NAWS resize)
* fix: update CI configuration to use a single OS and remove Windows-specific dependencies
* fix: breaking change with dependency FastAPI v0.137.0 https://fastapi.tiangolo.com/release-notes/#specific-breaking-changes
* fix: suppress redundant console port setter log during Docker node create
* revert: restore force_close=True in compute._session()
* perf: parallelize batch NIO creation across nodes
* fix: scope marker reconcile to the current bridge/NIO
* cleanup: remove stray debug print in Dynamips node creation
* fix: reconcile marker filters in _ubridge_apply_markers (delete/update)
* log: suppress marker sink stats when no matches received
* log: add periodic marker.match throughput statistics
* marker: route marker.match to a dedicated project WS channel
* perf: raise marker UDP receive buffer from ~208KB to 8MB
* perf: move project-open marker inheritance to prepare phase
* perf: parallelise compute-side batch NIO update per node
* perf: batch update/delete marker-def fan-out too (full project-level)
* perf: batch marker-def fan-out to one PUT /nios/batch per compute
* log: add marker fan-out timing for project-open and interactive def-change
* tune: raise start_all concurrency from 3 to 10
* revert: drop _connect_nio thread-pool executor, restore async _ubridge_send
* fix: use socket.fromfd in send_batch_sync for Python 3.13 compat
* log: demote all per-node lifecycle INFO logs to DEBUG
* fix: await Dynamips.create_nio (it is async, unlike sync base)
* fix: use bound-method param count for Dynamips create_nio detection
* fix: Dynamips create_nio(node, nio_settings) takes extra arg + add tests
* log: add start/stop/close progress lines; revert start concurrency to 3
* log: lower per-node lifecycle logs in base_node to DEBUG
* perf: raise start/stop/suspend/reset-console concurrency from 3
* fix: race in concurrent node creation sending duplicate POST /projects
* log: lower per-node docker lifecycle logs to DEBUG
* log: emit progress lines for node and link loading on project open
* cleanup: remove project-open stage timing logs, lower NIO-added log to debug
* perf: skip per-link topology dump during project-open prepare
* perf: batch NIO dispatch on project open (one HTTP per compute)
* perf: cache compute.host_ip + add UDPLink.create timing log
* perf: dedicated 500-worker thread pool for ubridge batch I/O
* perf: offload per-NIO ubridge commands to thread-pool executor
* perf: enable TCP keep-alive for local compute HTTP requests
* debug: add per-command timing to _connect_nio ubridge calls
* perf: parallelize UDP port allocation and NIO creation in UDPLink.create
* fix: SIGKILL docker container on stop instead of 5s grace period
* fix: add event handling for deleted projects
* fix: tests after merging
* server: raise the open-files (RLIMIT_NOFILE) limit at startup
* marker: batch topology dumps in bulk fan-out (per-def on 500+ links was ~1 minute)
* marker: concurrent (bounded) definition fan-out
* marker: forward data_link_type on per-link marker create
* iou: skip already-installed markers in _ubridge_apply_markers (NIO update idempotency)
* marker: serial-link (WAN) support via data_link_type -> uBridge linktype
* iou: forward data_link_type on capture start so serial pcaps use the correct linktype
* ubridge: default the control transport to unix
* ubridge: require version >= 1.2.0
* fix: add missing HTTPException import
* mcp: drop direction from marker_definition tool
* marker: tighten marker name max length from 128 to 32
* marker: drop deleted marker from port NIO cache to stop empty pcap on restart
* marker: validate def BPF once, skip re-validation on inherited fan-out
* marker: point directional defs at BPF, refresh implementation doc
* marker: incremental apply, clear bridge map on uBridge stop
* marker: fine-grained filter ops, clean pcap on remove
* marker: restore direction on project load, reject tx/rx on definitions
* schema: accept direction='both' in marker schemas, normalize to None
* qemu: demote QEMU monitor connect and set_link logs to DEBUG
* marker: key _marker_filter_bridges by (name, link_id) so multi-link nodes toggle every copy
* marker: make per-filter toggle fall back to NIO rebuild when the marker isn't installed
* marker: make per-filter toggle a no-op when the marker isn't installed
* marker: rework pause/resume from project-wide to per-definition
* marker: fix PUT marker with an enabled-only body (bpf no longer required)
* marker: persist project-wide markers_paused to the .gns3 file
* marker: document pause/resume and instant enabled toggle
* marker: test enabled/pause/resume and instant toggle
* marker: drive uBridge enabled/pause/resume in real time
* marker: add direction-clear, routing, and ubridge transport tests
* marker: support clearing direction via explicit null / "both"
* marker: let callers pin the capture node via capture_node_id
* Name AF_UNIX sockets by node id for self-describing debuggability
* Detect unsupported -U flag and fail fast with a clear error
* Add configurable uBridge control channel transport (tcp/unix)
* fix(import): unvalidated symlink creation in import_project
* fix(qemu): move the bios options after the network ones
* fix(qemu): fix addition of QEMU RNG device causes interface names to change
* bugfix: docker workflow needs lowercase name
* fix(qemu): remove trailing space from RNG object argument
* Add MCP tools for traffic-insight marker feature
* Improve MCP tool descriptions for link_update, device_show_run, and link_reset
* Do not start nodes when deleting a project
* fix: correct always-true state check in DockerVM.stop()
* add bug report issue template
* Adds controller and compute API support for explicitly pulling or updating Docker images.
* feat(tests): increase maximum open file descriptors for test runs on Unix
* (feat): Implement functional Layer 1 keepalive support for IOU/IOL nodes
* Fix typo with ovmf_firmware_dir
* Fix issues after merging
* fix(builtin): hide GNS3 internal bridge interfaces from Cloud node
* feat(builtin): NAT node returns its interface IP info in asdict()
* fix(controller): refresh cloud/nat node interfaces from compute on GET
* refactor(builtin): use deterministic bridge name from switch UUID
* fix(builtin): bring kernel bridge UP after creation
* feat: migrate builtin EthernetSwitch from Dynamips ethsw to ubridge brctl
* fix(mcp): remove unreliable node_reload / node_reload_all tools
* fix(rbac): guard None current_user on websocket auth failure
* fix(mcp): thread token_version into console/download token minting
* fix(mcp): pass user.token_version when generating temp JWT from API key
* fix(marker): avoid reentrant-lock deadlock when uBridge starts lazily
* fix(marker): per-link attribution via link field in MARK signals
* fix(marker): set nio.markers on iou/dynamips/cloud nio update
* fix(marker): reject reserved global-prefix names only on create
* fix(marker): clean inherited markers on def delete
* feat(marker): add highlight_duration render hint
* fix(marker): fix inheritance hook, topology load, update sync, and asdict
* fix(marker): export MarkerDefinitionCreate from schemas package
* fix(marker): replace pydantic lookahead pattern with field_validator
* feat(marker): add project-level marker definition inheritance
* fix(marker): reserve "global" name prefix for future marker inheritance
* fix(marker): extend marker support to dynamips and cloud nodes
* fix(marker): enable marker support for docker nodes
* fix(marker): tolerate port conflict on marker listener startup
* fix(marker): validate marker name and expose enabled via REST
* fix(marker): uniquify auto-generated marker names per link
* feat(marker): add project-level marker aggregation endpoint
* feat(marker): add IOU node marker support via iol_bridge
* refactor(marker): converge to filter single-path model, remove dual-apply endpoints
* fix(marker): restore markers from topology on project load
* feat(marker): add optional color field to marker data model
* fix(marker): use allowlist in _choose_marker_side, align with _get_filter_node
* fix(marker): stop auto-deleting markers on node stop in node_updated
* fix(marker): ride markers on NIO so they survive node restart and project reload
* config: set marker_listen_port default to 3070 and document in config templates
* fix(marker): add _choose_marker_side to exclude non-uBridge node types
* Only set IOU images to be executable when importing images
* fix(import): project import does not move images symlinks into place
* Search for system UEFI that is compatible with Python < 3.12
* UEFI improvements for Qemu VMs * Add OVMF firmware directory configuration * Automatically add a Random Number Generator (RNG) device when using uefi option is enabled
* fix(docker): handle container name conflict automatically
* fix: gns3-server crashes on startup if "Open this project in the background" is active but there is a problem with that project
* Handle HTTPNotFound exception when retrieving compute status
* Replace ControllerForbiddenError with aiohttp.web.HTTPForbidden for project deletion error handling
* Fix: Check compute connectivity before open() during project deletion
* Use typed InterfaceStatus enum and simplify stats fallback in interfaces()
* Expose full interface address list and link state in cloud node API
## 2.2.61 30/07/2026
* Sync appliances

View File

@ -58,7 +58,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://7b5d8f1189b61e674dc6ee41b0ec9da8@o19455.ingest.us.sentry.io/38482"
DSN = "https://b8b31d4b05b8a353824c5e45f7792885@o19455.ingest.us.sentry.io/38482"
_instance = None
def __init__(self):

View File

@ -22,8 +22,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "3.1.0.dev5"
__version_info__ = (3, 1, 0, 99)
__version__ = "3.1.0a5"
__version_info__ = (3, 1, 0, -99)
if "dev" in __version__:
try: