zebra is an open source implementation as a successor of GNU Zebra and Quagga project. Together with openconfigd, it will work as data plane agnostic Network Operation Stack working with variable protocol / functional modules.
2. zebra is an open source implementation
as a successor of GNU Zebra and Quagga project.
Together with openconfigd, it will work as data plane agnostic Network
Operation Stack working with variable protocol / functional modules.
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 2
zebra (Zebra 2.0) / openconfigd
3. zebra & openconfigd
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 3
Architecture
CLI
openconfigd
Linux dataplane
quaggad
bgpd / ospfd
ribd
fea
quagga
openconfigd
zebra
gRPC
gRPC
(yang model)
vtysh
Tap
interface netlink
Hardware dataplane
HW API (SAI, XDK etc.)
zebra
proto
gRPC
bgpd/ospfd
gRPC
gRPC
etcd
JSON
Written from scratch in Go
• openconfigd
• configuration system
• yang model
• CLI (Junos like)
• etcd for scalability
• zebra/ribd
• dataplane management (ex: FIB)
• zebra/fea
• multiple dataplane support
• link/port, bridge domain etc.
• zebra/bgpd, ospfd
• New protocol modules with multi-
core support
• quaggad & zebra protocol
• for backward compatibility
4. zebra & openconfigd | Source Code on GitHub
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 4
Main Modules
• openconfigd
• https://github.com/coreswitch/openconfigd
• zebra
• https://github.com/coreswitch/zebra
Helper Modules
• component / dependency
• Component dependencies library and dependency library.
• https://github.com/coreswitch/component
• https://github.com/coreswitch/dependency
• log: logrus wrapper with source code information and function name and log levels.
• https://github.com/coreswitch/log
• cmd: Go library for command line parsing.
• https://github.com/coreswitch/cmd
5. zebra & openconfigd
• Install openconfigd
$ go get github.com/coreswitch/openconfigd/openconfigd
• Install CLI
$ go get github.com/coreswitch/openconfigd/cli_command
$ cd $GOPATH/src/github.com/ coreswitch /openconfigd/cli
$ ./configure; make
$ sudo make install
$ cd $GOPATH/src/github.com/coreswitch/openconfigd/bash_completion.d
$ sudo cp cli /etc/bash_completion.d/
• Install zebra
$ go get github.com/coreswitch/zebra/rib/ribd
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 5
Installation Steps
Check README.md for updated info
https://github.com/coreswitch/openconfigd
https://github.com/coreswitch/zebra
6. demo: zebra & openconfigd
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 6
zebra + openconfigd + Quagga ospfd/bgpd on LXC
Check below doc for instruction how to run this demo
https://github.com/coreswitch/zebra/blob/master/docs/quagga-lxc.md
7. zebra & openconfigd
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 7
Registering CLI commands from ribd to openconfigd
https://github.com/coreswitch/zebra/blob/master/rib/api.go
1. Add “Parser.InstallCmd([]string{...}, <function>)”
per command
2. Add “<function>” which will be called when
command was entered via CLI
operator -> CLI -> openconfigd -> zebra/ribd
1
2
8. zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 8
dataplane abstraction via “Hook” functions
1. Register “Hook” functions for each dataplane (ex: ASIC API)
2. If there is “Hook” registered, then ribd will call the function
instead of Linux dataplane functions.
9. • Basic routing/switching features (ACL, NAT etc.)
• New Protocols
• Segment Routing (SRv6)
• Forwarding Engine Abstraction
• ASIC support (via SAI)
• P4 dataplane (via SAI or P4-PI)
• New Protocol Agents
• BGP, OSPFv2, OSPFv3, IS-IS
zebra & openconfigd Introduction | Kentaro Ebisawa | Twitter: @ebiken | 2017/11/29 9
Zebra 2.0 (future roadmap)