Radek Krej í rkrejci@cesnet.cz NETCONF a YANG NETCONF 29. listopadu 2014 Praha, IT 14.2
Jak funguje protokol NETCONF Radek Krej í NETCONF a YANG 29.11. 2014 1 / 28
Základní charakteristiky klient-server protokol XML kódování zpráv RPC mechanismus definuje komunikace mezi klientem a serverem definuje zp sob manipulace s konfigura ními daty a úloûiötmi RFC 6241 (v1.1) a dalöí Radek Krej í NETCONF a YANG 29.11. 2014 2 / 28
Vrstvy protokolu Transportní vrstva spojovaná komunikace (TCP) mezi klientem (NMS) a serverem (spravované za ízení) zabezpe ení (autentizace, integrita, d v rnost a ochrana proti p ehrání) SSH, TLS Radek Krej í NETCONF a YANG 29.11. 2014 3 / 28
Vrstvy protokolu Vrstva zpráv mechanismus RPC <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <close-session/> </rpc> <rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <ok/> </rpc-reply> <rpc>, <rpc-reply>, <notification> zahrnuje i framing v1.0: pomocí sekvence ]]>]]> v1.1: po et znak ke tení \n#22\n <rpc message-id="102" \n#79\n xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n <close-session/>\n </rpc> \n##\n Radek Krej í NETCONF a YANG 29.11. 2014 4 / 28
Vrstvy protokolu Vrstva operací RPC metody proveditelné serverem rozöi itelná základní sada operací: <get>, <get-config>, <edit-config>, <copy-config>, <delete-config>, <lock>, <unlock>, <close-session>, <kill-session> XML formát párování poûadavek/odpov pomocí message-id <rpc message-id="102" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <close-session/> </rpc> Radek Krej í NETCONF a YANG 29.11. 2014 5 / 28
Vrstvy protokolu Vrstva obsahu konfigura ní a stavová data popis pomocí YANG model Radek Krej í NETCONF a YANG 29.11. 2014 6 / 28
Komunikace Radek Krej í NETCONF a YANG 29.11. 2014 7 / 28
Rozöi itelnost (capabilities) moûnost rozöí it základní funkcionalitu seznam podporovan ch rozöí ení sou ástí <hello> zprávy <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability> <capability>urn:ietf:params:netconf:base:1.1</capability>... <capability>urn:ietf:params:netconf:capability:with-defaults:1.0? basic-mode=explicit&also-supported=report-all,explicit</capability> <capability>http://example.net/turing-machine? module=turing-machine&revision=2013-12-27</capability> <capability>urn:cesnet:tmc:netopeer:1.0? module=netopeer-cfgnetopeer&revision=2013-02-14</capability> <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-server? module=ietf-netconf-server&revision=2014-01-24& features=ssh,inbound-ssh,outbound-ssh</capability>... </capabilities> <session-id>10174</session-id> </hello> Radek Krej í NETCONF a YANG 29.11. 2014 8 / 28
Konfigura ní úloûiöt running (zapisovatelné s :writable-running) startup (:startup) candidate (:candidate) Radek Krej í NETCONF a YANG 29.11. 2014 9 / 28
Konfigura ní vs. Stavová data dáno datov m modelem (config false/true) stavová data pouze pomocí <get> jednou operací lze m nit více konfigura ních poloûek najednou, klient se nemusí starat o správné po adí Radek Krej í NETCONF a YANG 29.11. 2014 10 / 28
Manipulace s konfigura ními daty získání konfigurace <get> nebo <get-config> moûnost filtrování <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> <get-config> <source><running/></source> <filter type="subtree"> <turing-machine/> </filter> </get-config> </rpc> Radek Krej í NETCONF a YANG 29.11. 2014 11 / 28
Manipulace s konfigura ními daty editace dat <edit-config> operace merge, replace, create, delete, remove <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"> <edit-config> <target><running/></target> <config> <turing-machine xmlns="http://example.net/turing-machine" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <transition-function> <delta> <label>1</label> <input><state>1</state></input> </delta> <delta nc:operation="delete"> <label>2</label> </delta> </transaction-function> </turing-machine> </config> </edit-config> </rpc> Radek Krej í NETCONF a YANG 29.11. 2014 12 / 28
Notifikace rozöí ení protokolu (RFC 5277) asynchronní zprávy o událostech pouze po p edchozím p ihláöení k odb ru (subscribe) Radek Krej í NETCONF a YANG 29.11. 2014 13 / 28
Knihovna libnetconf a projekt Netopeer Radek Krej í NETCONF a YANG 29.11. 2014 14 / 28
libnetconf http://libnetconf.googlecode.com implementace NETCONFu pro Linux rozhraní pro jazyk C (a Python) implementace klientské i serverové ásti vlastnosti: verze 1.0 (RFC 4741) i 1.1 (RFC 6241) SSH i TLS transport Notifikace NETCONF Access Control Call Home :writable-running, :candidate, :startup, :startup, :validate, :url, :with-defaults Radek Krej í NETCONF a YANG 29.11. 2014 15 / 28
NETCONF Netopeer libnetconf TransAPI Záv r http://netopeer.googlecode.com https://github.com/cesnet/netopeer-gui NETCONF aplikace pro Linux Netopeer GUI Netopeer configurator Netopeer agent Netopeer CLI Radek Krej í NETCONF a YANG Netopeer server... transapi modul... Netopeer agent transapi modul network Netopeer manager 29.11. 2014 16 / 28
netopeer-cli jednoduchá p íkazová ádka NMS UI libnetconf OpenSSH libssh2 network Radek Krej í NETCONF a YANG 29.11. 2014 17 / 28
Netopeer GUI PHP frontend s backendem udrûujícím persistentní spojení Web GUI (PHP, Sympfony) Apache module libnetconf libssh2 SSH server NETCONF server network SSH server NETCONF server Radek Krej í NETCONF a YANG 29.11. 2014 18 / 28
netopeer-server systémov daemon s moduly pro jednotlivá za ízení SSH server libnetconf agent network... libnetconf agent SSH Subsystem datastore transapi modul libnetconf netopeer-server libnetconf... transapi modul Radek Krej í NETCONF a YANG 29.11. 2014 19 / 28
TransAPI moduly ietf-netconf-server ietf-system ietf-interfaces, ietf-ip toaster, turing-machine Radek Krej í NETCONF a YANG 29.11. 2014 20 / 28
TransAPI moduly Implementace Turingova stroje jako TransAPI modulu Radek Krej í NETCONF a YANG 29.11. 2014 21 / 28
TransAPI sou ást knihovny libnetconf mechanismus callback spojen ch s konkrétním datov m modelem generátor lnctool(1) Radek Krej í NETCONF a YANG 29.11. 2014 22 / 28
TransAPI Globální prom nné a inicializace pro tení transapi_version (r) config_modified (w) pro zápis callbacks_order (w) erropt (r) int transapi_init(xmldocptr *running); void transapi_close(void); Radek Krej í NETCONF a YANG 29.11. 2014 23 / 28
TransAPI Datové callbacky volané p i zm n v konkrétním míst konfigura ního stromu informace o typu zm ny p idání, smazání, zm na, zpracovaná zm na v potomku, zm na po adí sourozenc, zm na po adí potomk int callback(void **data, XMLDIFF_OP op, xmlnodeptr node, struct nc_err **error); speciální callback pro získání stavov ch informaci: xmldocptr get_state_data(xmldocptr model, xmldocptr running, struct nc_err **err); Radek Krej í NETCONF a YANG 29.11. 2014 24 / 28
TransAPI RPC callbacky implementace RPC metod definovan ch datov m modelem nc_reply *rpc(xmlnodeptr input[]); Radek Krej í NETCONF a YANG 29.11. 2014 25 / 28
TransAPI Souborové callbacky callback je vyvolan zm nou externího souboru int file_callback(const char *filepath, xmldocptr *edit_config, int *exec); Radek Krej í NETCONF a YANG 29.11. 2014 26 / 28
Záv r Radek Krej í NETCONF a YANG 29.11. 2014 27 / 28
Záv r Zdroje informací a komunika ní kanály stránky projekt mailing listy Dalöí plány transapi modul pro Open vswitch knihovna libyang odstran ní závislosti na libxml2 Radek Krej í NETCONF a YANG 29.11. 2014 28 / 28
Díky za pozornost NETCONF a YANG NETCONF 29. listopadu 2014 Praha, IT 14.2 Radek Krej í rkrejci@cesnet.cz