SlideShare a Scribd company logo
1 of 22
Download to read offline
How to Run
P4 Behavior Model v2
~ An P4 Software Switch Reference Implementation ~
Twitter: @ebiken
How to Run P4 Behavior Model v2 | 2017/08/06 1
• data plane 記述言語である “P4” 対応のハードウェア実装(ASIC, SmartNIC etc.)が増え
つつあるが、数十万~数百万円と、P4とは何かをまず試してみるにはコスト的に敷居が
高い。
• また、各ハードウェア実装(以降ターゲット)によってサポートされるP4機能が異なるため、
P4言語そのものを試すには制約が少ないソフトウェア実装が好ましい。
• そのため、P4を初めて試す際や、P4を用いたアプリケーションのPOC等を実施する際に
は、P4コミュニティで実装がすすめられているリファレンス実装である “P4 BMv2
(Behavior Model version 2)” を用いると有効である。
• 本文書では、P4 BMv2 を用いてP4のコンパイルおよびP4スイッチを動作させるための手
順を紹介する。
About this document
How to Run P4 Behavior Model v2 | 2017/08/06 2
• 既存パケット処理専用ASICの課題(P4のモチベーション)
• パケット処理を高速(Tbps)かつ安価に実施する場合、専用ASICが利用される。
• 新しいプロトコル・処理方法に対応したASICの開発には2~3年必要。
• 標準化完了~対応製品利用可能まで5年程度必要。
• ネットワーク製品の進化がユーザーニーズに追い付かなくなっていた。
How to Run P4 Behavior Model v2 | 2017/08/06 3
P4について
Reference:
• “The P4 Language Specification”
• Version 1.0.3 | November 2, 2016
• プログラム可能なパケット処理専用ASICの開発
• パケット処理(Dataplane)の基本動作(Parse/Match/Action)を
プログラム可能なASICとプログラム言語(P4)を設計。
• P4 : Programming Protocol-Independent Packet Processors
• 仕様提唱企業:Barefoot Networks
• P4は「データプレーン定義言語」であるため、様々なターゲット
プラットフォームへコンパイル可能
• P4対応 Ethernet Switch (ASIC)
• SmartNIC (NPU, FPGA)
• Software (CPU)
• Ethernet Switch は通常 “parser”, “match/action”, “de-parser” で構成され
るが、match/actionのパイプラインがいくつあるか (Input only, In/Out
etc.)、利用可能なaction、メタデータやレジストリなどの違いがある。
• de-parser => 送信前にパケットヘッダを組み立てるコンポーネント
• P4 BMv2 ではこれらのアーキテクチャの変更が可能となっている。
• アーキテクチャは C++11 でプログラムする。
• サンプルとして以下3つのアーキテクチャが付属している。
• l2_switch | simple_router | simple_switch
• P4言語を試すときは、上記付属アーキテクチャから1つを選んで使用。
How to Run P4 Behavior Model v2 | 2017/08/06 4
Switch Architecture
• P4仕様には現在2つのバージョンが存在する。
• それぞれ2014年、2016年にリリースされた仕様となるが、どちらとも現在(2017年7月)も
メンテナンスが継続されており、定期的に修正版がリリースされている。バージョン番号
はそれぞれ独立して version x.y.z の形式でアサインされているため、"P4_14 Version
1.0.4", "P4_16 Version 1.0.0" のように P4_14 / P4_16 を明確に記載する必要がある。
• P4バージョンと仕様書の場所
• https://p4lang.github.io/p4-spec/
• P4_14:2014年リリースの仕様
• P4_16:2016年リリースの仕様
本文書では、サポートされるハードウェア実装の多い “P4_14” を用いる。
How to Run P4 Behavior Model v2 | 2017/08/06 5
P4のバージョンと入手先
• P4はパケット処理のデータプレーンを定義するプログラム言語であり、実際のパ
ケット処理には以下モジュールが必要となる。
How to Run P4 Behavior Model v2 | 2017/08/06 6
P4 動作に必要なモジュール
P4 Source Code パケット処理データプレーンの定義。パーサーやテーブル、アクションなどの定義
P4 Compiler P4をTarget上で実行可能な形式(Dataplane runtime)にコンパイルする。Target毎に提供される。
Target
P4 Dataplane runtime を読み込み、定義された通りにパケット処理を実施する
ASIC(Barefoot), SmartNIC/NPU(Netronome), FPGA(Xilinx, Intel/Altera), Software(BMv2, eBPF) etc.
Notes
• Target実装毎にサポート状況はそれぞれ異なるため注意が
必要である。例えば Netronome SmartNIC (NFP) は現在
(2017年8月)P4_14のみをサポートしている。
• P4_16の仕様書では、P4対応Dataplaneだけでなく Control-
plane を含めて Target と呼んでいる。
• また、P4は「どのようにパケットを解析するか」「どのような
テーブルを持つか」「どのようなアクションが可能か」の定義
であり、スイッチ・ルーターと同様に「アドレス」「テーブルエ
ントリ(ルール)」などの設定を投入するコントロールプレー
ン(Network OS 等)が必要である。
P4 Source Code
Dataplane
runtime
P4 Compiler
P4 対応 Dataplane
Control-plane
(protocol agents)
Target
API definition
参照:P4_16 v1.0.0 Figure 2. Programming a target with P4.
• P4 source code はスイッチのパイプライン(パーサー、テーブル構成やアクション)を定義
しているのに対し、それらを設定(エントリを投入・変更・削除)するAPIが存在する。
• BMv2 API (現状)
• BMv2 APIとして “Thrift API” が用意されている
• BMv2用のCLIが付属しており、Thrift API経由でBMv2を操作する
• https://github.com/p4lang/behavioral-model/blob/master/tools/runtime_CLI.py
• BMv2 API (将来プラン)
• Target に依存しない gRPC / protobuf を利用した API が検討されている
• Target に依存しないため、その上で開発したCLIなどはBMv2以外の実装(Switch ASIC, SmartNIC
など)でも利用可能になる予定である
• https://github.com/p4lang/PI
• https://github.com/p4lang/PI/blob/master/proto/p4/p4runtime.proto
How to Run P4 Behavior Model v2 | 2017/08/06 7
CLI / API (Configuration Interface)
(各モジュールの説明は以降のスライドに記載)
• P4コミュニティのレポジトリは以下GitHubに保存されている。
• https://github.com/p4lang/
• P4 Compiler
• p4c: https://github.com/p4lang/p4c
• Target
• bmv2 : https://github.com/p4lang/behavioral-model.git
• P4 Source Code
• samples : https://github.com/p4lang/tutorials
How to Run P4 Behavior Model v2 | 2017/08/06 8
各モジュールの入手場所
How to Run P4 Behavior Model v2 | 2017/08/06 9
各モジュールの入手場所 (P4 Compiler)
p4c-bm
• https://github.com/p4lang/p4c-bm
• P4_14 対応のオフィシャルコンパイラ
.
p4c
• https://github.com/p4lang/p4c
• P4_16, P4_14 対応のコンパイラ
• (p4c-bmより新しい)
• p4c ... 標準コンパイラ
• p4c-ebpf ... eBPFへコンパイル可能なC
をP4から出力する
• .p4 ファイルを入力とし .json (dataplane runtime) を出力する
• p4c-bm, p4c の2種類存在
新しいプロジェクトでは
p4c を利用していくことを推奨
• P4 Software Switch (Behavior Model)
• bmv2 : https://github.com/p4lang/behavioral-model.git
• BMv2には以下3つのTarget実装のサンプルが付属する。
• https://github.com/p4lang/behavioral-model/tree/master/targets
• simple_router : 最も簡単な実装。
• l2_switch : Multicast 対応のためのレプリケーションエンジンを含む
• simple_switch : 標準 P4 target
• (参考)
• 古いBM(メンテ停止済み)も p4lang レポに存在しているが、古いチュートリアル実行等
以外では利用しないことを推奨
• https://github.com/p4lang/p4c-behavioral
How to Run P4 Behavior Model v2 | 2017/08/06 10
各モジュールの入手場所 (Target)
• P4 Source Code
• チュートリアル等で利用されたサンプルを入手可能
• https://github.com/p4lang/tutorials
• 各ターゲットの下にも存在する
How to Run P4 Behavior Model v2 | 2017/08/06 11
各モジュールの入手場所 (P4 Source Code)
• Protocol Agent
• 例えば Layer 2 switch (MAC Learning) を動作させるためには、未学習のパ
ケットを解釈し、MAC Table にエントリを追加する Agent (CPUで動作) が必要
• P4 Source Code と同じ場所にサンプルが存在する。
• https://github.com/p4lang/behavioral-
model/tree/master/targets/l2_switch/learn_client
• CLI
• runtime_CLI (python) が各 Target の下、および以下場所に存在
• https://github.com/p4lang/behavioral-model/blob/master/tools/runtime_CLI.py
• (各 Target 下の runtime_CLI と同じ実装)
How to Run P4 Behavior Model v2 | 2017/08/06 12
各モジュールの入手場所 (その他)
Install/Build 手順
Ubuntu 16.04 を用いて確認した Install/Build 手順
How to Run P4 Behavior Model v2 | 2017/08/06 13
• README.md に記載されている手順にて実施:
• https://github.com/p4lang/p4c/blob/master/README.md
作業内容
1. apt をアップデート
2. 依存パッケージをインストール
3. GitHub から p4c repository をクローン
4. ビルド
5. compiler と P4 shared headers をインストール (optional)
• p4c: /usr/local/bin
• P4 headers: /usr/local/share/p4c
How to Run P4 Behavior Model v2 | 2017/08/06 14
p4c (compiler)
How to Run P4 Behavior Model v2 | 2017/08/06 15
p4c (compiler) 作業ログ
1. apt をアップデート
$ sudo apt update
$ sudo apt upgrade
2. 依存パッケージをインストール
$ sudo apt-get install g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev
libboost-dev libboost-iostreams-dev pkg-config python python-scapy python-ipaddr tcpdump
> For documentation building:
> $ sudo apt-get install -y doxygen graphviz texlive-full
> Google Protocol Buffers. Install newest tag in the 3.0 series.
$ sudo apt-get install autoconf automake libtool curl make g++ unzip
$ git clone https://github.com/google/protobuf.git
$ cd protobuf/
> under ~/protobuf$
$ git checkout v3.0.2
$ ./autogen.sh
$ ./configure
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.
> If required: $ sudo apt autoremove
3. GitHub から p4c repository をクローン
> Clone p4c repository from GitHub
$ mkdir p4lang
$ cd p4lang
~/p4lang$ git clone --recursive https://github.com/p4lang/p4c.git
4. ビルド
> build p4c
$ ./bootstrap.sh
$ cd build
$ make -j4
$ make check -j4
5. compiler と P4 shared headers をインストール (optional)
> Install
$ sudo make install
• README.md に記載されている手順にて実施:
• https://github.com/p4lang/behavioral-model/blob/master/README.md
1. GitHub から bmv2 (behavioral-model) repository をクローン
2. 依存パッケージをインストール
• packages: thrift / nanomsg / nnpy
• Ubuntu の場合、`install_deps.sh` script を利用して一括インストール可能
3. ビルド
4. テスト実行
How to Run P4 Behavior Model v2 | 2017/08/06 16
bmv2 (behavior model)
How to Run P4 Behavior Model v2 | 2017/08/06 17
bmv2 (behavior model)
1. GitHub から bmv2 (behavioral-model) repository をクローン
$ git clone https://github.com/p4lang/behavioral-model.git bmv2
$ cd bmv2
2. 依存パッケージをインストール
> under ~/bmv2$
$ ./install_deps.sh script
3. ビルド
> Build
$ ./autogen.sh
$ ./configure
$ make -j2
$ sudo make install # if you need to install bmv2
4. テスト実行
> Run test
$ make check
サンプル(Layer 2 switch の実行)
How to Run P4 Behavior Model v2 | 2017/08/06 18
• P4 Program のコンパイル、Agentの利用、設定の投入、等、P4 Applicationを動作させる
ために必要な基本的な手順すべてが含まれるため、サンプルとして ”Target: l2_switch”
を用いた Layer 2 (mac learning) switch の動作手順を記載します。
How to Run P4 Behavior Model v2 | 2017/08/06 19
Layer 2 switch using P4 BMv2
host1 host2
l2_switch (BMv2)
veth0: 172.20.0.1/24
vtap1vtap0
veth1: 172.20.0.1/24
learn_client runtime_CLI
Notes
• Two veth/vtap pair are created.
• host1/host2 are network
namespace (netns) to emulate
hosts connected to switch.
• learn_client runs outside of
l2_switch (BMv2) and receives
packets from l2_switch / update
table entries dynamically.
• runtime_CLI are used to set initial
table entries on l2_switch, and
check table entries on runtime.
1. veth/vtap pair, netns hosts の作成
2. l2_switch の起動
3. learn_client の起動
4. CLI の起動・設定の投入
5. host 間で ping による疎通確認
6. Table Entry の確認
How to Run P4 Behavior Model v2 | 2017/08/06 20
Layer 2 switch using P4 BMv2 (steps)
How to Run P4 Behavior Model v2 | 2017/08/06 21
Layer 2 switch using P4 BMv2 (作業ログ)
1. veth/vtap pair, netns hosts の作成
# Create netns hosts
ip netns add host0
ip netns add host1
# Create veth
ip link add veth0 type veth peer name vtap0
ip link add veth1 type veth peer name vtap1
# Connect veth between host0 and host1
ip link set veth0 netns host0
ip link set veth1 netns host1
ip link set dev vtap0 up
ip link set dev vtap1 up
# Link up loopback and veth
ip netns exec host0 ip link set veth0 up
ip netns exec host0 ifconfig lo up
ip netns exec host1 ip link set veth1 up
ip netns exec host1 ifconfig lo up
# Set IP address
ip netns exec host0 ip addr add 172.20.0.1/24 dev veth0
ip netns exec host1 ip addr add 172.20.0.2/24 dev veth1
ip link set dev vtap0 up
ip link set dev vtap1 up
2. l2_switch の起動
$ cd bmv2/targets/l2_switch
~/bmv2/targets/l2_switch$ sudo ./l2_switch l2_switch.json -i 0@vtap0 -i 1@vtap1 --nanolog ¥
ipc:///tmp/bm-0-log.ipc --log-console -L debug --notifications-addr ¥
ipc:///tmp/bmv2-0-notifications.ipc
3. learn_client の起動
~/bmv2/targets/l2_switch/learn_client$ sudo ./learn_client
4. CLI の起動・設定の投入
~/bmv2/targets/l2_switch$ ./runtime_CLI
table_set_default smac mac_learn
table_set_default dmac broadcast
mc_mgrp_create 1
mc_node_create 0 1
mc_node_create 1 2
mc_node_associate 1 0
mc_node_associate 1 1
How to Run P4 Behavior Model v2 | 2017/08/06 22
Layer 2 switch using P4 BMv2 (作業ログ)
5. host 間で ping による疎通確認
# ip netns exec host0 ping 172.20.0.2
# ip netns exec host1 ping 172.20.0.1
6. Table Entry の確認
RuntimeCmd: table_dump smac
==========
TABLE ENTRIES
**********
Dumping entry 0x0
Match key:
* ethernet.srcAddr : EXACT 32e7c817d3c5
Action entry: _nop -
**********
Dumping entry 0x1
Match key:
* ethernet.srcAddr : EXACT fe698f981f3b
Action entry: _nop -
==========
Dumping default entry
Action entry: mac_learn -
==========
RuntimeCmd: table_dump dmac
==========
TABLE ENTRIES
**********
Dumping entry 0x0
Match key:
* ethernet.dstAddr : EXACT 32e7c817d3c5
Action entry: forward - 00
**********
Dumping entry 0x1
Match key:
* ethernet.dstAddr : EXACT fe698f981f3b
Action entry: forward - 01
==========
Dumping default entry
Action entry: broadcast -
==========

More Related Content

What's hot

10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングTomoya Hibi
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始めtetsusat
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめTetsuya Hasegawa
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理Motonori Shindo
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向Yuya Rin
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)Kentaro Ebisawa
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造Taiji Tsuchiya
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPFShuji Yamada
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたakira6592
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたnpsg
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 

What's hot (20)

10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
Multi Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud buildersMulti Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud builders
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
FD.io VPP事始め
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造インターネットの仕組みとISPの構造
インターネットの仕組みとISPの構造
 
SRv6 study
SRv6 studySRv6 study
SRv6 study
 
AS45679 on FreeBSD
AS45679 on FreeBSDAS45679 on FreeBSD
AS45679 on FreeBSD
 
10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF10分でわかる Cilium と XDP / BPF
10分でわかる Cilium と XDP / BPF
 
BGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみたBGP Unnumbered で遊んでみた
BGP Unnumbered で遊んでみた
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Dockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみたDockerと外部ルータを連携させる仕組みを作ってみた
Dockerと外部ルータを連携させる仕組みを作ってみた
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 

Similar to How to run P4 BMv2

OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!Takashi Sogabe
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6Kentaro Ebisawa
 
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションKubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションTakashi Kanai
 
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8Satoshi Ohkubo
 
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...JUNICHI YOSHISE
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みYusuke Goto
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterPreferred Networks
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318Yuhki Hanada
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 

Similar to How to run P4 BMv2 (20)

OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
qmake入門
qmake入門qmake入門
qmake入門
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container ClusterオーケストレーションKubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
Kubernetes、Flannel、CNIでWindows Container Clusterオーケストレーション
 
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
OrePAN と cpanm を使ったCPAN モジュールの部分ミラーの運用管理 :Yokohama.pm #8
 
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...
Recap: Modern CI/CD with Tekton and Prow Automated via Jenkins X - Kubernetes...
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
200527 ur
200527 ur200527 ur
200527 ur
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 

More from Kentaro Ebisawa

P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)Kentaro Ebisawa
 
Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介Kentaro Ebisawa
 
IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来Kentaro Ebisawa
 
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ APIMPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ APIKentaro Ebisawa
 
In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019Kentaro Ebisawa
 
Comparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRHComparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRHKentaro Ebisawa
 
Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4Kentaro Ebisawa
 
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U TranslationIETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U TranslationKentaro Ebisawa
 
p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0Kentaro Ebisawa
 
SRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationSRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationKentaro Ebisawa
 
JANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsJANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsKentaro Ebisawa
 
Using GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlUsing GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlKentaro Ebisawa
 
SRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-typeSRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-typeKentaro Ebisawa
 
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)Kentaro Ebisawa
 
Zebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud EraZebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud EraKentaro Ebisawa
 
p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4Kentaro Ebisawa
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd IntroductionKentaro Ebisawa
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックKentaro Ebisawa
 

More from Kentaro Ebisawa (20)

P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)P4 Updates (2020) (Japanese)
P4 Updates (2020) (Japanese)
 
Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介Barefoot Faster™ 日本語紹介
Barefoot Faster™ 日本語紹介
 
IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来IETF106 Hackathon 報告 & P4 based Switch の課題と未来
IETF106 Hackathon 報告 & P4 based Switch の課題と未来
 
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ APIMPLS Japan 2019 : Data & Control Plane を繋ぐ API
MPLS Japan 2019 : Data & Control Plane を繋ぐ API
 
Yang Tools Quick Memo
Yang Tools Quick MemoYang Tools Quick Memo
Yang Tools Quick Memo
 
In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019In Network Computing Prototype Using P4 at KSC/KREONET 2019
In Network Computing Prototype Using P4 at KSC/KREONET 2019
 
Comparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRHComparison of SRv6 Extensions uSID, SRv6+, C-SRH
Comparison of SRv6 Extensions uSID, SRv6+, C-SRH
 
Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4Interop2019 Toyota Netcope P4
Interop2019 Toyota Netcope P4
 
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U TranslationIETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation
IETF 104 Hackathon VPP Prototyping Stateless SRv6/GTP-U Translation
 
p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0p4srv6 (P4-16) design document rev1.0
p4srv6 (P4-16) design document rev1.0
 
SRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and ImplementationSRv6 Mobile User Plane : Initial POC and Implementation
SRv6 Mobile User Plane : Initial POC and Implementation
 
JANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source ImplementationsJANOG43 Forefront of SRv6, Open Source Implementations
JANOG43 Forefront of SRv6, Open Source Implementations
 
Using GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnlUsing GTP on Linux with libgtpnl
Using GTP on Linux with libgtpnl
 
GTPing, How To
GTPing, How ToGTPing, How To
GTPing, How To
 
SRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-typeSRv6 Mobile User Plane P4 proto-type
SRv6 Mobile User Plane P4 proto-type
 
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
Zebra SRv6 CLI on Linux Dataplane (ENOG#49)
 
Zebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud EraZebra 2.0 in Hybrid Cloud Era
Zebra 2.0 in Hybrid Cloud Era
 
p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4p4alu: Arithmetic Logic Unit in P4
p4alu: Arithmetic Logic Unit in P4
 
zebra & openconfigd Introduction
zebra & openconfigd Introductionzebra & openconfigd Introduction
zebra & openconfigd Introduction
 
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタックONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
ONIC2017 プログラマブル・データプレーン時代に向けた ネットワーク・オペレーションスタック
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

How to run P4 BMv2

  • 1. How to Run P4 Behavior Model v2 ~ An P4 Software Switch Reference Implementation ~ Twitter: @ebiken How to Run P4 Behavior Model v2 | 2017/08/06 1
  • 2. • data plane 記述言語である “P4” 対応のハードウェア実装(ASIC, SmartNIC etc.)が増え つつあるが、数十万~数百万円と、P4とは何かをまず試してみるにはコスト的に敷居が 高い。 • また、各ハードウェア実装(以降ターゲット)によってサポートされるP4機能が異なるため、 P4言語そのものを試すには制約が少ないソフトウェア実装が好ましい。 • そのため、P4を初めて試す際や、P4を用いたアプリケーションのPOC等を実施する際に は、P4コミュニティで実装がすすめられているリファレンス実装である “P4 BMv2 (Behavior Model version 2)” を用いると有効である。 • 本文書では、P4 BMv2 を用いてP4のコンパイルおよびP4スイッチを動作させるための手 順を紹介する。 About this document How to Run P4 Behavior Model v2 | 2017/08/06 2
  • 3. • 既存パケット処理専用ASICの課題(P4のモチベーション) • パケット処理を高速(Tbps)かつ安価に実施する場合、専用ASICが利用される。 • 新しいプロトコル・処理方法に対応したASICの開発には2~3年必要。 • 標準化完了~対応製品利用可能まで5年程度必要。 • ネットワーク製品の進化がユーザーニーズに追い付かなくなっていた。 How to Run P4 Behavior Model v2 | 2017/08/06 3 P4について Reference: • “The P4 Language Specification” • Version 1.0.3 | November 2, 2016 • プログラム可能なパケット処理専用ASICの開発 • パケット処理(Dataplane)の基本動作(Parse/Match/Action)を プログラム可能なASICとプログラム言語(P4)を設計。 • P4 : Programming Protocol-Independent Packet Processors • 仕様提唱企業:Barefoot Networks • P4は「データプレーン定義言語」であるため、様々なターゲット プラットフォームへコンパイル可能 • P4対応 Ethernet Switch (ASIC) • SmartNIC (NPU, FPGA) • Software (CPU)
  • 4. • Ethernet Switch は通常 “parser”, “match/action”, “de-parser” で構成され るが、match/actionのパイプラインがいくつあるか (Input only, In/Out etc.)、利用可能なaction、メタデータやレジストリなどの違いがある。 • de-parser => 送信前にパケットヘッダを組み立てるコンポーネント • P4 BMv2 ではこれらのアーキテクチャの変更が可能となっている。 • アーキテクチャは C++11 でプログラムする。 • サンプルとして以下3つのアーキテクチャが付属している。 • l2_switch | simple_router | simple_switch • P4言語を試すときは、上記付属アーキテクチャから1つを選んで使用。 How to Run P4 Behavior Model v2 | 2017/08/06 4 Switch Architecture
  • 5. • P4仕様には現在2つのバージョンが存在する。 • それぞれ2014年、2016年にリリースされた仕様となるが、どちらとも現在(2017年7月)も メンテナンスが継続されており、定期的に修正版がリリースされている。バージョン番号 はそれぞれ独立して version x.y.z の形式でアサインされているため、"P4_14 Version 1.0.4", "P4_16 Version 1.0.0" のように P4_14 / P4_16 を明確に記載する必要がある。 • P4バージョンと仕様書の場所 • https://p4lang.github.io/p4-spec/ • P4_14:2014年リリースの仕様 • P4_16:2016年リリースの仕様 本文書では、サポートされるハードウェア実装の多い “P4_14” を用いる。 How to Run P4 Behavior Model v2 | 2017/08/06 5 P4のバージョンと入手先
  • 6. • P4はパケット処理のデータプレーンを定義するプログラム言語であり、実際のパ ケット処理には以下モジュールが必要となる。 How to Run P4 Behavior Model v2 | 2017/08/06 6 P4 動作に必要なモジュール P4 Source Code パケット処理データプレーンの定義。パーサーやテーブル、アクションなどの定義 P4 Compiler P4をTarget上で実行可能な形式(Dataplane runtime)にコンパイルする。Target毎に提供される。 Target P4 Dataplane runtime を読み込み、定義された通りにパケット処理を実施する ASIC(Barefoot), SmartNIC/NPU(Netronome), FPGA(Xilinx, Intel/Altera), Software(BMv2, eBPF) etc. Notes • Target実装毎にサポート状況はそれぞれ異なるため注意が 必要である。例えば Netronome SmartNIC (NFP) は現在 (2017年8月)P4_14のみをサポートしている。 • P4_16の仕様書では、P4対応Dataplaneだけでなく Control- plane を含めて Target と呼んでいる。 • また、P4は「どのようにパケットを解析するか」「どのような テーブルを持つか」「どのようなアクションが可能か」の定義 であり、スイッチ・ルーターと同様に「アドレス」「テーブルエ ントリ(ルール)」などの設定を投入するコントロールプレー ン(Network OS 等)が必要である。 P4 Source Code Dataplane runtime P4 Compiler P4 対応 Dataplane Control-plane (protocol agents) Target API definition 参照:P4_16 v1.0.0 Figure 2. Programming a target with P4.
  • 7. • P4 source code はスイッチのパイプライン(パーサー、テーブル構成やアクション)を定義 しているのに対し、それらを設定(エントリを投入・変更・削除)するAPIが存在する。 • BMv2 API (現状) • BMv2 APIとして “Thrift API” が用意されている • BMv2用のCLIが付属しており、Thrift API経由でBMv2を操作する • https://github.com/p4lang/behavioral-model/blob/master/tools/runtime_CLI.py • BMv2 API (将来プラン) • Target に依存しない gRPC / protobuf を利用した API が検討されている • Target に依存しないため、その上で開発したCLIなどはBMv2以外の実装(Switch ASIC, SmartNIC など)でも利用可能になる予定である • https://github.com/p4lang/PI • https://github.com/p4lang/PI/blob/master/proto/p4/p4runtime.proto How to Run P4 Behavior Model v2 | 2017/08/06 7 CLI / API (Configuration Interface)
  • 8. (各モジュールの説明は以降のスライドに記載) • P4コミュニティのレポジトリは以下GitHubに保存されている。 • https://github.com/p4lang/ • P4 Compiler • p4c: https://github.com/p4lang/p4c • Target • bmv2 : https://github.com/p4lang/behavioral-model.git • P4 Source Code • samples : https://github.com/p4lang/tutorials How to Run P4 Behavior Model v2 | 2017/08/06 8 各モジュールの入手場所
  • 9. How to Run P4 Behavior Model v2 | 2017/08/06 9 各モジュールの入手場所 (P4 Compiler) p4c-bm • https://github.com/p4lang/p4c-bm • P4_14 対応のオフィシャルコンパイラ . p4c • https://github.com/p4lang/p4c • P4_16, P4_14 対応のコンパイラ • (p4c-bmより新しい) • p4c ... 標準コンパイラ • p4c-ebpf ... eBPFへコンパイル可能なC をP4から出力する • .p4 ファイルを入力とし .json (dataplane runtime) を出力する • p4c-bm, p4c の2種類存在 新しいプロジェクトでは p4c を利用していくことを推奨
  • 10. • P4 Software Switch (Behavior Model) • bmv2 : https://github.com/p4lang/behavioral-model.git • BMv2には以下3つのTarget実装のサンプルが付属する。 • https://github.com/p4lang/behavioral-model/tree/master/targets • simple_router : 最も簡単な実装。 • l2_switch : Multicast 対応のためのレプリケーションエンジンを含む • simple_switch : 標準 P4 target • (参考) • 古いBM(メンテ停止済み)も p4lang レポに存在しているが、古いチュートリアル実行等 以外では利用しないことを推奨 • https://github.com/p4lang/p4c-behavioral How to Run P4 Behavior Model v2 | 2017/08/06 10 各モジュールの入手場所 (Target)
  • 11. • P4 Source Code • チュートリアル等で利用されたサンプルを入手可能 • https://github.com/p4lang/tutorials • 各ターゲットの下にも存在する How to Run P4 Behavior Model v2 | 2017/08/06 11 各モジュールの入手場所 (P4 Source Code)
  • 12. • Protocol Agent • 例えば Layer 2 switch (MAC Learning) を動作させるためには、未学習のパ ケットを解釈し、MAC Table にエントリを追加する Agent (CPUで動作) が必要 • P4 Source Code と同じ場所にサンプルが存在する。 • https://github.com/p4lang/behavioral- model/tree/master/targets/l2_switch/learn_client • CLI • runtime_CLI (python) が各 Target の下、および以下場所に存在 • https://github.com/p4lang/behavioral-model/blob/master/tools/runtime_CLI.py • (各 Target 下の runtime_CLI と同じ実装) How to Run P4 Behavior Model v2 | 2017/08/06 12 各モジュールの入手場所 (その他)
  • 13. Install/Build 手順 Ubuntu 16.04 を用いて確認した Install/Build 手順 How to Run P4 Behavior Model v2 | 2017/08/06 13
  • 14. • README.md に記載されている手順にて実施: • https://github.com/p4lang/p4c/blob/master/README.md 作業内容 1. apt をアップデート 2. 依存パッケージをインストール 3. GitHub から p4c repository をクローン 4. ビルド 5. compiler と P4 shared headers をインストール (optional) • p4c: /usr/local/bin • P4 headers: /usr/local/share/p4c How to Run P4 Behavior Model v2 | 2017/08/06 14 p4c (compiler)
  • 15. How to Run P4 Behavior Model v2 | 2017/08/06 15 p4c (compiler) 作業ログ 1. apt をアップデート $ sudo apt update $ sudo apt upgrade 2. 依存パッケージをインストール $ sudo apt-get install g++ git automake libtool libgc-dev bison flex libfl-dev libgmp-dev libboost-dev libboost-iostreams-dev pkg-config python python-scapy python-ipaddr tcpdump > For documentation building: > $ sudo apt-get install -y doxygen graphviz texlive-full > Google Protocol Buffers. Install newest tag in the 3.0 series. $ sudo apt-get install autoconf automake libtool curl make g++ unzip $ git clone https://github.com/google/protobuf.git $ cd protobuf/ > under ~/protobuf$ $ git checkout v3.0.2 $ ./autogen.sh $ ./configure $ make $ make check $ sudo make install $ sudo ldconfig # refresh shared library cache. > If required: $ sudo apt autoremove 3. GitHub から p4c repository をクローン > Clone p4c repository from GitHub $ mkdir p4lang $ cd p4lang ~/p4lang$ git clone --recursive https://github.com/p4lang/p4c.git 4. ビルド > build p4c $ ./bootstrap.sh $ cd build $ make -j4 $ make check -j4 5. compiler と P4 shared headers をインストール (optional) > Install $ sudo make install
  • 16. • README.md に記載されている手順にて実施: • https://github.com/p4lang/behavioral-model/blob/master/README.md 1. GitHub から bmv2 (behavioral-model) repository をクローン 2. 依存パッケージをインストール • packages: thrift / nanomsg / nnpy • Ubuntu の場合、`install_deps.sh` script を利用して一括インストール可能 3. ビルド 4. テスト実行 How to Run P4 Behavior Model v2 | 2017/08/06 16 bmv2 (behavior model)
  • 17. How to Run P4 Behavior Model v2 | 2017/08/06 17 bmv2 (behavior model) 1. GitHub から bmv2 (behavioral-model) repository をクローン $ git clone https://github.com/p4lang/behavioral-model.git bmv2 $ cd bmv2 2. 依存パッケージをインストール > under ~/bmv2$ $ ./install_deps.sh script 3. ビルド > Build $ ./autogen.sh $ ./configure $ make -j2 $ sudo make install # if you need to install bmv2 4. テスト実行 > Run test $ make check
  • 18. サンプル(Layer 2 switch の実行) How to Run P4 Behavior Model v2 | 2017/08/06 18
  • 19. • P4 Program のコンパイル、Agentの利用、設定の投入、等、P4 Applicationを動作させる ために必要な基本的な手順すべてが含まれるため、サンプルとして ”Target: l2_switch” を用いた Layer 2 (mac learning) switch の動作手順を記載します。 How to Run P4 Behavior Model v2 | 2017/08/06 19 Layer 2 switch using P4 BMv2 host1 host2 l2_switch (BMv2) veth0: 172.20.0.1/24 vtap1vtap0 veth1: 172.20.0.1/24 learn_client runtime_CLI Notes • Two veth/vtap pair are created. • host1/host2 are network namespace (netns) to emulate hosts connected to switch. • learn_client runs outside of l2_switch (BMv2) and receives packets from l2_switch / update table entries dynamically. • runtime_CLI are used to set initial table entries on l2_switch, and check table entries on runtime.
  • 20. 1. veth/vtap pair, netns hosts の作成 2. l2_switch の起動 3. learn_client の起動 4. CLI の起動・設定の投入 5. host 間で ping による疎通確認 6. Table Entry の確認 How to Run P4 Behavior Model v2 | 2017/08/06 20 Layer 2 switch using P4 BMv2 (steps)
  • 21. How to Run P4 Behavior Model v2 | 2017/08/06 21 Layer 2 switch using P4 BMv2 (作業ログ) 1. veth/vtap pair, netns hosts の作成 # Create netns hosts ip netns add host0 ip netns add host1 # Create veth ip link add veth0 type veth peer name vtap0 ip link add veth1 type veth peer name vtap1 # Connect veth between host0 and host1 ip link set veth0 netns host0 ip link set veth1 netns host1 ip link set dev vtap0 up ip link set dev vtap1 up # Link up loopback and veth ip netns exec host0 ip link set veth0 up ip netns exec host0 ifconfig lo up ip netns exec host1 ip link set veth1 up ip netns exec host1 ifconfig lo up # Set IP address ip netns exec host0 ip addr add 172.20.0.1/24 dev veth0 ip netns exec host1 ip addr add 172.20.0.2/24 dev veth1 ip link set dev vtap0 up ip link set dev vtap1 up 2. l2_switch の起動 $ cd bmv2/targets/l2_switch ~/bmv2/targets/l2_switch$ sudo ./l2_switch l2_switch.json -i 0@vtap0 -i 1@vtap1 --nanolog ¥ ipc:///tmp/bm-0-log.ipc --log-console -L debug --notifications-addr ¥ ipc:///tmp/bmv2-0-notifications.ipc 3. learn_client の起動 ~/bmv2/targets/l2_switch/learn_client$ sudo ./learn_client 4. CLI の起動・設定の投入 ~/bmv2/targets/l2_switch$ ./runtime_CLI table_set_default smac mac_learn table_set_default dmac broadcast mc_mgrp_create 1 mc_node_create 0 1 mc_node_create 1 2 mc_node_associate 1 0 mc_node_associate 1 1
  • 22. How to Run P4 Behavior Model v2 | 2017/08/06 22 Layer 2 switch using P4 BMv2 (作業ログ) 5. host 間で ping による疎通確認 # ip netns exec host0 ping 172.20.0.2 # ip netns exec host1 ping 172.20.0.1 6. Table Entry の確認 RuntimeCmd: table_dump smac ========== TABLE ENTRIES ********** Dumping entry 0x0 Match key: * ethernet.srcAddr : EXACT 32e7c817d3c5 Action entry: _nop - ********** Dumping entry 0x1 Match key: * ethernet.srcAddr : EXACT fe698f981f3b Action entry: _nop - ========== Dumping default entry Action entry: mac_learn - ========== RuntimeCmd: table_dump dmac ========== TABLE ENTRIES ********** Dumping entry 0x0 Match key: * ethernet.dstAddr : EXACT 32e7c817d3c5 Action entry: forward - 00 ********** Dumping entry 0x1 Match key: * ethernet.dstAddr : EXACT fe698f981f3b Action entry: forward - 01 ========== Dumping default entry Action entry: broadcast - ==========