GithubHelp home page GithubHelp logo

niruiye666 / pi Goto Github PK

View Code? Open in Web Editor NEW

This project forked from p4lang/pi

0.0 0.0 0.0 2.78 MB

An implementation framework for a P4Runtime server

License: Apache License 2.0

Shell 0.38% C 31.80% Makefile 1.51% M4 8.73% C++ 51.82% Python 3.74% P4 1.22% Dockerfile 0.09% Starlark 0.72%

pi's Introduction

PI LIBRARY REPOSITORY

Build Status

This repository has submodules; after cloning it you should run git submodule update --init --recursive.

Dependencies

Base dependencies

  • Judy

Dependencies based on configure flags

Based on the command-line flags you intend on providing to configure, you need to install different dependencies.

Configure flag Default (yes / no) Dependencies Remarks
--with-bmv2 no bmv2 and its deps Implies --with-fe-cpp
--with-proto no Protobuf, gRPC, libboost-thread-dev -
--with-fe-cpp no - -
--with-internal-rpc no nanomsg -
--with-cli no readline -
--with-sysrepo no same as --with-proto + sysrepo and its deps -

Additional CI tests dependencies

  • libtool binary; we use libtool as part of the build system, libtool binary is required to run some of the generated binaries uner valgrind
  • valgrind, as some tests use it to check for memory errors
  • Boost library, for some of the C++ tests: we currently require boost/optional.hpp and boost/functional/hash.hpp

Installing dependencies from package repositories

Dependency Name of Debian package
Judy libjudy-dev
readline libreadline-dev
valgrind valgrind
libtool binary libtool-bin
Boost library libboost-dev libboost-system-dev libboost-thread-dev

Installing other dependencies from source

Some dependencies are not available as Debian packages or the available version is not the right one.

git clone https://github.com/google/protobuf.git
cd protobuf/
git checkout tags/v3.6.1
./autogen.sh
./configure
make
[sudo] make install
[sudo] ldconfig
git clone https://github.com/google/grpc.git
cd grpc/
git checkout tags/v1.17.2
git submodule update --init --recursive
make
[sudo] make install
[sudo] ldconfig

You may be able to use different versions of Protobuf / gRPC, or a more recent version of nanomsg. However, the versions above are the ones we use for development and CI testing. When running configure with --with-proto, the script will verify that Protobuf >= 3.0.0 and gRPC >= 1.3.0 are installed.

Building p4runtime.proto

To include p4runtime.proto in the build, please run configure with --with-proto.

./autogen.sh
./configure --with-proto
make
make check
[sudo] make install

Bazel support

We include tentative support for the Bazel build system. This should enable other Bazel projects to easily import this repository. For the great majority of users who wish to build and install PI, we recommend using the autotools-based build system.

We use bazelisk to install Bazel as part of CI. bazelisk will install the official latest Bazel release.

To build the P4Runtime PI frontend and run the tests:

bazel build //proto/frontend:pifeproto
bazel test //proto/tests:pi_proto_tests

To use PI in another Bazel project, do the following in your WORKSPACE file:

  1. Import this project, for example using git_repository.
  2. Import dependencies:
load("//bazel:deps.bzl", "PI_deps")
PI_deps()

# Transitive dependencies

load("@com_github_p4lang_p4runtime//:p4runtime_deps.bzl", "p4runtime_deps")
p4runtime_deps()

load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
protobuf_deps()

load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
rules_proto_dependencies()
rules_proto_toolchains()

load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language")
switched_rules_by_language(
    name = "com_google_googleapis_imports",
    grpc = True,
    cc = True,
    python = True,
)

load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
grpc_deps()
load("@com_github_grpc_grpc//bazel:grpc_extra_deps.bzl", "grpc_extra_deps")
grpc_extra_deps()
load("@com_github_grpc_grpc//bazel:grpc_python_deps.bzl", "grpc_python_deps")
grpc_python_deps()

load("@rules_python//python:pip.bzl", "pip_import", "pip_repositories")
pip_repositories()
pip_import(
    name = "grpc_python_dependencies",
    requirements = "@com_github_grpc_grpc//:requirements.bazel.txt",
)

load("@grpc_python_dependencies//:requirements.bzl", "pip_install")
pip_install()

load("@com_github_nelhage_rules_boost//:boost/boost.bzl", "boost_deps")
boost_deps()

PI CLI

For now the PI CLI supports an experimental version of table_add and table_delete. Because these two functions have been implemented in the bmv2 PI implementation, you can test the PI CLI with the bmv2 simple_switch. Assuming bmv2 is installed on your system, build the PI and the CLI with ./configure --with-bmv2 --with-cli && make. You can then experiment with the following commands:

simple_switch tests/testdata/simple_router.json  // to start the switch
./CLI/pi_CLI_bmv2 -c tests/testdata/simple_router.json  // to start the CLI
PI CLI> assign_device 0 0 -- port=9090  // 0 0 : device id + config id
PI CLI> table_add ipv4_lpm 10.0.0.1/24 => set_nhop 10.0.0.1 1
PI CLI> table_dump ipv4_lpm
PI CLI> table_delete ipv4_lpm <handle returned by table_add>

Contributing

See CONTRIBUTING.md.

pi's People

Contributors

antoninbas avatar wmohsin avatar samar-abdi avatar melshabani avatar sethfowler avatar loalan avatar yyetim avatar teverman avatar dushyantarora avatar chenxinming05 avatar yi-tseng avatar shyoo avatar jafingerhut avatar qin-nz avatar zhenya-1007 avatar pudelkom avatar fruffy avatar dushyantarora13 avatar aghaffarkhah avatar saynb avatar sksodhi avatar pkotikal avatar maojianwei avatar jacksunshine avatar chrispsommers avatar ccascone avatar bocon13 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.