Whether a service is reachable from outside its host is decided by the address it listens on: 0.0.0.0:5432 is, 127.0.0.1:5432 is not. Reading that is the same on every Linux host, so the command and its parse live here once and a driver only carries the command across (ListeningSocketsMixin, _run_listening_sockets_command). One framed round trip: ss -lntup for every listening TCP and bound UDP socket, then /proc/<pid>/cgroup for each process holding one, which names the systemd service (v2, nested slices, v1's name=systemd hierarchy) or the container (docker-<id>.scope, /docker/<id>) it runs in. - Root: only root sees every process. The script goes as one sh -c argument, so a sudo -n prefix covers all of it; when that brings no report back the reading runs again unprivileged and says it is not attributed. - No -H: iproute2 before 4.10 fails on it, which would read as nothing listening. The header is skipped instead. - A host without ss raises ListeningSocketsUnavailable; a report cut short or a failing ss raises ValueError. - The reading is raw: docker-proxy shows up as docker.service, loopback as loopback. What counts as reachable is the consumer's call. 2.4.0. For netOrk#658.
66 lines
1.6 KiB
TOML
66 lines
1.6 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68", "wheel"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "napalm-device-types"
|
|
version = "2.4.0"
|
|
description = "Abstract device-type base classes for NAPALM drivers"
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = { text = "Apache-2.0" }
|
|
authors = [
|
|
{ name = "Christian Manivong", email = "christian@manivong.de" },
|
|
]
|
|
keywords = [
|
|
"napalm",
|
|
"network",
|
|
"automation",
|
|
"driver",
|
|
"access-point",
|
|
"switch",
|
|
"firewall",
|
|
"hypervisor",
|
|
"storage",
|
|
"nas",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: System Administrators",
|
|
"License :: OSI Approved :: Apache Software License",
|
|
"Operating System :: OS Independent",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: System :: Networking",
|
|
"Topic :: System :: Systems Administration",
|
|
"Typing :: Typed",
|
|
]
|
|
dependencies = [
|
|
"napalm>=4.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/chrismanivong/napalm-device-types"
|
|
Repository = "https://github.com/chrismanivong/napalm-device-types"
|
|
Issues = "https://github.com/chrismanivong/napalm-device-types/issues"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest",
|
|
"mypy",
|
|
"build",
|
|
"twine",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["napalm_device_types*"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.10"
|
|
strict = true
|
|
ignore_missing_imports = true
|