Skip to main content

Async P4Runtime/gNMI Framework

Project description

🐟 Finsy P4Runtime Framework

pypi ci codecov

Finsy is a P4Runtime controller framework written in Python using asyncio.

import asyncio
import finsy as fy

async def main():
    async with fy.Switch("sw1", "127.0.0.1:50001") as sw1:
        print(sw1.p4info)

asyncio.run(main())

Multiple Switches

With Finsy, you can write a P4Runtime controller that manages multiple switches.

Each switch is managed by an async ready_handler function. Your ready_handler function can read or update various P4Runtime entities in the switch. It can also create tasks to listen for packets or digests.

async def ready_handler(sw: fy.Switch):
    await sw.delete_all()
    await sw.insert(fy.P4MulticastGroupEntry(1, replicas=[1, 2, 3, 255]))

    async for packet in sw.read_packets():
        print(packet)

Use the SwitchOptions class to specify each switch's settings, including the p4info/p4blob and ready_handler. Use the Controller class to drive multiple switch connections. Each switch will call back into your ready_handler function after the P4Runtime connection is established.

from pathlib import Path

options = fy.SwitchOptions(
    p4info=Path("example.p4info.txt"),
    p4blob=Path("example.json"),
    ready_handler=ready_handler,
)
controller = fy.Controller([
    fy.Switch("sw1", "127.0.0.1:50001", options),
    fy.Switch("sw2", "127.0.0.1:50002", options),
    fy.Switch("sw3", "127.0.0.1:50003", options),
])

asyncio.run(controller.run())

For more examples, see the examples directory.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finsy-0.3.0.tar.gz (156.5 kB view details)

Uploaded Source

Built Distribution

finsy-0.3.0-py3-none-any.whl (190.2 kB view details)

Uploaded Python 3

File details

Details for the file finsy-0.3.0.tar.gz.

File metadata

  • Download URL: finsy-0.3.0.tar.gz
  • Upload date:
  • Size: 156.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for finsy-0.3.0.tar.gz
Algorithm Hash digest
SHA256 269f21f2e803bb0d9f158ad9bf4667c1a71485c51f5809a2be87679d66cfe66f
MD5 136c6230773dd51a5fe5e24fc5c8931a
BLAKE2b-256 6ee811a39d40646b4504c7671f19a696e5a6e9b594f99efdaf1a037bd10af2eb

See more details on using hashes here.

File details

Details for the file finsy-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: finsy-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 190.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for finsy-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b03ccc650183b0faaa66221ce01906caa35875f9980a722f9941aedfcfd54fd8
MD5 b79d0c20871ef378b311d5e372f4bee5
BLAKE2b-256 6f02becd2d370c621d4d5c0aba68b192b7469563c993e417d880b1f1082fc9ac

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page