Skip to content

thomascellerier/aiortnetlink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aiortnetlink

Pure-python asyncio rtnetlink client.

Getting started

Install from PyPI:

pip install aiortnetlink

Or, adding to your uv project:

uv add aiortnetlink

Example:

from aiortnetlink import NetlinkClient

async with NetlinkClient() as nl:
    async for link in nl.get_links():
        print(f"{link.index}: {link.name}")

The module ships with a CLI, for example if running from the repository root:

uv run aiortnetlink addr show

Supported features

Links

  • get_links: List all links.
  • get_link: Lookup link by index or name.

Addresses

  • get_links: List all addresses.
  • add_addr: Add IP address to link.
  • del_addr: Remove IP address from link.

Routes

  • get_routes: List all routes.
  • get_route: Get route for the given address.

Rules

  • get_rules: List all rules.

Notifications

  • recv_notification: Receive netlink notification. Notification subscription is done by passing the revelant rtnetlink groups to the netlink client.

Tun/Tap

  • create_tuntap: Create tun or tap device.
  • delete_tuntap: Delete tun or tap device.

Network namespaces

All network operations can be performed in a network namesapce by passing the netns_name argument to the NetlinkClient.

Development

This project uses uv for project management and poe the poet to run development tasks. Linting and code formatting is done using ruff, type checking using mypy and tests using pytest.

For example to run all checks locally:

uvx --from poethepoet poe lint

To format code using ruff:

uvx --from poethepoet poe fmt

Constants generator

Linux user API constants are exposed to C programs as symbols. In order to extract their values for use in a pure-Python module without violating the license we need to write a C program that will import the appropriate linux uapi headers and print their values.

To facilitate development of this library we generate a C program and use its output to generate python source code representing the various constants. The constants are grouped into types using IntEnum.

This is handled by the constants generator. The files in the constants directory and generated in this way and should not be edited manually.

About

Pure-python asyncio client for rtnetlink

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages