paul | 718e374 | 2002-12-13 20:15:29 +0000 | [diff] [blame] | 1 | @node Overview, Installation, Top, Top |
| 2 | @comment node-name, next, previous, up |
| 3 | @chapter Overview |
| 4 | @cindex Overview |
| 5 | |
| 6 | Zebra is a routing software package that provides TCP/IP based |
| 7 | routing services with routing protocols support such as RIPv1, RIPv2, |
| 8 | RIPng, OSPFv2, OSPFv3, BGP-4, and BGP-4+ (@pxref{Supported RFC}). |
| 9 | Zebra also supports special BGP Route Reflector and Route Server |
| 10 | behavior. In addition to traditional IPv4 routing protocols, Zebra |
| 11 | also supports IPv6 routing protocols. With SNMP daemon which supports |
| 12 | SMUX protocol, Zebra provides routing protocol MIBs (@pxref{SNMP |
| 13 | Support}). |
| 14 | |
| 15 | Zebra uses an advanced software architecture to provide you with a |
| 16 | high quality, multi server routing engine. Zebra has an interactive |
| 17 | user interface for each routing protocol and supports common client |
| 18 | commands. Due to this design, you can add new protocol daemons to Zebra |
| 19 | easily. You can use Zebra library as your program's client user |
| 20 | interface. |
| 21 | |
| 22 | Zebra is an official @sc{gnu} software and distributed under the |
| 23 | @sc{gnu} General Public License. |
| 24 | |
| 25 | @menu |
| 26 | * About Zebra:: Basic information about Zebra |
| 27 | * System Architecture:: The Zebra system architecture |
| 28 | * Supported Platforms:: Supported platforms and future plans |
| 29 | * Supported RFC:: Supported RFCs |
| 30 | * How to get Zebra:: |
| 31 | * Mailing List:: Mailing list information |
| 32 | * Bug Reports:: Mail address for bug data |
| 33 | @end menu |
| 34 | |
| 35 | @node About Zebra, System Architecture, Overview, Overview |
| 36 | @comment node-name, next, previous, up |
| 37 | @section About Zebra |
| 38 | @cindex About Zebra |
| 39 | |
| 40 | Today, TCP/IP networks are covering all of the world. The Internet |
| 41 | has been deployed in many countries, companies, and to the home. When |
| 42 | you connect to the Internet your packet will pass many routers which |
| 43 | have TCP/IP routing functionality. |
| 44 | |
| 45 | A system with Zebra installed acts as a dedicated router. With Zebra, |
| 46 | your machine exchanges routing information with other routers using |
| 47 | routing protocols. Zebra uses this information to update the kernel |
| 48 | routing table so that the right data goes to the right place. You can |
| 49 | dynamically change the configuration and you may view routing table |
| 50 | information from the Zebra terminal interface. |
| 51 | |
| 52 | Adding to routing protocol support, Zebra can setup interface's flags, |
| 53 | interface's address, static routes and so on. If you have a small |
| 54 | network, or a stub network, or xDSL connection, configuring the Zebra |
| 55 | routing software is very easy. The only thing you have to do is to set |
| 56 | up the interfaces and put a few commands about static routes and/or |
| 57 | default routes. If the network is rather large, or if the network |
| 58 | structure changes frequently, you will want to take advantage of Zebra's |
| 59 | dynamic routing protocol support for protocols such as RIP, OSPF or BGP. |
| 60 | Zebra is with you. |
| 61 | |
| 62 | Traditionally, UNIX based router configuration is done by |
| 63 | @command{ifconfig} and @command{route} commands. Status of routing |
| 64 | table is displayed by @command{netstat} utility. Almost of these |
| 65 | commands work only if the user has root privileges. Zebra has a different |
| 66 | system administration method. There are two user modes in Zebra. One is |
| 67 | normal mode, the other is enable mode. Normal mode user can only view |
| 68 | system status, enable mode user can change system configuration. This |
| 69 | UNIX account independent feature will be great help to the router |
| 70 | administrator. |
| 71 | |
| 72 | Currently, Zebra supports common unicast routing protocols. Multicast |
| 73 | routing protocols such as BGMP, PIM-SM, PIM-DM will be supported in |
| 74 | Zebra 2.0. MPLS support is going on. In the future, TCP/IP filtering |
| 75 | control, QoS control, diffserv configuration will be added to Zebra. |
| 76 | Zebra project's final goal is making a productive, quality free TCP/IP |
| 77 | routing software. |
| 78 | |
| 79 | @node System Architecture, Supported Platforms, About Zebra, Overview |
| 80 | @comment node-name, next, previous, up |
| 81 | @section System Architecture |
| 82 | @cindex System architecture |
| 83 | @cindex Software architecture |
| 84 | @cindex Software internals |
| 85 | |
| 86 | Traditional routing software is made as a one process program which |
| 87 | provides all of the routing protocol functionalities. Zebra takes a |
| 88 | different approach. It is made from a collection of several daemons |
| 89 | that work together to build the routing table. There may be several |
| 90 | protocol-specific routing daemons and zebra the kernel routing manager. |
| 91 | |
| 92 | The @command{ripd} daemon handles the RIP protocol, while |
| 93 | @command{ospfd} is a daemon which supports OSPF version 2. |
| 94 | @command{bgpd} supports the BGP-4 protocol. For changing the kernel |
| 95 | routing table and for redistribution of routes between different routing |
| 96 | protocols, there is a kernel routing table manager @command{zebra} |
| 97 | daemon. It is easy to add a new routing protocol daemons to the entire |
| 98 | routing system without affecting any other software. You need to run only |
| 99 | the protocol daemon associated with routing protocols in use. Thus, |
| 100 | user may run a specific daemon and send routing reports to a central |
| 101 | routing console. |
| 102 | |
| 103 | There is no need for these daemons to be running on the same machine. |
| 104 | You can even run several same protocol daemons on the same machine. This |
| 105 | architecture creates new possibilities for the routing system. |
| 106 | |
| 107 | @example |
| 108 | @group |
| 109 | +----+ +----+ +-----+ +-----+ |
| 110 | |bgpd| |ripd| |ospfd| |zebra| |
| 111 | +----+ +----+ +-----+ +-----+ |
| 112 | | |
| 113 | +---------------------------|--+ |
| 114 | | v | |
| 115 | | UNIX Kernel routing table | |
| 116 | | | |
| 117 | +------------------------------+ |
| 118 | |
| 119 | Zebra System Architecture |
| 120 | @end group |
| 121 | @end example |
| 122 | |
| 123 | Multi-process architecture brings extensibility, modularity and |
| 124 | maintainability. At the same time it also brings many configuration |
| 125 | files and terminal interfaces. Each daemon has it's own configuration |
| 126 | file and terminal interface. When you configure a static route, it must |
| 127 | be done in @command{zebra} configuration file. When you configure BGP |
| 128 | network it must be done in @command{bgpd} configuration file. This can be a |
| 129 | very annoying thing. To resolve the problem, Zebra provides integrated |
| 130 | user interface shell called @command{vtysh}. @command{vtysh} connects to |
| 131 | each daemon with UNIX domain socket and then works as a proxy for user input. |
| 132 | |
| 133 | Zebra was planned to use multi-threaded mechanism when it runs with a |
| 134 | kernel that supports multi-threads. But at the moment, the thread |
| 135 | library which comes with @sc{gnu}/Linux or FreeBSD has some problems with |
| 136 | running reliable services such as routing software, so we don't use |
| 137 | threads at all. Instead we use the @command{select(2)} system call for |
| 138 | multiplexing the events. |
| 139 | |
| 140 | When @command{zebra} runs under a @sc{gnu} Hurd kernel it will act as a |
| 141 | kernel routing table itself. Under @sc{gnu} Hurd, all TCP/IP services are |
| 142 | provided by user processes called @command{pfinet}. Zebra will provide |
| 143 | all the routing selection mechanisms for the process. This feature will |
| 144 | be implemented when @sc{gnu} Hurd becomes stable. |
| 145 | |
| 146 | @node Supported Platforms, Supported RFC, System Architecture, Overview |
| 147 | @comment node-name, next, previous, up |
| 148 | @section Supported Platforms |
| 149 | |
| 150 | @cindex Supported platforms |
| 151 | @cindex Zebra on other systems |
| 152 | @cindex Compatibility with other systems |
| 153 | @cindex Operating systems that support Zebra |
| 154 | |
| 155 | Currently Zebra supports @sc{gnu}/Linux, BSD and Solaris. Below is a list |
| 156 | of OS versions on which Zebra runs. Porting Zebra to other platforms is |
| 157 | not so too difficult. Platform dependent codes exist only in |
| 158 | @command{zebra} daemon. Protocol daemons are platform independent. |
| 159 | Please let us know when you find out Zebra runs on a platform which is not |
| 160 | listed below. |
| 161 | |
| 162 | @sp 1 |
| 163 | @itemize @bullet |
| 164 | @item |
| 165 | GNU/Linux 2.0.37 |
| 166 | @item |
| 167 | GNU/Linux 2.2.x |
| 168 | @item |
| 169 | GNU/Linux 2.3.x |
| 170 | @item |
| 171 | FreeBSD 2.2.8 |
| 172 | @item |
| 173 | FreeBSD 3.x |
| 174 | @item |
| 175 | FreeBSD 4.x |
| 176 | @item |
| 177 | NetBSD 1.4 |
| 178 | @item |
| 179 | OpenBSD 2.5 |
| 180 | @item |
| 181 | Solaris 2.6 |
| 182 | @item |
| 183 | Solaris 7 |
| 184 | @end itemize |
| 185 | |
| 186 | @sp 1 |
| 187 | Some IPv6 stacks are in development. Zebra supports following IPv6 |
| 188 | stacks. For BSD, we recommend KAME IPv6 stack. Solaris IPv6 stack is |
| 189 | not yet supported. |
| 190 | @sp 1 |
| 191 | @itemize @bullet |
| 192 | @item |
| 193 | Linux IPv6 stack for GNU/Linux 2.2.x and higher. |
| 194 | @item |
| 195 | KAME IPv6 stack for BSD. |
| 196 | @item |
| 197 | INRIA IPv6 stack for BSD. |
| 198 | @end itemize |
| 199 | |
| 200 | @node Supported RFC, How to get Zebra, Supported Platforms, Overview |
| 201 | @comment node-name, next, previous, up |
| 202 | @section Supported RFC |
| 203 | |
| 204 | Below is the list of currently supported RFC's. |
| 205 | |
| 206 | @table @asis |
| 207 | @item @asis{RFC1058} |
| 208 | @cite{Routing Information Protocol. C.L. Hedrick. Jun-01-1988.} |
| 209 | |
| 210 | @item @asis{RF2082} |
| 211 | @cite{RIP-2 MD5 Authentication. F. Baker, R. Atkinson. January 1997.} |
| 212 | |
| 213 | @item @asis{RFC2453} |
| 214 | @cite{RIP Version 2. G. Malkin. November 1998.} |
| 215 | |
| 216 | @item @asis{RFC2080} |
| 217 | @cite{RIPng for IPv6. G. Malkin, R. Minnear. January 1997.} |
| 218 | |
| 219 | @item @asis{RFC2328} |
| 220 | @cite{OSPF Version 2. J. Moy. April 1998.} |
| 221 | |
| 222 | @item @asis{RFC2740} |
| 223 | @cite{OSPF for IPv6. R. Coltun, D. Ferguson, J. Moy. December 1999.} |
| 224 | |
| 225 | @item @asis{RFC1771} |
| 226 | @cite{A Border Gateway Protocol 4 (BGP-4). Y. Rekhter & T. Li. March 1995.} |
| 227 | |
| 228 | @item @asis{RFC1965} |
| 229 | @cite{Autonomous System Confederations for BGP. P. Traina. June 1996.} |
| 230 | |
| 231 | @item @asis{RFC1997} |
| 232 | @cite{BGP Communities Attribute. R. Chandra, P. Traina & T. Li. August 1996.} |
| 233 | |
| 234 | @item @asis{RFC2545} |
| 235 | @cite{Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing. P. Marques, F. Dupont. March 1999.} |
| 236 | |
| 237 | @item @asis{RFC2796} |
| 238 | @cite{BGP Route Reflection An alternative to full mesh IBGP. T. Bates & R. Chandrasekeran. June 1996.} |
| 239 | |
| 240 | @item @asis{RFC2858} |
| 241 | @cite{Multiprotocol Extensions for BGP-4. T. Bates, Y. Rekhter, R. Chandra, D. Katz. June 2000.} |
| 242 | |
| 243 | @item @asis{RFC2842} |
| 244 | @cite{Capabilities Advertisement with BGP-4. R. Chandra, J. Scudder. May 2000.} |
| 245 | |
| 246 | @end table |
| 247 | |
| 248 | When SNMP support is enabled, below RFC is also supported. |
| 249 | |
| 250 | @table @asis |
| 251 | |
| 252 | @item @asis{RFC1227} |
| 253 | @cite{SNMP MUX protocol and MIB. M.T. Rose. May-01-1991.} |
| 254 | |
| 255 | @item @asis{RFC1657} |
| 256 | @cite{Definitions of Managed Objects for the Fourth Version of the |
| 257 | Border Gateway Protocol (BGP-4) using SMIv2. S. Willis, J. Burruss, |
| 258 | J. Chu, Editor. July 1994.} |
| 259 | |
| 260 | @item @asis{RFC1724} |
| 261 | @cite{RIP Version 2 MIB Extension. G. Malkin & F. Baker. November 1994.} |
| 262 | |
| 263 | @item @asis{RFC1850} |
| 264 | @cite{OSPF Version 2 Management Information Base. F. Baker, R. Coltun. |
| 265 | November 1995.} |
| 266 | |
| 267 | @end table |
| 268 | |
| 269 | @node How to get Zebra, Mailing List, Supported RFC, Overview |
| 270 | @comment node-name, next, previous, up |
| 271 | @section How to get Zebra |
| 272 | |
| 273 | Zebra is still beta software and there is no officially |
| 274 | released version. So currently Zebra is distributed from Zebra beta ftp |
| 275 | site located at: |
| 276 | |
| 277 | @url{ftp://ftp.zebra.org/pub/zebra} |
| 278 | |
| 279 | Once Zebra is released you can get it from @sc{gnu} FTP site and |
| 280 | its mirror sites. We are planning Zebra-1.0 as the first released |
| 281 | version. |
| 282 | |
| 283 | Zebra's official web page is located at: |
| 284 | |
| 285 | @url{http://www.gnu.org/software/zebra/zebra.html}. |
| 286 | |
| 287 | There is a Zebra beta tester web page at: |
| 288 | |
| 289 | @url{http://www.zebra.org/}. |
| 290 | |
| 291 | You can get the latest beta software information from this page. |
| 292 | |
| 293 | @node Mailing List, Bug Reports, How to get Zebra, Overview |
| 294 | @comment node-name, next, previous, up |
| 295 | @section Mailing List |
| 296 | @cindex How to get in touch with Zebra |
| 297 | @cindex Mailing Zebra |
| 298 | @cindex Contact information |
| 299 | @cindex Mailing lists |
| 300 | |
| 301 | There is a mailing list for discussions about Zebra. If you have any |
| 302 | comments or suggestions to Zebra, please send mail to |
| 303 | @email{zebra@@zebra.org}. New snapshot announcements, improvement |
| 304 | notes, and patches are sent to the list. |
| 305 | |
| 306 | To subscribe to the @email{zebra@@zebra.org, Zebra mailing list}, |
| 307 | please send a mail to @email{majordomo@@zebra.org} with a message body |
| 308 | that includes only: |
| 309 | |
| 310 | @quotation |
| 311 | subscribe zebra |
| 312 | @end quotation |
| 313 | |
| 314 | To unsubscribe from the list, please send a mail to |
| 315 | @email{majordomo@@zebra.org} with a message body that includes only: |
| 316 | |
| 317 | @quotation |
| 318 | unsubscribe zebra |
| 319 | @end quotation |
| 320 | |
| 321 | @node Bug Reports, , Mailing List, Overview |
| 322 | @comment node-name, next, previous, up |
| 323 | @section Bug Reports |
| 324 | |
| 325 | @cindex Bug Reports |
| 326 | @cindex Bug hunting |
| 327 | @cindex Found a bug? |
| 328 | @cindex Reporting bugs |
| 329 | @cindex Reporting software errors |
| 330 | @cindex Errors in the software |
| 331 | |
| 332 | If you think you have found a bug, please send a bug report to |
| 333 | @email{bug-zebra@@gnu.org}. When you send a bug report, please be |
| 334 | careful about the points below. |
| 335 | |
| 336 | @itemize @bullet |
| 337 | @item |
| 338 | Please note what kind of OS you are using. If you use the IPv6 stack |
| 339 | please note that as well. |
| 340 | @item |
| 341 | Please show us the results of @code{netstat -rn} and @code{ifconfig -a}. |
| 342 | Information from zebra's VTY command @code{show ip route} will also be |
| 343 | helpful. |
| 344 | @item |
| 345 | Please send your configuration file with the report. If you specify |
| 346 | arguments to the configure script please note that too. |
| 347 | @end itemize |
| 348 | |
| 349 | Bug reports are very important for us to improve the quality of Zebra. |
| 350 | Zebra is still in the development stage, but please don't hesitate to |
| 351 | send a bug report to @email{bug-zebra@@gnu.org}. |
| 352 | |