Skip to content

link changes or nexthop deletion may lead to cache desync #418

@KanjiMonster

Description

@KanjiMonster

The kernel does not notify always if nexthops or routes are removed:

  • deleting a nexthop with id will silently remove all routes with this nexthop as destination
  • a link losing carrier (or set down) will silently remove all nexthops with id via this link, which may then trigger silent removal or routes

This means that when a link with a route with a nexthop with id goes down, all libnl sees is the link update that loses carrier, but none of the nexthop or route deletions.

I'm not sure how to properly handle this, though my first idea would be:

  • when we get a link update about a link losing carrier:

    • delete all nhs via that link
  • when we get a nh deletion:

    • delete all routes via that nh (matched on nh_id)

To make this work properly, we would need some way to send emulate RTM_DELNEXTHOP / RTM_DELROUTE events.

Unfortunately while removing the objects from the cache is "easy" as we can get to the appropriate cache via nl_cache_mngt_require_safe(), there is no easy way to notify about these changes, as there is currently no way to get from a cache to the associated manager.

My idea there would be to extend struct nl_cache_assoc with a link to the "owning" manager, so the is a way to get to the manager and then add a event_input() variant that directly takes a nl_object.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions