Skip to content

Yangerd - #1536

Draft
mattiaswal wants to merge 151 commits into
mainfrom
yangerd
Draft

Yangerd#1536
mattiaswal wants to merge 151 commits into
mainfrom
yangerd

Conversation

@mattiaswal

Copy link
Copy Markdown
Contributor

Description

Checklist

Tick relevant boxes, this PR is-a or has-a:

  • Bugfix
    • Regression tests
    • ChangeLog updates (for next release)
  • Feature
    • YANG model change => revision updated?
    • Regression tests added?
    • ChangeLog updates (for next release)
    • Documentation added?
  • Test changes
    • Checked in changed Readme.adoc (make test-spec)
    • Added new test to group Readme.adoc and yaml file
  • Code style update (formatting, renaming)
  • Refactoring (please detail in commit messages)
  • Build related changes
  • Documentation content changes
    • ChangeLog updated (for major changes)
  • Other (please describe):

@mattiaswal mattiaswal added the ci:main Build default defconfig, not minimal label Jun 12, 2026
@mattiaswal
mattiaswal force-pushed the yangerd branch 3 times, most recently from 3ec2747 to 71d50ea Compare June 19, 2026 09:38
@mattiaswal
mattiaswal force-pushed the yangerd branch 3 times, most recently from 7537929 to 8e6b2a1 Compare August 17, 2026 11:52
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

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:main Build default defconfig, not minimal

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant