Age | Commit message (Collapse) | Author |
|
(cherry picked from commit 5ade35255b3d8438aa6082fe56ae459d50cdc0a5)
|
|
Also raise op-mode error when unable to fetch data from Kea socket
|
|
The current op-mode script simply calls sudo systemctl restart "dhclient@$4.service"
with no additional information about a client interface at all.
This results in useless dhclient processes
root 47812 4.7 0.0 5848 3584 ? Ss 00:30 0:00 /sbin/dhclient -4 -d
root 48121 0.0 0.0 4188 3072 ? S 00:30 0:00 \_ /bin/sh /sbin/dhclient-script
root 48148 50.0 0.2 18776 11264 ? R 00:30 0:00 \_ python3 -
Which also assign client leases to all local interfaces, if we receive one
valid DHCPOFFER
vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address MAC VRF MTU S/L Description
----------- ----------------- ----------------- ------- ----- ----- -------------
eth0 - 00:50:56:bf:c5:6d default 1500 u/u
eth0.10 172.16.33.102/24 00:50:56:bf:c5:6d default 1500 u/u
eth1 172.16.33.131/24 00:50:56:b3:38:c5 default 1500 u/u
172.16.33.102/24 and 172.16.33.131/24 are stray DHCP addresses.
This commit moved the renew command to the DHCP op-mode script to properly
validate if the interface we request a renew for, has actually a dhcp address
configured. In additional this exposes the renew feature to the API.
|
|
* Add `clear dhcpv6-server lease`
* Standardize using vyos.opmode
|
|
|
|
|
|
Due to Kea's lease file cleanup, the CSV file content is inconsistent. This commit makes changes to use the Kea control socket to fetch current lease information.
|
|
* Also migrate `address-range` to `range` tag node for consistency with dhcpv4 server syntax
|
|
Move the kea lease file to a separate directory `/config/dhcp` that `kea`
process can write to so that subprocesses spawned by `kea` process can
operate on the lease files.
To allow `kea` process to write to `/config/dhcp`, add `_kea` user to
`vyattacfg` group. And the lease files are owned completely by `_kea`
user to play well with `kea-lfc` process.
Specifically, this is necessary for `kea-lfc` which is spawned by `kea`
process to clean up expired leases. Since `kea-lfc` creates additional
backup lease files, it needs write access to the lease file directory.
Additionally, change the extension of the lease file from `.leases` to
`.csv` to reflect the actual file format.
|
|
|
|
|
|
|
|
|
|
*pool* empty, this means that lease was granted by fail-over server. Also fix issue that <show dhcp server leases state all> print nothing.
|
|
Fix helpers was moved to vyos.utils package
Fix empty new address from the lease file causes
OSError: illegal IP address string passed to inet_pton
|
|
|
|
Multiple scripts use the same hardcoded path for DHCP client leases in
different direcotries - this can't be worse.
|
|
ISC dhcp client contains least_update timestamp in human readable format this
makes less sense for an API and also the expiry timestamp is provided in UNIX
time. Convert string (e.g. Sun Jul 30 18:13:44 CEST 2023) to UNIX time (1690733624)
vyos@vyos:~$ ${vyos_op_scripts_dir}/dhcp.py show_client_leases --family inet --interface eth0.10
Interface eth0.10
IP address 172.16.33.123 [Active]
Subnet Mask 255.255.255.0
Domain Name vyos.net
Router 172.16.33.254
Name Server 172.16.254.30
DHCP Server 172.16.33.254
DHCP Server 86400
Last Update Sun Jul 30 18:13:44 CEST 2023
Expiry Mon Jul 31 18:13:43 CEST 2023
vyos@vyos:~$ ${vyos_op_scripts_dir}/dhcp.py show_client_leases --family inet --interface eth0.10 --raw
[
{
"last_update": 1690733624,
"reason": "RENEW",
"interface": "eth0.10",
"new_expiry": "1690820023",
"new_dhcp_lease_time": "86400",
"medium": "",
"alias_ip_address": "",
"new_ip_address": "172.16.33.123",
"new_broadcast_address": "172.16.33.255",
"new_subnet_mask": "255.255.255.0",
"new_domain_name": "vyos.net",
"new_network_number": "172.16.33.0",
"new_domain_name_servers": "172.16.254.30",
"new_routers": "172.16.33.254",
"new_static_routes": "",
"new_dhcp_server_identifier": "172.16.33.254",
"new_dhcp_message_type": "5",
"old_ip_address": "172.16.33.123",
"old_subnet_mask": "255.255.255.0",
"old_domain_name": "vyos.net",
"old_domain_name_servers": "172.16.254.30",
"old_routers": "172.16.33.254",
"old_static_routes": ""
}
]
|
|
vyos@vyos# ${vyos_op_scripts_dir}/dhcp.py show_client_leases --family inet --interface eth0.10
Interface eth0.10
IP address 172.16.33.123 [Active]
Subnet Mask 255.255.255.0
Domain Name vyos.net
Router 172.16.33.254
Name Server 172.16.254.30
DHCP Server 172.16.33.254
DHCP Server 86400
Last Update Sat Jul 29 21:13:32 CEST 2023
Expiry Sun Jul 30 21:13:31 CEST 2023
vyos@vyos# ${vyos_op_scripts_dir}/dhcp.py show_client_leases --family inet --interface eth0.10 --raw
[
{
"last_update": "Sat Jul 29 21:13:32 CEST 2023",
"reason": "BOUND",
"interface": "eth0.10",
"new_expiry": "1690744411",
"new_dhcp_lease_time": "86400",
"medium": "",
"alias_ip_address": "",
"new_ip_address": "172.16.33.123",
"new_broadcast_address": "172.16.33.255",
"new_subnet_mask": "255.255.255.0",
"new_domain_name": "vyos.net",
"new_network_number": "172.16.33.0",
"new_domain_name_servers": "172.16.254.30",
"new_routers": "172.16.33.254",
"new_static_routes": "",
"new_dhcp_server_identifier": "172.16.33.254",
"new_dhcp_message_type": "5",
"old_ip_address": "",
"old_subnet_mask": "",
"old_domain_name": "",
"old_domain_name_servers": "",
"old_routers": "",
"old_static_routes": ""
}
]
|
|
* T5195: move run, cmd, call, rc_cmd helper to vyos.utils.process
* T5195: use read_file and write_file implementation from vyos.utils.file
Changed code automatically using:
find . -type f -not -path '*/\.*' -exec sed -i 's/^from vyos.util import read_file$/from vyos.utils.file import read_file/g' {} +
find . -type f -not -path '*/\.*' -exec sed -i 's/^from vyos.util import write_file$/from vyos.utils.file import write_file/g' {} +
* T5195: move chmod* helpers to vyos.utils.permission
* T5195: use colon_separated_to_dict from vyos.utils.dict
* T5195: move is_systemd_service_* to vyos.utils.process
* T5195: fix boot issues with missing imports
* T5195: move dict_search_* helpers to vyos.utils.dict
* T5195: move network helpers to vyos.utils.network
* T5195: move commit_* helpers to vyos.utils.commit
* T5195: move user I/O helpers to vyos.utils.io
|
|
The operational command "show dhcpv6 server leases" shows a warning message e
ven if dhcpv6 setting are configured and ipv6 address
got assigned to clients.
|
|
With long lease time for example lease '4294967295' seconds
it is impossible to get end lease as value is 'ends never;'
It cause error to get timestamp() from 'ends never' and remaining
time 'lease.end - datetime.utcnow()'
Set default remaining and end lease to '-' if we cannot get this
info
|
|
|
|
script
Sorting DHCP pools and filtering for state can now be done using the new op-mode
mode scripts in DHCP. This allows us to drop the old helpers show_dhcp.py and
show_dhcpv6.py.
|
|
Rewrite op-mode DHCP and DHCPv6 leases to vyos.opmode format
Abbility to show 'raw' format
show dhcp server leases
show dhcpv6 server leases
|