YANGを中心としたSDNの開発ワークフロー
ソフトバンク株式会社
コア&トランスポート技術本部
C&I統括部 パケットネットワーク部
堀場 勝広

概要
• 自己紹介• ネットワークプログラマビリティとWebの技術• Webの技術者たちが利用している道具• YANGによるネットワークとWebの技術の紐付け• 最近の動向
• まとめ

自己紹介
• 元大学研究者• 研究領域はNW仮想化、SDN、NFVなど• コンソーシアムなどで企業の皆さんとオープンソース技術を研究• 2015年からソフトバンク株式会社• オープンソース技術を利用したSDNの研究開発に従事• OpenDaylightとの出会い• Lithium(3rd Release)から参戦• 2017年から商用ネットワーク設計部門に異動• OpenDaylightを利用した商用ネットワークのSDN化に従事• SDNコントローラの上位システム(自動化システム)を含む

ネットワークプログラマビリティとデータプレーンプログラマビリティ
ネットワークプログラマビリティ

Application

自動化(非CLIな設定管理)
Software Defined(SDN)

Controller

Control Plane
Data Plane
Network DeviceConfiguration

データプレーン
プログラマビリティ

パケット処理今日のトピック

いかにネットワーク屋の技術をWeb屋のそれに近づけるか
Web屋さんの技術

Application

巨大データベースに対し非同期にアクセスする
ステートレスな世界

RestAPI

Controller
OpenFlow

BGP

Control Plane
Data Plane
Network Device

Netconf

Configuration

ネットワーク屋さんの技術

経路制御プロトコルやパケット転送テーブルなど
ステートフルな世界

Webの技術者たちが利用している道具

モダンなWebアプリのフレームワーク
Model View Controller(MVC)パターンで成り立っている

BrowserWeb Server Side App

DataBase Point
データの読み書きでDBには直接アクセスしない
必ずモデルを介してアクセスするMVC
https://codezine.jp/article/detail/104

オブジェクト関係マッピング

ORM(Object Relational Mapping)

DBを直接操作するSQLをプログラミングするのは大変できることならオブジェクト指向でプログラミングしたいàORMでデータベースとオブジェクトのギャップを埋める

import Employee
uid = 1608096
employee = new Employee(uid)print employee.getName()conn = connect(db,u, p)
cur = conn.cursor()
sql = “select * from”
table = “employee”
uid = “1608096”
sql += table
sql += “where uid=”
sql += uid
result = cur.exec(sql)
print result[2]IPA  
 O/R
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/004.html

OPEN APIとSwagger
REST APIの標準フォーマット策定

標準化フォーマット記述されたAPIの利活用フレームワーク
プログラミング言語非依存な
REST APIインターフェース

https://openapis.org/

http://swagger.io/

Swaggerの概念
API仕様の仕様をYAMLで記述する(Swagger Editor)
JSON形式の仕様(Swagger Spec)に変換する
ドキュメント・UI(サンドボックス)を自動生成(Swagger UI)
クライアントのコードも自動生成(Swagger Codegen)Swagger
https://blog.takuros.net/entry/2015/12/02/082248

ここまでのまとめ• データベースへのアクセス• 必ずモデルを通す• ORMを通してプログラミングする• Restful API仕様と実装• 仕様をOpen APIで記述する• ドキュメント、サンドボックスはSwaggerで自動生成• クライアントのコードもSwaggerで自動生成

YANGによるネットワークとWebの技術の紐付け

今日のトピック(再掲)

いかにネットワーク屋の技術をWeb屋のそれに近づけるか
Web屋さんの技術

Application

巨大データベースに対し非同期にアクセスする
ステートレスな世界

RestAPI

Controller
OpenFlow

BGP

Control Plane
Data Plane
Network Device

Netconf

Configuration

ネットワーク屋さんの技術

経路制御プロトコルやパケット転送テーブルなど
ステートフルな世界こうなれば幸せな世界
自動生成

RestAPI

RestAPI

自動生成

サーバアプリController
OpenFlow

BGP

Control Plane
Data Plane
Network Device

APIの仕様OpenAPI

クライアントApplication

ORM
Netconf

Configuration 

巨大なデータベース

そこでYANGの出番ですYANG
YANG is a data modeling language used to model configuration data, state data,
Remote Procedure Calls, and notifications for network management protocols.
/SNIP/
This document also specifies the YANG mappings to the
Network Configuration Protocol (NETCONF).
RFC7950 The YANG 1.1 Data Modeling Language
https://tools.ietf.org/html/rfc7950• YANGはあくまで「データモデル言語」• 装置の設定以外に、サービスやリソースの定義などにも利用可能• 装置ベンダーにおける設定文法• IETFにおけるネットワークサービスやトポロジの定義• Netconfにおける装置の設定や状態の文法は適用例の一つ• Restconfなどにも利用されている

OpenDaylight MD-SALとYANG• MD-SAL(Model Driven Service Abstraction Layer)• YANGを入力するとMD-SALへのAPIがORMとして自動生成される• 実はNorthboundもSouthboundもMD-SALを利用する1つのアプリ
Application
Restconf

YANG
YANGTools

NW装置

Java AppJava AppJava App  Netconf

YANG-Java API Mapping
MD-SAL

ConfigData StoreOperational
Data Store

RPC

Notification
OpenDaylightYANG Mountと言う概念• UNIXのファイルシステムと同じ概念• MD-SALのデータストアに、装置の設定・状態のデータストアを連結
Restconf

YANG
YANGTools

Java AppJava AppJava App  Netconf

YANG-Java API Mapping
MD-SAL

ConfigData StoreOperational
Data Store

RPC

Notification
OpenDaylight

NetworkDevice

ConfigOperational

YANGは様々な言語のORMに変換可能
モダンなWebフレームワークの世界へ僕らも行ける！

Infrastructure as a Code Using YANG, OpenConfig and YDKhttps://www.youtube.com/watch?v=G1b6vJW1R5w

OpenDaylight Architecture
https://slideplayer.com/slide/5876657/

YANGはSwagger Specにも変換可能
クライアントやサンドボックスは自動生成する時代
OpenDaylightは、YANGを取り込んだ瞬間から、サンドボックスもできる
その他、変換ツールも公開されている
yang2swagger-

https://bitbucket.org/cmurch/yang2swagger-generator

yang-swagger-

https://github.com/corenova/yang-swagger
https://www.npmjs.com/package/yang-swagger

OpenDaylight Controller:MD-SAL:Restconf API Explorer
https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Restconf_APIExplorer

YANGを中心としたSDNの開発ワークフロー 6*$,=B7
G>@1

NWDA

E2""#YDK

Rest Client
YANG URLC.? : ODL ProjectG>

NWDA34%''
YANG C.<5(OSSG>&C.<5API Reference
Swagger UI
DA

Restconf

CustomJava App

Netconf%

DAE2'API
'8F('!)9;/0)DB= Java API
YANG C.<5YANG

YANG Tools
OpenDaylight(ODL)

YANG+-Data BaseYANG C.<5DataBaseJava APIRESTful APIC.<5レガシー装置対応の例
諦め掛けていた伝送系のレガシー装置も対応可能
Not Bad
自動化
ScriptMuch Better
自動化
ScriptGUI• とある伝送装置の話・・・• NMSとセットの製品• SBIのトランスポートはITU-T勧告ベース• 装置の設定データベースはSQL実装• あれ、思ったより簡単だった・・・

NBI Plugin
NMS

OpenDaylight
SBI
Plugin

伝送装置

伝送装置• SQLスキーマからYANGスキーマに変換• YANGをOpenDaylightにインポート• トランスポートを実装• 以上、終了・・・• NMSにNorthbound APIを実装より楽！

最近の動向

最近の動向(YANG)• YANGはGithubで公開されている• 装置ベンダーさん、IETFで標準化されているYANG• https://github.com/YangModels/yang/tree/master/vendor• 装置に非依存な設定も続々と定義されている• OpenConfig• https://github.com/openconfig/public• BroadBand Forum• https://github.com/BroadbandForum/yang• ソフトウェアルータもYANG対応に舵を切った• FRR Advanced Northbound API• https://www.dropbox.com/s/zhybthruwocbqaw/netdef-frrnorthbound.pdf

5G CoreもRestful APIの世界

RESTful APIs for the service based interfaces
and northbound communication.

Simplified API calls for example SBA procedures

RESTful APIs for the 5G Service Based Architecture
https://www.riverpublishers.com/journal/journal̲articles/RP̲Journal̲2245-800X̲617.pdf

5G CoreのAPI定義

API GithubSwagger!
OpenAPI(Swagger YAML)   

https://github.com/jdegre/5GC_APIs
https://editor.swagger.io/?url=https://raw.githubusercontent.com/jdegre/5GC_APIs/master/TS29551_Nnef_PFDmanagement.yaml

まとめ• ネットワークプログラマビリティ向上にはWebの技術が不可欠• Webの技術者たちが利用している道具• Model View Controllerフレームワーク• Object Relational Mapping• Open APIとSwagger• YANGによるネットワークとWebの技術の紐付け• YANGはあくまでデータモデルの定義• YANGをOpenDaylightのMD-SALに入力すれば概ね解決する• YANGはSwaggerとの親和性も高い

Thank You
May the YANG be with you.

Appendix

Swagger Editor

標準フォーマット (YAML形式)に従って，Swagger Spec(API仕様)を記述à ドキュメント，クライアント，サーバのコードを自動生成

自動生成されるサーバとクライアントの言語
http://editor.swagger.io/

Swagger UI
ドキュメント，テスト環境はSwagger Specから自動生成
http://petstore.swagger.io/

Bodyを記述してその場でAPIテスト
可能なSandbox

データモデルの定義を参照モダンなNW装置はデータベースである装置の設定、状態などはデータベースに格納されている
configure terminalrouter ospf 1
show startup-config
show running-config
area 0.0.0.0
interface lo 0commit
copy run sta

Startup
Config DB

Running
Config DB 
show run


show ospf neighbor(etc…)

Candidate
Config DB

Operational
State DBCommit

show xxx モダンなNW装置の仕組み(contd.)
NetconfもCLIも同じDBを読み書きしているshow running-config

Netconf

CLIStartup
Config DB<rpc><get-config><source><running/></source></get-config></rpc>]]>

RunningConfig DBCandidate
Config DB

OSPF Process

Operational
State DB  (OSPF Neighbor )

YANG: NW装置が持つDBのスキーマ
NW装置の設定文法は、YANGで記述

Schema(Bgp-Cfg)

IOS-XR Config Database
If-CfgOspf-Cfg

Neighbor
Description
AS Number
Route Policy.
.

Bgp-Cfg

IPv4 Address
Stringu_int16
String, enum:[transit, peer]

Neighbor

Description

AS Number

Route Policy…

1.2.3.4

NTT GIN2914

transit…

9.8.7.6

Sakura Internet

7684

peer

…

…

…

…

…

…

YANGYANG = NW装置のスキーマ記述言語
NWベンダーさんが装置の設定スキーマを用意してくれる
module Cisco-IOS-XR-ifmgr-oper {namespace "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-oper";prefix ifmgr-oper;/SNIP/
container interface-properties {
config false;
description"interface properties";container data-nodes {description"Operational data for interfaces";
list data-node {key "data-node-name";
description"The location of a (D)RP in the same LR as theinterface being queried";container locationviews {description   IDE

YANG-Explorer

Telnet CLI装置対応の例
CLIだけ対応装置、非CLI対応装置もYANGで違いを吸収
Rest Client• まずは後付でYANGを定義する

NW装置
YANG

RestconfPlugin• 定義したYANGスキーマをインポート

Telnet CLIPlugin

DBアクセス用のJava API
YANGから自動生成
Data Base(MD-SAL)YANGから自動生成• 値を入れる器を用意してやる• 当然、型の定義は必要• OpenConfigなんかで代用もあり• スキーマに合致したDBとアクセス用APIがYANGから自動生成• この時点でRestconfでNBIアクセス可能に

YANG
Tools

OpenDaylight• Southbound Pluginを実装する• トランスポートをプロトコルに合わせて実装する• 構造化されていないテキストからYANGスキーマに合致したデータ構造に変換を実装する• 正規表現の処理をココに局所化する