1*fde16b57Sclaudio.\" $OpenBSD: bgpd.8,v 1.84 2025/01/17 12:38:14 claudio Exp $ 29fa69b97Shenning.\" 3050527e1Shenning.\" Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> 49fa69b97Shenning.\" 59fa69b97Shenning.\" Permission to use, copy, modify, and distribute this software for any 69fa69b97Shenning.\" purpose with or without fee is hereby granted, provided that the above 79fa69b97Shenning.\" copyright notice and this permission notice appear in all copies. 89fa69b97Shenning.\" 99fa69b97Shenning.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 109fa69b97Shenning.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 119fa69b97Shenning.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 129fa69b97Shenning.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 139fa69b97Shenning.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 149fa69b97Shenning.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 159fa69b97Shenning.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 169fa69b97Shenning.\" 17*fde16b57Sclaudio.Dd $Mdocdate: January 17 2025 $ 189fa69b97Shenning.Dt BGPD 8 199fa69b97Shenning.Os 209fa69b97Shenning.Sh NAME 219fa69b97Shenning.Nm bgpd 22328c3f4bSjmc.Nd Border Gateway Protocol (BGP) routing daemon 239fa69b97Shenning.Sh SYNOPSIS 249fa69b97Shenning.Nm bgpd 259fa69b97Shenning.Bk -words 263eb1af85Sjob.Op Fl cdnvV 27163d879bSjmc.Op Fl D Ar macro Ns = Ns Ar value 289fa69b97Shenning.Op Fl f Ar file 299fa69b97Shenning.Ek 309fa69b97Shenning.Sh DESCRIPTION 319fa69b97Shenning.Nm 32907a6a00Sjmcis a Border Gateway Protocol 33907a6a00Sjmc.Pq BGP 34907a6a00Sjmcdaemon which manages the network routing tables. 3592c7fe1eSjmcIts main purpose is to exchange information 3692c7fe1eSjmcconcerning 3792c7fe1eSjmc.Qq network reachability 3892c7fe1eSjmcwith other BGP systems. 39907a6a00Sjmc.Nm 40907a6a00Sjmcuses the Border Gateway Protocol, Version 4, 4119ee4fccSjmcas described in RFC 4271. 422163651fSclaudio.Pp 432163651fSclaudioBGP is an exterior gateway protocol using a multiple step decision process 442163651fSclaudioto find the best path. 452163651fSclaudioAdvanced filtering can be used to influence the route 462163651fSclaudiodecision for traffic engineering. 472163651fSclaudioThe session engine of 482163651fSclaudio.Nm 492163651fSclaudiois responsible for maintaining the TCP session with each neighbor. 502163651fSclaudioUpdates are passed to the Route Decision Engine (RDE) where the paths 512163651fSclaudioare filtered and used to compute a Routing Information Base (RIB). 522163651fSclaudioThe parent process is responsible for keeping the RIB in sync with 532163651fSclaudiothe kernel routing table. 542163651fSclaudio.Pp 552163651fSclaudioThe route decision process selects the best path by evaluating all paths to 562163651fSclaudiothe same destination. 572163651fSclaudioThe decision process continues to the next step if paths have equal attributes. 582163651fSclaudioPaths that are less preferred are taken out of consideration until there is 592163651fSclaudioonly one path left. 602163651fSclaudio.Bl -enum -width 42 -offset bula 612163651fSclaudio.It 622163651fSclaudioAll paths with errors or loops are not eligible. 632163651fSclaudio.It 642163651fSclaudioPaths with an unreachable nexthop are not eligible. 652163651fSclaudioAfter this step all remaining paths are valid. 662163651fSclaudio.It 672163651fSclaudioThe path with the highest 682163651fSclaudio.Em LOCAL_PREF 692163651fSclaudiois selected. 702163651fSclaudio.It 712163651fSclaudioThe path with the shortest 722163651fSclaudio.Em AS path 732163651fSclaudioattribute is selected. 742163651fSclaudio.It 752163651fSclaudioThe 762163651fSclaudio.Em ORIGIN 772163651fSclaudioattribute is compared. 782163651fSclaudioThe order is IGP before EGP before incomplete origins. 792163651fSclaudio.It 802163651fSclaudioThe path with the lowest 812163651fSclaudio.Em MULTI_EXIT_DISC 822163651fSclaudiometric is selected. 832163651fSclaudioNormally, this value is only considered when choosing between multiple 842163651fSclaudioroutes sent by the same neighbouring AS. 852163651fSclaudioHowever, if 862163651fSclaudio.Dq Li rde med compare always 872163651fSclaudiois set in the configuration, the metric is compared for routes sent by any AS. 882163651fSclaudio.It 892163651fSclaudioComparison of the BGP session type. 902163651fSclaudioPaths learned over an external (EBGP) session are preferred over those 912163651fSclaudiolearned via an internal (IBGP) session. 922163651fSclaudio.It 9325b45e4dSdanjThe path with the highest local 942163651fSclaudio.Em weight 952163651fSclaudiois selected. 962163651fSclaudio.It 972163651fSclaudioIf 982163651fSclaudio.Dq Li rde route-age evaluate 992163651fSclaudiois set then the oldest path is selected. 1002163651fSclaudio.It 1012163651fSclaudioThe path coming from the neighbor with the lowest 1022163651fSclaudio.Em BGP ID 1032163651fSclaudiowins. 1042163651fSclaudioIf the 1052163651fSclaudio.Em ORIGINATOR_ID 10641ce3b17Snaddyattribute is present, that value will be used in the comparison instead. 1072163651fSclaudio.It 1082163651fSclaudioThe path with the shortest 1092163651fSclaudio.Em CLUSTER_LIST 1102163651fSclaudioattribute is selected. 1112163651fSclaudioIf it is not present then a length of 0 is used in the comparison. 1122163651fSclaudio.It 1132163651fSclaudioThe path coming from the peer with the lowest IP address is selected. 1148e446e65SjmcIPv4 sessions will be preferred over IPv6 ones. 1152163651fSclaudio.El 1162163651fSclaudio.Pp 1172163651fSclaudioAttributes set by filters can be used to tip the decision process to prefer 1182163651fSclaudioparticular paths over others. 1192163651fSclaudioThis can be achieved by changing the 1202163651fSclaudio.Em localpref , 1212163651fSclaudio.Em med , 1222163651fSclaudioor 1232163651fSclaudio.Em weight 1242163651fSclaudioattributes. 1252163651fSclaudioAS path prepending or changing the 1262163651fSclaudio.Em med 1272163651fSclaudioor 1282163651fSclaudio.Em origin 129925e56edSlumattribute can be used to influence the routing behaviour on remote systems. 130907a6a00Sjmc.Pp 131f2cc1b42SlandryTo have 132907a6a00Sjmc.Nm 133f2cc1b42Slandryenabled at boot time, use 134f2cc1b42Slandry.Dq rcctl enable bgpd , 135f2cc1b42Slandrywhich sets 136907a6a00Sjmc.Pp 137f2cc1b42Slandry.Dl bgpd_flags=\(dq\(dq 138907a6a00Sjmc.Pp 139f2cc1b42Slandryin 140f2cc1b42Slandry.Xr rc.conf.local 8 . 141907a6a00Sjmc.Pp 142907a6a00SjmcWhen 143907a6a00Sjmc.Nm 144907a6a00Sjmcstarts up, it reads settings from a configuration file, 145907a6a00Sjmctypically 146907a6a00Sjmc.Xr bgpd.conf 5 . 147907a6a00SjmcA running 148907a6a00Sjmc.Nm 149907a6a00Sjmcprocess can be controlled using the 150907a6a00Sjmc.Xr bgpctl 8 151907a6a00Sjmcutility. 152907a6a00Sjmc.Pp 1539fa69b97ShenningThe options are as follows: 154907a6a00Sjmc.Bl -tag -width "-f fileXXX" 1557f5c1560Shenning.It Fl c 1567f5c1560ShenningForce 1577f5c1560Shenning.Nm 1587f5c1560Shenningto do 1597f5c1560Shenning.Xr carp 4 160b882c823Shenningdemotion at startup when the 1617f5c1560Shenning.Em demote 1627f5c1560Shenningfunctionality is used. 1637f5c1560ShenningNormally, 1647f5c1560Shenning.Nm 165b882c823Shenningwill only do demotion at startup when the demotion counter for the group 166b882c823Shenningin question is already greater than 0. 167b882c823Shenning.Nm 168b882c823Shenningwill start handling demotion after all sessions with demotion configured for 169b882c823Shenningthe given group have been successfully established. 1707f5c1560ShenningAt system startup, 1717f5c1560Shenning.Xr rc 8 1727f5c1560Shenninghas the demotion counter for the group 1737f5c1560Shenning.Em carp 1747f5c1560Shenningincreased until after 1757f5c1560Shenning.Nm 1767f5c1560Shenningis started, so this option should 1777f5c1560Shenning.Em not 1787f5c1560Shenningbe used in 1797f5c1560Shenning.Xr rc.conf 8 . 180907a6a00Sjmc.It Fl D Ar macro Ns = Ns Ar value 1819fa69b97ShenningDefine 1829fa69b97Shenning.Ar macro 1839fa69b97Shenningto be set to 1849fa69b97Shenning.Ar value 1859fa69b97Shenningon the command line. 1869fa69b97ShenningOverrides the definition of 1879fa69b97Shenning.Ar macro 1889fa69b97Shenningin the configuration file. 1897528a928Shenning.It Fl d 190907a6a00SjmcDo not daemonize. 191907a6a00SjmcIf this option is specified, 192907a6a00Sjmc.Nm 193907a6a00Sjmcwill run in the foreground and log to 19470bddddaSmcbride.Em stderr . 1959fa69b97Shenning.It Fl f Ar file 196907a6a00SjmcUse 197907a6a00Sjmc.Ar file 198907a6a00Sjmcas the configuration file, 199907a6a00Sjmcinstead of the default 200907a6a00Sjmc.Pa /etc/bgpd.conf . 201ea5db239Shenning.It Fl n 202ea5db239ShenningConfigtest mode. 203907a6a00SjmcOnly check the configuration file for validity. 2049fa69b97Shenning.It Fl v 2059fa69b97ShenningProduce more verbose output. 2063eb1af85Sjob.It Fl V 2073eb1af85SjobShow the version and exit. 2089fa69b97Shenning.El 2099fa69b97Shenning.Sh FILES 210f2c1f8a9Sjmc.Bl -tag -width "/var/run/bgpd.sock.<rdomain>" -compact 2119fa69b97Shenning.It Pa /etc/bgpd.conf 212f2c1f8a9SjmcDefault 2139fa69b97Shenning.Nm 214f2c1f8a9Sjmcconfiguration file. 215f2c1f8a9Sjmc.It Pa /var/run/bgpd.sock.<rdomain> 216f2c1f8a9SjmcDefault 2179f8162a8Sclaudio.Nm 218f2c1f8a9Sjmccontrol socket, where 219f2c1f8a9Sjmc.Ar <rdomain> 220f2c1f8a9Sjmcis the routing domain in which 221f2c1f8a9Sjmc.Nm 222f2c1f8a9Sjmchas been started. 2239fa69b97Shenning.El 224d783ce62Sjmc.Sh SEE ALSO 2258666bbbfShenning.Xr bgpd.conf 5 , 226afc740faSjmc.Xr bgpctl 8 , 227afc740faSjmc.Xr bgplg 8 , 228afc740faSjmc.Xr bgplgsh 8 229e8dc2910Sjmc.Sh STANDARDS 23009376f25Sjmc.Rs 23109376f25Sjmc.%D August 1996 232fab29768Sjmc.%R RFC 1997 233fab29768Sjmc.%T BGP Communities Attribute 23409376f25Sjmc.Re 235e8dc2910Sjmc.Pp 23609376f25Sjmc.Rs 23709376f25Sjmc.%D August 1998 238fab29768Sjmc.%R RFC 2385 239fab29768Sjmc.%T Protection of BGP Sessions via the TCP MD5 Signature Option 24009376f25Sjmc.Re 241e8dc2910Sjmc.Pp 24209376f25Sjmc.Rs 2434b55bce2Sclaudio.%D March 1999 244fab29768Sjmc.%R RFC 2545 245fab29768Sjmc.%T Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing 2464b55bce2Sclaudio.Re 247e8dc2910Sjmc.Pp 2484b55bce2Sclaudio.Rs 24909376f25Sjmc.%D September 2000 250fab29768Sjmc.%R RFC 2918 251fab29768Sjmc.%T Route Refresh Capability for BGP-4 25209376f25Sjmc.Re 253e8dc2910Sjmc.Pp 25409376f25Sjmc.Rs 2551db466ccSjmc.%D April 2004 256fab29768Sjmc.%R RFC 3765 257fab29768Sjmc.%T NOPEER Community for Border Gateway Protocol (BGP) Route Scope Control 2581db466ccSjmc.Re 259e8dc2910Sjmc.Pp 2601db466ccSjmc.Rs 261fab29768Sjmc.%D January 2006 262fab29768Sjmc.%R RFC 4271 263fab29768Sjmc.%T A Border Gateway Protocol 4 (BGP-4) 264fab29768Sjmc.Re 265e8dc2910Sjmc.Pp 266fab29768Sjmc.Rs 267fab29768Sjmc.%D February 2006 268536f41e5Sclaudio.%R RFC 4360 269fab29768Sjmc.%T BGP Extended Communities Attribute 270536f41e5Sclaudio.Re 271e8dc2910Sjmc.Pp 272536f41e5Sclaudio.Rs 273fab29768Sjmc.%D February 2006 274610bcb44Sclaudio.%R RFC 4364 275fab29768Sjmc.%T BGP/MPLS IP Virtual Private Networks (VPNs) 276610bcb44Sclaudio.Re 277e8dc2910Sjmc.Pp 278610bcb44Sclaudio.Rs 279fab29768Sjmc.%D April 2006 280e1febd93Sclaudio.%R RFC 4456 281fab29768Sjmc.%T "BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP)" 282e1febd93Sclaudio.Re 283e8dc2910Sjmc.Pp 284e1febd93Sclaudio.Rs 285fab29768Sjmc.%D April 2006 2869d8bd755Sclaudio.%R RFC 4486 287fab29768Sjmc.%T Subcodes for BGP Cease Notification Message 2889d8bd755Sclaudio.Re 289e8dc2910Sjmc.Pp 2909d8bd755Sclaudio.Rs 2913856cb71Sclaudio.%D January 2007 2923856cb71Sclaudio.%R RFC 4724 2933856cb71Sclaudio.%T Graceful Restart Mechanism for BGP 2943856cb71Sclaudio.Re 2953856cb71Sclaudio.Pp 2963856cb71Sclaudio.Rs 297c6b0f9fcSclaudio.%D January 2007 298fab29768Sjmc.%R RFC 4760 299fab29768Sjmc.%T Multiprotocol Extensions for BGP-4 300c6b0f9fcSclaudio.Re 301e8dc2910Sjmc.Pp 302a001850fSclaudio.Rs 303fab29768Sjmc.%D October 2007 304fab29768Sjmc.%R RFC 5082 305fab29768Sjmc.%T The Generalized TTL Security Mechanism (GTSM) 306fab29768Sjmc.Re 307e8dc2910Sjmc.Pp 308fab29768Sjmc.Rs 30949dc52c7Sclaudio.%D February 2009 310fab29768Sjmc.%R RFC 5492 311fab29768Sjmc.%T Capabilities Advertisement with BGP-4 31249dc52c7Sclaudio.Re 313e8dc2910Sjmc.Pp 31449dc52c7Sclaudio.Rs 3153856cb71Sclaudio.%D October 2009 3163856cb71Sclaudio.%R RFC 5668 3173856cb71Sclaudio.%T 4-Octet AS Specific BGP Extended Community 3183856cb71Sclaudio.Re 3193856cb71Sclaudio.Pp 3203856cb71Sclaudio.Rs 32181367ccfSclaudio.%D June 2011 32281367ccfSclaudio.%R RFC 6286 32381367ccfSclaudio.%T Autonomous-System-Wide Unique BGP Identifier for BGP-4 32481367ccfSclaudio.Re 32581367ccfSclaudio.Pp 32681367ccfSclaudio.Rs 3273856cb71Sclaudio.%D May 2012 3283856cb71Sclaudio.%R RFC 6608 3293856cb71Sclaudio.%T Subcodes for BGP Finite State Machine Error 3303856cb71Sclaudio.Re 3313856cb71Sclaudio.Pp 3323856cb71Sclaudio.Rs 3330f12b4adSclaudio.%D Dec 2012 3340f12b4adSclaudio.%R RFC 6793 3350f12b4adSclaudio.%T BGP Support for Four-Octet Autonomous System (AS) Number Space 3360f12b4adSclaudio.Re 3370f12b4adSclaudio.Pp 3380f12b4adSclaudio.Rs 339f66325b7Sphessler.%D August 2015 340f66325b7Sphessler.%R RFC 7606 341f66325b7Sphessler.%T Revised Error Handling for BGP UPDATE Messages 342d2d88175Sclaudio.Re 343e8dc2910Sjmc.Pp 344e8dc2910Sjmc.Rs 345d1d78ab3Sjob.%D October 2011 346d1d78ab3Sjob.%R RFC 6396 347d1d78ab3Sjob.%T Multi-Threaded Routing Toolkit (MRT) Routing Information Export Format 348e8dc2910Sjmc.Re 349e8dc2910Sjmc.Pp 350b972ce67Sclaudio.Rs 351866dcea5Sclaudio.%D May 2012 352fab29768Sjmc.%R RFC 6608 353fab29768Sjmc.%T Subcodes for BGP Finite State Machine Error 354566a7707Sclaudio.Re 3550561b344Sphessler.Pp 3560561b344Sphessler.Rs 35775ddeeb9Sclaudio.%D July 2014 35875ddeeb9Sclaudio.%R RFC 7313 35975ddeeb9Sclaudio.%T Enhanced Route Refresh Capability for BGP-4 36075ddeeb9Sclaudio.Re 36175ddeeb9Sclaudio.Pp 36275ddeeb9Sclaudio.Rs 3634881d521Sclaudio.%D August 2015 3644881d521Sclaudio.%R RFC 7607 3654881d521Sclaudio.%T Codification of AS 0 Processing 3664881d521Sclaudio.Re 3674881d521Sclaudio.Pp 3684881d521Sclaudio.Rs 369b90d20cdSclaudio.%D July 2016 370b90d20cdSclaudio.%R RFC 7911 371b90d20cdSclaudio.%T Advertisement of Multiple Paths in BGP 372b90d20cdSclaudio.Re 373b90d20cdSclaudio.Pp 374b90d20cdSclaudio.Rs 3753856cb71Sclaudio.%D September 2016 3763856cb71Sclaudio.%R RFC 7947 3773856cb71Sclaudio.%T Internet Exchange BGP Route Server 3783856cb71Sclaudio.Re 3793856cb71Sclaudio.Pp 3803856cb71Sclaudio.Rs 38114af1330Sclaudio.%D May 2017 38214af1330Sclaudio.%R RFC 8050 38314af1330Sclaudio.%T Multi-Threaded Routing Toolkit (MRT) Routing Information Export Format with BGP Additional Path Extensions 38414af1330Sclaudio.Re 38514af1330Sclaudio.Pp 38614af1330Sclaudio.Rs 3879843427cSphessler.%D February 2017 3889843427cSphessler.%R RFC 8092 3890561b344Sphessler.%T BGP Large Communities Attribute 3900561b344Sphessler.Re 3910561b344Sphessler.Pp 3920561b344Sphessler.Rs 393f872142bSclaudio.%D March 2017 394f872142bSclaudio.%R RFC 8097 395f872142bSclaudio.%T BGP Prefix Origin Validation State Extended Community 396f872142bSclaudio.Re 397d7f8f07dSjmc.Pp 398d7f8f07dSjmc.Rs 399d7f8f07dSjmc.%D July 2017 400d7f8f07dSjmc.%R RFC 8203 401d7f8f07dSjmc.%T BGP Administrative Shutdown Communication 402d7f8f07dSjmc.Re 403f390b1a7Sclaudio.Pp 404f390b1a7Sclaudio.Rs 405bd9df44eSclaudio.%D September 2017 406bd9df44eSclaudio.%R RFC 8210 407bd9df44eSclaudio.%T The Resource Public Key Infrastructure (RPKI) to Router Protocol, Version 1 408bd9df44eSclaudio.Re 409bd9df44eSclaudio.Pp 410bd9df44eSclaudio.Rs 411f390b1a7Sclaudio.%D July 2017 412f390b1a7Sclaudio.%R RFC 8212 413f390b1a7Sclaudio.%T Default External BGP (EBGP) Route Propagation Behavior without Policies 414f390b1a7Sclaudio.Re 415006eafffSclaudio.Pp 416006eafffSclaudio.Rs 417006eafffSclaudio.%D March 2018 418006eafffSclaudio.%R RFC 8326 419006eafffSclaudio.%T Graceful BGP Session Shutdown 420006eafffSclaudio.Re 421df79d77dSclaudio.Pp 422df79d77dSclaudio.Rs 4236c15f943Sclaudio.%D March 2019 4246c15f943Sclaudio.%R RFC 8538 4256c15f943Sclaudio.%T Notification Message Support for BGP Graceful Restart 4266c15f943Sclaudio.Re 4276c15f943Sclaudio.Pp 4286c15f943Sclaudio.Rs 42925cbba3aSclaudio.%D October 2019 43025cbba3aSclaudio.%R RFC 8654 43125cbba3aSclaudio.%T Extended Message Support for BGP 43225cbba3aSclaudio.Re 43325cbba3aSclaudio.Pp 43425cbba3aSclaudio.Rs 435927cc6daSclaudio.%D November 2020 436927cc6daSclaudio.%R RFC 8950 437927cc6daSclaudio.%T Advertising IPv4 Network Layer Reachability Information (NLRI) with an IPv6 Next Hop 438927cc6daSclaudio.Re 439927cc6daSclaudio.Pp 440927cc6daSclaudio.Rs 44141c1c374Sclaudio.%D December 2020 44241c1c374Sclaudio.%R RFC 8955 44341c1c374Sclaudio.%T Dissemination of Flow Specification Rules 44441c1c374Sclaudio.Re 44541c1c374Sclaudio.Pp 44641c1c374Sclaudio.Rs 44741c1c374Sclaudio.%D December 2020 44841c1c374Sclaudio.%R RFC 8956 44941c1c374Sclaudio.%T Dissemination of Flow Specification Rules for IPv6 45041c1c374Sclaudio.Re 45141c1c374Sclaudio.Pp 45241c1c374Sclaudio.Rs 453df79d77dSclaudio.%D July 2021 454df79d77dSclaudio.%R RFC 9072 455df79d77dSclaudio.%T Extended Optional Parameters Length for BGP OPEN Message 456df79d77dSclaudio.Re 457c9132633Sclaudio.Pp 458c9132633Sclaudio.Rs 459c9132633Sclaudio.%D May 2022 460c9132633Sclaudio.%R RFC 9234 461c9132633Sclaudio.%T Route Leak Prevention and Detection Using Roles in UPDATE and OPEN Messages 462c9132633Sclaudio.Re 4636ac17ef2Sjob.Pp 4646ac17ef2Sjob.Rs 46564468f86Sjob.%D November 2024 46664468f86Sjob.%R RFC 9687 46764468f86Sjob.%T Border Gateway Protocol 4 (BGP-4) Send Hold Timer 46864468f86Sjob.Re 46964468f86Sjob.Pp 47064468f86Sjob.Rs 4716ac17ef2Sjob.%D October 2022 4726ac17ef2Sjob.%R draft-ietf-sidrops-aspa-verification 4736ac17ef2Sjob.%T BGP AS_PATH Verification Based on Resource Public Key Infrastructure (RPKI) Autonomous System Provider Authorization (ASPA) Objects 4746ac17ef2Sjob.Re 4759fa69b97Shenning.Sh HISTORY 4769fa69b97ShenningThe 4779fa69b97Shenning.Nm 4789fa69b97Shenningprogram first appeared in 4799fa69b97Shenning.Ox 3.5 . 480