معرفی شرکت ها


finsy-0.9.0


Card image cap
تبلیغات ما

مشتریان به طور فزاینده ای آنلاین هستند. تبلیغات می تواند به آنها کمک کند تا کسب و کار شما را پیدا کنند.

مشاهده بیشتر
Card image cap
تبلیغات ما

مشتریان به طور فزاینده ای آنلاین هستند. تبلیغات می تواند به آنها کمک کند تا کسب و کار شما را پیدا کنند.

مشاهده بیشتر
Card image cap
تبلیغات ما

مشتریان به طور فزاینده ای آنلاین هستند. تبلیغات می تواند به آنها کمک کند تا کسب و کار شما را پیدا کنند.

مشاهده بیشتر
Card image cap
تبلیغات ما

مشتریان به طور فزاینده ای آنلاین هستند. تبلیغات می تواند به آنها کمک کند تا کسب و کار شما را پیدا کنند.

مشاهده بیشتر
Card image cap
تبلیغات ما

مشتریان به طور فزاینده ای آنلاین هستند. تبلیغات می تواند به آنها کمک کند تا کسب و کار شما را پیدا کنند.

مشاهده بیشتر

توضیحات

P4Runtime Client Library
ویژگی مقدار
سیستم عامل -
نام فایل finsy-0.9.0
نام finsy
نسخه کتابخانه 0.9.0
نگهدارنده []
ایمیل نگهدارنده []
نویسنده Bill Fisher
ایمیل نویسنده william.w.fisher@gmail.com
آدرس صفحه اصلی https://github.com/byllyfish/finsy
آدرس اینترنتی https://pypi.org/project/finsy/
مجوز Apache-2.0
# Finsy P4Runtime Controller Library [![pypi](https://img.shields.io/pypi/v/finsy)](https://pypi.org/project/finsy/) [![ci](https://github.com/byllyfish/finsy/actions/workflows/ci.yml/badge.svg)](https://github.com/byllyfish/finsy/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/byllyfish/finsy/branch/main/graph/badge.svg?token=8RPYWRXNGS)](https://codecov.io/gh/byllyfish/finsy) [![docs](https://img.shields.io/badge/-docs-informational)](https://byllyfish.github.io/finsy/finsy.html) Finsy is a [P4Runtime](https://p4.org/p4-spec/p4runtime/main/P4Runtime-Spec.html) controller library written in Python using [asyncio](https://docs.python.org/3/library/asyncio.html). Finsy includes support for [gNMI](https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md). Check out the [examples](https://github.com/byllyfish/finsy/tree/main/examples) directory for demo programs. ## Installation To install the latest version, type `pip install finsy`. Finsy requires Python 3.10 or later. ## P4Runtime Scripts With Finsy, you can write a Python script that reads/writes P4Runtime entities for a single switch. Here is a complete example that retrieves the P4Info from a switch: ```python import finsy as fy async def main(): async with fy.Switch("sw1", "127.0.0.1:50001") as sw1: # Print out a description of the switch's P4Info, if one is configured. print(sw1.p4info) fy.run(main()) ``` Here is another example that prints out all non-default table entries. ```python import finsy as fy async def main(): async with fy.Switch("sw1", "127.0.0.1:50001") as sw1: # Do a wildcard read for table entries. async for entry in sw1.read(fy.P4TableEntry()): print(entry) fy.run(main()) ``` ## P4Runtime Controller You can also write a P4Runtime controller that manages multiple switches independently. Your controller can react to events from the Switch by changing the contents of P4 tables. 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. When you write P4Runtime updates to the switch, you use a unary operator (+, -, \~) to specify the operation: INSERT (+), DELETE (-) or MODIFY (\~). ```python import finsy as fy async def ready_handler(sw: fy.Switch): await sw.delete_all() await sw.write( [ # Insert (+) multicast group with ports 1, 2, 3 and CONTROLLER. +fy.P4MulticastGroupEntry(1, replicas=[1, 2, 3, 255]), # Modify (~) default table entry to flood all unmatched packets. ~fy.P4TableEntry( "ipv4", action=fy.P4TableAction("flood"), is_default_action=True, ), ] ) async for packet in sw.read_packets(): print(f"{sw.name}: {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. ```python from pathlib import Path options = fy.SwitchOptions( p4info=Path("hello.p4info.txt"), p4blob=Path("hello.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), ]) fy.run(controller.run()) ``` Your `ready_handler` can spawn concurrent tasks with the `Switch.create_task` method. Tasks created this way will have their lifetimes managed by the switch object. If the switch disconnects or its role changes to backup, the task running your `ready_handler` (and any tasks it spawned) will be cancelled and the `ready_handler` will begin again. For more examples, see the [examples](https://github.com/byllyfish/finsy/tree/main/examples) directory. ## Development and Testing Finsy requires a newer version of Python than is available on many systems. I recommend using [pyenv](https://github.com/pyenv/pyenv) and [poetry](https://python-poetry.org/) to maintain your development environment. You may use `pip` instead of `poetry` if you prefer. To set up your development environment for Finsy using Python 3.11.2: ``` git clone https://github.com/byllyfish/finsy.git cd finsy pyenv install 3.11.2 pyenv shell 3.11.2 python -m venv .venv .venv/bin/activate poetry install ``` If you are not using `poetry`, replace `poetry install` with `pip install -r ci/requirements-dev.txt`. To run the unit tests: ``` pytest ``` To run the example tests, run `pytest` from inside the `examples` directory. These tests require [podman](https://podman.io/). ``` cd examples pytest ``` If you used pip, you need to make sure that the `finsy` module is available in the PYTHONPATH when running from the examples directory. ``` PYTHONPATH=.. pytest ```


نیازمندی

مقدار نام
>=1.51.1,<2.0.0 grpcio
>=2.0.2,<3.0.0 macaddress
>=2.0.0,<3.0.0 parsy
>=4.21.12,<5.0.0 protobuf
>=9.0.4,<10.0.0 pyee
>=1.4.0,<2.0.0 pylev


زبان مورد نیاز

مقدار نام
>=3.10,<4.0 Python


نحوه نصب


نصب پکیج whl finsy-0.9.0:

    pip install finsy-0.9.0.whl


نصب پکیج tar.gz finsy-0.9.0:

    pip install finsy-0.9.0.tar.gz