Yangerd - #1536
Draft
mattiaswal wants to merge 151 commits into
Draft
Yangerd#1536mattiaswal wants to merge 151 commits into
mattiaswal wants to merge 151 commits into
Conversation
mattiaswal
force-pushed
the
yangerd
branch
3 times, most recently
from
June 19, 2026 09:38
3ec2747 to
71d50ea
Compare
mattiaswal
force-pushed
the
yangerd
branch
3 times, most recently
from
August 17, 2026 11:52
7537929 to
8e6b2a1
Compare
Handle this.
This since NTP status is polled in yangerd.
Slightly slower to detect changes
Signed-off-by: Mattias Walström <lazzer@gmail.com>
A directory deleted and recreated between two scans lost its watch for good, and a root two levels deep was never picked up. Signed-off-by: Mattias Walström <lazzer@gmail.com>
A root under /media is a mount point, and mounting a stick there produces no inotify event. Signed-off-by: Mattias Walström <lazzer@gmail.com>
A mesh interface that leaves the mesh is still a mesh point; hostapd only serves APs, so its events need no kernel query. Signed-off-by: Mattias Walström <lazzer@gmail.com>
The watches were globbed once at start, so interfaces created later never reported forwarding. netlink tells when the set changes, SyncGlob does the rest. Signed-off-by: Mattias Walström <lazzer@gmail.com>
yangerd.conf declares notify:pid, so finit only marks it ready when the pidfile appears. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Signed-off-by: Mattias Walström <lazzer@gmail.com>
The BFD instance exists only in operational, so a nested subscription under the running OSPF instance had nowhere to put it. Merging keeps config-only instances and fetches the routing tree once per GET instead of once per instance. Signed-off-by: Mattias Walström <lazzer@gmail.com>
With TFTP disabled the graft ran on an empty tree and failed, and that one failure made every full operational GET fail. Signed-off-by: Mattias Walström <lazzer@gmail.com>
bfdd installs its show commands in the enable node only, so over a raw vty 'show bfd peers json' was an unknown command. vtysh sends enable first too. Signed-off-by: Mattias Walström <lazzer@gmail.com>
The wall-clock stamp was built from three separately truncated seconds, so two changes in the same second could read in the wrong order. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Link and address events arrive on separate channels, so the delete of an old wifi0 can be handled after a new one took the name. Addresses are matched to links by ifindex for the same reason. Signed-off-by: Mattias Walström <lazzer@gmail.com>
iproute2 caches name-to-index lookups for the life of the process, so after a test reset recreated wifi0 every 'addr show dev wifi0' hit the deleted index and failed. Signed-off-by: Mattias Walström <lazzer@gmail.com>
DEL_INTERFACE resolved the name from an index that no longer exists, so the stale attach loop stayed and the new wpa_supplicant or hostapd was never attached. Signed-off-by: Mattias Walström <lazzer@gmail.com>
One bad value in yangerd's answer made every GET of that module fail. Salvage parses each list entry alone and logs the ones it drops, and the graft error paths now say what failed. Signed-off-by: Mattias Walström <lazzer@gmail.com>
link show dev <name> resolves through ip's name cache too, and it does not take if<N>. A failed query for an interface the kernel still has means the cache is stale, so start a fresh ip and ask again instead of deleting the interface. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Operational follows netlink events, so it lags the commit a little; read it back like the other tests do. Signed-off-by: Mattias Walström <lazzer@gmail.com>
ip opens the JSON object before it checks the message, so a link racing a delete or recreate can come back as [{}]. Staged as is, wifi0 went out with an empty name and if-index 0 until the next event. Re-dump instead, and never emit a row without name or index.
Signed-off-by: Mattias Walström <lazzer@gmail.com>
Signed-off-by: Mattias Walström <lazzer@gmail.com>
Every event hitting a dead ip batch asked for a re-dump, each ran at once, failed while ip restarted, and armed its own 5 s retry. Coalesce the requests and wait for live batches. Signed-off-by: Mattias Walström <lazzer@gmail.com>
The netlink monitor already sees every oper-status transition, so it stamps them and a tree provider adds last-change at GET time. Drop the duplicate netlink watcher in statd. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Radio capabilities change only when nl80211 says so, a phy, the regulatory domain or its interfaces. The inventory is a read of system.json and sysfs, surveys and sensors have no events, so they are read on GET. Only GPS is polled. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Signed-off-by: Mattias Walström <lazzer@gmail.com>
A datagram socket says nothing when its peer is gone, so an attach made just before hostapd was restarted waited forever and missed every station after it. PING the socket when it has been quiet and reconnect when nothing answers. Signed-off-by: Mattias Walström <lazzer@gmail.com>
The address-set overlay waited on firewalld with no timeout, and firewalld answers nothing while it reloads. On slow hardware that outlasted statd's IPC deadline and the GET failed. Bound the calls and serve the last complete answer meanwhile. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Operational follows the reload hook re-adding dynamic entries, so read it back like the other steps do. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Port of what iw.py does: drop bands Infix neither configures nor reports, like S1G and 60 GHz on hwsim, and show mac80211_hwsim as a virtual radio instead of Unknown. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Source selection changes without any event from chronyd, and the 60 s poll could serve 'unusable' long after chrony selected a server. Ask chronyd on each GET instead. The chrony library names states 4 and 5 after chrony 3, which reported candidates as outliers and the other way round. Signed-off-by: Mattias Walström <lazzer@gmail.com>
Signed-off-by: Mattias Walström <lazzer@gmail.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Checklist
Tick relevant boxes, this PR is-a or has-a: