1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888 |
- /* OSPF VTY interface.
- * Copyright (C) 2005 6WIND <alain.ritoux@6wind.com>
- * Copyright (C) 2000 Toshiaki Takada
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * GNU Zebra is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING. If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
- #include <zebra.h>
- #include "memory.h"
- #include "thread.h"
- #include "prefix.h"
- #include "table.h"
- #include "vty.h"
- #include "command.h"
- #include "plist.h"
- #include "log.h"
- #include "zclient.h"
- #include "ospfd/ospfd.h"
- #include "ospfd/ospf_asbr.h"
- #include "ospfd/ospf_lsa.h"
- #include "ospfd/ospf_lsdb.h"
- #include "ospfd/ospf_ism.h"
- #include "ospfd/ospf_interface.h"
- #include "ospfd/ospf_nsm.h"
- #include "ospfd/ospf_neighbor.h"
- #include "ospfd/ospf_flood.h"
- #include "ospfd/ospf_abr.h"
- #include "ospfd/ospf_spf.h"
- #include "ospfd/ospf_route.h"
- #include "ospfd/ospf_zebra.h"
- /*#include "ospfd/ospf_routemap.h" */
- #include "ospfd/ospf_vty.h"
- #include "ospfd/ospf_dump.h"
- static const char *ospf_network_type_str[] =
- {
- "Null",
- "POINTOPOINT",
- "BROADCAST",
- "NBMA",
- "POINTOMULTIPOINT",
- "VIRTUALLINK",
- "LOOPBACK"
- };
- /* Utility functions. */
- static int
- ospf_str2area_id (const char *str, struct in_addr *area_id, int *format)
- {
- char *endptr = NULL;
- unsigned long ret;
- /* match "A.B.C.D". */
- if (strchr (str, '.') != NULL)
- {
- ret = inet_aton (str, area_id);
- if (!ret)
- return -1;
- *format = OSPF_AREA_ID_FORMAT_ADDRESS;
- }
- /* match "<0-4294967295>". */
- else
- {
- if (*str == '-')
- return -1;
- errno = 0;
- ret = strtoul (str, &endptr, 10);
- if (*endptr != '\0' || errno || ret > UINT32_MAX)
- return -1;
- area_id->s_addr = htonl (ret);
- *format = OSPF_AREA_ID_FORMAT_DECIMAL;
- }
- return 0;
- }
- static int
- str2metric (const char *str, int *metric)
- {
- /* Sanity check. */
- if (str == NULL)
- return 0;
- *metric = strtol (str, NULL, 10);
- if (*metric < 0 && *metric > 16777214)
- {
- /* vty_out (vty, "OSPF metric value is invalid%s", VTY_NEWLINE); */
- return 0;
- }
- return 1;
- }
- static int
- str2metric_type (const char *str, int *metric_type)
- {
- /* Sanity check. */
- if (str == NULL)
- return 0;
- if (strncmp (str, "1", 1) == 0)
- *metric_type = EXTERNAL_METRIC_TYPE_1;
- else if (strncmp (str, "2", 1) == 0)
- *metric_type = EXTERNAL_METRIC_TYPE_2;
- else
- return 0;
- return 1;
- }
- int
- ospf_oi_count (struct interface *ifp)
- {
- struct route_node *rn;
- int i = 0;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if (rn->info)
- i++;
- return i;
- }
- DEFUN (router_ospf,
- router_ospf_cmd,
- "router ospf",
- "Enable a routing process\n"
- "Start OSPF configuration\n")
- {
- vty->node = OSPF_NODE;
- vty->index = ospf_get ();
-
- return CMD_SUCCESS;
- }
- DEFUN (no_router_ospf,
- no_router_ospf_cmd,
- "no router ospf",
- NO_STR
- "Enable a routing process\n"
- "Start OSPF configuration\n")
- {
- struct ospf *ospf;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, "There isn't active ospf instance%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf_finish (ospf);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_router_id,
- ospf_router_id_cmd,
- "ospf router-id A.B.C.D",
- "OSPF specific commands\n"
- "router-id for the OSPF process\n"
- "OSPF router-id in IP address format\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr router_id;
- int ret;
- ret = inet_aton (argv[0], &router_id);
- if (!ret)
- {
- vty_out (vty, "Please specify Router ID by A.B.C.D%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf->router_id_static = router_id;
-
- ospf_router_id_update (ospf);
-
- return CMD_SUCCESS;
- }
- ALIAS (ospf_router_id,
- router_ospf_id_cmd,
- "router-id A.B.C.D",
- "router-id for the OSPF process\n"
- "OSPF router-id in IP address format\n")
- DEFUN (no_ospf_router_id,
- no_ospf_router_id_cmd,
- "no ospf router-id",
- NO_STR
- "OSPF specific commands\n"
- "router-id for the OSPF process\n")
- {
- struct ospf *ospf = vty->index;
- ospf->router_id_static.s_addr = 0;
- ospf_router_id_update (ospf);
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_router_id,
- no_router_ospf_id_cmd,
- "no router-id",
- NO_STR
- "router-id for the OSPF process\n")
- static void
- ospf_passive_interface_default (struct ospf *ospf, u_char newval)
- {
- struct listnode *ln;
- struct interface *ifp;
- struct ospf_interface *oi;
-
- ospf->passive_interface_default = newval;
- for (ALL_LIST_ELEMENTS_RO (om->iflist, ln, ifp))
- {
- if (ifp &&
- OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
- UNSET_IF_PARAM (IF_DEF_PARAMS (ifp), passive_interface);
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, ln, oi))
- {
- if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
- UNSET_IF_PARAM (oi->params, passive_interface);
- /* update multicast memberships */
- ospf_if_set_multicast(oi);
- }
- }
- static void
- ospf_passive_interface_update_addr (struct ospf *ospf, struct interface *ifp,
- struct ospf_if_params *params, u_char value,
- struct in_addr addr)
- {
- u_char dflt;
-
- params->passive_interface = value;
- if (params != IF_DEF_PARAMS (ifp))
- {
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface))
- dflt = IF_DEF_PARAMS (ifp)->passive_interface;
- else
- dflt = ospf->passive_interface_default;
-
- if (value != dflt)
- SET_IF_PARAM (params, passive_interface);
- else
- UNSET_IF_PARAM (params, passive_interface);
-
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- static void
- ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
- struct ospf_if_params *params, u_char value)
- {
- params->passive_interface = value;
- if (params == IF_DEF_PARAMS (ifp))
- {
- if (value != ospf->passive_interface_default)
- SET_IF_PARAM (params, passive_interface);
- else
- UNSET_IF_PARAM (params, passive_interface);
- }
- }
- /* get the appropriate ospf parameters structure, checking if
- * there's a valid interface address at the argi'th argv index
- */
- enum {
- VTY_SET = 0,
- VTY_UNSET,
- };
- #define OSPF_VTY_GET_IF_PARAMS(ifp,params,argi,addr,set) \
- (params) = IF_DEF_PARAMS ((ifp)); \
- \
- if (argc == (argi) + 1) \
- { \
- int ret = inet_aton(argv[(argi)], &(addr)); \
- if (!ret) \
- { \
- vty_out (vty, "Please specify interface address by A.B.C.D%s", \
- VTY_NEWLINE); \
- return CMD_WARNING; \
- } \
- (params) = ospf_get_if_params ((ifp), (addr)); \
- \
- if (set) \
- ospf_if_update_params ((ifp), (addr)); \
- else if ((params) == NULL) \
- return CMD_SUCCESS; \
- }
- #define OSPF_VTY_PARAM_UNSET(params,var,ifp,addr) \
- UNSET_IF_PARAM ((params), var); \
- if ((params) != IF_DEF_PARAMS ((ifp))) \
- { \
- ospf_free_if_params ((ifp), (addr)); \
- ospf_if_update_params ((ifp), (addr)); \
- }
- DEFUN (ospf_passive_interface,
- ospf_passive_interface_addr_cmd,
- "passive-interface IFNAME A.B.C.D",
- "Suppress routing updates on an interface\n"
- "Interface's name\n")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct route_node *rn;
- struct ospf *ospf = vty->index;
- if (argc == 0)
- {
- ospf_passive_interface_default (ospf, OSPF_IF_PASSIVE);
- return CMD_SUCCESS;
- }
- ifp = if_get_by_name (argv[0]);
- params = IF_DEF_PARAMS (ifp);
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- ospf_passive_interface_update_addr (ospf, ifp, params,
- OSPF_IF_PASSIVE, addr);
- }
-
- ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_PASSIVE);
- /* XXX We should call ospf_if_set_multicast on exactly those
- * interfaces for which the passive property changed. It is too much
- * work to determine this set, so we do this for every interface.
- * This is safe and reasonable because ospf_if_set_multicast uses a
- * record of joined groups to avoid systems calls if the desired
- * memberships match the current memership.
- */
- for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
- if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_PASSIVE))
- ospf_if_set_multicast(oi);
- }
- /*
- * XXX It is not clear what state transitions the interface needs to
- * undergo when going from active to passive. Fixing this will
- * require precise identification of interfaces having such a
- * transition.
- */
- return CMD_SUCCESS;
- }
- ALIAS (ospf_passive_interface,
- ospf_passive_interface_cmd,
- "passive-interface IFNAME",
- "Suppress routing updates on an interface\n"
- "Interface's name\n")
- ALIAS (ospf_passive_interface,
- ospf_passive_interface_default_cmd,
- "passive-interface default",
- "Suppress routing updates on an interface\n"
- "Suppress routing updates on interfaces by default\n")
- DEFUN (no_ospf_passive_interface,
- no_ospf_passive_interface_addr_cmd,
- "no passive-interface IFNAME A.B.C.D",
- NO_STR
- "Allow routing updates on an interface\n"
- "Interface's name\n")
- {
- struct interface *ifp;
- struct in_addr addr;
- struct ospf_if_params *params;
- int ret;
- struct route_node *rn;
- struct ospf *ospf = vty->index;
- if (argc == 0)
- {
- ospf_passive_interface_default (ospf, OSPF_IF_ACTIVE);
- return CMD_SUCCESS;
- }
-
- ifp = if_get_by_name (argv[0]);
- params = IF_DEF_PARAMS (ifp);
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- ospf_passive_interface_update_addr (ospf, ifp, params, OSPF_IF_ACTIVE,
- addr);
- }
- ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_ACTIVE);
-
- /* XXX We should call ospf_if_set_multicast on exactly those
- * interfaces for which the passive property changed. It is too much
- * work to determine this set, so we do this for every interface.
- * This is safe and reasonable because ospf_if_set_multicast uses a
- * record of joined groups to avoid systems calls if the desired
- * memberships match the current memership.
- */
- for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
- if (oi && (OSPF_IF_PARAM(oi, passive_interface) == OSPF_IF_ACTIVE))
- ospf_if_set_multicast(oi);
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_passive_interface,
- no_ospf_passive_interface_cmd,
- "no passive-interface IFNAME",
- NO_STR
- "Allow routing updates on an interface\n"
- "Interface's name\n")
- ALIAS (no_ospf_passive_interface,
- no_ospf_passive_interface_default_cmd,
- "no passive-interface default",
- NO_STR
- "Allow routing updates on an interface\n"
- "Allow routing updates on interfaces by default\n")
-
- DEFUN (ospf_network_area,
- ospf_network_area_cmd,
- "network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
- "Enable routing on an IP network\n"
- "OSPF network prefix\n"
- "Set the OSPF area ID\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int ret, format;
- /* Get network prefix and Area ID. */
- VTY_GET_IPV4_PREFIX ("network prefix", p, argv[0]);
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[1]);
- ret = ospf_network_set (ospf, &p, area_id);
- if (ret == 0)
- {
- vty_out (vty, "There is already same network statement.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_network_area,
- no_ospf_network_area_cmd,
- "no network A.B.C.D/M area (A.B.C.D|<0-4294967295>)",
- NO_STR
- "Enable routing on an IP network\n"
- "OSPF network prefix\n"
- "Set the OSPF area ID\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n")
- {
- struct ospf *ospf = (struct ospf *) vty->index;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int ret, format;
- /* Get network prefix and Area ID. */
- VTY_GET_IPV4_PREFIX ("network prefix", p, argv[0]);
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[1]);
- ret = ospf_network_unset (ospf, &p, area_id);
- if (ret == 0)
- {
- vty_out (vty, "Can't find specified network area configuration.%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_range,
- ospf_area_range_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
- u_int32_t cost;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
- ospf_area_range_set (ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
- if (argc > 2)
- {
- VTY_GET_INTEGER ("range cost", cost, argv[2]);
- ospf_area_range_cost_set (ospf, area_id, &p, cost);
- }
- return CMD_SUCCESS;
- }
- ALIAS (ospf_area_range,
- ospf_area_range_advertise_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "OSPF area range for route advertise (default)\n"
- "Area range prefix\n"
- "Advertise this range (default)\n")
- ALIAS (ospf_area_range,
- ospf_area_range_cost_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
- ALIAS (ospf_area_range,
- ospf_area_range_advertise_cost_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "Advertise this range (default)\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
- DEFUN (ospf_area_range_not_advertise,
- ospf_area_range_not_advertise_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M not-advertise",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "DoNotAdvertise this range\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
- ospf_area_range_set (ospf, area_id, &p, 0);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_range,
- no_ospf_area_range_cmd,
- "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
- ospf_area_range_unset (ospf, area_id, &p);
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_area_range,
- no_ospf_area_range_advertise_cmd,
- "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M (advertise|not-advertise)",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "Advertise this range (default)\n"
- "DoNotAdvertise this range\n")
- ALIAS (no_ospf_area_range,
- no_ospf_area_range_cost_cmd,
- "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M cost <0-16777215>",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
- ALIAS (no_ospf_area_range,
- no_ospf_area_range_advertise_cost_cmd,
- "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M advertise cost <0-16777215>",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "Advertise this range (default)\n"
- "User specified metric for this range\n"
- "Advertised metric for this range\n")
- DEFUN (ospf_area_range_substitute,
- ospf_area_range_substitute_cmd,
- "area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "Announce area range as another prefix\n"
- "Network prefix to be announced instead of range\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p, s;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
- VTY_GET_IPV4_PREFIX ("substituted network prefix", s, argv[2]);
- ospf_area_range_substitute_set (ospf, area_id, &p, &s);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_range_substitute,
- no_ospf_area_range_substitute_cmd,
- "no area (A.B.C.D|<0-4294967295>) range A.B.C.D/M substitute A.B.C.D/M",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Summarize routes matching address/mask (border routers only)\n"
- "Area range prefix\n"
- "Announce area range as another prefix\n"
- "Network prefix to be announced instead of range\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p, s;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- VTY_GET_IPV4_PREFIX ("area range", p, argv[1]);
- VTY_GET_IPV4_PREFIX ("substituted network prefix", s, argv[2]);
- ospf_area_range_substitute_unset (ospf, area_id, &p);
- return CMD_SUCCESS;
- }
- /* Command Handler Logic in VLink stuff is delicate!!
- ALTER AT YOUR OWN RISK!!!!
- Various dummy values are used to represent 'NoChange' state for
- VLink configuration NOT being changed by a VLink command, and
- special syntax is used within the command strings so that the
- typed in command verbs can be seen in the configuration command
- bacckend handler. This is to drastically reduce the verbeage
- required to coe up with a reasonably compatible Cisco VLink command
- - Matthew Grant <grantma@anathoth.gen.nz>
- Wed, 21 Feb 2001 15:13:52 +1300
- */
- /* Configuration data for virtual links
- */
- struct ospf_vl_config_data {
- struct vty *vty; /* vty stuff */
- struct in_addr area_id; /* area ID from command line */
- int format; /* command line area ID format */
- struct in_addr vl_peer; /* command line vl_peer */
- int auth_type; /* Authehntication type, if given */
- char *auth_key; /* simple password if present */
- int crypto_key_id; /* Cryptographic key ID */
- char *md5_key; /* MD5 authentication key */
- int hello_interval; /* Obvious what these are... */
- int retransmit_interval;
- int transmit_delay;
- int dead_interval;
- };
- static void
- ospf_vl_config_data_init (struct ospf_vl_config_data *vl_config,
- struct vty *vty)
- {
- memset (vl_config, 0, sizeof (struct ospf_vl_config_data));
- vl_config->auth_type = OSPF_AUTH_CMD_NOTSEEN;
- vl_config->vty = vty;
- }
- static struct ospf_vl_data *
- ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
- {
- struct ospf_area *area;
- struct ospf_vl_data *vl_data;
- struct vty *vty;
- struct in_addr area_id;
- vty = vl_config->vty;
- area_id = vl_config->area_id;
- if (area_id.s_addr == OSPF_AREA_BACKBONE)
- {
- vty_out (vty,
- "Configuring VLs over the backbone is not allowed%s",
- VTY_NEWLINE);
- return NULL;
- }
- area = ospf_area_get (ospf, area_id, vl_config->format);
- if (area->external_routing != OSPF_AREA_DEFAULT)
- {
- if (vl_config->format == OSPF_AREA_ID_FORMAT_ADDRESS)
- vty_out (vty, "Area %s is %s%s",
- inet_ntoa (area_id),
- area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
- VTY_NEWLINE);
- else
- vty_out (vty, "Area %ld is %s%s",
- (u_long)ntohl (area_id.s_addr),
- area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
- VTY_NEWLINE);
- return NULL;
- }
-
- if ((vl_data = ospf_vl_lookup (ospf, area, vl_config->vl_peer)) == NULL)
- {
- vl_data = ospf_vl_data_new (area, vl_config->vl_peer);
- if (vl_data->vl_oi == NULL)
- {
- vl_data->vl_oi = ospf_vl_new (ospf, vl_data);
- ospf_vl_add (ospf, vl_data);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
- }
- }
- return vl_data;
- }
- static int
- ospf_vl_set_security (struct ospf_vl_data *vl_data,
- struct ospf_vl_config_data *vl_config)
- {
- struct crypt_key *ck;
- struct vty *vty;
- struct interface *ifp = vl_data->vl_oi->ifp;
- vty = vl_config->vty;
- if (vl_config->auth_type != OSPF_AUTH_CMD_NOTSEEN)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), auth_type);
- IF_DEF_PARAMS (ifp)->auth_type = vl_config->auth_type;
- }
- if (vl_config->auth_key)
- {
- memset(IF_DEF_PARAMS (ifp)->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE+1);
- strncpy ((char *) IF_DEF_PARAMS (ifp)->auth_simple, vl_config->auth_key,
- OSPF_AUTH_SIMPLE_SIZE);
- }
- else if (vl_config->md5_key)
- {
- if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id)
- != NULL)
- {
- vty_out (vty, "OSPF: Key %d already exists%s",
- vl_config->crypto_key_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
- ck = ospf_crypt_key_new ();
- ck->key_id = vl_config->crypto_key_id;
- memset(ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy ((char *) ck->auth_key, vl_config->md5_key, OSPF_AUTH_MD5_SIZE);
-
- ospf_crypt_key_add (IF_DEF_PARAMS (ifp)->auth_crypt, ck);
- }
- else if (vl_config->crypto_key_id != 0)
- {
- /* Delete a key */
- if (ospf_crypt_key_lookup (IF_DEF_PARAMS (ifp)->auth_crypt,
- vl_config->crypto_key_id) == NULL)
- {
- vty_out (vty, "OSPF: Key %d does not exist%s",
- vl_config->crypto_key_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- ospf_crypt_key_delete (IF_DEF_PARAMS (ifp)->auth_crypt, vl_config->crypto_key_id);
- }
-
- return CMD_SUCCESS;
- }
- static int
- ospf_vl_set_timers (struct ospf_vl_data *vl_data,
- struct ospf_vl_config_data *vl_config)
- {
- struct interface *ifp = ifp = vl_data->vl_oi->ifp;
- /* Virtual Link data initialised to defaults, so only set
- if a value given */
- if (vl_config->hello_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_hello);
- IF_DEF_PARAMS (ifp)->v_hello = vl_config->hello_interval;
- }
- if (vl_config->dead_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), v_wait);
- IF_DEF_PARAMS (ifp)->v_wait = vl_config->dead_interval;
- }
- if (vl_config->retransmit_interval)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), retransmit_interval);
- IF_DEF_PARAMS (ifp)->retransmit_interval = vl_config->retransmit_interval;
- }
-
- if (vl_config->transmit_delay)
- {
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), transmit_delay);
- IF_DEF_PARAMS (ifp)->transmit_delay = vl_config->transmit_delay;
- }
-
- return CMD_SUCCESS;
- }
- /* The business end of all of the above */
- static int
- ospf_vl_set (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
- {
- struct ospf_vl_data *vl_data;
- int ret;
- vl_data = ospf_find_vl_data (ospf, vl_config);
- if (!vl_data)
- return CMD_WARNING;
-
- /* Process this one first as it can have a fatal result, which can
- only logically occur if the virtual link exists already
- Thus a command error does not result in a change to the
- running configuration such as unexpectedly altered timer
- values etc.*/
- ret = ospf_vl_set_security (vl_data, vl_config);
- if (ret != CMD_SUCCESS)
- return ret;
- /* Set any time based parameters, these area already range checked */
- ret = ospf_vl_set_timers (vl_data, vl_config);
- if (ret != CMD_SUCCESS)
- return ret;
- return CMD_SUCCESS;
- }
- /* This stuff exists to make specifying all the alias commands A LOT simpler
- */
- #define VLINK_HELPSTR_IPADDR \
- "OSPF area parameters\n" \
- "OSPF area ID in IP address format\n" \
- "OSPF area ID as a decimal value\n" \
- "Configure a virtual link\n" \
- "Router ID of the remote ABR\n"
- #define VLINK_HELPSTR_AUTHTYPE_SIMPLE \
- "Enable authentication on this virtual link\n" \
- "dummy string \n"
- #define VLINK_HELPSTR_AUTHTYPE_ALL \
- VLINK_HELPSTR_AUTHTYPE_SIMPLE \
- "Use null authentication\n" \
- "Use message-digest authentication\n"
- #define VLINK_HELPSTR_TIME_PARAM_NOSECS \
- "Time between HELLO packets\n" \
- "Time between retransmitting lost link state advertisements\n" \
- "Link state transmit delay\n" \
- "Interval after which a neighbor is declared dead\n"
- #define VLINK_HELPSTR_TIME_PARAM \
- VLINK_HELPSTR_TIME_PARAM_NOSECS \
- "Seconds\n"
- #define VLINK_HELPSTR_AUTH_SIMPLE \
- "Authentication password (key)\n" \
- "The OSPF password (key)"
- #define VLINK_HELPSTR_AUTH_MD5 \
- "Message digest authentication password (key)\n" \
- "dummy string \n" \
- "Key ID\n" \
- "Use MD5 algorithm\n" \
- "The OSPF password (key)"
- DEFUN (ospf_area_vlink,
- ospf_area_vlink_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
- VLINK_HELPSTR_IPADDR)
- {
- struct ospf *ospf = vty->index;
- struct ospf_vl_config_data vl_config;
- char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
- char md5_key[OSPF_AUTH_MD5_SIZE+1];
- int i;
- int ret;
-
- ospf_vl_config_data_init(&vl_config, vty);
- /* Read off first 2 parameters and check them */
- ret = ospf_str2area_id (argv[0], &vl_config.area_id, &vl_config.format);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ret = inet_aton (argv[1], &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc <=2)
- {
- /* Thats all folks! - BUGS B. strikes again!!!*/
- return ospf_vl_set (ospf, &vl_config);
- }
- /* Deal with other parameters */
- for (i=2; i < argc; i++)
- {
- /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
- switch (argv[i][0])
- {
- case 'a':
- if (i > 2 || strncmp (argv[i], "authentication-", 15) == 0)
- {
- /* authentication-key - this option can occur anywhere on
- command line. At start of command line
- must check for authentication option. */
- memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- strncpy (auth_key, argv[i+1], OSPF_AUTH_SIMPLE_SIZE);
- vl_config.auth_key = auth_key;
- i++;
- }
- else if (strncmp (argv[i], "authentication", 14) == 0)
- {
- /* authentication - this option can only occur at start
- of command line */
- vl_config.auth_type = OSPF_AUTH_SIMPLE;
- if ((i+1) < argc)
- {
- if (strncmp (argv[i+1], "n", 1) == 0)
- {
- /* "authentication null" */
- vl_config.auth_type = OSPF_AUTH_NULL;
- i++;
- }
- else if (strncmp (argv[i+1], "m", 1) == 0
- && strcmp (argv[i+1], "message-digest-") != 0)
- {
- /* "authentication message-digest" */
- vl_config.auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- i++;
- }
- }
- }
- break;
- case 'm':
- /* message-digest-key */
- i++;
- vl_config.crypto_key_id = strtol (argv[i], NULL, 10);
- if (vl_config.crypto_key_id < 0)
- return CMD_WARNING;
- i++;
- memset(md5_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy (md5_key, argv[i], OSPF_AUTH_MD5_SIZE);
- vl_config.md5_key = md5_key;
- break;
- case 'h':
- /* Hello interval */
- i++;
- vl_config.hello_interval = strtol (argv[i], NULL, 10);
- if (vl_config.hello_interval < 0)
- return CMD_WARNING;
- break;
- case 'r':
- /* Retransmit Interval */
- i++;
- vl_config.retransmit_interval = strtol (argv[i], NULL, 10);
- if (vl_config.retransmit_interval < 0)
- return CMD_WARNING;
- break;
- case 't':
- /* Transmit Delay */
- i++;
- vl_config.transmit_delay = strtol (argv[i], NULL, 10);
- if (vl_config.transmit_delay < 0)
- return CMD_WARNING;
- break;
- case 'd':
- /* Dead Interval */
- i++;
- vl_config.dead_interval = strtol (argv[i], NULL, 10);
- if (vl_config.dead_interval < 0)
- return CMD_WARNING;
- break;
- }
- }
- /* Action configuration */
- return ospf_vl_set (ospf, &vl_config);
- }
- DEFUN (no_ospf_area_vlink,
- no_ospf_area_vlink_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D",
- NO_STR
- VLINK_HELPSTR_IPADDR)
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct ospf_vl_config_data vl_config;
- struct ospf_vl_data *vl_data = NULL;
- char auth_key[OSPF_AUTH_SIMPLE_SIZE+1];
- int i;
- int ret, format;
- ospf_vl_config_data_init(&vl_config, vty);
- ret = ospf_str2area_id (argv[0], &vl_config.area_id, &format);
- if (ret < 0)
- {
- vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- area = ospf_area_lookup_by_area_id (ospf, vl_config.area_id);
- if (!area)
- {
- vty_out (vty, "Area does not exist%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ret = inet_aton (argv[1], &vl_config.vl_peer);
- if (! ret)
- {
- vty_out (vty, "Please specify valid Router ID as a.b.c.d%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc <=2)
- {
- /* Basic VLink no command */
- /* Thats all folks! - BUGS B. strikes again!!!*/
- if ((vl_data = ospf_vl_lookup (ospf, area, vl_config.vl_peer)))
- ospf_vl_delete (ospf, vl_data);
- ospf_area_check_free (ospf, vl_config.area_id);
-
- return CMD_SUCCESS;
- }
- /* If we are down here, we are reseting parameters */
- /* Deal with other parameters */
- for (i=2; i < argc; i++)
- {
- /* vty_out (vty, "argv[%d] - %s%s", i, argv[i], VTY_NEWLINE); */
- switch (argv[i][0])
- {
- case 'a':
- if (i > 2 || strncmp (argv[i], "authentication-", 15) == 0)
- {
- /* authentication-key - this option can occur anywhere on
- command line. At start of command line
- must check for authentication option. */
- memset (auth_key, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- vl_config.auth_key = auth_key;
- }
- else if (strncmp (argv[i], "authentication", 14) == 0)
- {
- /* authentication - this option can only occur at start
- of command line */
- vl_config.auth_type = OSPF_AUTH_NOTSET;
- }
- break;
- case 'm':
- /* message-digest-key */
- /* Delete one key */
- i++;
- vl_config.crypto_key_id = strtol (argv[i], NULL, 10);
- if (vl_config.crypto_key_id < 0)
- return CMD_WARNING;
- vl_config.md5_key = NULL;
- break;
- case 'h':
- /* Hello interval */
- vl_config.hello_interval = OSPF_HELLO_INTERVAL_DEFAULT;
- break;
- case 'r':
- /* Retransmit Interval */
- vl_config.retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
- break;
- case 't':
- /* Transmit Delay */
- vl_config.transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
- break;
- case 'd':
- /* Dead Interval */
- i++;
- vl_config.dead_interval = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
- break;
- }
- }
- /* Action configuration */
- return ospf_vl_set (ospf, &vl_config);
- }
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_param1_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_param1_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_param2_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_param2_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_param3_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_param3_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_param4_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535> "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) <1-65535>",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_param4_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval) "
- "(hello-interval|retransmit-interval|transmit-delay|dead-interval)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM
- VLINK_HELPSTR_TIME_PARAM)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_args_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) (message-digest|null)",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_ALL)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|)",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_authtype_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_md5_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(message-digest-key|) <1-255> md5 KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTH_MD5)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_md5_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(message-digest-key|) <1-255>",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTH_MD5)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authkey_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication-key|) AUTH_KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTH_SIMPLE)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_authkey_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication-key|)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTH_SIMPLE)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_args_authkey_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) (message-digest|null) "
- "(authentication-key|) AUTH_KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_ALL
- VLINK_HELPSTR_AUTH_SIMPLE)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_authkey_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) "
- "(authentication-key|) AUTH_KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE
- VLINK_HELPSTR_AUTH_SIMPLE)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_authtype_authkey_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) "
- "(authentication-key|)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE
- VLINK_HELPSTR_AUTH_SIMPLE)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_args_md5_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) (message-digest|null) "
- "(message-digest-key|) <1-255> md5 KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_ALL
- VLINK_HELPSTR_AUTH_MD5)
- ALIAS (ospf_area_vlink,
- ospf_area_vlink_authtype_md5_cmd,
- "area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) "
- "(message-digest-key|) <1-255> md5 KEY",
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE
- VLINK_HELPSTR_AUTH_MD5)
- ALIAS (no_ospf_area_vlink,
- no_ospf_area_vlink_authtype_md5_cmd,
- "no area (A.B.C.D|<0-4294967295>) virtual-link A.B.C.D "
- "(authentication|) "
- "(message-digest-key|)",
- NO_STR
- VLINK_HELPSTR_IPADDR
- VLINK_HELPSTR_AUTHTYPE_SIMPLE
- VLINK_HELPSTR_AUTH_MD5)
- DEFUN (ospf_area_shortcut,
- ospf_area_shortcut_cmd,
- "area (A.B.C.D|<0-4294967295>) shortcut (default|enable|disable)",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure the area's shortcutting mode\n"
- "Set default shortcutting behavior\n"
- "Enable shortcutting through the area\n"
- "Disable shortcutting through the area\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int mode;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- if (strncmp (argv[1], "de", 2) == 0)
- mode = OSPF_SHORTCUT_DEFAULT;
- else if (strncmp (argv[1], "di", 2) == 0)
- mode = OSPF_SHORTCUT_DISABLE;
- else if (strncmp (argv[1], "e", 1) == 0)
- mode = OSPF_SHORTCUT_ENABLE;
- else
- return CMD_WARNING;
- ospf_area_shortcut_set (ospf, area, mode);
- if (ospf->abr_type != OSPF_ABR_SHORTCUT)
- vty_out (vty, "Shortcut area setting will take effect "
- "only when the router is configured as Shortcut ABR%s",
- VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_shortcut,
- no_ospf_area_shortcut_cmd,
- "no area (A.B.C.D|<0-4294967295>) shortcut (enable|disable)",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Deconfigure the area's shortcutting mode\n"
- "Deconfigure enabled shortcutting through the area\n"
- "Deconfigure disabled shortcutting through the area\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[0]);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (!area)
- return CMD_SUCCESS;
- ospf_area_shortcut_unset (ospf, area);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_stub,
- ospf_area_stub_cmd,
- "area (A.B.C.D|<0-4294967295>) stub",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as stub\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int ret, format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
- ret = ospf_area_stub_set (ospf, area_id);
- if (ret == 0)
- {
- vty_out (vty, "First deconfigure all virtual link through this area%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf_area_no_summary_unset (ospf, area_id);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_stub_no_summary,
- ospf_area_stub_no_summary_cmd,
- "area (A.B.C.D|<0-4294967295>) stub no-summary",
- "OSPF stub parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as stub\n"
- "Do not inject inter-area routes into stub\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int ret, format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
- ret = ospf_area_stub_set (ospf, area_id);
- if (ret == 0)
- {
- vty_out (vty, "%% Area cannot be stub as it contains a virtual link%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf_area_no_summary_set (ospf, area_id);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_stub,
- no_ospf_area_stub_cmd,
- "no area (A.B.C.D|<0-4294967295>) stub",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as stub\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
- ospf_area_stub_unset (ospf, area_id);
- ospf_area_no_summary_unset (ospf, area_id);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_stub_no_summary,
- no_ospf_area_stub_no_summary_cmd,
- "no area (A.B.C.D|<0-4294967295>) stub no-summary",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as stub\n"
- "Do not inject inter-area routes into area\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[0]);
- ospf_area_no_summary_unset (ospf, area_id);
- return CMD_SUCCESS;
- }
- static int
- ospf_area_nssa_cmd_handler (struct vty *vty, int argc, const char *argv[],
- int nosum)
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int ret, format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
- ret = ospf_area_nssa_set (ospf, area_id);
- if (ret == 0)
- {
- vty_out (vty, "%% Area cannot be nssa as it contains a virtual link%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc > 1)
- {
- if (strncmp (argv[1], "translate-c", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_CANDIDATE);
- else if (strncmp (argv[1], "translate-n", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_NEVER);
- else if (strncmp (argv[1], "translate-a", 11) == 0)
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_ALWAYS);
- }
- else
- {
- ospf_area_nssa_translator_role_set (ospf, area_id,
- OSPF_NSSA_ROLE_CANDIDATE);
- }
- if (nosum)
- ospf_area_no_summary_set (ospf, area_id);
- else
- ospf_area_no_summary_unset (ospf, area_id);
- ospf_schedule_abr_task (ospf);
-
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_nssa_translate_no_summary,
- ospf_area_nssa_translate_no_summary_cmd,
- "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always) no-summary",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n"
- "Configure NSSA-ABR for translate election (default)\n"
- "Configure NSSA-ABR to never translate\n"
- "Configure NSSA-ABR to always translate\n"
- "Do not inject inter-area routes into nssa\n")
- {
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
- }
- DEFUN (ospf_area_nssa_translate,
- ospf_area_nssa_translate_cmd,
- "area (A.B.C.D|<0-4294967295>) nssa (translate-candidate|translate-never|translate-always)",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n"
- "Configure NSSA-ABR for translate election (default)\n"
- "Configure NSSA-ABR to never translate\n"
- "Configure NSSA-ABR to always translate\n")
- {
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
- }
- DEFUN (ospf_area_nssa,
- ospf_area_nssa_cmd,
- "area (A.B.C.D|<0-4294967295>) nssa",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n")
- {
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 0);
- }
- DEFUN (ospf_area_nssa_no_summary,
- ospf_area_nssa_no_summary_cmd,
- "area (A.B.C.D|<0-4294967295>) nssa no-summary",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n"
- "Do not inject inter-area routes into nssa\n")
- {
- return ospf_area_nssa_cmd_handler (vty, argc, argv, 1);
- }
- DEFUN (no_ospf_area_nssa,
- no_ospf_area_nssa_cmd,
- "no area (A.B.C.D|<0-4294967295>) nssa",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
- ospf_area_nssa_unset (ospf, area_id);
- ospf_area_no_summary_unset (ospf, area_id);
- ospf_schedule_abr_task (ospf);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_nssa_no_summary,
- no_ospf_area_nssa_no_summary_cmd,
- "no area (A.B.C.D|<0-4294967295>) nssa no-summary",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Configure OSPF area as nssa\n"
- "Do not inject inter-area routes into nssa\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[0]);
- ospf_area_no_summary_unset (ospf, area_id);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_default_cost,
- ospf_area_default_cost_cmd,
- "area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Set the summary-default cost of a NSSA or stub area\n"
- "Stub's advertised default summary cost\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- u_int32_t cost;
- int format;
- struct prefix_ipv4 p;
- VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]);
- VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[1], 0, 16777215);
- area = ospf_area_get (ospf, area_id, format);
- if (area->external_routing == OSPF_AREA_DEFAULT)
- {
- vty_out (vty, "The area is neither stub, nor NSSA%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- area->default_cost = cost;
- p.family = AF_INET;
- p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
- p.prefixlen = 0;
- if (IS_DEBUG_OSPF_EVENT)
- zlog_debug ("ospf_abr_announce_stub_defaults(): "
- "announcing 0.0.0.0/0 to area %s",
- inet_ntoa (area->area_id));
- ospf_abr_announce_network_to_area (&p, area->default_cost, area);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_default_cost,
- no_ospf_area_default_cost_cmd,
- "no area (A.B.C.D|<0-4294967295>) default-cost <0-16777215>",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Set the summary-default cost of a NSSA or stub area\n"
- "Stub's advertised default summary cost\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- struct prefix_ipv4 p;
- VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[0]);
- VTY_CHECK_INTEGER_RANGE ("stub default cost", argv[1], 0, OSPF_LS_INFINITY);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
- if (area->external_routing == OSPF_AREA_DEFAULT)
- {
- vty_out (vty, "The area is neither stub, nor NSSA%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- area->default_cost = 1;
- p.family = AF_INET;
- p.prefix.s_addr = OSPF_DEFAULT_DESTINATION;
- p.prefixlen = 0;
- if (IS_DEBUG_OSPF_EVENT)
- zlog_debug ("ospf_abr_announce_stub_defaults(): "
- "announcing 0.0.0.0/0 to area %s",
- inet_ntoa (area->area_id));
- ospf_abr_announce_network_to_area (&p, area->default_cost, area);
- ospf_area_check_free (ospf, area_id);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_export_list,
- ospf_area_export_list_cmd,
- "area (A.B.C.D|<0-4294967295>) export-list NAME",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Set the filter for networks announced to other areas\n"
- "Name of the access-list\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- ospf_area_export_list_set (ospf, area, argv[1]);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_export_list,
- no_ospf_area_export_list_cmd,
- "no area (A.B.C.D|<0-4294967295>) export-list NAME",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Unset the filter for networks announced to other areas\n"
- "Name of the access-list\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
- ospf_area_export_list_unset (ospf, area);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_import_list,
- ospf_area_import_list_cmd,
- "area (A.B.C.D|<0-4294967295>) import-list NAME",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Set the filter for networks from other areas announced to the specified one\n"
- "Name of the access-list\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- ospf_area_import_list_set (ospf, area, argv[1]);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_import_list,
- no_ospf_area_import_list_cmd,
- "no area (A.B.C.D|<0-4294967295>) import-list NAME",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Unset the filter for networks announced to other areas\n"
- "Name of the access-list\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
- ospf_area_import_list_unset (ospf, area);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_filter_list,
- ospf_area_filter_list_cmd,
- "area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Filter networks between OSPF areas\n"
- "Filter prefixes between OSPF areas\n"
- "Name of an IP prefix-list\n"
- "Filter networks sent to this area\n"
- "Filter networks sent from this area\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- struct prefix_list *plist;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- plist = prefix_list_lookup (AFI_IP, argv[1]);
- if (strncmp (argv[2], "in", 2) == 0)
- {
- PREFIX_LIST_IN (area) = plist;
- if (PREFIX_NAME_IN (area))
- free (PREFIX_NAME_IN (area));
- PREFIX_NAME_IN (area) = strdup (argv[1]);
- ospf_schedule_abr_task (ospf);
- }
- else
- {
- PREFIX_LIST_OUT (area) = plist;
- if (PREFIX_NAME_OUT (area))
- free (PREFIX_NAME_OUT (area));
- PREFIX_NAME_OUT (area) = strdup (argv[1]);
- ospf_schedule_abr_task (ospf);
- }
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_filter_list,
- no_ospf_area_filter_list_cmd,
- "no area (A.B.C.D|<0-4294967295>) filter-list prefix WORD (in|out)",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Filter networks between OSPF areas\n"
- "Filter prefixes between OSPF areas\n"
- "Name of an IP prefix-list\n"
- "Filter networks sent to this area\n"
- "Filter networks sent from this area\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- if ((area = ospf_area_lookup_by_area_id (ospf, area_id)) == NULL)
- return CMD_SUCCESS;
-
- if (strncmp (argv[2], "in", 2) == 0)
- {
- if (PREFIX_NAME_IN (area))
- if (strcmp (PREFIX_NAME_IN (area), argv[1]) != 0)
- return CMD_SUCCESS;
- PREFIX_LIST_IN (area) = NULL;
- if (PREFIX_NAME_IN (area))
- free (PREFIX_NAME_IN (area));
- PREFIX_NAME_IN (area) = NULL;
- ospf_schedule_abr_task (ospf);
- }
- else
- {
- if (PREFIX_NAME_OUT (area))
- if (strcmp (PREFIX_NAME_OUT (area), argv[1]) != 0)
- return CMD_SUCCESS;
- PREFIX_LIST_OUT (area) = NULL;
- if (PREFIX_NAME_OUT (area))
- free (PREFIX_NAME_OUT (area));
- PREFIX_NAME_OUT (area) = NULL;
- ospf_schedule_abr_task (ospf);
- }
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_authentication_message_digest,
- ospf_area_authentication_message_digest_cmd,
- "area (A.B.C.D|<0-4294967295>) authentication message-digest",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Enable authentication\n"
- "Use message-digest authentication\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- return CMD_SUCCESS;
- }
- DEFUN (ospf_area_authentication,
- ospf_area_authentication_cmd,
- "area (A.B.C.D|<0-4294967295>) authentication",
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Enable authentication\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_get (ospf, area_id, format);
- area->auth_type = OSPF_AUTH_SIMPLE;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_area_authentication,
- no_ospf_area_authentication_cmd,
- "no area (A.B.C.D|<0-4294967295>) authentication",
- NO_STR
- "OSPF area parameters\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Enable authentication\n")
- {
- struct ospf *ospf = vty->index;
- struct ospf_area *area;
- struct in_addr area_id;
- int format;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- area = ospf_area_lookup_by_area_id (ospf, area_id);
- if (area == NULL)
- return CMD_SUCCESS;
- area->auth_type = OSPF_AUTH_NULL;
- ospf_area_check_free (ospf, area_id);
-
- return CMD_SUCCESS;
- }
- DEFUN (ospf_abr_type,
- ospf_abr_type_cmd,
- "ospf abr-type (cisco|ibm|shortcut|standard)",
- "OSPF specific commands\n"
- "Set OSPF ABR type\n"
- "Alternative ABR, cisco implementation\n"
- "Alternative ABR, IBM implementation\n"
- "Shortcut ABR\n"
- "Standard behavior (RFC2328)\n")
- {
- struct ospf *ospf = vty->index;
- u_char abr_type = OSPF_ABR_UNKNOWN;
- if (strncmp (argv[0], "c", 1) == 0)
- abr_type = OSPF_ABR_CISCO;
- else if (strncmp (argv[0], "i", 1) == 0)
- abr_type = OSPF_ABR_IBM;
- else if (strncmp (argv[0], "sh", 2) == 0)
- abr_type = OSPF_ABR_SHORTCUT;
- else if (strncmp (argv[0], "st", 2) == 0)
- abr_type = OSPF_ABR_STAND;
- else
- return CMD_WARNING;
- /* If ABR type value is changed, schedule ABR task. */
- if (ospf->abr_type != abr_type)
- {
- ospf->abr_type = abr_type;
- ospf_schedule_abr_task (ospf);
- }
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_abr_type,
- no_ospf_abr_type_cmd,
- "no ospf abr-type (cisco|ibm|shortcut|standard)",
- NO_STR
- "OSPF specific commands\n"
- "Set OSPF ABR type\n"
- "Alternative ABR, cisco implementation\n"
- "Alternative ABR, IBM implementation\n"
- "Shortcut ABR\n")
- {
- struct ospf *ospf = vty->index;
- u_char abr_type = OSPF_ABR_UNKNOWN;
- if (strncmp (argv[0], "c", 1) == 0)
- abr_type = OSPF_ABR_CISCO;
- else if (strncmp (argv[0], "i", 1) == 0)
- abr_type = OSPF_ABR_IBM;
- else if (strncmp (argv[0], "sh", 2) == 0)
- abr_type = OSPF_ABR_SHORTCUT;
- else if (strncmp (argv[0], "st", 2) == 0)
- abr_type = OSPF_ABR_STAND;
- else
- return CMD_WARNING;
- /* If ABR type value is changed, schedule ABR task. */
- if (ospf->abr_type == abr_type)
- {
- ospf->abr_type = OSPF_ABR_DEFAULT;
- ospf_schedule_abr_task (ospf);
- }
- return CMD_SUCCESS;
- }
- DEFUN (ospf_log_adjacency_changes,
- ospf_log_adjacency_changes_cmd,
- "log-adjacency-changes",
- "Log changes in adjacency state\n")
- {
- struct ospf *ospf = vty->index;
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_log_adjacency_changes_detail,
- ospf_log_adjacency_changes_detail_cmd,
- "log-adjacency-changes detail",
- "Log changes in adjacency state\n"
- "Log all state changes\n")
- {
- struct ospf *ospf = vty->index;
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- SET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_log_adjacency_changes,
- no_ospf_log_adjacency_changes_cmd,
- "no log-adjacency-changes",
- NO_STR
- "Log changes in adjacency state\n")
- {
- struct ospf *ospf = vty->index;
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_log_adjacency_changes_detail,
- no_ospf_log_adjacency_changes_detail_cmd,
- "no log-adjacency-changes detail",
- NO_STR
- "Log changes in adjacency state\n"
- "Log all state changes\n")
- {
- struct ospf *ospf = vty->index;
- UNSET_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_compatible_rfc1583,
- ospf_compatible_rfc1583_cmd,
- "compatible rfc1583",
- "OSPF compatibility list\n"
- "compatible with RFC 1583\n")
- {
- struct ospf *ospf = vty->index;
- if (!CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- {
- SET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
- }
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_compatible_rfc1583,
- no_ospf_compatible_rfc1583_cmd,
- "no compatible rfc1583",
- NO_STR
- "OSPF compatibility list\n"
- "compatible with RFC 1583\n")
- {
- struct ospf *ospf = vty->index;
- if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- {
- UNSET_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE);
- ospf_spf_calculate_schedule (ospf, SPF_FLAG_CONFIG_CHANGE);
- }
- return CMD_SUCCESS;
- }
- ALIAS (ospf_compatible_rfc1583,
- ospf_rfc1583_flag_cmd,
- "ospf rfc1583compatibility",
- "OSPF specific commands\n"
- "Enable the RFC1583Compatibility flag\n")
- ALIAS (no_ospf_compatible_rfc1583,
- no_ospf_rfc1583_flag_cmd,
- "no ospf rfc1583compatibility",
- NO_STR
- "OSPF specific commands\n"
- "Disable the RFC1583Compatibility flag\n")
- static int
- ospf_timers_spf_set (struct vty *vty, unsigned int delay,
- unsigned int hold,
- unsigned int max)
- {
- struct ospf *ospf = vty->index;
-
- ospf->spf_delay = delay;
- ospf->spf_holdtime = hold;
- ospf->spf_max_holdtime = max;
-
- return CMD_SUCCESS;
- }
- DEFUN (ospf_timers_min_ls_interval,
- ospf_timers_min_ls_interval_cmd,
- "timers throttle lsa all <0-5000>",
- "Adjust routing timers\n"
- "Throttling adaptive timer\n"
- "LSA delay between transmissions\n"
- NO_STR
- "Delay (msec) between sending LSAs\n")
- {
- struct ospf *ospf = vty->index;
- unsigned int interval;
- if (argc != 1)
- {
- vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("LSA interval", interval, argv[0]);
- ospf->min_ls_interval = interval;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_timers_min_ls_interval,
- no_ospf_timers_min_ls_interval_cmd,
- "no timers throttle lsa all",
- NO_STR
- "Adjust routing timers\n"
- "Throttling adaptive timer\n"
- "LSA delay between transmissions\n")
- {
- struct ospf *ospf = vty->index;
- ospf->min_ls_interval = OSPF_MIN_LS_INTERVAL;
- return CMD_SUCCESS;
- }
- DEFUN (ospf_timers_min_ls_arrival,
- ospf_timers_min_ls_arrival_cmd,
- "timers lsa arrival <0-1000>",
- "Adjust routing timers\n"
- "Throttling link state advertisement delays\n"
- "OSPF minimum arrival interval delay\n"
- "Delay (msec) between accepted LSAs\n")
- {
- struct ospf *ospf = vty->index;
- unsigned int arrival;
- if (argc != 1)
- {
- vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER_RANGE ("minimum LSA inter-arrival time", arrival, argv[0], 0, 1000);
- ospf->min_ls_arrival = arrival;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_timers_min_ls_arrival,
- no_ospf_timers_min_ls_arrival_cmd,
- "no timers lsa arrival",
- NO_STR
- "Adjust routing timers\n"
- "Throttling link state advertisement delays\n"
- "OSPF minimum arrival interval delay\n")
- {
- struct ospf *ospf = vty->index;
- ospf->min_ls_arrival = OSPF_MIN_LS_ARRIVAL;
- return CMD_SUCCESS;
- }
- DEFUN (ospf_timers_throttle_spf,
- ospf_timers_throttle_spf_cmd,
- "timers throttle spf <0-600000> <0-600000> <0-600000>",
- "Adjust routing timers\n"
- "Throttling adaptive timer\n"
- "OSPF SPF timers\n"
- "Delay (msec) from first change received till SPF calculation\n"
- "Initial hold time (msec) between consecutive SPF calculations\n"
- "Maximum hold time (msec)\n")
- {
- unsigned int delay, hold, max;
-
- if (argc != 3)
- {
- vty_out (vty, "Insufficient arguments%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- VTY_GET_INTEGER_RANGE ("SPF delay timer", delay, argv[0], 0, 600000);
- VTY_GET_INTEGER_RANGE ("SPF hold timer", hold, argv[1], 0, 600000);
- VTY_GET_INTEGER_RANGE ("SPF max-hold timer", max, argv[2], 0, 600000);
-
- return ospf_timers_spf_set (vty, delay, hold, max);
- }
- DEFUN_DEPRECATED (ospf_timers_spf,
- ospf_timers_spf_cmd,
- "timers spf <0-4294967295> <0-4294967295>",
- "Adjust routing timers\n"
- "OSPF SPF timers\n"
- "Delay (s) between receiving a change to SPF calculation\n"
- "Hold time (s) between consecutive SPF calculations\n")
- {
- unsigned int delay, hold;
-
- if (argc != 2)
- {
- vty_out (vty, "Insufficient number of arguments%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- VTY_GET_INTEGER ("SPF delay timer", delay, argv[0]);
- VTY_GET_INTEGER ("SPF hold timer", hold, argv[1]);
-
- /* truncate down the second values if they're greater than 600000ms */
- if (delay > (600000 / 1000))
- delay = 600000;
- else if (delay == 0)
- /* 0s delay was probably specified because of lack of ms resolution */
- delay = OSPF_SPF_DELAY_DEFAULT;
- if (hold > (600000 / 1000))
- hold = 600000;
-
- return ospf_timers_spf_set (vty, delay * 1000, hold * 1000, hold * 1000);
- }
- DEFUN (no_ospf_timers_throttle_spf,
- no_ospf_timers_throttle_spf_cmd,
- "no timers throttle spf",
- NO_STR
- "Adjust routing timers\n"
- "Throttling adaptive timer\n"
- "OSPF SPF timers\n")
- {
- return ospf_timers_spf_set (vty,
- OSPF_SPF_DELAY_DEFAULT,
- OSPF_SPF_HOLDTIME_DEFAULT,
- OSPF_SPF_MAX_HOLDTIME_DEFAULT);
- }
- ALIAS_DEPRECATED (no_ospf_timers_throttle_spf,
- no_ospf_timers_spf_cmd,
- "no timers spf",
- NO_STR
- "Adjust routing timers\n"
- "OSPF SPF timers\n")
- DEFUN (ospf_neighbor,
- ospf_neighbor_cmd,
- "neighbor A.B.C.D",
- NEIGHBOR_STR
- "Neighbor IP address\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr nbr_addr;
- unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
- unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
- VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
- if (argc > 1)
- VTY_GET_INTEGER_RANGE ("neighbor priority", priority, argv[1], 0, 255);
- if (argc > 2)
- VTY_GET_INTEGER_RANGE ("poll interval", interval, argv[2], 1, 65535);
- ospf_nbr_nbma_set (ospf, nbr_addr);
- if (argc > 1)
- ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
- if (argc > 2)
- ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
- return CMD_SUCCESS;
- }
- ALIAS (ospf_neighbor,
- ospf_neighbor_priority_poll_interval_cmd,
- "neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Neighbor Priority\n"
- "Priority\n"
- "Dead Neighbor Polling interval\n"
- "Seconds\n")
- ALIAS (ospf_neighbor,
- ospf_neighbor_priority_cmd,
- "neighbor A.B.C.D priority <0-255>",
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Neighbor Priority\n"
- "Seconds\n")
- DEFUN (ospf_neighbor_poll_interval,
- ospf_neighbor_poll_interval_cmd,
- "neighbor A.B.C.D poll-interval <1-65535>",
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Dead Neighbor Polling interval\n"
- "Seconds\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr nbr_addr;
- unsigned int priority = OSPF_NEIGHBOR_PRIORITY_DEFAULT;
- unsigned int interval = OSPF_POLL_INTERVAL_DEFAULT;
- VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
- if (argc > 1)
- VTY_GET_INTEGER_RANGE ("poll interval", interval, argv[1], 1, 65535);
- if (argc > 2)
- VTY_GET_INTEGER_RANGE ("neighbor priority", priority, argv[2], 0, 255);
- ospf_nbr_nbma_set (ospf, nbr_addr);
- if (argc > 1)
- ospf_nbr_nbma_poll_interval_set (ospf, nbr_addr, interval);
- if (argc > 2)
- ospf_nbr_nbma_priority_set (ospf, nbr_addr, priority);
- return CMD_SUCCESS;
- }
- ALIAS (ospf_neighbor_poll_interval,
- ospf_neighbor_poll_interval_priority_cmd,
- "neighbor A.B.C.D poll-interval <1-65535> priority <0-255>",
- NEIGHBOR_STR
- "Neighbor address\n"
- "OSPF dead-router polling interval\n"
- "Seconds\n"
- "OSPF priority of non-broadcast neighbor\n"
- "Priority\n")
- DEFUN (no_ospf_neighbor,
- no_ospf_neighbor_cmd,
- "no neighbor A.B.C.D",
- NO_STR
- NEIGHBOR_STR
- "Neighbor IP address\n")
- {
- struct ospf *ospf = vty->index;
- struct in_addr nbr_addr;
- VTY_GET_IPV4_ADDRESS ("neighbor address", nbr_addr, argv[0]);
- (void)ospf_nbr_nbma_unset (ospf, nbr_addr);
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_neighbor,
- no_ospf_neighbor_priority_cmd,
- "no neighbor A.B.C.D priority <0-255>",
- NO_STR
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Neighbor Priority\n"
- "Priority\n")
- ALIAS (no_ospf_neighbor,
- no_ospf_neighbor_poll_interval_cmd,
- "no neighbor A.B.C.D poll-interval <1-65535>",
- NO_STR
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Dead Neighbor Polling interval\n"
- "Seconds\n")
- ALIAS (no_ospf_neighbor,
- no_ospf_neighbor_priority_pollinterval_cmd,
- "no neighbor A.B.C.D priority <0-255> poll-interval <1-65535>",
- NO_STR
- NEIGHBOR_STR
- "Neighbor IP address\n"
- "Neighbor Priority\n"
- "Priority\n"
- "Dead Neighbor Polling interval\n"
- "Seconds\n")
- DEFUN (ospf_refresh_timer, ospf_refresh_timer_cmd,
- "refresh timer <10-1800>",
- "Adjust refresh parameters\n"
- "Set refresh timer\n"
- "Timer value in seconds\n")
- {
- struct ospf *ospf = vty->index;
- unsigned int interval;
-
- VTY_GET_INTEGER_RANGE ("refresh timer", interval, argv[0], 10, 1800);
- interval = (interval / 10) * 10;
- ospf_timers_refresh_set (ospf, interval);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_refresh_timer, no_ospf_refresh_timer_val_cmd,
- "no refresh timer <10-1800>",
- "Adjust refresh parameters\n"
- "Unset refresh timer\n"
- "Timer value in seconds\n")
- {
- struct ospf *ospf = vty->index;
- unsigned int interval;
- if (argc == 1)
- {
- VTY_GET_INTEGER_RANGE ("refresh timer", interval, argv[0], 10, 1800);
-
- if (ospf->lsa_refresh_interval != interval ||
- interval == OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
- return CMD_SUCCESS;
- }
- ospf_timers_refresh_unset (ospf);
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_refresh_timer,
- no_ospf_refresh_timer_cmd,
- "no refresh timer",
- "Adjust refresh parameters\n"
- "Unset refresh timer\n")
- DEFUN (ospf_auto_cost_reference_bandwidth,
- ospf_auto_cost_reference_bandwidth_cmd,
- "auto-cost reference-bandwidth <1-4294967>",
- "Calculate OSPF interface cost according to bandwidth\n"
- "Use reference bandwidth method to assign OSPF cost\n"
- "The reference bandwidth in terms of Mbits per second\n")
- {
- struct ospf *ospf = vty->index;
- u_int32_t refbw;
- struct listnode *node;
- struct interface *ifp;
- refbw = strtol (argv[0], NULL, 10);
- if (refbw < 1 || refbw > 4294967)
- {
- vty_out (vty, "reference-bandwidth value is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- /* If reference bandwidth is changed. */
- if ((refbw * 1000) == ospf->ref_bandwidth)
- return CMD_SUCCESS;
-
- ospf->ref_bandwidth = refbw * 1000;
- for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_auto_cost_reference_bandwidth,
- no_ospf_auto_cost_reference_bandwidth_cmd,
- "no auto-cost reference-bandwidth",
- NO_STR
- "Calculate OSPF interface cost according to bandwidth\n"
- "Use reference bandwidth method to assign OSPF cost\n")
- {
- struct ospf *ospf = vty->index;
- struct listnode *node, *nnode;
- struct interface *ifp;
- if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH)
- return CMD_SUCCESS;
-
- ospf->ref_bandwidth = OSPF_DEFAULT_REF_BANDWIDTH;
- vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE);
- vty_out (vty, " Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS (om->iflist, node, nnode, ifp))
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
- }
- const char *ospf_abr_type_descr_str[] =
- {
- "Unknown",
- "Standard (RFC2328)",
- "Alternative IBM",
- "Alternative Cisco",
- "Alternative Shortcut"
- };
- const char *ospf_shortcut_mode_descr_str[] =
- {
- "Default",
- "Enabled",
- "Disabled"
- };
- static void
- show_ip_ospf_area (struct vty *vty, struct ospf_area *area)
- {
- /* Show Area ID. */
- vty_out (vty, " Area ID: %s", inet_ntoa (area->area_id));
- /* Show Area type/mode. */
- if (OSPF_IS_AREA_BACKBONE (area))
- vty_out (vty, " (Backbone)%s", VTY_NEWLINE);
- else
- {
- if (area->external_routing == OSPF_AREA_STUB)
- vty_out (vty, " (Stub%s%s)",
- area->no_summary ? ", no summary" : "",
- area->shortcut_configured ? "; " : "");
- else if (area->external_routing == OSPF_AREA_NSSA)
- vty_out (vty, " (NSSA%s%s)",
- area->no_summary ? ", no summary" : "",
- area->shortcut_configured ? "; " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- vty_out (vty, " Shortcutting mode: %s",
- ospf_shortcut_mode_descr_str[area->shortcut_configured]);
- vty_out (vty, ", S-bit consensus: %s%s",
- area->shortcut_capability ? "ok" : "no", VTY_NEWLINE);
- }
- /* Show number of interfaces. */
- vty_out (vty, " Number of interfaces in this area: Total: %d, "
- "Active: %d%s", listcount (area->oiflist),
- area->act_ints, VTY_NEWLINE);
- if (area->external_routing == OSPF_AREA_NSSA)
- {
- vty_out (vty, " It is an NSSA configuration. %s Elected NSSA/ABR performs type-7/type-5 LSA translation. %s", VTY_NEWLINE, VTY_NEWLINE);
- if (! IS_OSPF_ABR (area->ospf))
- vty_out (vty, " It is not ABR, therefore not Translator. %s",
- VTY_NEWLINE);
- else if (area->NSSATranslatorState)
- {
- vty_out (vty, " We are an ABR and ");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- vty_out (vty, "the NSSA Elected Translator. %s",
- VTY_NEWLINE);
- else if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_ALWAYS)
- vty_out (vty, "always an NSSA Translator. %s",
- VTY_NEWLINE);
- }
- else
- {
- vty_out (vty, " We are an ABR, but ");
- if (area->NSSATranslatorRole == OSPF_NSSA_ROLE_CANDIDATE)
- vty_out (vty, "not the NSSA Elected Translator. %s",
- VTY_NEWLINE);
- else
- vty_out (vty, "never an NSSA Translator. %s",
- VTY_NEWLINE);
- }
- }
- /* Stub-router state for this area */
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
- vty_out (vty, " Originating stub / maximum-distance Router-LSA%s",
- VTY_NEWLINE);
- if (CHECK_FLAG(area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- vty_out (vty, " Administratively activated (indefinitely)%s",
- VTY_NEWLINE);
- if (area->t_stub_router)
- vty_out (vty, " Active from startup, %s remaining%s",
- ospf_timer_dump (area->t_stub_router, timebuf,
- sizeof(timebuf)), VTY_NEWLINE);
- }
-
- /* Show number of fully adjacent neighbors. */
- vty_out (vty, " Number of fully adjacent neighbors in this area:"
- " %d%s", area->full_nbrs, VTY_NEWLINE);
- /* Show authentication type. */
- vty_out (vty, " Area has ");
- if (area->auth_type == OSPF_AUTH_NULL)
- vty_out (vty, "no authentication%s", VTY_NEWLINE);
- else if (area->auth_type == OSPF_AUTH_SIMPLE)
- vty_out (vty, "simple password authentication%s", VTY_NEWLINE);
- else if (area->auth_type == OSPF_AUTH_CRYPTOGRAPHIC)
- vty_out (vty, "message digest authentication%s", VTY_NEWLINE);
- if (!OSPF_IS_AREA_BACKBONE (area))
- vty_out (vty, " Number of full virtual adjacencies going through"
- " this area: %d%s", area->full_vls, VTY_NEWLINE);
- /* Show SPF calculation times. */
- vty_out (vty, " SPF algorithm executed %d times%s",
- area->spf_calculation, VTY_NEWLINE);
- /* Show number of LSA. */
- vty_out (vty, " Number of LSA %ld%s", area->lsdb->total, VTY_NEWLINE);
- vty_out (vty, " Number of router LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_ROUTER_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_ROUTER_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of network LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_NETWORK_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_NETWORK_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of summary LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_SUMMARY_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_SUMMARY_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of ASBR summary LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_ASBR_SUMMARY_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_ASBR_SUMMARY_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of NSSA LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_AS_NSSA_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_AS_NSSA_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of opaque link LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_LINK_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_LINK_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of opaque area LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (area->lsdb, OSPF_OPAQUE_AREA_LSA),
- ospf_lsdb_checksum (area->lsdb, OSPF_OPAQUE_AREA_LSA), VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- DEFUN (show_ip_ospf,
- show_ip_ospf_cmd,
- "show ip ospf",
- SHOW_STR
- IP_STR
- "OSPF information\n")
- {
- struct listnode *node, *nnode;
- struct ospf_area * area;
- struct ospf *ospf;
- struct timeval result;
- char timebuf[OSPF_TIME_DUMP_SIZE];
- /* Check OSPF is enable. */
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- /* Show Router ID. */
- vty_out (vty, " OSPF Routing Process, Router ID: %s%s",
- inet_ntoa (ospf->router_id),
- VTY_NEWLINE);
-
- /* Graceful shutdown */
- if (ospf->t_deferred_shutdown)
- vty_out (vty, " Deferred shutdown in progress, %s remaining%s",
- ospf_timer_dump (ospf->t_deferred_shutdown,
- timebuf, sizeof (timebuf)), VTY_NEWLINE);
- /* Show capability. */
- vty_out (vty, " Supports only single TOS (TOS0) routes%s", VTY_NEWLINE);
- vty_out (vty, " This implementation conforms to RFC2328%s", VTY_NEWLINE);
- vty_out (vty, " RFC1583Compatibility flag is %s%s",
- CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE) ?
- "enabled" : "disabled", VTY_NEWLINE);
- vty_out (vty, " OpaqueCapability flag is %s%s",
- CHECK_FLAG (ospf->config, OSPF_OPAQUE_CAPABLE) ?
- "enabled" : "disabled",
- VTY_NEWLINE);
-
- /* Show stub-router configuration */
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED
- || ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- {
- vty_out (vty, " Stub router advertisement is configured%s",
- VTY_NEWLINE);
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " Enabled for %us after start-up%s",
- ospf->stub_router_startup_time, VTY_NEWLINE);
- if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " Enabled for %us prior to full shutdown%s",
- ospf->stub_router_shutdown_time, VTY_NEWLINE);
- }
-
- /* Show SPF timers. */
- vty_out (vty, " Initial SPF scheduling delay %d millisec(s)%s"
- " Minimum hold time between consecutive SPFs %d millisec(s)%s"
- " Maximum hold time between consecutive SPFs %d millisec(s)%s"
- " Hold time multiplier is currently %d%s",
- ospf->spf_delay, VTY_NEWLINE,
- ospf->spf_holdtime, VTY_NEWLINE,
- ospf->spf_max_holdtime, VTY_NEWLINE,
- ospf->spf_hold_multiplier, VTY_NEWLINE);
- vty_out (vty, " SPF algorithm ");
- if (ospf->ts_spf.tv_sec || ospf->ts_spf.tv_usec)
- {
- result = tv_sub (recent_relative_time (), ospf->ts_spf);
- vty_out (vty, "last executed %s ago%s",
- ospf_timeval_dump (&result, timebuf, sizeof (timebuf)),
- VTY_NEWLINE);
- vty_out (vty, " Last SPF duration %s%s",
- ospf_timeval_dump (&ospf->ts_spf_duration, timebuf, sizeof (timebuf)),
- VTY_NEWLINE);
- }
- else
- vty_out (vty, "has not been run%s", VTY_NEWLINE);
- vty_out (vty, " SPF timer %s%s%s",
- (ospf->t_spf_calc ? "due in " : "is "),
- ospf_timer_dump (ospf->t_spf_calc, timebuf, sizeof (timebuf)),
- VTY_NEWLINE);
-
- /* Show refresh parameters. */
- vty_out (vty, " Refresh timer %d secs%s",
- ospf->lsa_refresh_interval, VTY_NEWLINE);
-
- /* Show ABR/ASBR flags. */
- if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ABR))
- vty_out (vty, " This router is an ABR, ABR type is: %s%s",
- ospf_abr_type_descr_str[ospf->abr_type], VTY_NEWLINE);
- if (CHECK_FLAG (ospf->flags, OSPF_FLAG_ASBR))
- vty_out (vty, " This router is an ASBR "
- "(injecting external routing information)%s", VTY_NEWLINE);
- /* Show Number of AS-external-LSAs. */
- vty_out (vty, " Number of external LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (ospf->lsdb, OSPF_AS_EXTERNAL_LSA),
- ospf_lsdb_checksum (ospf->lsdb, OSPF_AS_EXTERNAL_LSA), VTY_NEWLINE);
- vty_out (vty, " Number of opaque AS LSA %ld. Checksum Sum 0x%08x%s",
- ospf_lsdb_count (ospf->lsdb, OSPF_OPAQUE_AS_LSA),
- ospf_lsdb_checksum (ospf->lsdb, OSPF_OPAQUE_AS_LSA), VTY_NEWLINE);
- /* Show number of areas attached. */
- vty_out (vty, " Number of areas attached to this router: %d%s",
- listcount (ospf->areas), VTY_NEWLINE);
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
- {
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
- vty_out(vty, " All adjacency changes are logged%s",VTY_NEWLINE);
- else
- vty_out(vty, " Adjacency changes are logged%s",VTY_NEWLINE);
- }
- vty_out (vty, "%s",VTY_NEWLINE);
- /* Show each area status. */
- for (ALL_LIST_ELEMENTS (ospf->areas, node, nnode, area))
- show_ip_ospf_area (vty, area);
- return CMD_SUCCESS;
- }
- static void
- show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf,
- struct interface *ifp)
- {
- int is_up;
- struct ospf_neighbor *nbr;
- struct route_node *rn;
- /* Is interface up? */
- vty_out (vty, "%s is %s%s", ifp->name,
- ((is_up = if_is_operative(ifp)) ? "up" : "down"), VTY_NEWLINE);
- vty_out (vty, " ifindex %u, MTU %u bytes, BW %u Kbit %s%s",
- ifp->ifindex, ifp->mtu, ifp->bandwidth, if_flag_dump(ifp->flags),
- VTY_NEWLINE);
- /* Is interface OSPF enabled? */
- if (ospf_oi_count(ifp) == 0)
- {
- vty_out (vty, " OSPF not enabled on this interface%s", VTY_NEWLINE);
- return;
- }
- else if (!is_up)
- {
- vty_out (vty, " OSPF is enabled, but not running on this interface%s",
- VTY_NEWLINE);
- return;
- }
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (oi == NULL)
- continue;
-
- /* Show OSPF interface information. */
- vty_out (vty, " Internet Address %s/%d,",
- inet_ntoa (oi->address->u.prefix4), oi->address->prefixlen);
- if (oi->connected->destination || oi->type == OSPF_IFTYPE_VIRTUALLINK)
- {
- struct in_addr *dest;
- const char *dstr;
-
- if (CONNECTED_PEER(oi->connected)
- || oi->type == OSPF_IFTYPE_VIRTUALLINK)
- dstr = "Peer";
- else
- dstr = "Broadcast";
-
- /* For Vlinks, showing the peer address is probably more
- * informative than the local interface that is being used
- */
- if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
- dest = &oi->vl_data->peer_addr;
- else
- dest = &oi->connected->destination->u.prefix4;
-
- vty_out (vty, " %s %s,", dstr, inet_ntoa (*dest));
- }
- vty_out (vty, " Area %s%s", ospf_area_desc_string (oi->area),
- VTY_NEWLINE);
- vty_out (vty, " MTU mismatch detection:%s%s",
- OSPF_IF_PARAM(oi, mtu_ignore) ? "disabled" : "enabled", VTY_NEWLINE);
- vty_out (vty, " Router ID %s, Network Type %s, Cost: %d%s",
- inet_ntoa (ospf->router_id), ospf_network_type_str[oi->type],
- oi->output_cost, VTY_NEWLINE);
- vty_out (vty, " Transmit Delay is %d sec, State %s, Priority %d%s",
- OSPF_IF_PARAM (oi,transmit_delay), LOOKUP (ospf_ism_state_msg, oi->state),
- PRIORITY (oi), VTY_NEWLINE);
- /* Show DR information. */
- if (DR (oi).s_addr == 0)
- vty_out (vty, " No designated router on this network%s", VTY_NEWLINE);
- else
- {
- nbr = ospf_nbr_lookup_by_addr (oi->nbrs, &DR (oi));
- if (nbr == NULL)
- vty_out (vty, " No designated router on this network%s", VTY_NEWLINE);
- else
- {
- vty_out (vty, " Designated Router (ID) %s,",
- inet_ntoa (nbr->router_id));
- vty_out (vty, " Interface Address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
- }
- }
- /* Show BDR information. */
- if (BDR (oi).s_addr == 0)
- vty_out (vty, " No backup designated router on this network%s",
- VTY_NEWLINE);
- else
- {
- nbr = ospf_nbr_lookup_by_addr (oi->nbrs, &BDR (oi));
- if (nbr == NULL)
- vty_out (vty, " No backup designated router on this network%s",
- VTY_NEWLINE);
- else
- {
- vty_out (vty, " Backup Designated Router (ID) %s,",
- inet_ntoa (nbr->router_id));
- vty_out (vty, " Interface Address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
- }
- }
-
- /* Next network-LSA sequence number we'll use, if we're elected DR */
- if (oi->params && ntohl (oi->params->network_lsa_seqnum)
- != OSPF_INITIAL_SEQUENCE_NUMBER)
- vty_out (vty, " Saved Network-LSA sequence number 0x%x%s",
- ntohl (oi->params->network_lsa_seqnum), VTY_NEWLINE);
-
- vty_out (vty, " Multicast group memberships:");
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS)
- || OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- {
- if (OI_MEMBER_CHECK(oi, MEMBER_ALLROUTERS))
- vty_out (vty, " OSPFAllRouters");
- if (OI_MEMBER_CHECK(oi, MEMBER_DROUTERS))
- vty_out (vty, " OSPFDesignatedRouters");
- }
- else
- vty_out (vty, " <None>");
- vty_out (vty, "%s", VTY_NEWLINE);
- vty_out (vty, " Timer intervals configured,");
- vty_out (vty, " Hello ");
- if (OSPF_IF_PARAM (oi, fast_hello) == 0)
- vty_out (vty, "%ds,", OSPF_IF_PARAM (oi, v_hello));
- else
- vty_out (vty, "%dms,", 1000 / OSPF_IF_PARAM (oi, fast_hello));
- vty_out (vty, " Dead %ds, Wait %ds, Retransmit %d%s",
- OSPF_IF_PARAM (oi, v_wait),
- OSPF_IF_PARAM (oi, v_wait),
- OSPF_IF_PARAM (oi, retransmit_interval),
- VTY_NEWLINE);
-
- if (OSPF_IF_PASSIVE_STATUS (oi) == OSPF_IF_ACTIVE)
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
- vty_out (vty, " Hello due in %s%s",
- ospf_timer_dump (oi->t_hello, timebuf, sizeof(timebuf)),
- VTY_NEWLINE);
- }
- else /* passive-interface is set */
- vty_out (vty, " No Hellos (Passive interface)%s", VTY_NEWLINE);
-
- vty_out (vty, " Neighbor Count is %d, Adjacent neighbor count is %d%s",
- ospf_nbr_count (oi, 0), ospf_nbr_count (oi, NSM_Full),
- VTY_NEWLINE);
- }
- }
- DEFUN (show_ip_ospf_interface,
- show_ip_ospf_interface_cmd,
- "show ip ospf interface [INTERFACE]",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Interface information\n"
- "Interface name\n")
- {
- struct interface *ifp;
- struct ospf *ospf;
- struct listnode *node;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, "OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- /* Show All Interfaces. */
- if (argc == 0)
- for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp))
- show_ip_ospf_interface_sub (vty, ospf, ifp);
- /* Interface name is specified. */
- else
- {
- if ((ifp = if_lookup_by_name (argv[0])) == NULL)
- vty_out (vty, "No such interface name%s", VTY_NEWLINE);
- else
- show_ip_ospf_interface_sub (vty, ospf, ifp);
- }
- return CMD_SUCCESS;
- }
- static void
- show_ip_ospf_neighbour_header (struct vty *vty)
- {
- vty_out (vty, "%s%15s %3s %-15s %9s %-15s %-20s %5s %5s %5s%s",
- VTY_NEWLINE,
- "Neighbor ID", "Pri", "State", "Dead Time",
- "Address", "Interface", "RXmtL", "RqstL", "DBsmL",
- VTY_NEWLINE);
- }
- static void
- show_ip_ospf_neighbor_sub (struct vty *vty, struct ospf_interface *oi)
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- char msgbuf[16];
- char timebuf[OSPF_TIME_DUMP_SIZE];
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- /* Do not show myself. */
- if (nbr != oi->nbr_self)
- /* Down state is not shown. */
- if (nbr->state != NSM_Down)
- {
- ospf_nbr_state_message (nbr, msgbuf, 16);
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- vty_out (vty, "%-15s %3d %-15s ",
- "-", nbr->priority,
- msgbuf);
- else
- vty_out (vty, "%-15s %3d %-15s ",
- inet_ntoa (nbr->router_id), nbr->priority,
- msgbuf);
-
- vty_out (vty, "%9s ",
- ospf_timer_dump (nbr->t_inactivity, timebuf,
- sizeof(timebuf)));
-
- vty_out (vty, "%-15s ", inet_ntoa (nbr->src));
- vty_out (vty, "%-20s %5ld %5ld %5d%s",
- IF_NAME (oi), ospf_ls_retransmit_count (nbr),
- ospf_ls_request_count (nbr), ospf_db_summary_count (nbr),
- VTY_NEWLINE);
- }
- }
- DEFUN (show_ip_ospf_neighbor,
- show_ip_ospf_neighbor_cmd,
- "show ip ospf neighbor",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n")
- {
- struct ospf *ospf;
- struct ospf_interface *oi;
- struct listnode *node;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- show_ip_ospf_neighbour_header (vty);
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- show_ip_ospf_neighbor_sub (vty, oi);
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_neighbor_all,
- show_ip_ospf_neighbor_all_cmd,
- "show ip ospf neighbor all",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "include down status neighbor\n")
- {
- struct ospf *ospf = ospf_lookup ();
- struct listnode *node;
- struct ospf_interface *oi;
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- show_ip_ospf_neighbour_header (vty);
-
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct listnode *nbr_node;
- struct ospf_nbr_nbma *nbr_nbma;
- show_ip_ospf_neighbor_sub (vty, oi);
- /* print Down neighbor status */
- for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nbr_node, nbr_nbma))
- {
- if (nbr_nbma->nbr == NULL
- || nbr_nbma->nbr->state == NSM_Down)
- {
- vty_out (vty, "%-15s %3d %-15s %9s ",
- "-", nbr_nbma->priority, "Down", "-");
- vty_out (vty, "%-15s %-20s %5d %5d %5d%s",
- inet_ntoa (nbr_nbma->addr), IF_NAME (oi),
- 0, 0, 0, VTY_NEWLINE);
- }
- }
- }
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_neighbor_int,
- show_ip_ospf_neighbor_int_cmd,
- "show ip ospf neighbor IFNAME",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "Interface name\n")
- {
- struct ospf *ospf;
- struct interface *ifp;
- struct route_node *rn;
-
- ifp = if_lookup_by_name (argv[0]);
- if (!ifp)
- {
- vty_out (vty, "No such interface.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- show_ip_ospf_neighbour_header (vty);
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
- if (oi == NULL)
- continue;
- show_ip_ospf_neighbor_sub (vty, oi);
- }
- return CMD_SUCCESS;
- }
- static void
- show_ip_ospf_nbr_nbma_detail_sub (struct vty *vty, struct ospf_interface *oi,
- struct ospf_nbr_nbma *nbr_nbma)
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
- /* Show neighbor ID. */
- vty_out (vty, " Neighbor %s,", "-");
- /* Show interface address. */
- vty_out (vty, " interface address %s%s",
- inet_ntoa (nbr_nbma->addr), VTY_NEWLINE);
- /* Show Area ID. */
- vty_out (vty, " In the area %s via interface %s%s",
- ospf_area_desc_string (oi->area), IF_NAME (oi), VTY_NEWLINE);
- /* Show neighbor priority and state. */
- vty_out (vty, " Neighbor priority is %d, State is %s,",
- nbr_nbma->priority, "Down");
- /* Show state changes. */
- vty_out (vty, " %d state changes%s", nbr_nbma->state_change, VTY_NEWLINE);
- /* Show PollInterval */
- vty_out (vty, " Poll interval %d%s", nbr_nbma->v_poll, VTY_NEWLINE);
- /* Show poll-interval timer. */
- vty_out (vty, " Poll timer due in %s%s",
- ospf_timer_dump (nbr_nbma->t_poll, timebuf, sizeof(timebuf)),
- VTY_NEWLINE);
- /* Show poll-interval timer thread. */
- vty_out (vty, " Thread Poll Timer %s%s",
- nbr_nbma->t_poll != NULL ? "on" : "off", VTY_NEWLINE);
- }
- static void
- show_ip_ospf_neighbor_detail_sub (struct vty *vty, struct ospf_interface *oi,
- struct ospf_neighbor *nbr)
- {
- char timebuf[OSPF_TIME_DUMP_SIZE];
- /* Show neighbor ID. */
- if (nbr->state == NSM_Attempt && nbr->router_id.s_addr == 0)
- vty_out (vty, " Neighbor %s,", "-");
- else
- vty_out (vty, " Neighbor %s,", inet_ntoa (nbr->router_id));
- /* Show interface address. */
- vty_out (vty, " interface address %s%s",
- inet_ntoa (nbr->address.u.prefix4), VTY_NEWLINE);
- /* Show Area ID. */
- vty_out (vty, " In the area %s via interface %s%s",
- ospf_area_desc_string (oi->area), oi->ifp->name, VTY_NEWLINE);
- /* Show neighbor priority and state. */
- vty_out (vty, " Neighbor priority is %d, State is %s,",
- nbr->priority, LOOKUP (ospf_nsm_state_msg, nbr->state));
- /* Show state changes. */
- vty_out (vty, " %d state changes%s", nbr->state_change, VTY_NEWLINE);
- if (nbr->ts_last_progress.tv_sec || nbr->ts_last_progress.tv_usec)
- {
- struct timeval res
- = tv_sub (recent_relative_time (), nbr->ts_last_progress);
- vty_out (vty, " Most recent state change statistics:%s",
- VTY_NEWLINE);
- vty_out (vty, " Progressive change %s ago%s",
- ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
- VTY_NEWLINE);
- }
- if (nbr->ts_last_regress.tv_sec || nbr->ts_last_regress.tv_usec)
- {
- struct timeval res
- = tv_sub (recent_relative_time (), nbr->ts_last_regress);
- vty_out (vty, " Regressive change %s ago, due to %s%s",
- ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
- (nbr->last_regress_str ? nbr->last_regress_str : "??"),
- VTY_NEWLINE);
- }
- /* Show Designated Rotuer ID. */
- vty_out (vty, " DR is %s,", inet_ntoa (nbr->d_router));
- /* Show Backup Designated Rotuer ID. */
- vty_out (vty, " BDR is %s%s", inet_ntoa (nbr->bd_router), VTY_NEWLINE);
- /* Show options. */
- vty_out (vty, " Options %d %s%s", nbr->options,
- ospf_options_dump (nbr->options), VTY_NEWLINE);
- /* Show Router Dead interval timer. */
- vty_out (vty, " Dead timer due in %s%s",
- ospf_timer_dump (nbr->t_inactivity, timebuf, sizeof (timebuf)),
- VTY_NEWLINE);
- /* Show Database Summary list. */
- vty_out (vty, " Database Summary List %d%s",
- ospf_db_summary_count (nbr), VTY_NEWLINE);
- /* Show Link State Request list. */
- vty_out (vty, " Link State Request List %ld%s",
- ospf_ls_request_count (nbr), VTY_NEWLINE);
- /* Show Link State Retransmission list. */
- vty_out (vty, " Link State Retransmission List %ld%s",
- ospf_ls_retransmit_count (nbr), VTY_NEWLINE);
- /* Show inactivity timer thread. */
- vty_out (vty, " Thread Inactivity Timer %s%s",
- nbr->t_inactivity != NULL ? "on" : "off", VTY_NEWLINE);
- /* Show Database Description retransmission thread. */
- vty_out (vty, " Thread Database Description Retransmision %s%s",
- nbr->t_db_desc != NULL ? "on" : "off", VTY_NEWLINE);
- /* Show Link State Request Retransmission thread. */
- vty_out (vty, " Thread Link State Request Retransmission %s%s",
- nbr->t_ls_req != NULL ? "on" : "off", VTY_NEWLINE);
- /* Show Link State Update Retransmission thread. */
- vty_out (vty, " Thread Link State Update Retransmission %s%s%s",
- nbr->t_ls_upd != NULL ? "on" : "off", VTY_NEWLINE, VTY_NEWLINE);
- }
- DEFUN (show_ip_ospf_neighbor_id,
- show_ip_ospf_neighbor_id_cmd,
- "show ip ospf neighbor A.B.C.D",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "Neighbor ID\n")
- {
- struct ospf *ospf;
- struct listnode *node;
- struct ospf_neighbor *nbr;
- struct ospf_interface *oi;
- struct in_addr router_id;
- int ret;
- ret = inet_aton (argv[0], &router_id);
- if (!ret)
- {
- vty_out (vty, "Please specify Neighbor ID by A.B.C.D%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- if ((nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id)))
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_neighbor_detail,
- show_ip_ospf_neighbor_detail_cmd,
- "show ip ospf neighbor detail",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "detail of all neighbors\n")
- {
- struct ospf *ospf;
- struct ospf_interface *oi;
- struct listnode *node;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- if (nbr != oi->nbr_self)
- if (nbr->state != NSM_Down)
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
- }
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_neighbor_detail_all,
- show_ip_ospf_neighbor_detail_all_cmd,
- "show ip ospf neighbor detail all",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "detail of all neighbors\n"
- "include down status neighbor\n")
- {
- struct ospf *ospf;
- struct listnode *node;
- struct ospf_interface *oi;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- struct ospf_nbr_nbma *nbr_nbma;
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- if (nbr != oi->nbr_self)
- if (oi->type == OSPF_IFTYPE_NBMA && nbr->state != NSM_Down)
- show_ip_ospf_neighbor_detail_sub (vty, oi, rn->info);
- if (oi->type == OSPF_IFTYPE_NBMA)
- {
- struct listnode *nd;
- for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nd, nbr_nbma))
- if (nbr_nbma->nbr == NULL
- || nbr_nbma->nbr->state == NSM_Down)
- show_ip_ospf_nbr_nbma_detail_sub (vty, oi, nbr_nbma);
- }
- }
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_neighbor_int_detail,
- show_ip_ospf_neighbor_int_detail_cmd,
- "show ip ospf neighbor IFNAME detail",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Neighbor list\n"
- "Interface name\n"
- "detail of all neighbors")
- {
- struct ospf *ospf;
- struct ospf_interface *oi;
- struct interface *ifp;
- struct route_node *rn, *nrn;
- struct ospf_neighbor *nbr;
- ifp = if_lookup_by_name (argv[0]);
- if (!ifp)
- {
- vty_out (vty, "No such interface.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if ((oi = rn->info))
- for (nrn = route_top (oi->nbrs); nrn; nrn = route_next (nrn))
- if ((nbr = nrn->info))
- if (nbr != oi->nbr_self)
- if (nbr->state != NSM_Down)
- show_ip_ospf_neighbor_detail_sub (vty, oi, nbr);
- return CMD_SUCCESS;
- }
- /* Show functions */
- static int
- show_lsa_summary (struct vty *vty, struct ospf_lsa *lsa, int self)
- {
- struct router_lsa *rl;
- struct summary_lsa *sl;
- struct as_external_lsa *asel;
- struct prefix_ipv4 p;
- if (lsa != NULL)
- /* If self option is set, check LSA self flag. */
- if (self == 0 || IS_LSA_SELF (lsa))
- {
- /* LSA common part show. */
- vty_out (vty, "%-15s ", inet_ntoa (lsa->data->id));
- vty_out (vty, "%-15s %4d 0x%08lx 0x%04x",
- inet_ntoa (lsa->data->adv_router), LS_AGE (lsa),
- (u_long)ntohl (lsa->data->ls_seqnum), ntohs (lsa->data->checksum));
- /* LSA specific part show. */
- switch (lsa->data->type)
- {
- case OSPF_ROUTER_LSA:
- rl = (struct router_lsa *) lsa->data;
- vty_out (vty, " %-d", ntohs (rl->links));
- break;
- case OSPF_SUMMARY_LSA:
- sl = (struct summary_lsa *) lsa->data;
- p.family = AF_INET;
- p.prefix = sl->header.id;
- p.prefixlen = ip_masklen (sl->mask);
- apply_mask_ipv4 (&p);
- vty_out (vty, " %s/%d", inet_ntoa (p.prefix), p.prefixlen);
- break;
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_AS_NSSA_LSA:
- asel = (struct as_external_lsa *) lsa->data;
- p.family = AF_INET;
- p.prefix = asel->header.id;
- p.prefixlen = ip_masklen (asel->mask);
- apply_mask_ipv4 (&p);
- vty_out (vty, " %s %s/%d [0x%lx]",
- IS_EXTERNAL_METRIC (asel->e[0].tos) ? "E2" : "E1",
- inet_ntoa (p.prefix), p.prefixlen,
- (u_long)ntohl (asel->e[0].route_tag));
- break;
- case OSPF_NETWORK_LSA:
- case OSPF_ASBR_SUMMARY_LSA:
- case OSPF_OPAQUE_LINK_LSA:
- case OSPF_OPAQUE_AREA_LSA:
- case OSPF_OPAQUE_AS_LSA:
- default:
- break;
- }
- vty_out (vty, VTY_NEWLINE);
- }
- return 0;
- }
- static const char *show_database_desc[] =
- {
- "unknown",
- "Router Link States",
- "Net Link States",
- "Summary Link States",
- "ASBR-Summary Link States",
- "AS External Link States",
- "Group Membership LSA",
- "NSSA-external Link States",
- "Type-8 LSA",
- "Link-Local Opaque-LSA",
- "Area-Local Opaque-LSA",
- "AS-external Opaque-LSA",
- };
- static const char *show_database_header[] =
- {
- "",
- "Link ID ADV Router Age Seq# CkSum Link count",
- "Link ID ADV Router Age Seq# CkSum",
- "Link ID ADV Router Age Seq# CkSum Route",
- "Link ID ADV Router Age Seq# CkSum",
- "Link ID ADV Router Age Seq# CkSum Route",
- " --- header for Group Member ----",
- "Link ID ADV Router Age Seq# CkSum Route",
- " --- type-8 ---",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
- "Opaque-Type/Id ADV Router Age Seq# CkSum",
- };
- static void
- show_ip_ospf_database_header (struct vty *vty, struct ospf_lsa *lsa)
- {
- struct router_lsa *rlsa = (struct router_lsa*) lsa->data;
-
- vty_out (vty, " LS age: %d%s", LS_AGE (lsa), VTY_NEWLINE);
- vty_out (vty, " Options: 0x%-2x : %s%s",
- lsa->data->options,
- ospf_options_dump(lsa->data->options),
- VTY_NEWLINE);
- vty_out (vty, " LS Flags: 0x%-2x %s%s",
- lsa->flags,
- ((lsa->flags & OSPF_LSA_LOCAL_XLT) ? "(Translated from Type-7)" : ""),
- VTY_NEWLINE);
- if (lsa->data->type == OSPF_ROUTER_LSA)
- {
- vty_out (vty, " Flags: 0x%x" , rlsa->flags);
- if (rlsa->flags)
- vty_out (vty, " :%s%s%s%s",
- IS_ROUTER_LSA_BORDER (rlsa) ? " ABR" : "",
- IS_ROUTER_LSA_EXTERNAL (rlsa) ? " ASBR" : "",
- IS_ROUTER_LSA_VIRTUAL (rlsa) ? " VL-endpoint" : "",
- IS_ROUTER_LSA_SHORTCUT (rlsa) ? " Shortcut" : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- vty_out (vty, " LS Type: %s%s",
- LOOKUP (ospf_lsa_type_msg, lsa->data->type), VTY_NEWLINE);
- vty_out (vty, " Link State ID: %s %s%s", inet_ntoa (lsa->data->id),
- LOOKUP (ospf_link_state_id_type_msg, lsa->data->type), VTY_NEWLINE);
- vty_out (vty, " Advertising Router: %s%s",
- inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
- vty_out (vty, " LS Seq Number: %08lx%s", (u_long)ntohl (lsa->data->ls_seqnum),
- VTY_NEWLINE);
- vty_out (vty, " Checksum: 0x%04x%s", ntohs (lsa->data->checksum),
- VTY_NEWLINE);
- vty_out (vty, " Length: %d%s", ntohs (lsa->data->length), VTY_NEWLINE);
- }
- const char *link_type_desc[] =
- {
- "(null)",
- "another Router (point-to-point)",
- "a Transit Network",
- "Stub Network",
- "a Virtual Link",
- };
- const char *link_id_desc[] =
- {
- "(null)",
- "Neighboring Router ID",
- "Designated Router address",
- "Net",
- "Neighboring Router ID",
- };
- const char *link_data_desc[] =
- {
- "(null)",
- "Router Interface address",
- "Router Interface address",
- "Network Mask",
- "Router Interface address",
- };
- /* Show router-LSA each Link information. */
- static void
- show_ip_ospf_database_router_links (struct vty *vty,
- struct router_lsa *rl)
- {
- int len, type;
- unsigned int i;
- len = ntohs (rl->header.length) - 4;
- for (i = 0; i < ntohs (rl->links) && len > 0; len -= 12, i++)
- {
- type = rl->link[i].type;
- vty_out (vty, " Link connected to: %s%s",
- link_type_desc[type], VTY_NEWLINE);
- vty_out (vty, " (Link ID) %s: %s%s", link_id_desc[type],
- inet_ntoa (rl->link[i].link_id), VTY_NEWLINE);
- vty_out (vty, " (Link Data) %s: %s%s", link_data_desc[type],
- inet_ntoa (rl->link[i].link_data), VTY_NEWLINE);
- vty_out (vty, " Number of TOS metrics: 0%s", VTY_NEWLINE);
- vty_out (vty, " TOS 0 Metric: %d%s",
- ntohs (rl->link[i].metric), VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- /* Show router-LSA detail information. */
- static int
- show_router_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- struct router_lsa *rl = (struct router_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
-
- vty_out (vty, " Number of Links: %d%s%s", ntohs (rl->links),
- VTY_NEWLINE, VTY_NEWLINE);
- show_ip_ospf_database_router_links (vty, rl);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- /* Show network-LSA detail information. */
- static int
- show_network_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- int length, i;
- if (lsa != NULL)
- {
- struct network_lsa *nl = (struct network_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
- vty_out (vty, " Network Mask: /%d%s",
- ip_masklen (nl->mask), VTY_NEWLINE);
- length = ntohs (lsa->data->length) - OSPF_LSA_HEADER_SIZE - 4;
- for (i = 0; length > 0; i++, length -= 4)
- vty_out (vty, " Attached Router: %s%s",
- inet_ntoa (nl->routers[i]), VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- /* Show summary-LSA detail information. */
- static int
- show_summary_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
- vty_out (vty, " Network Mask: /%d%s", ip_masklen (sl->mask),
- VTY_NEWLINE);
- vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
- VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- /* Show summary-ASBR-LSA detail information. */
- static int
- show_summary_asbr_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- struct summary_lsa *sl = (struct summary_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
- vty_out (vty, " Network Mask: /%d%s",
- ip_masklen (sl->mask), VTY_NEWLINE);
- vty_out (vty, " TOS: 0 Metric: %d%s", GET_METRIC (sl->metric),
- VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- /* Show AS-external-LSA detail information. */
- static int
- show_as_external_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
- vty_out (vty, " Network Mask: /%d%s",
- ip_masklen (al->mask), VTY_NEWLINE);
- vty_out (vty, " Metric Type: %s%s",
- IS_EXTERNAL_METRIC (al->e[0].tos) ?
- "2 (Larger than any link state path)" : "1", VTY_NEWLINE);
- vty_out (vty, " TOS: 0%s", VTY_NEWLINE);
- vty_out (vty, " Metric: %d%s",
- GET_METRIC (al->e[0].metric), VTY_NEWLINE);
- vty_out (vty, " Forward Address: %s%s",
- inet_ntoa (al->e[0].fwd_addr), VTY_NEWLINE);
- vty_out (vty, " External Route Tag: %lu%s%s",
- (u_long)ntohl (al->e[0].route_tag), VTY_NEWLINE, VTY_NEWLINE);
- }
- return 0;
- }
- #if 0
- static int
- show_as_external_lsa_stdvty (struct ospf_lsa *lsa)
- {
- struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
- /* show_ip_ospf_database_header (vty, lsa); */
- zlog_debug( " Network Mask: /%d%s",
- ip_masklen (al->mask), "\n");
- zlog_debug( " Metric Type: %s%s",
- IS_EXTERNAL_METRIC (al->e[0].tos) ?
- "2 (Larger than any link state path)" : "1", "\n");
- zlog_debug( " TOS: 0%s", "\n");
- zlog_debug( " Metric: %d%s",
- GET_METRIC (al->e[0].metric), "\n");
- zlog_debug( " Forward Address: %s%s",
- inet_ntoa (al->e[0].fwd_addr), "\n");
- zlog_debug( " External Route Tag: %u%s%s",
- ntohl (al->e[0].route_tag), "\n", "\n");
- return 0;
- }
- #endif
- /* Show AS-NSSA-LSA detail information. */
- static int
- show_as_nssa_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- struct as_external_lsa *al = (struct as_external_lsa *) lsa->data;
- show_ip_ospf_database_header (vty, lsa);
- vty_out (vty, " Network Mask: /%d%s",
- ip_masklen (al->mask), VTY_NEWLINE);
- vty_out (vty, " Metric Type: %s%s",
- IS_EXTERNAL_METRIC (al->e[0].tos) ?
- "2 (Larger than any link state path)" : "1", VTY_NEWLINE);
- vty_out (vty, " TOS: 0%s", VTY_NEWLINE);
- vty_out (vty, " Metric: %d%s",
- GET_METRIC (al->e[0].metric), VTY_NEWLINE);
- vty_out (vty, " NSSA: Forward Address: %s%s",
- inet_ntoa (al->e[0].fwd_addr), VTY_NEWLINE);
- vty_out (vty, " External Route Tag: %u%s%s",
- ntohl (al->e[0].route_tag), VTY_NEWLINE, VTY_NEWLINE);
- }
- return 0;
- }
- static int
- show_func_dummy (struct vty *vty, struct ospf_lsa *lsa)
- {
- return 0;
- }
- static int
- show_opaque_lsa_detail (struct vty *vty, struct ospf_lsa *lsa)
- {
- if (lsa != NULL)
- {
- show_ip_ospf_database_header (vty, lsa);
- show_opaque_info_detail (vty, lsa);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- int (*show_function[])(struct vty *, struct ospf_lsa *) =
- {
- NULL,
- show_router_lsa_detail,
- show_network_lsa_detail,
- show_summary_lsa_detail,
- show_summary_asbr_lsa_detail,
- show_as_external_lsa_detail,
- show_func_dummy,
- show_as_nssa_lsa_detail, /* almost same as external */
- NULL, /* type-8 */
- show_opaque_lsa_detail,
- show_opaque_lsa_detail,
- show_opaque_lsa_detail,
- };
- static void
- show_lsa_prefix_set (struct vty *vty, struct prefix_ls *lp, struct in_addr *id,
- struct in_addr *adv_router)
- {
- memset (lp, 0, sizeof (struct prefix_ls));
- lp->family = 0;
- if (id == NULL)
- lp->prefixlen = 0;
- else if (adv_router == NULL)
- {
- lp->prefixlen = 32;
- lp->id = *id;
- }
- else
- {
- lp->prefixlen = 64;
- lp->id = *id;
- lp->adv_router = *adv_router;
- }
- }
- static void
- show_lsa_detail_proc (struct vty *vty, struct route_table *rt,
- struct in_addr *id, struct in_addr *adv_router)
- {
- struct prefix_ls lp;
- struct route_node *rn, *start;
- struct ospf_lsa *lsa;
- show_lsa_prefix_set (vty, &lp, id, adv_router);
- start = route_node_get (rt, (struct prefix *) &lp);
- if (start)
- {
- route_lock_node (start);
- for (rn = start; rn; rn = route_next_until (rn, start))
- if ((lsa = rn->info))
- {
- if (show_function[lsa->data->type] != NULL)
- show_function[lsa->data->type] (vty, lsa);
- }
- route_unlock_node (start);
- }
- }
- /* Show detail LSA information
- -- if id is NULL then show all LSAs. */
- static void
- show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,
- struct in_addr *id, struct in_addr *adv_router)
- {
- struct listnode *node;
- struct ospf_area *area;
-
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- vty_out (vty, " %s %s%s",
- show_database_desc[type],
- VTY_NEWLINE, VTY_NEWLINE);
- show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router);
- break;
- default:
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- vty_out (vty, "%s %s (Area %s)%s%s",
- VTY_NEWLINE, show_database_desc[type],
- ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE);
- show_lsa_detail_proc (vty, AREA_LSDB (area, type), id, adv_router);
- }
- break;
- }
- }
- static void
- show_lsa_detail_adv_router_proc (struct vty *vty, struct route_table *rt,
- struct in_addr *adv_router)
- {
- struct route_node *rn;
- struct ospf_lsa *lsa;
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((lsa = rn->info))
- if (IPV4_ADDR_SAME (adv_router, &lsa->data->adv_router))
- {
- if (CHECK_FLAG (lsa->flags, OSPF_LSA_LOCAL_XLT))
- continue;
- if (show_function[lsa->data->type] != NULL)
- show_function[lsa->data->type] (vty, lsa);
- }
- }
- /* Show detail LSA information. */
- static void
- show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,
- struct in_addr *adv_router)
- {
- struct listnode *node;
- struct ospf_area *area;
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- vty_out (vty, " %s %s%s",
- show_database_desc[type],
- VTY_NEWLINE, VTY_NEWLINE);
- show_lsa_detail_adv_router_proc (vty, AS_LSDB (ospf, type),
- adv_router);
- break;
- default:
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- vty_out (vty, "%s %s (Area %s)%s%s",
- VTY_NEWLINE, show_database_desc[type],
- ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE);
- show_lsa_detail_adv_router_proc (vty, AREA_LSDB (area, type),
- adv_router);
- }
- break;
- }
- }
- static void
- show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)
- {
- struct ospf_lsa *lsa;
- struct route_node *rn;
- struct ospf_area *area;
- struct listnode *node;
- int type;
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
- {
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- continue;
- default:
- break;
- }
- if (ospf_lsdb_count_self (area->lsdb, type) > 0 ||
- (!self && ospf_lsdb_count (area->lsdb, type) > 0))
- {
- vty_out (vty, " %s (Area %s)%s%s",
- show_database_desc[type],
- ospf_area_desc_string (area),
- VTY_NEWLINE, VTY_NEWLINE);
- vty_out (vty, "%s%s", show_database_header[type], VTY_NEWLINE);
- LSDB_LOOP (AREA_LSDB (area, type), rn, lsa)
- show_lsa_summary (vty, lsa, self);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
- for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)
- {
- switch (type)
- {
- case OSPF_AS_EXTERNAL_LSA:
- case OSPF_OPAQUE_AS_LSA:
- break;
- default:
- continue;
- }
- if (ospf_lsdb_count_self (ospf->lsdb, type) ||
- (!self && ospf_lsdb_count (ospf->lsdb, type)))
- {
- vty_out (vty, " %s%s%s",
- show_database_desc[type],
- VTY_NEWLINE, VTY_NEWLINE);
- vty_out (vty, "%s%s", show_database_header[type],
- VTY_NEWLINE);
- LSDB_LOOP (AS_LSDB (ospf, type), rn, lsa)
- show_lsa_summary (vty, lsa, self);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- static void
- show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)
- {
- struct route_node *rn;
- vty_out (vty, "%s MaxAge Link States:%s%s",
- VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE);
- for (rn = route_top (ospf->maxage_lsa); rn; rn = route_next (rn))
- {
- struct ospf_lsa *lsa;
- if ((lsa = rn->info) != NULL)
- {
- vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE);
- vty_out (vty, "Link State ID: %s%s",
- inet_ntoa (lsa->data->id), VTY_NEWLINE);
- vty_out (vty, "Advertising Router: %s%s",
- inet_ntoa (lsa->data->adv_router), VTY_NEWLINE);
- vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
- #define OSPF_LSA_TYPE_NSSA_DESC "NSSA external link state\n"
- #define OSPF_LSA_TYPE_NSSA_CMD_STR "|nssa-external"
- #define OSPF_LSA_TYPE_OPAQUE_LINK_DESC "Link local Opaque-LSA\n"
- #define OSPF_LSA_TYPE_OPAQUE_AREA_DESC "Link area Opaque-LSA\n"
- #define OSPF_LSA_TYPE_OPAQUE_AS_DESC "Link AS Opaque-LSA\n"
- #define OSPF_LSA_TYPE_OPAQUE_CMD_STR "|opaque-link|opaque-area|opaque-as"
- #define OSPF_LSA_TYPES_CMD_STR \
- "asbr-summary|external|network|router|summary" \
- OSPF_LSA_TYPE_NSSA_CMD_STR \
- OSPF_LSA_TYPE_OPAQUE_CMD_STR
- #define OSPF_LSA_TYPES_DESC \
- "ASBR summary link states\n" \
- "External link states\n" \
- "Network link states\n" \
- "Router link states\n" \
- "Network summary link states\n" \
- OSPF_LSA_TYPE_NSSA_DESC \
- OSPF_LSA_TYPE_OPAQUE_LINK_DESC \
- OSPF_LSA_TYPE_OPAQUE_AREA_DESC \
- OSPF_LSA_TYPE_OPAQUE_AS_DESC
- DEFUN (show_ip_ospf_database,
- show_ip_ospf_database_cmd,
- "show ip ospf database",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n")
- {
- struct ospf *ospf;
- int type, ret;
- struct in_addr id, adv_router;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE,
- inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE);
- /* Show all LSA. */
- if (argc == 0)
- {
- show_ip_ospf_database_summary (vty, ospf, 0);
- return CMD_SUCCESS;
- }
- /* Set database type to show. */
- if (strncmp (argv[0], "r", 1) == 0)
- type = OSPF_ROUTER_LSA;
- else if (strncmp (argv[0], "ne", 2) == 0)
- type = OSPF_NETWORK_LSA;
- else if (strncmp (argv[0], "ns", 2) == 0)
- type = OSPF_AS_NSSA_LSA;
- else if (strncmp (argv[0], "su", 2) == 0)
- type = OSPF_SUMMARY_LSA;
- else if (strncmp (argv[0], "a", 1) == 0)
- type = OSPF_ASBR_SUMMARY_LSA;
- else if (strncmp (argv[0], "e", 1) == 0)
- type = OSPF_AS_EXTERNAL_LSA;
- else if (strncmp (argv[0], "se", 2) == 0)
- {
- show_ip_ospf_database_summary (vty, ospf, 1);
- return CMD_SUCCESS;
- }
- else if (strncmp (argv[0], "m", 1) == 0)
- {
- show_ip_ospf_database_maxage (vty, ospf);
- return CMD_SUCCESS;
- }
- else if (strncmp (argv[0], "opaque-l", 8) == 0)
- type = OSPF_OPAQUE_LINK_LSA;
- else if (strncmp (argv[0], "opaque-ar", 9) == 0)
- type = OSPF_OPAQUE_AREA_LSA;
- else if (strncmp (argv[0], "opaque-as", 9) == 0)
- type = OSPF_OPAQUE_AS_LSA;
- else
- return CMD_WARNING;
- /* `show ip ospf database LSA'. */
- if (argc == 1)
- show_lsa_detail (vty, ospf, type, NULL, NULL);
- else if (argc >= 2)
- {
- ret = inet_aton (argv[1], &id);
- if (!ret)
- return CMD_WARNING;
-
- /* `show ip ospf database LSA ID'. */
- if (argc == 2)
- show_lsa_detail (vty, ospf, type, &id, NULL);
- /* `show ip ospf database LSA ID adv-router ADV_ROUTER'. */
- else if (argc == 3)
- {
- if (strncmp (argv[2], "s", 1) == 0)
- adv_router = ospf->router_id;
- else
- {
- ret = inet_aton (argv[2], &adv_router);
- if (!ret)
- return CMD_WARNING;
- }
- show_lsa_detail (vty, ospf, type, &id, &adv_router);
- }
- }
- return CMD_SUCCESS;
- }
- ALIAS (show_ip_ospf_database,
- show_ip_ospf_database_type_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR "|max-age|self-originate)",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "LSAs in MaxAge list\n"
- "Self-originated link states\n")
- ALIAS (show_ip_ospf_database,
- show_ip_ospf_database_type_id_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "Link State ID (as an IP address)\n")
- ALIAS (show_ip_ospf_database,
- show_ip_ospf_database_type_id_adv_router_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D adv-router A.B.C.D",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "Link State ID (as an IP address)\n"
- "Advertising Router link states\n"
- "Advertising Router (as an IP address)\n")
- ALIAS (show_ip_ospf_database,
- show_ip_ospf_database_type_id_self_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") A.B.C.D (self-originate|)",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "Link State ID (as an IP address)\n"
- "Self-originated link states\n"
- "\n")
- DEFUN (show_ip_ospf_database_type_adv_router,
- show_ip_ospf_database_type_adv_router_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") adv-router A.B.C.D",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "Advertising Router link states\n"
- "Advertising Router (as an IP address)\n")
- {
- struct ospf *ospf;
- int type, ret;
- struct in_addr adv_router;
- ospf = ospf_lookup ();
- if (ospf == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- vty_out (vty, "%s OSPF Router with ID (%s)%s%s", VTY_NEWLINE,
- inet_ntoa (ospf->router_id), VTY_NEWLINE, VTY_NEWLINE);
- if (argc != 2)
- return CMD_WARNING;
- /* Set database type to show. */
- if (strncmp (argv[0], "r", 1) == 0)
- type = OSPF_ROUTER_LSA;
- else if (strncmp (argv[0], "ne", 2) == 0)
- type = OSPF_NETWORK_LSA;
- else if (strncmp (argv[0], "ns", 2) == 0)
- type = OSPF_AS_NSSA_LSA;
- else if (strncmp (argv[0], "s", 1) == 0)
- type = OSPF_SUMMARY_LSA;
- else if (strncmp (argv[0], "a", 1) == 0)
- type = OSPF_ASBR_SUMMARY_LSA;
- else if (strncmp (argv[0], "e", 1) == 0)
- type = OSPF_AS_EXTERNAL_LSA;
- else if (strncmp (argv[0], "opaque-l", 8) == 0)
- type = OSPF_OPAQUE_LINK_LSA;
- else if (strncmp (argv[0], "opaque-ar", 9) == 0)
- type = OSPF_OPAQUE_AREA_LSA;
- else if (strncmp (argv[0], "opaque-as", 9) == 0)
- type = OSPF_OPAQUE_AS_LSA;
- else
- return CMD_WARNING;
- /* `show ip ospf database LSA adv-router ADV_ROUTER'. */
- if (strncmp (argv[1], "s", 1) == 0)
- adv_router = ospf->router_id;
- else
- {
- ret = inet_aton (argv[1], &adv_router);
- if (!ret)
- return CMD_WARNING;
- }
- show_lsa_detail_adv_router (vty, ospf, type, &adv_router);
- return CMD_SUCCESS;
- }
- ALIAS (show_ip_ospf_database_type_adv_router,
- show_ip_ospf_database_type_self_cmd,
- "show ip ospf database (" OSPF_LSA_TYPES_CMD_STR ") (self-originate|)",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "Database summary\n"
- OSPF_LSA_TYPES_DESC
- "Self-originated link states\n")
- DEFUN (ip_ospf_authentication_args,
- ip_ospf_authentication_args_addr_cmd,
- "ip ospf authentication (null|message-digest) A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n"
- "Use null authentication\n"
- "Use message-digest authentication\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- /* Handle null authentication */
- if ( argv[0][0] == 'n' )
- {
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_NULL;
- return CMD_SUCCESS;
- }
- /* Handle message-digest authentication */
- if ( argv[0][0] == 'm' )
- {
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
- return CMD_SUCCESS;
- }
- vty_out (vty, "You shouldn't get here!%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- ALIAS (ip_ospf_authentication_args,
- ip_ospf_authentication_args_cmd,
- "ip ospf authentication (null|message-digest)",
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n"
- "Use null authentication\n"
- "Use message-digest authentication\n")
- DEFUN (ip_ospf_authentication,
- ip_ospf_authentication_addr_cmd,
- "ip ospf authentication A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- SET_IF_PARAM (params, auth_type);
- params->auth_type = OSPF_AUTH_SIMPLE;
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_authentication,
- ip_ospf_authentication_cmd,
- "ip ospf authentication",
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n")
- DEFUN (no_ip_ospf_authentication,
- no_ip_ospf_authentication_addr_cmd,
- "no ip ospf authentication A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- params->auth_type = OSPF_AUTH_NOTSET;
- UNSET_IF_PARAM (params, auth_type);
-
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_authentication,
- no_ip_ospf_authentication_cmd,
- "no ip ospf authentication",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable authentication on this interface\n")
- DEFUN (ip_ospf_authentication_key,
- ip_ospf_authentication_key_addr_cmd,
- "ip ospf authentication-key AUTH_KEY A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Authentication password (key)\n"
- "The OSPF password (key)\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE + 1);
- strncpy ((char *) params->auth_simple, argv[0], OSPF_AUTH_SIMPLE_SIZE);
- SET_IF_PARAM (params, auth_simple);
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_authentication_key,
- ip_ospf_authentication_key_cmd,
- "ip ospf authentication-key AUTH_KEY",
- "IP Information\n"
- "OSPF interface commands\n"
- "Authentication password (key)\n"
- "The OSPF password (key)")
- ALIAS (ip_ospf_authentication_key,
- ospf_authentication_key_cmd,
- "ospf authentication-key AUTH_KEY",
- "OSPF interface commands\n"
- "Authentication password (key)\n"
- "The OSPF password (key)")
- DEFUN (no_ip_ospf_authentication_key,
- no_ip_ospf_authentication_key_addr_cmd,
- "no ip ospf authentication-key A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Authentication password (key)\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- memset (params->auth_simple, 0, OSPF_AUTH_SIMPLE_SIZE);
- UNSET_IF_PARAM (params, auth_simple);
-
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_authentication_key,
- no_ip_ospf_authentication_key_cmd,
- "no ip ospf authentication-key",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Authentication password (key)\n")
- ALIAS (no_ip_ospf_authentication_key,
- no_ospf_authentication_key_cmd,
- "no ospf authentication-key",
- NO_STR
- "OSPF interface commands\n"
- "Authentication password (key)\n")
- DEFUN (ip_ospf_message_digest_key,
- ip_ospf_message_digest_key_addr_cmd,
- "ip ospf message-digest-key <1-255> md5 KEY A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n"
- "Use MD5 algorithm\n"
- "The OSPF password (key)"
- "Address of interface")
- {
- struct interface *ifp;
- struct crypt_key *ck;
- u_char key_id;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 3)
- {
- ret = inet_aton(argv[2], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- key_id = strtol (argv[0], NULL, 10);
- if (ospf_crypt_key_lookup (params->auth_crypt, key_id) != NULL)
- {
- vty_out (vty, "OSPF: Key %d already exists%s", key_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
- ck = ospf_crypt_key_new ();
- ck->key_id = (u_char) key_id;
- memset (ck->auth_key, 0, OSPF_AUTH_MD5_SIZE+1);
- strncpy ((char *) ck->auth_key, argv[1], OSPF_AUTH_MD5_SIZE);
- ospf_crypt_key_add (params->auth_crypt, ck);
- SET_IF_PARAM (params, auth_crypt);
-
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_message_digest_key,
- ip_ospf_message_digest_key_cmd,
- "ip ospf message-digest-key <1-255> md5 KEY",
- "IP Information\n"
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n"
- "Use MD5 algorithm\n"
- "The OSPF password (key)")
- ALIAS (ip_ospf_message_digest_key,
- ospf_message_digest_key_cmd,
- "ospf message-digest-key <1-255> md5 KEY",
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n"
- "Use MD5 algorithm\n"
- "The OSPF password (key)")
- DEFUN (no_ip_ospf_message_digest_key,
- no_ip_ospf_message_digest_key_addr_cmd,
- "no ip ospf message-digest-key <1-255> A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n"
- "Address of interface")
- {
- struct interface *ifp;
- struct crypt_key *ck;
- int key_id;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- key_id = strtol (argv[0], NULL, 10);
- ck = ospf_crypt_key_lookup (params->auth_crypt, key_id);
- if (ck == NULL)
- {
- vty_out (vty, "OSPF: Key %d does not exist%s", key_id, VTY_NEWLINE);
- return CMD_WARNING;
- }
- ospf_crypt_key_delete (params->auth_crypt, key_id);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_message_digest_key,
- no_ip_ospf_message_digest_key_cmd,
- "no ip ospf message-digest-key <1-255>",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n")
-
- ALIAS (no_ip_ospf_message_digest_key,
- no_ospf_message_digest_key_cmd,
- "no ospf message-digest-key <1-255>",
- NO_STR
- "OSPF interface commands\n"
- "Message digest authentication password (key)\n"
- "Key ID\n")
- DEFUN (ip_ospf_cost,
- ip_ospf_cost_u32_inet4_cmd,
- "ip ospf cost <1-65535> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- u_int32_t cost;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- cost = strtol (argv[0], NULL, 10);
- /* cost range is <1-65535>. */
- if (cost < 1 || cost > 65535)
- {
- vty_out (vty, "Interface output cost is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- SET_IF_PARAM (params, output_cost_cmd);
- params->output_cost_cmd = cost;
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_cost,
- ip_ospf_cost_u32_cmd,
- "ip ospf cost <1-65535>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost")
- ALIAS (ip_ospf_cost,
- ospf_cost_u32_cmd,
- "ospf cost <1-65535>",
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost")
- ALIAS (ip_ospf_cost,
- ospf_cost_u32_inet4_cmd,
- "ospf cost <1-65535> A.B.C.D",
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost\n"
- "Address of interface")
- DEFUN (no_ip_ospf_cost,
- no_ip_ospf_cost_inet4_cmd,
- "no ip ospf cost A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, output_cost_cmd);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- ospf_if_recalculate_output_cost (ifp);
-
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_cost,
- no_ip_ospf_cost_cmd,
- "no ip ospf cost",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n")
- ALIAS (no_ip_ospf_cost,
- no_ospf_cost_cmd,
- "no ospf cost",
- NO_STR
- "OSPF interface commands\n"
- "Interface cost\n")
- ALIAS (no_ip_ospf_cost,
- no_ospf_cost_inet4_cmd,
- "no ospf cost A.B.C.D",
- NO_STR
- "OSPF interface commands\n"
- "Interface cost\n"
- "Address of interface")
- DEFUN (no_ip_ospf_cost2,
- no_ip_ospf_cost_u32_cmd,
- "no ip ospf cost <1-65535>",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- u_int32_t cost;
- int ret;
- struct ospf_if_params *params;
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- /* According to the semantics we are mimicking "no ip ospf cost N" is
- * always treated as "no ip ospf cost" regardless of the actual value
- * of N already configured for the interface. Thus the first argument
- * is always checked to be a number, but is ignored after that.
- */
- cost = strtol (argv[0], NULL, 10);
- if (cost < 1 || cost > 65535)
- {
- vty_out (vty, "Interface output cost is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, output_cost_cmd);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- ospf_if_recalculate_output_cost (ifp);
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_cost2,
- no_ospf_cost_u32_cmd,
- "no ospf cost <1-65535>",
- NO_STR
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost")
- ALIAS (no_ip_ospf_cost2,
- no_ip_ospf_cost_u32_inet4_cmd,
- "no ip ospf cost <1-65535> A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost\n"
- "Address of interface")
- ALIAS (no_ip_ospf_cost2,
- no_ospf_cost_u32_inet4_cmd,
- "no ospf cost <1-65535> A.B.C.D",
- NO_STR
- "OSPF interface commands\n"
- "Interface cost\n"
- "Cost\n"
- "Address of interface")
- static void
- ospf_nbr_timer_update (struct ospf_interface *oi)
- {
- struct route_node *rn;
- struct ospf_neighbor *nbr;
- for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))
- if ((nbr = rn->info))
- {
- nbr->v_inactivity = OSPF_IF_PARAM (oi, v_wait);
- nbr->v_db_desc = OSPF_IF_PARAM (oi, retransmit_interval);
- nbr->v_ls_req = OSPF_IF_PARAM (oi, retransmit_interval);
- nbr->v_ls_upd = OSPF_IF_PARAM (oi, retransmit_interval);
- }
- }
- static int
- ospf_vty_dead_interval_set (struct vty *vty, const char *interval_str,
- const char *nbr_str,
- const char *fast_hello_str)
- {
- struct interface *ifp = vty->index;
- u_int32_t seconds;
- u_char hellomult;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct ospf_interface *oi;
- struct route_node *rn;
-
- params = IF_DEF_PARAMS (ifp);
-
- if (nbr_str)
- {
- ret = inet_aton(nbr_str, &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- if (interval_str)
- {
- VTY_GET_INTEGER_RANGE ("Router Dead Interval", seconds, interval_str,
- 1, 65535);
-
- /* reset fast_hello too, just to be sure */
- UNSET_IF_PARAM (params, fast_hello);
- params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
- }
- else if (fast_hello_str)
- {
- VTY_GET_INTEGER_RANGE ("Hello Multiplier", hellomult, fast_hello_str,
- 1, 10);
- /* 1s dead-interval with sub-second hellos desired */
- seconds = OSPF_ROUTER_DEAD_INTERVAL_MINIMAL;
- SET_IF_PARAM (params, fast_hello);
- params->fast_hello = hellomult;
- }
- else
- {
- vty_out (vty, "Please specify dead-interval or hello-multiplier%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- SET_IF_PARAM (params, v_wait);
- params->v_wait = seconds;
-
- /* Update timer values in neighbor structure. */
- if (nbr_str)
- {
- struct ospf *ospf;
- if ((ospf = ospf_lookup()))
- {
- oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
- if (oi)
- ospf_nbr_timer_update (oi);
- }
- }
- else
- {
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if ((oi = rn->info))
- ospf_nbr_timer_update (oi);
- }
- return CMD_SUCCESS;
- }
- DEFUN (ip_ospf_dead_interval,
- ip_ospf_dead_interval_addr_cmd,
- "ip ospf dead-interval <1-65535> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Seconds\n"
- "Address of interface\n")
- {
- if (argc == 2)
- return ospf_vty_dead_interval_set (vty, argv[0], argv[1], NULL);
- else
- return ospf_vty_dead_interval_set (vty, argv[0], NULL, NULL);
- }
- ALIAS (ip_ospf_dead_interval,
- ip_ospf_dead_interval_cmd,
- "ip ospf dead-interval <1-65535>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Seconds\n")
- ALIAS (ip_ospf_dead_interval,
- ospf_dead_interval_cmd,
- "ospf dead-interval <1-65535>",
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Seconds\n")
- DEFUN (ip_ospf_dead_interval_minimal,
- ip_ospf_dead_interval_minimal_addr_cmd,
- "ip ospf dead-interval minimal hello-multiplier <1-10> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Minimal 1s dead-interval with fast sub-second hellos\n"
- "Hello multiplier factor\n"
- "Number of Hellos to send each second\n"
- "Address of interface\n")
- {
- if (argc == 2)
- return ospf_vty_dead_interval_set (vty, NULL, argv[1], argv[0]);
- else
- return ospf_vty_dead_interval_set (vty, NULL, NULL, argv[0]);
- }
- ALIAS (ip_ospf_dead_interval_minimal,
- ip_ospf_dead_interval_minimal_cmd,
- "ip ospf dead-interval minimal hello-multiplier <1-10>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Minimal 1s dead-interval with fast sub-second hellos\n"
- "Hello multiplier factor\n"
- "Number of Hellos to send each second\n")
- DEFUN (no_ip_ospf_dead_interval,
- no_ip_ospf_dead_interval_addr_cmd,
- "no ip ospf dead-interval A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
- struct ospf_interface *oi;
- struct route_node *rn;
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, v_wait);
- params->v_wait = OSPF_ROUTER_DEAD_INTERVAL_DEFAULT;
-
- UNSET_IF_PARAM (params, fast_hello);
- params->fast_hello = OSPF_FAST_HELLO_DEFAULT;
-
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- /* Update timer values in neighbor structure. */
- if (argc == 1)
- {
- struct ospf *ospf;
-
- if ((ospf = ospf_lookup()))
- {
- oi = ospf_if_lookup_by_local_addr (ospf, ifp, addr);
- if (oi)
- ospf_nbr_timer_update (oi);
- }
- }
- else
- {
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- if ((oi = rn->info))
- ospf_nbr_timer_update (oi);
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_dead_interval,
- no_ip_ospf_dead_interval_cmd,
- "no ip ospf dead-interval",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n")
- ALIAS (no_ip_ospf_dead_interval,
- no_ospf_dead_interval_cmd,
- "no ospf dead-interval",
- NO_STR
- "OSPF interface commands\n"
- "Interval after which a neighbor is declared dead\n")
- DEFUN (ip_ospf_hello_interval,
- ip_ospf_hello_interval_addr_cmd,
- "ip ospf hello-interval <1-65535> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between HELLO packets\n"
- "Seconds\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- u_int32_t seconds;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- seconds = strtol (argv[0], NULL, 10);
-
- /* HelloInterval range is <1-65535>. */
- if (seconds < 1 || seconds > 65535)
- {
- vty_out (vty, "Hello Interval is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- SET_IF_PARAM (params, v_hello);
- params->v_hello = seconds;
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_hello_interval,
- ip_ospf_hello_interval_cmd,
- "ip ospf hello-interval <1-65535>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between HELLO packets\n"
- "Seconds\n")
- ALIAS (ip_ospf_hello_interval,
- ospf_hello_interval_cmd,
- "ospf hello-interval <1-65535>",
- "OSPF interface commands\n"
- "Time between HELLO packets\n"
- "Seconds\n")
- DEFUN (no_ip_ospf_hello_interval,
- no_ip_ospf_hello_interval_addr_cmd,
- "no ip ospf hello-interval A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between HELLO packets\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, v_hello);
- params->v_hello = OSPF_HELLO_INTERVAL_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_hello_interval,
- no_ip_ospf_hello_interval_cmd,
- "no ip ospf hello-interval",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between HELLO packets\n")
- ALIAS (no_ip_ospf_hello_interval,
- no_ospf_hello_interval_cmd,
- "no ospf hello-interval",
- NO_STR
- "OSPF interface commands\n"
- "Time between HELLO packets\n")
- DEFUN (ip_ospf_network,
- ip_ospf_network_cmd,
- "ip ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
- "IP Information\n"
- "OSPF interface commands\n"
- "Network type\n"
- "Specify OSPF broadcast multi-access network\n"
- "Specify OSPF NBMA network\n"
- "Specify OSPF point-to-multipoint network\n"
- "Specify OSPF point-to-point network\n")
- {
- struct interface *ifp = vty->index;
- int old_type = IF_DEF_PARAMS (ifp)->type;
- struct route_node *rn;
- if (old_type == OSPF_IFTYPE_LOOPBACK)
- {
- vty_out (vty, "This is a loopback interface. Can't set network type.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (strncmp (argv[0], "b", 1) == 0)
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_BROADCAST;
- else if (strncmp (argv[0], "n", 1) == 0)
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_NBMA;
- else if (strncmp (argv[0], "point-to-m", 10) == 0)
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOMULTIPOINT;
- else if (strncmp (argv[0], "point-to-p", 10) == 0)
- IF_DEF_PARAMS (ifp)->type = OSPF_IFTYPE_POINTOPOINT;
- if (IF_DEF_PARAMS (ifp)->type == old_type)
- return CMD_SUCCESS;
- SET_IF_PARAM (IF_DEF_PARAMS (ifp), type);
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
- if (!oi)
- continue;
-
- oi->type = IF_DEF_PARAMS (ifp)->type;
-
- if (oi->state > ISM_Down)
- {
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
- }
- }
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_network,
- ospf_network_cmd,
- "ospf network (broadcast|non-broadcast|point-to-multipoint|point-to-point)",
- "OSPF interface commands\n"
- "Network type\n"
- "Specify OSPF broadcast multi-access network\n"
- "Specify OSPF NBMA network\n"
- "Specify OSPF point-to-multipoint network\n"
- "Specify OSPF point-to-point network\n")
- DEFUN (no_ip_ospf_network,
- no_ip_ospf_network_cmd,
- "no ip ospf network",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Network type\n")
- {
- struct interface *ifp = vty->index;
- int old_type = IF_DEF_PARAMS (ifp)->type;
- struct route_node *rn;
- IF_DEF_PARAMS (ifp)->type = ospf_default_iftype(ifp);
- if (IF_DEF_PARAMS (ifp)->type == old_type)
- return CMD_SUCCESS;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
- if (!oi)
- continue;
-
- oi->type = IF_DEF_PARAMS (ifp)->type;
-
- if (oi->state > ISM_Down)
- {
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceDown);
- OSPF_ISM_EVENT_EXECUTE (oi, ISM_InterfaceUp);
- }
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_network,
- no_ospf_network_cmd,
- "no ospf network",
- NO_STR
- "OSPF interface commands\n"
- "Network type\n")
- DEFUN (ip_ospf_priority,
- ip_ospf_priority_addr_cmd,
- "ip ospf priority <0-255> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Router priority\n"
- "Priority\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- long priority;
- struct route_node *rn;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- priority = strtol (argv[0], NULL, 10);
-
- /* Router Priority range is <0-255>. */
- if (priority < 0 || priority > 255)
- {
- vty_out (vty, "Router Priority is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- SET_IF_PARAM (params, priority);
- params->priority = priority;
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (!oi)
- continue;
-
- if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
- {
- PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
- OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
- }
- }
-
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_priority,
- ip_ospf_priority_cmd,
- "ip ospf priority <0-255>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Router priority\n"
- "Priority\n")
- ALIAS (ip_ospf_priority,
- ospf_priority_cmd,
- "ospf priority <0-255>",
- "OSPF interface commands\n"
- "Router priority\n"
- "Priority\n")
- DEFUN (no_ip_ospf_priority,
- no_ip_ospf_priority_addr_cmd,
- "no ip ospf priority A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Router priority\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct route_node *rn;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, priority);
- params->priority = OSPF_ROUTER_PRIORITY_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
-
- for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
- {
- struct ospf_interface *oi = rn->info;
-
- if (!oi)
- continue;
-
-
- if (PRIORITY (oi) != OSPF_IF_PARAM (oi, priority))
- {
- PRIORITY (oi) = OSPF_IF_PARAM (oi, priority);
- OSPF_ISM_EVENT_SCHEDULE (oi, ISM_NeighborChange);
- }
- }
-
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_priority,
- no_ip_ospf_priority_cmd,
- "no ip ospf priority",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Router priority\n")
- ALIAS (no_ip_ospf_priority,
- no_ospf_priority_cmd,
- "no ospf priority",
- NO_STR
- "OSPF interface commands\n"
- "Router priority\n")
- DEFUN (ip_ospf_retransmit_interval,
- ip_ospf_retransmit_interval_addr_cmd,
- "ip ospf retransmit-interval <3-65535> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n"
- "Seconds\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- u_int32_t seconds;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- seconds = strtol (argv[0], NULL, 10);
- /* Retransmit Interval range is <3-65535>. */
- if (seconds < 3 || seconds > 65535)
- {
- vty_out (vty, "Retransmit Interval is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- SET_IF_PARAM (params, retransmit_interval);
- params->retransmit_interval = seconds;
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_retransmit_interval,
- ip_ospf_retransmit_interval_cmd,
- "ip ospf retransmit-interval <3-65535>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n"
- "Seconds\n")
- ALIAS (ip_ospf_retransmit_interval,
- ospf_retransmit_interval_cmd,
- "ospf retransmit-interval <3-65535>",
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n"
- "Seconds\n")
- DEFUN (no_ip_ospf_retransmit_interval,
- no_ip_ospf_retransmit_interval_addr_cmd,
- "no ip ospf retransmit-interval A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, retransmit_interval);
- params->retransmit_interval = OSPF_RETRANSMIT_INTERVAL_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_retransmit_interval,
- no_ip_ospf_retransmit_interval_cmd,
- "no ip ospf retransmit-interval",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n")
- ALIAS (no_ip_ospf_retransmit_interval,
- no_ospf_retransmit_interval_cmd,
- "no ospf retransmit-interval",
- NO_STR
- "OSPF interface commands\n"
- "Time between retransmitting lost link state advertisements\n")
- DEFUN (ip_ospf_transmit_delay,
- ip_ospf_transmit_delay_addr_cmd,
- "ip ospf transmit-delay <1-65535> A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Link state transmit delay\n"
- "Seconds\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- u_int32_t seconds;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- params = IF_DEF_PARAMS (ifp);
- seconds = strtol (argv[0], NULL, 10);
- /* Transmit Delay range is <1-65535>. */
- if (seconds < 1 || seconds > 65535)
- {
- vty_out (vty, "Transmit Delay is invalid%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argc == 2)
- {
- ret = inet_aton(argv[1], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- SET_IF_PARAM (params, transmit_delay);
- params->transmit_delay = seconds;
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_transmit_delay,
- ip_ospf_transmit_delay_cmd,
- "ip ospf transmit-delay <1-65535>",
- "IP Information\n"
- "OSPF interface commands\n"
- "Link state transmit delay\n"
- "Seconds\n")
- ALIAS (ip_ospf_transmit_delay,
- ospf_transmit_delay_cmd,
- "ospf transmit-delay <1-65535>",
- "OSPF interface commands\n"
- "Link state transmit delay\n"
- "Seconds\n")
- DEFUN (no_ip_ospf_transmit_delay,
- no_ip_ospf_transmit_delay_addr_cmd,
- "no ip ospf transmit-delay A.B.C.D",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Link state transmit delay\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
- struct ospf_if_params *params;
-
- ifp = vty->index;
- params = IF_DEF_PARAMS (ifp);
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_lookup_if_params (ifp, addr);
- if (params == NULL)
- return CMD_SUCCESS;
- }
- UNSET_IF_PARAM (params, transmit_delay);
- params->transmit_delay = OSPF_TRANSMIT_DELAY_DEFAULT;
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_transmit_delay,
- no_ip_ospf_transmit_delay_cmd,
- "no ip ospf transmit-delay",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Link state transmit delay\n")
- ALIAS (no_ip_ospf_transmit_delay,
- no_ospf_transmit_delay_cmd,
- "no ospf transmit-delay",
- NO_STR
- "OSPF interface commands\n"
- "Link state transmit delay\n")
- DEFUN (ip_ospf_area,
- ip_ospf_area_cmd,
- "ip ospf area (A.B.C.D|<0-4294967295>) [A.B.C.D]",
- "IP Information\n"
- "OSPF interface commands\n"
- "Enable OSPF on this interface\n"
- "OSPF area ID in IP address format\n"
- "OSPF area ID as a decimal value\n"
- "Address of interface\n")
- {
- struct interface *ifp = vty->index;
- struct in_addr area_id;
- struct in_addr addr;
- int format;
- struct ospf_if_params *params;
- VTY_GET_OSPF_AREA_ID (area_id, format, argv[0]);
- OSPF_VTY_GET_IF_PARAMS(ifp, params, 1, addr, VTY_SET);
-
- if (OSPF_IF_PARAM_CONFIGURED(params, if_area))
- {
- vty_out (vty, "There is already an interface area statement.%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (memcmp (ifp->name, "VLINK", 5) == 0)
- {
- vty_out (vty, "Cannot enable OSPF on a virtual link.%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- SET_IF_PARAM (params, if_area);
- params->if_area = area_id;
- ospf_interface_area_set (ifp);
- return CMD_SUCCESS;
- }
- DEFUN (no_ip_ospf_area,
- no_ip_ospf_area_cmd,
- "no ip ospf area [A.B.C.D]",
- NO_STR
- "IP Information\n"
- "OSPF interface commands\n"
- "Disable OSPF on this interface\n"
- "Address of interface\n")
- {
- struct interface *ifp = vty->index;
- struct ospf_if_params *params;
- struct in_addr addr;
- OSPF_VTY_GET_IF_PARAMS(ifp, params, 0, addr, VTY_UNSET);
-
- if (!OSPF_IF_PARAM_CONFIGURED(params, if_area))
- return CMD_SUCCESS;
-
- OSPF_VTY_PARAM_UNSET(params, if_area, ifp, addr);
-
- ospf_interface_area_unset (ifp);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_redistribute_source,
- ospf_redistribute_source_cmd,
- "redistribute " QUAGGA_REDIST_STR_OSPFD
- " {metric <0-16777214>|metric-type (1|2)|route-map WORD}",
- REDIST_STR
- QUAGGA_REDIST_HELP_STR_OSPFD
- "Metric for redistributed routes\n"
- "OSPF default metric\n"
- "OSPF exterior metric type for redistributed routes\n"
- "Set OSPF External Type 1 metrics\n"
- "Set OSPF External Type 2 metrics\n"
- "Route map reference\n"
- "Pointer to route-map entries\n")
- {
- struct ospf *ospf = vty->index;
- int source;
- int type = -1;
- int metric = -1;
- if (argc < 4)
- return CMD_WARNING; /* should not happen */
- /* Get distribute source. */
- source = proto_redistnum(AFI_IP, argv[0]);
- if (source < 0 || source == ZEBRA_ROUTE_OSPF)
- return CMD_WARNING;
- /* Get metric value. */
- if (argv[1] != NULL)
- if (!str2metric (argv[1], &metric))
- return CMD_WARNING;
- /* Get metric type. */
- if (argv[2] != NULL)
- if (!str2metric_type (argv[2], &type))
- return CMD_WARNING;
- if (argv[3] != NULL)
- ospf_routemap_set (ospf, source, argv[3]);
- else
- ospf_routemap_unset (ospf, source);
- return ospf_redistribute_set (ospf, source, type, metric);
- }
- DEFUN (no_ospf_redistribute_source,
- no_ospf_redistribute_source_cmd,
- "no redistribute " QUAGGA_REDIST_STR_OSPFD,
- NO_STR
- REDIST_STR
- QUAGGA_REDIST_HELP_STR_OSPFD)
- {
- struct ospf *ospf = vty->index;
- int source;
- source = proto_redistnum(AFI_IP, argv[0]);
- if (source < 0 || source == ZEBRA_ROUTE_OSPF)
- return CMD_WARNING;
- ospf_routemap_unset (ospf, source);
- return ospf_redistribute_unset (ospf, source);
- }
- DEFUN (ospf_distribute_list_out,
- ospf_distribute_list_out_cmd,
- "distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD,
- "Filter networks in routing updates\n"
- "Access-list name\n"
- OUT_STR
- QUAGGA_REDIST_HELP_STR_OSPFD)
- {
- struct ospf *ospf = vty->index;
- int source;
- /* Get distribute source. */
- source = proto_redistnum(AFI_IP, argv[1]);
- if (source < 0 || source == ZEBRA_ROUTE_OSPF)
- return CMD_WARNING;
- return ospf_distribute_list_out_set (ospf, source, argv[0]);
- }
- DEFUN (no_ospf_distribute_list_out,
- no_ospf_distribute_list_out_cmd,
- "no distribute-list WORD out " QUAGGA_REDIST_STR_OSPFD,
- NO_STR
- "Filter networks in routing updates\n"
- "Access-list name\n"
- OUT_STR
- QUAGGA_REDIST_HELP_STR_OSPFD)
- {
- struct ospf *ospf = vty->index;
- int source;
- source = proto_redistnum(AFI_IP, argv[1]);
- if (source < 0 || source == ZEBRA_ROUTE_OSPF)
- return CMD_WARNING;
- return ospf_distribute_list_out_unset (ospf, source, argv[0]);
- }
- /* Default information originate. */
- DEFUN (ospf_default_information_originate,
- ospf_default_information_originate_cmd,
- "default-information originate "
- "{always|metric <0-16777214>|metric-type (1|2)|route-map WORD}",
- "Control distribution of default information\n"
- "Distribute a default route\n"
- "Always advertise default route\n"
- "OSPF default metric\n"
- "OSPF metric\n"
- "OSPF metric type for default routes\n"
- "Set OSPF External Type 1 metrics\n"
- "Set OSPF External Type 2 metrics\n"
- "Route map reference\n"
- "Pointer to route-map entries\n")
- {
- struct ospf *ospf = vty->index;
- int default_originate = DEFAULT_ORIGINATE_ZEBRA;
- int type = -1;
- int metric = -1;
- if (argc < 4)
- return CMD_WARNING; /* this should not happen */
- /* Check whether "always" was specified */
- if (argv[0] != NULL)
- default_originate = DEFAULT_ORIGINATE_ALWAYS;
- /* Get metric value. */
- if (argv[1] != NULL)
- if (!str2metric (argv[1], &metric))
- return CMD_WARNING;
- /* Get metric type. */
- if (argv[2] != NULL)
- if (!str2metric_type (argv[2], &type))
- return CMD_WARNING;
- if (argv[3] != NULL)
- ospf_routemap_set (ospf, DEFAULT_ROUTE, argv[3]);
- else
- ospf_routemap_unset (ospf, DEFAULT_ROUTE);
- return ospf_redistribute_default_set (ospf, default_originate,
- type, metric);
- }
- DEFUN (no_ospf_default_information_originate,
- no_ospf_default_information_originate_cmd,
- "no default-information originate",
- NO_STR
- "Control distribution of default information\n"
- "Distribute a default route\n")
- {
- struct ospf *ospf = vty->index;
- struct prefix_ipv4 p;
-
- p.family = AF_INET;
- p.prefix.s_addr = 0;
- p.prefixlen = 0;
- ospf_external_lsa_flush (ospf, DEFAULT_ROUTE, &p, 0);
- if (EXTERNAL_INFO (DEFAULT_ROUTE)) {
- ospf_external_info_delete (DEFAULT_ROUTE, p);
- route_table_finish (EXTERNAL_INFO (DEFAULT_ROUTE));
- EXTERNAL_INFO (DEFAULT_ROUTE) = NULL;
- }
- ospf_routemap_unset (ospf, DEFAULT_ROUTE);
- return ospf_redistribute_default_unset (ospf);
- }
- DEFUN (ospf_default_metric,
- ospf_default_metric_cmd,
- "default-metric <0-16777214>",
- "Set metric of redistributed routes\n"
- "Default metric\n")
- {
- struct ospf *ospf = vty->index;
- int metric = -1;
- if (!str2metric (argv[0], &metric))
- return CMD_WARNING;
- ospf->default_metric = metric;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_default_metric,
- no_ospf_default_metric_cmd,
- "no default-metric",
- NO_STR
- "Set metric of redistributed routes\n")
- {
- struct ospf *ospf = vty->index;
- ospf->default_metric = -1;
- return CMD_SUCCESS;
- }
- ALIAS (no_ospf_default_metric,
- no_ospf_default_metric_val_cmd,
- "no default-metric <0-16777214>",
- NO_STR
- "Set metric of redistributed routes\n"
- "Default metric\n")
- DEFUN (ospf_distance,
- ospf_distance_cmd,
- "distance <1-255>",
- "Define an administrative distance\n"
- "OSPF Administrative distance\n")
- {
- struct ospf *ospf = vty->index;
- ospf->distance_all = atoi (argv[0]);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_distance,
- no_ospf_distance_cmd,
- "no distance <1-255>",
- NO_STR
- "Define an administrative distance\n"
- "OSPF Administrative distance\n")
- {
- struct ospf *ospf = vty->index;
- ospf->distance_all = 0;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_distance_ospf,
- no_ospf_distance_ospf_cmd,
- "no distance ospf {intra-area|inter-area|external}",
- NO_STR
- "Define an administrative distance\n"
- "OSPF Administrative distance\n"
- "OSPF Distance\n"
- "Intra-area routes\n"
- "Inter-area routes\n"
- "External routes\n")
- {
- struct ospf *ospf = vty->index;
- if (argc < 3)
- return CMD_WARNING;
- if (argv[0] != NULL)
- ospf->distance_intra = 0;
- if (argv[1] != NULL)
- ospf->distance_inter = 0;
- if (argv[2] != NULL)
- ospf->distance_external = 0;
- if (argv[0] || argv[1] || argv[2])
- return CMD_SUCCESS;
- /* If no arguments are given, clear all distance information */
- ospf->distance_intra = 0;
- ospf->distance_inter = 0;
- ospf->distance_external = 0;
- return CMD_SUCCESS;
- }
- DEFUN (ospf_distance_ospf,
- ospf_distance_ospf_cmd,
- "distance ospf "
- "{intra-area <1-255>|inter-area <1-255>|external <1-255>}",
- "Define an administrative distance\n"
- "OSPF Administrative distance\n"
- "Intra-area routes\n"
- "Distance for intra-area routes\n"
- "Inter-area routes\n"
- "Distance for inter-area routes\n"
- "External routes\n"
- "Distance for external routes\n")
- {
- struct ospf *ospf = vty->index;
- if (argc < 3) /* should not happen */
- return CMD_WARNING;
- if (!argv[0] && !argv[1] && !argv[2])
- {
- vty_out(vty, "%% Command incomplete. (Arguments required)%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- if (argv[0] != NULL)
- ospf->distance_intra = atoi(argv[0]);
- if (argv[1] != NULL)
- ospf->distance_inter = atoi(argv[1]);
- if (argv[2] != NULL)
- ospf->distance_external = atoi(argv[2]);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_distance_source,
- ospf_distance_source_cmd,
- "distance <1-255> A.B.C.D/M",
- "Administrative distance\n"
- "Distance value\n"
- "IP source prefix\n")
- {
- struct ospf *ospf = vty->index;
- ospf_distance_set (vty, ospf, argv[0], argv[1], NULL);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_distance_source,
- no_ospf_distance_source_cmd,
- "no distance <1-255> A.B.C.D/M",
- NO_STR
- "Administrative distance\n"
- "Distance value\n"
- "IP source prefix\n")
- {
- struct ospf *ospf = vty->index;
- ospf_distance_unset (vty, ospf, argv[0], argv[1], NULL);
- return CMD_SUCCESS;
- }
- DEFUN (ospf_distance_source_access_list,
- ospf_distance_source_access_list_cmd,
- "distance <1-255> A.B.C.D/M WORD",
- "Administrative distance\n"
- "Distance value\n"
- "IP source prefix\n"
- "Access list name\n")
- {
- struct ospf *ospf = vty->index;
- ospf_distance_set (vty, ospf, argv[0], argv[1], argv[2]);
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_distance_source_access_list,
- no_ospf_distance_source_access_list_cmd,
- "no distance <1-255> A.B.C.D/M WORD",
- NO_STR
- "Administrative distance\n"
- "Distance value\n"
- "IP source prefix\n"
- "Access list name\n")
- {
- struct ospf *ospf = vty->index;
- ospf_distance_unset (vty, ospf, argv[0], argv[1], argv[2]);
- return CMD_SUCCESS;
- }
- DEFUN (ip_ospf_mtu_ignore,
- ip_ospf_mtu_ignore_addr_cmd,
- "ip ospf mtu-ignore A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Disable mtu mismatch detection\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
-
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- params->mtu_ignore = 1;
- if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- SET_IF_PARAM (params, mtu_ignore);
- else
- {
- UNSET_IF_PARAM (params, mtu_ignore);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- return CMD_SUCCESS;
- }
- ALIAS (ip_ospf_mtu_ignore,
- ip_ospf_mtu_ignore_cmd,
- "ip ospf mtu-ignore",
- "IP Information\n"
- "OSPF interface commands\n"
- "Disable mtu mismatch detection\n")
-
- DEFUN (no_ip_ospf_mtu_ignore,
- no_ip_ospf_mtu_ignore_addr_cmd,
- "no ip ospf mtu-ignore A.B.C.D",
- "IP Information\n"
- "OSPF interface commands\n"
- "Disable mtu mismatch detection\n"
- "Address of interface")
- {
- struct interface *ifp = vty->index;
- struct in_addr addr;
- int ret;
-
- struct ospf_if_params *params;
- params = IF_DEF_PARAMS (ifp);
-
- if (argc == 1)
- {
- ret = inet_aton(argv[0], &addr);
- if (!ret)
- {
- vty_out (vty, "Please specify interface address by A.B.C.D%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- params = ospf_get_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- params->mtu_ignore = 0;
- if (params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- SET_IF_PARAM (params, mtu_ignore);
- else
- {
- UNSET_IF_PARAM (params, mtu_ignore);
- if (params != IF_DEF_PARAMS (ifp))
- {
- ospf_free_if_params (ifp, addr);
- ospf_if_update_params (ifp, addr);
- }
- }
- return CMD_SUCCESS;
- }
- ALIAS (no_ip_ospf_mtu_ignore,
- no_ip_ospf_mtu_ignore_cmd,
- "no ip ospf mtu-ignore",
- "IP Information\n"
- "OSPF interface commands\n"
- "Disable mtu mismatch detection\n")
- DEFUN (ospf_max_metric_router_lsa_admin,
- ospf_max_metric_router_lsa_admin_cmd,
- "max-metric router-lsa administrative",
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Administratively applied, for an indefinite period\n")
- {
- struct listnode *ln;
- struct ospf_area *area;
- struct ospf *ospf = vty->index;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- SET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
-
- if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED))
- ospf_router_lsa_update_area (area);
- }
- /* Allows for areas configured later to get the property */
- ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_SET;
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_max_metric_router_lsa_admin,
- no_ospf_max_metric_router_lsa_admin_cmd,
- "no max-metric router-lsa administrative",
- NO_STR
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Administratively applied, for an indefinite period\n")
- {
- struct listnode *ln;
- struct ospf_area *area;
- struct ospf *ospf = vty->index;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED);
-
- /* Don't trample on the start-up stub timer */
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED)
- && !area->t_stub_router)
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
- ospf_router_lsa_update_area (area);
- }
- }
- ospf->stub_router_admin_set = OSPF_STUB_ROUTER_ADMINISTRATIVE_UNSET;
- return CMD_SUCCESS;
- }
- DEFUN (ospf_max_metric_router_lsa_startup,
- ospf_max_metric_router_lsa_startup_cmd,
- "max-metric router-lsa on-startup <5-86400>",
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Automatically advertise stub Router-LSA on startup of OSPF\n"
- "Time (seconds) to advertise self as stub-router\n")
- {
- unsigned int seconds;
- struct ospf *ospf = vty->index;
-
- if (argc != 1)
- {
- vty_out (vty, "%% Must supply stub-router period");
- return CMD_WARNING;
- }
-
- VTY_GET_INTEGER ("stub-router startup period", seconds, argv[0]);
-
- ospf->stub_router_startup_time = seconds;
-
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_max_metric_router_lsa_startup,
- no_ospf_max_metric_router_lsa_startup_cmd,
- "no max-metric router-lsa on-startup",
- NO_STR
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Automatically advertise stub Router-LSA on startup of OSPF\n")
- {
- struct listnode *ln;
- struct ospf_area *area;
- struct ospf *ospf = vty->index;
-
- ospf->stub_router_startup_time = OSPF_STUB_ROUTER_UNCONFIGURED;
-
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- SET_FLAG (area->stub_router_state, OSPF_AREA_WAS_START_STUB_ROUTED);
- OSPF_TIMER_OFF (area->t_stub_router);
-
- /* Don't trample on admin stub routed */
- if (!CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- {
- UNSET_FLAG (area->stub_router_state, OSPF_AREA_IS_STUB_ROUTED);
- ospf_router_lsa_update_area (area);
- }
- }
- return CMD_SUCCESS;
- }
- DEFUN (ospf_max_metric_router_lsa_shutdown,
- ospf_max_metric_router_lsa_shutdown_cmd,
- "max-metric router-lsa on-shutdown <5-86400>",
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Advertise stub-router prior to full shutdown of OSPF\n"
- "Time (seconds) to wait till full shutdown\n")
- {
- unsigned int seconds;
- struct ospf *ospf = vty->index;
-
- if (argc != 1)
- {
- vty_out (vty, "%% Must supply stub-router shutdown period");
- return CMD_WARNING;
- }
-
- VTY_GET_INTEGER ("stub-router shutdown wait period", seconds, argv[0]);
-
- ospf->stub_router_shutdown_time = seconds;
-
- return CMD_SUCCESS;
- }
- DEFUN (no_ospf_max_metric_router_lsa_shutdown,
- no_ospf_max_metric_router_lsa_shutdown_cmd,
- "no max-metric router-lsa on-shutdown",
- NO_STR
- "OSPF maximum / infinite-distance metric\n"
- "Advertise own Router-LSA with infinite distance (stub router)\n"
- "Advertise stub-router prior to full shutdown of OSPF\n")
- {
- struct ospf *ospf = vty->index;
-
- ospf->stub_router_shutdown_time = OSPF_STUB_ROUTER_UNCONFIGURED;
-
- return CMD_SUCCESS;
- }
- static void
- config_write_stub_router (struct vty *vty, struct ospf *ospf)
- {
- struct listnode *ln;
- struct ospf_area *area;
-
- if (ospf->stub_router_startup_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " max-metric router-lsa on-startup %u%s",
- ospf->stub_router_startup_time, VTY_NEWLINE);
- if (ospf->stub_router_shutdown_time != OSPF_STUB_ROUTER_UNCONFIGURED)
- vty_out (vty, " max-metric router-lsa on-shutdown %u%s",
- ospf->stub_router_shutdown_time, VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, ln, area))
- {
- if (CHECK_FLAG (area->stub_router_state, OSPF_AREA_ADMIN_STUB_ROUTED))
- {
- vty_out (vty, " max-metric router-lsa administrative%s",
- VTY_NEWLINE);
- break;
- }
- }
- return;
- }
- static void
- show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)
- {
- struct route_node *rn;
- struct ospf_route *or;
- struct listnode *pnode, *pnnode;
- struct ospf_path *path;
- vty_out (vty, "============ OSPF network routing table ============%s",
- VTY_NEWLINE);
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((or = rn->info) != NULL)
- {
- char buf1[19];
- snprintf (buf1, 19, "%s/%d",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
- switch (or->path_type)
- {
- case OSPF_PATH_INTER_AREA:
- if (or->type == OSPF_DESTINATION_NETWORK)
- vty_out (vty, "N IA %-18s [%d] area: %s%s", buf1, or->cost,
- inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
- else if (or->type == OSPF_DESTINATION_DISCARD)
- vty_out (vty, "D IA %-18s Discard entry%s", buf1, VTY_NEWLINE);
- break;
- case OSPF_PATH_INTRA_AREA:
- vty_out (vty, "N %-18s [%d] area: %s%s", buf1, or->cost,
- inet_ntoa (or->u.std.area_id), VTY_NEWLINE);
- break;
- default:
- break;
- }
- if (or->type == OSPF_DESTINATION_NETWORK)
- for (ALL_LIST_ELEMENTS (or->paths, pnode, pnnode, path))
- {
- if (if_lookup_by_index(path->ifindex))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s%s",
- "", ifindex2ifname (path->ifindex), VTY_NEWLINE);
- else
- vty_out (vty, "%24s via %s, %s%s", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex), VTY_NEWLINE);
- }
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- static void
- show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)
- {
- struct route_node *rn;
- struct ospf_route *or;
- struct listnode *pnode;
- struct listnode *node;
- struct ospf_path *path;
- vty_out (vty, "============ OSPF router routing table =============%s",
- VTY_NEWLINE);
- for (rn = route_top (rtrs); rn; rn = route_next (rn))
- if (rn->info)
- {
- int flag = 0;
- vty_out (vty, "R %-15s ", inet_ntoa (rn->p.u.prefix4));
- for (ALL_LIST_ELEMENTS_RO ((struct list *)rn->info, node, or))
- {
- if (flag++)
- vty_out (vty, "%24s", "");
- /* Show path. */
- vty_out (vty, "%s [%d] area: %s",
- (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : " "),
- or->cost, inet_ntoa (or->u.std.area_id));
- /* Show flags. */
- vty_out (vty, "%s%s%s",
- (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""),
- (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""),
- VTY_NEWLINE);
-
- for (ALL_LIST_ELEMENTS_RO (or->paths, pnode, path))
- {
- if (if_lookup_by_index(path->ifindex))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s%s",
- "", ifindex2ifname (path->ifindex),
- VTY_NEWLINE);
- else
- vty_out (vty, "%24s via %s, %s%s", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex),
- VTY_NEWLINE);
- }
- }
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- static void
- show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)
- {
- struct route_node *rn;
- struct ospf_route *er;
- struct listnode *pnode, *pnnode;
- struct ospf_path *path;
- vty_out (vty, "============ OSPF external routing table ===========%s",
- VTY_NEWLINE);
- for (rn = route_top (rt); rn; rn = route_next (rn))
- if ((er = rn->info) != NULL)
- {
- char buf1[19];
- snprintf (buf1, 19, "%s/%d",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen);
- switch (er->path_type)
- {
- case OSPF_PATH_TYPE1_EXTERNAL:
- vty_out (vty, "N E1 %-18s [%d] tag: %u%s", buf1,
- er->cost, er->u.ext.tag, VTY_NEWLINE);
- break;
- case OSPF_PATH_TYPE2_EXTERNAL:
- vty_out (vty, "N E2 %-18s [%d/%d] tag: %u%s", buf1, er->cost,
- er->u.ext.type2_cost, er->u.ext.tag, VTY_NEWLINE);
- break;
- }
- for (ALL_LIST_ELEMENTS (er->paths, pnode, pnnode, path))
- {
- if (if_lookup_by_index(path->ifindex))
- {
- if (path->nexthop.s_addr == 0)
- vty_out (vty, "%24s directly attached to %s%s",
- "", ifindex2ifname (path->ifindex), VTY_NEWLINE);
- else
- vty_out (vty, "%24s via %s, %s%s", "",
- inet_ntoa (path->nexthop),
- ifindex2ifname (path->ifindex),
- VTY_NEWLINE);
- }
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- DEFUN (show_ip_ospf_border_routers,
- show_ip_ospf_border_routers_cmd,
- "show ip ospf border-routers",
- SHOW_STR
- IP_STR
- "show all the ABR's and ASBR's\n"
- "for this area\n")
- {
- struct ospf *ospf;
- if ((ospf = ospf_lookup ()) == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- if (ospf->new_table == NULL)
- {
- vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- /* Show Network routes.
- show_ip_ospf_route_network (vty, ospf->new_table); */
- /* Show Router routes. */
- show_ip_ospf_route_router (vty, ospf->new_rtrs);
- return CMD_SUCCESS;
- }
- DEFUN (show_ip_ospf_route,
- show_ip_ospf_route_cmd,
- "show ip ospf route",
- SHOW_STR
- IP_STR
- "OSPF information\n"
- "OSPF routing table\n")
- {
- struct ospf *ospf;
- if ((ospf = ospf_lookup ()) == NULL)
- {
- vty_out (vty, " OSPF Routing Process not enabled%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- if (ospf->new_table == NULL)
- {
- vty_out (vty, "No OSPF routing information exist%s", VTY_NEWLINE);
- return CMD_SUCCESS;
- }
- /* Show Network routes. */
- show_ip_ospf_route_network (vty, ospf->new_table);
- /* Show Router routes. */
- show_ip_ospf_route_router (vty, ospf->new_rtrs);
- /* Show AS External routes. */
- show_ip_ospf_route_external (vty, ospf->old_external_route);
- return CMD_SUCCESS;
- }
- const char *ospf_abr_type_str[] =
- {
- "unknown",
- "standard",
- "ibm",
- "cisco",
- "shortcut"
- };
- const char *ospf_shortcut_mode_str[] =
- {
- "default",
- "enable",
- "disable"
- };
- static void
- area_id2str (char *buf, int length, struct ospf_area *area)
- {
- memset (buf, 0, length);
- if (area->format == OSPF_AREA_ID_FORMAT_ADDRESS)
- strncpy (buf, inet_ntoa (area->area_id), length);
- else
- sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr));
- }
- const char *ospf_int_type_str[] =
- {
- "unknown", /* should never be used. */
- "point-to-point",
- "broadcast",
- "non-broadcast",
- "point-to-multipoint",
- "virtual-link", /* should never be used. */
- "loopback"
- };
- /* Configuration write function for ospfd. */
- static int
- config_write_interface (struct vty *vty)
- {
- struct listnode *n1, *n2;
- struct interface *ifp;
- struct crypt_key *ck;
- int write = 0;
- struct route_node *rn = NULL;
- struct ospf_if_params *params;
- for (ALL_LIST_ELEMENTS_RO (iflist, n1, ifp))
- {
- if (memcmp (ifp->name, "VLINK", 5) == 0)
- continue;
- vty_out (vty, "!%s", VTY_NEWLINE);
- vty_out (vty, "interface %s%s", ifp->name,
- VTY_NEWLINE);
- if (ifp->desc)
- vty_out (vty, " description %s%s", ifp->desc,
- VTY_NEWLINE);
- write++;
- params = IF_DEF_PARAMS (ifp);
-
- do {
- /* Interface Network print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, type) &&
- params->type != OSPF_IFTYPE_LOOPBACK)
- {
- if (params->type != ospf_default_iftype(ifp))
- {
- vty_out (vty, " ip ospf network %s",
- ospf_int_type_str[params->type]);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
-
- /* OSPF interface authentication print */
- if (OSPF_IF_PARAM_CONFIGURED (params, auth_type) &&
- params->auth_type != OSPF_AUTH_NOTSET)
- {
- const char *auth_str;
-
- /* Translation tables are not that much help here due to syntax
- of the simple option */
- switch (params->auth_type)
- {
-
- case OSPF_AUTH_NULL:
- auth_str = " null";
- break;
-
- case OSPF_AUTH_SIMPLE:
- auth_str = "";
- break;
-
- case OSPF_AUTH_CRYPTOGRAPHIC:
- auth_str = " message-digest";
- break;
-
- default:
- auth_str = "";
- break;
- }
-
- vty_out (vty, " ip ospf authentication%s", auth_str);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- /* Simple Authentication Password print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, auth_simple) &&
- params->auth_simple[0] != '\0')
- {
- vty_out (vty, " ip ospf authentication-key %s",
- params->auth_simple);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Cryptographic Authentication Key print. */
- for (ALL_LIST_ELEMENTS_RO (params->auth_crypt, n2, ck))
- {
- vty_out (vty, " ip ospf message-digest-key %d md5 %s",
- ck->key_id, ck->auth_key);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Interface Output Cost print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, output_cost_cmd))
- {
- vty_out (vty, " ip ospf cost %u", params->output_cost_cmd);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Hello Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, v_hello) &&
- params->v_hello != OSPF_HELLO_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf hello-interval %u", params->v_hello);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
-
- /* Router Dead Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, v_wait) &&
- params->v_wait != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf dead-interval ");
-
- /* fast hello ? */
- if (OSPF_IF_PARAM_CONFIGURED (params, fast_hello))
- vty_out (vty, "minimal hello-multiplier %d",
- params->fast_hello);
- else
- vty_out (vty, "%u", params->v_wait);
-
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Router Priority print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, priority) &&
- params->priority != OSPF_ROUTER_PRIORITY_DEFAULT)
- {
- vty_out (vty, " ip ospf priority %u", params->priority);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Retransmit Interval print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, retransmit_interval) &&
- params->retransmit_interval != OSPF_RETRANSMIT_INTERVAL_DEFAULT)
- {
- vty_out (vty, " ip ospf retransmit-interval %u",
- params->retransmit_interval);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Transmit Delay print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, transmit_delay) &&
- params->transmit_delay != OSPF_TRANSMIT_DELAY_DEFAULT)
- {
- vty_out (vty, " ip ospf transmit-delay %u", params->transmit_delay);
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- /* Area print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, if_area))
- {
- vty_out (vty, " ip ospf area %s", inet_ntoa (params->if_area));
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- /* MTU ignore print. */
- if (OSPF_IF_PARAM_CONFIGURED (params, mtu_ignore) &&
- params->mtu_ignore != OSPF_MTU_IGNORE_DEFAULT)
- {
- if (params->mtu_ignore == 0)
- vty_out (vty, " no ip ospf mtu-ignore");
- else
- vty_out (vty, " ip ospf mtu-ignore");
- if (params != IF_DEF_PARAMS (ifp))
- vty_out (vty, " %s", inet_ntoa (rn->p.u.prefix4));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- while (1)
- {
- if (rn == NULL)
- rn = route_top (IF_OIFS_PARAMS (ifp));
- else
- rn = route_next (rn);
- if (rn == NULL)
- break;
- params = rn->info;
- if (params != NULL)
- break;
- }
- } while (rn);
-
- ospf_opaque_config_write_if (vty, ifp);
- }
- return write;
- }
- static int
- config_write_network_area (struct vty *vty, struct ospf *ospf)
- {
- struct route_node *rn;
- u_char buf[INET_ADDRSTRLEN];
- /* `network area' print. */
- for (rn = route_top (ospf->networks); rn; rn = route_next (rn))
- if (rn->info)
- {
- struct ospf_network *n = rn->info;
- memset (buf, 0, INET_ADDRSTRLEN);
- /* Create Area ID string by specified Area ID format. */
- if (n->format == OSPF_AREA_ID_FORMAT_ADDRESS)
- strncpy ((char *) buf, inet_ntoa (n->area_id), INET_ADDRSTRLEN);
- else
- sprintf ((char *) buf, "%lu",
- (unsigned long int) ntohl (n->area_id.s_addr));
- /* Network print. */
- vty_out (vty, " network %s/%d area %s%s",
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
- buf, VTY_NEWLINE);
- }
- return 0;
- }
- static int
- config_write_ospf_area (struct vty *vty, struct ospf *ospf)
- {
- struct listnode *node;
- struct ospf_area *area;
- u_char buf[INET_ADDRSTRLEN];
- /* Area configuration print. */
- for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))
- {
- struct route_node *rn1;
- area_id2str ((char *) buf, INET_ADDRSTRLEN, area);
- if (area->auth_type != OSPF_AUTH_NULL)
- {
- if (area->auth_type == OSPF_AUTH_SIMPLE)
- vty_out (vty, " area %s authentication%s", buf, VTY_NEWLINE);
- else
- vty_out (vty, " area %s authentication message-digest%s",
- buf, VTY_NEWLINE);
- }
- if (area->shortcut_configured != OSPF_SHORTCUT_DEFAULT)
- vty_out (vty, " area %s shortcut %s%s", buf,
- ospf_shortcut_mode_str[area->shortcut_configured],
- VTY_NEWLINE);
- if ((area->external_routing == OSPF_AREA_STUB)
- || (area->external_routing == OSPF_AREA_NSSA)
- )
- {
- if (area->external_routing == OSPF_AREA_STUB)
- vty_out (vty, " area %s stub", buf);
- else if (area->external_routing == OSPF_AREA_NSSA)
- {
- vty_out (vty, " area %s nssa", buf);
- switch (area->NSSATranslatorRole)
- {
- case OSPF_NSSA_ROLE_NEVER:
- vty_out (vty, " translate-never");
- break;
- case OSPF_NSSA_ROLE_ALWAYS:
- vty_out (vty, " translate-always");
- break;
- case OSPF_NSSA_ROLE_CANDIDATE:
- default:
- vty_out (vty, " translate-candidate");
- }
- }
- if (area->no_summary)
- vty_out (vty, " no-summary");
- vty_out (vty, "%s", VTY_NEWLINE);
- if (area->default_cost != 1)
- vty_out (vty, " area %s default-cost %d%s", buf,
- area->default_cost, VTY_NEWLINE);
- }
- for (rn1 = route_top (area->ranges); rn1; rn1 = route_next (rn1))
- if (rn1->info)
- {
- struct ospf_area_range *range = rn1->info;
- vty_out (vty, " area %s range %s/%d", buf,
- inet_ntoa (rn1->p.u.prefix4), rn1->p.prefixlen);
- if (range->cost_config != OSPF_AREA_RANGE_COST_UNSPEC)
- vty_out (vty, " cost %d", range->cost_config);
- if (!CHECK_FLAG (range->flags, OSPF_AREA_RANGE_ADVERTISE))
- vty_out (vty, " not-advertise");
- if (CHECK_FLAG (range->flags, OSPF_AREA_RANGE_SUBSTITUTE))
- vty_out (vty, " substitute %s/%d",
- inet_ntoa (range->subst_addr), range->subst_masklen);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- if (EXPORT_NAME (area))
- vty_out (vty, " area %s export-list %s%s", buf,
- EXPORT_NAME (area), VTY_NEWLINE);
- if (IMPORT_NAME (area))
- vty_out (vty, " area %s import-list %s%s", buf,
- IMPORT_NAME (area), VTY_NEWLINE);
- if (PREFIX_NAME_IN (area))
- vty_out (vty, " area %s filter-list prefix %s in%s", buf,
- PREFIX_NAME_IN (area), VTY_NEWLINE);
- if (PREFIX_NAME_OUT (area))
- vty_out (vty, " area %s filter-list prefix %s out%s", buf,
- PREFIX_NAME_OUT (area), VTY_NEWLINE);
- }
- return 0;
- }
- static int
- config_write_ospf_nbr_nbma (struct vty *vty, struct ospf *ospf)
- {
- struct ospf_nbr_nbma *nbr_nbma;
- struct route_node *rn;
- /* Static Neighbor configuration print. */
- for (rn = route_top (ospf->nbr_nbma); rn; rn = route_next (rn))
- if ((nbr_nbma = rn->info))
- {
- vty_out (vty, " neighbor %s", inet_ntoa (nbr_nbma->addr));
- if (nbr_nbma->priority != OSPF_NEIGHBOR_PRIORITY_DEFAULT)
- vty_out (vty, " priority %d", nbr_nbma->priority);
- if (nbr_nbma->v_poll != OSPF_POLL_INTERVAL_DEFAULT)
- vty_out (vty, " poll-interval %d", nbr_nbma->v_poll);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- static int
- config_write_virtual_link (struct vty *vty, struct ospf *ospf)
- {
- struct listnode *node;
- struct ospf_vl_data *vl_data;
- u_char buf[INET_ADDRSTRLEN];
- /* Virtual-Link print */
- for (ALL_LIST_ELEMENTS_RO (ospf->vlinks, node, vl_data))
- {
- struct listnode *n2;
- struct crypt_key *ck;
- struct ospf_interface *oi;
- if (vl_data != NULL)
- {
- memset (buf, 0, INET_ADDRSTRLEN);
-
- if (vl_data->format == OSPF_AREA_ID_FORMAT_ADDRESS)
- strncpy ((char *) buf, inet_ntoa (vl_data->vl_area_id), INET_ADDRSTRLEN);
- else
- sprintf ((char *) buf, "%lu",
- (unsigned long int) ntohl (vl_data->vl_area_id.s_addr));
- oi = vl_data->vl_oi;
- /* timers */
- if (OSPF_IF_PARAM (oi, v_hello) != OSPF_HELLO_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, v_wait) != OSPF_ROUTER_DEAD_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, retransmit_interval) != OSPF_RETRANSMIT_INTERVAL_DEFAULT ||
- OSPF_IF_PARAM (oi, transmit_delay) != OSPF_TRANSMIT_DELAY_DEFAULT)
- vty_out (vty, " area %s virtual-link %s hello-interval %d retransmit-interval %d transmit-delay %d dead-interval %d%s",
- buf,
- inet_ntoa (vl_data->vl_peer),
- OSPF_IF_PARAM (oi, v_hello),
- OSPF_IF_PARAM (oi, retransmit_interval),
- OSPF_IF_PARAM (oi, transmit_delay),
- OSPF_IF_PARAM (oi, v_wait),
- VTY_NEWLINE);
- else
- vty_out (vty, " area %s virtual-link %s%s", buf,
- inet_ntoa (vl_data->vl_peer), VTY_NEWLINE);
- /* Auth key */
- if (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple[0] != '\0')
- vty_out (vty, " area %s virtual-link %s authentication-key %s%s",
- buf,
- inet_ntoa (vl_data->vl_peer),
- IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple,
- VTY_NEWLINE);
- /* md5 keys */
- for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt,
- n2, ck))
- vty_out (vty, " area %s virtual-link %s"
- " message-digest-key %d md5 %s%s",
- buf,
- inet_ntoa (vl_data->vl_peer),
- ck->key_id, ck->auth_key, VTY_NEWLINE);
-
- }
- }
- return 0;
- }
- static int
- config_write_ospf_redistribute (struct vty *vty, struct ospf *ospf)
- {
- int type;
- /* redistribute print. */
- for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
- if (type != zclient->redist_default &&
- vrf_bitmap_check (zclient->redist[type], VRF_DEFAULT))
- {
- vty_out (vty, " redistribute %s", zebra_route_string(type));
- if (ospf->dmetric[type].value >= 0)
- vty_out (vty, " metric %d", ospf->dmetric[type].value);
-
- if (ospf->dmetric[type].type == EXTERNAL_METRIC_TYPE_1)
- vty_out (vty, " metric-type 1");
- if (ROUTEMAP_NAME (ospf, type))
- vty_out (vty, " route-map %s", ROUTEMAP_NAME (ospf, type));
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- return 0;
- }
- static int
- config_write_ospf_default_metric (struct vty *vty, struct ospf *ospf)
- {
- if (ospf->default_metric != -1)
- vty_out (vty, " default-metric %d%s", ospf->default_metric,
- VTY_NEWLINE);
- return 0;
- }
- static int
- config_write_ospf_distribute (struct vty *vty, struct ospf *ospf)
- {
- int type;
- if (ospf)
- {
- /* distribute-list print. */
- for (type = 0; type < ZEBRA_ROUTE_MAX; type++)
- if (DISTRIBUTE_NAME (ospf, type))
- vty_out (vty, " distribute-list %s out %s%s",
- DISTRIBUTE_NAME (ospf, type),
- zebra_route_string(type), VTY_NEWLINE);
- /* default-information print. */
- if (ospf->default_originate != DEFAULT_ORIGINATE_NONE)
- {
- vty_out (vty, " default-information originate");
- if (ospf->default_originate == DEFAULT_ORIGINATE_ALWAYS)
- vty_out (vty, " always");
- if (ospf->dmetric[DEFAULT_ROUTE].value >= 0)
- vty_out (vty, " metric %d",
- ospf->dmetric[DEFAULT_ROUTE].value);
- if (ospf->dmetric[DEFAULT_ROUTE].type == EXTERNAL_METRIC_TYPE_1)
- vty_out (vty, " metric-type 1");
- if (ROUTEMAP_NAME (ospf, DEFAULT_ROUTE))
- vty_out (vty, " route-map %s",
- ROUTEMAP_NAME (ospf, DEFAULT_ROUTE));
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- return 0;
- }
- static int
- config_write_ospf_distance (struct vty *vty, struct ospf *ospf)
- {
- struct route_node *rn;
- struct ospf_distance *odistance;
- if (ospf->distance_all)
- vty_out (vty, " distance %d%s", ospf->distance_all, VTY_NEWLINE);
- if (ospf->distance_intra
- || ospf->distance_inter
- || ospf->distance_external)
- {
- vty_out (vty, " distance ospf");
- if (ospf->distance_intra)
- vty_out (vty, " intra-area %d", ospf->distance_intra);
- if (ospf->distance_inter)
- vty_out (vty, " inter-area %d", ospf->distance_inter);
- if (ospf->distance_external)
- vty_out (vty, " external %d", ospf->distance_external);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- for (rn = route_top (ospf->distance_table); rn; rn = route_next (rn))
- if ((odistance = rn->info) != NULL)
- {
- vty_out (vty, " distance %d %s/%d %s%s", odistance->distance,
- inet_ntoa (rn->p.u.prefix4), rn->p.prefixlen,
- odistance->access_list ? odistance->access_list : "",
- VTY_NEWLINE);
- }
- return 0;
- }
- /* OSPF configuration write function. */
- static int
- ospf_config_write (struct vty *vty)
- {
- struct ospf *ospf;
- struct interface *ifp;
- struct ospf_interface *oi;
- struct listnode *node;
- int write = 0;
- ospf = ospf_lookup ();
- if (ospf != NULL)
- {
- /* `router ospf' print. */
- vty_out (vty, "router ospf%s", VTY_NEWLINE);
- write++;
- if (!ospf->networks)
- return write;
- /* Router ID print. */
- if (ospf->router_id_static.s_addr != 0)
- vty_out (vty, " ospf router-id %s%s",
- inet_ntoa (ospf->router_id_static), VTY_NEWLINE);
- /* ABR type print. */
- if (ospf->abr_type != OSPF_ABR_DEFAULT)
- vty_out (vty, " ospf abr-type %s%s",
- ospf_abr_type_str[ospf->abr_type], VTY_NEWLINE);
- /* log-adjacency-changes flag print. */
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_CHANGES))
- {
- vty_out(vty, " log-adjacency-changes");
- if (CHECK_FLAG(ospf->config, OSPF_LOG_ADJACENCY_DETAIL))
- vty_out(vty, " detail");
- vty_out(vty, "%s", VTY_NEWLINE);
- }
- /* RFC1583 compatibility flag print -- Compatible with CISCO 12.1. */
- if (CHECK_FLAG (ospf->config, OSPF_RFC1583_COMPATIBLE))
- vty_out (vty, " compatible rfc1583%s", VTY_NEWLINE);
- /* auto-cost reference-bandwidth configuration. */
- if (ospf->ref_bandwidth != OSPF_DEFAULT_REF_BANDWIDTH)
- {
- vty_out (vty, "! Important: ensure reference bandwidth "
- "is consistent across all routers%s", VTY_NEWLINE);
- vty_out (vty, " auto-cost reference-bandwidth %d%s",
- ospf->ref_bandwidth / 1000, VTY_NEWLINE);
- }
- /* LSA timers */
- if (ospf->min_ls_interval != OSPF_MIN_LS_INTERVAL)
- vty_out (vty, " timers throttle lsa all %d%s",
- ospf->min_ls_interval, VTY_NEWLINE);
- if (ospf->min_ls_arrival != OSPF_MIN_LS_ARRIVAL)
- vty_out (vty, " timers lsa arrival %d%s",
- ospf->min_ls_arrival, VTY_NEWLINE);
- /* SPF timers print. */
- if (ospf->spf_delay != OSPF_SPF_DELAY_DEFAULT ||
- ospf->spf_holdtime != OSPF_SPF_HOLDTIME_DEFAULT ||
- ospf->spf_max_holdtime != OSPF_SPF_MAX_HOLDTIME_DEFAULT)
- vty_out (vty, " timers throttle spf %d %d %d%s",
- ospf->spf_delay, ospf->spf_holdtime,
- ospf->spf_max_holdtime, VTY_NEWLINE);
-
- /* Max-metric router-lsa print */
- config_write_stub_router (vty, ospf);
-
- /* SPF refresh parameters print. */
- if (ospf->lsa_refresh_interval != OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
- vty_out (vty, " refresh timer %d%s",
- ospf->lsa_refresh_interval, VTY_NEWLINE);
- /* Redistribute information print. */
- config_write_ospf_redistribute (vty, ospf);
- /* passive-interface print. */
- if (ospf->passive_interface_default == OSPF_IF_PASSIVE)
- vty_out (vty, " passive-interface default%s", VTY_NEWLINE);
-
- for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp))
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (ifp), passive_interface)
- && IF_DEF_PARAMS (ifp)->passive_interface !=
- ospf->passive_interface_default)
- {
- vty_out (vty, " %spassive-interface %s%s",
- IF_DEF_PARAMS (ifp)->passive_interface ? "" : "no ",
- ifp->name, VTY_NEWLINE);
- }
- for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))
- {
- if (!OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface))
- continue;
- if (OSPF_IF_PARAM_CONFIGURED (IF_DEF_PARAMS (oi->ifp),
- passive_interface))
- {
- if (oi->params->passive_interface == IF_DEF_PARAMS (oi->ifp)->passive_interface)
- continue;
- }
- else if (oi->params->passive_interface == ospf->passive_interface_default)
- continue;
-
- vty_out (vty, " %spassive-interface %s %s%s",
- oi->params->passive_interface ? "" : "no ",
- oi->ifp->name,
- inet_ntoa (oi->address->u.prefix4), VTY_NEWLINE);
- }
-
- /* Network area print. */
- config_write_network_area (vty, ospf);
- /* Area config print. */
- config_write_ospf_area (vty, ospf);
- /* static neighbor print. */
- config_write_ospf_nbr_nbma (vty, ospf);
- /* Virtual-Link print. */
- config_write_virtual_link (vty, ospf);
- /* Default metric configuration. */
- config_write_ospf_default_metric (vty, ospf);
- /* Distribute-list and default-information print. */
- config_write_ospf_distribute (vty, ospf);
- /* Distance configuration. */
- config_write_ospf_distance (vty, ospf);
- ospf_opaque_config_write_router (vty, ospf);
- }
- return write;
- }
- void
- ospf_vty_show_init (void)
- {
- /* "show ip ospf" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_cmd);
- /* "show ip ospf database" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_database_type_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_type_id_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_type_id_adv_router_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_type_adv_router_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_type_id_self_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_type_self_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_database_cmd);
- /* "show ip ospf interface" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_interface_cmd);
- /* "show ip ospf neighbor" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_int_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_id_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_all_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_detail_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_neighbor_all_cmd);
- /* "show ip ospf route" commands. */
- install_element (VIEW_NODE, &show_ip_ospf_route_cmd);
- install_element (VIEW_NODE, &show_ip_ospf_border_routers_cmd);
- }
- /* ospfd's interface node. */
- static struct cmd_node interface_node =
- {
- INTERFACE_NODE,
- "%s(config-if)# ",
- 1
- };
- /* Initialization of OSPF interface. */
- static void
- ospf_vty_if_init (void)
- {
- /* Install interface node. */
- install_node (&interface_node, config_write_interface);
- install_element (CONFIG_NODE, &interface_cmd);
- install_element (CONFIG_NODE, &no_interface_cmd);
- install_default (INTERFACE_NODE);
- /* "description" commands. */
- install_element (INTERFACE_NODE, &interface_desc_cmd);
- install_element (INTERFACE_NODE, &no_interface_desc_cmd);
- /* "ip ospf authentication" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_authentication_args_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_args_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_key_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_authentication_key_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_authentication_key_cmd);
- /* "ip ospf message-digest-key" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_message_digest_key_cmd);
- /* "ip ospf cost" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_cost_u32_inet4_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_cost_u32_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_cost_u32_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_cost_u32_inet4_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_cost_inet4_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_cost_cmd);
- /* "ip ospf mtu-ignore" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_mtu_ignore_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_mtu_ignore_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_mtu_ignore_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_mtu_ignore_cmd);
- /* "ip ospf dead-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_minimal_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_dead_interval_minimal_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_dead_interval_cmd);
-
- /* "ip ospf hello-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_hello_interval_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_hello_interval_cmd);
- /* "ip ospf network" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_network_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_network_cmd);
- /* "ip ospf priority" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_priority_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_priority_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_priority_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_priority_cmd);
- /* "ip ospf retransmit-interval" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_retransmit_interval_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_retransmit_interval_cmd);
- /* "ip ospf transmit-delay" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_addr_cmd);
- install_element (INTERFACE_NODE, &ip_ospf_transmit_delay_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_addr_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_transmit_delay_cmd);
- /* "ip ospf area" commands. */
- install_element (INTERFACE_NODE, &ip_ospf_area_cmd);
- install_element (INTERFACE_NODE, &no_ip_ospf_area_cmd);
- /* These commands are compatibitliy for previous version. */
- install_element (INTERFACE_NODE, &ospf_authentication_key_cmd);
- install_element (INTERFACE_NODE, &no_ospf_authentication_key_cmd);
- install_element (INTERFACE_NODE, &ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &no_ospf_message_digest_key_cmd);
- install_element (INTERFACE_NODE, &ospf_cost_u32_cmd);
- install_element (INTERFACE_NODE, &ospf_cost_u32_inet4_cmd);
- install_element (INTERFACE_NODE, &no_ospf_cost_cmd);
- install_element (INTERFACE_NODE, &no_ospf_cost_u32_cmd);
- install_element (INTERFACE_NODE, &no_ospf_cost_u32_inet4_cmd);
- install_element (INTERFACE_NODE, &no_ospf_cost_inet4_cmd);
- install_element (INTERFACE_NODE, &ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_dead_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_hello_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_network_cmd);
- install_element (INTERFACE_NODE, &no_ospf_network_cmd);
- install_element (INTERFACE_NODE, &ospf_priority_cmd);
- install_element (INTERFACE_NODE, &no_ospf_priority_cmd);
- install_element (INTERFACE_NODE, &ospf_retransmit_interval_cmd);
- install_element (INTERFACE_NODE, &no_ospf_retransmit_interval_cmd);
- install_element (INTERFACE_NODE, &ospf_transmit_delay_cmd);
- install_element (INTERFACE_NODE, &no_ospf_transmit_delay_cmd);
- }
- static void
- ospf_vty_zebra_init (void)
- {
- install_element (OSPF_NODE, &ospf_redistribute_source_cmd);
- install_element (OSPF_NODE, &no_ospf_redistribute_source_cmd);
- install_element (OSPF_NODE, &ospf_distribute_list_out_cmd);
- install_element (OSPF_NODE, &no_ospf_distribute_list_out_cmd);
- install_element (OSPF_NODE, &ospf_default_information_originate_cmd);
- install_element (OSPF_NODE, &no_ospf_default_information_originate_cmd);
- install_element (OSPF_NODE, &ospf_default_metric_cmd);
- install_element (OSPF_NODE, &no_ospf_default_metric_cmd);
- install_element (OSPF_NODE, &no_ospf_default_metric_val_cmd);
- install_element (OSPF_NODE, &ospf_distance_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_ospf_cmd);
- install_element (OSPF_NODE, &ospf_distance_ospf_cmd);
- #if 0
- install_element (OSPF_NODE, &ospf_distance_source_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_source_cmd);
- install_element (OSPF_NODE, &ospf_distance_source_access_list_cmd);
- install_element (OSPF_NODE, &no_ospf_distance_source_access_list_cmd);
- #endif /* 0 */
- }
- static struct cmd_node ospf_node =
- {
- OSPF_NODE,
- "%s(config-router)# ",
- 1
- };
- /* Install OSPF related vty commands. */
- void
- ospf_vty_init (void)
- {
- /* Install ospf top node. */
- install_node (&ospf_node, ospf_config_write);
- /* "router ospf" commands. */
- install_element (CONFIG_NODE, &router_ospf_cmd);
- install_element (CONFIG_NODE, &no_router_ospf_cmd);
- install_default (OSPF_NODE);
- /* "ospf router-id" commands. */
- install_element (OSPF_NODE, &ospf_router_id_cmd);
- install_element (OSPF_NODE, &no_ospf_router_id_cmd);
- install_element (OSPF_NODE, &router_ospf_id_cmd);
- install_element (OSPF_NODE, &no_router_ospf_id_cmd);
- /* "passive-interface" commands. */
- install_element (OSPF_NODE, &ospf_passive_interface_addr_cmd);
- install_element (OSPF_NODE, &ospf_passive_interface_cmd);
- install_element (OSPF_NODE, &ospf_passive_interface_default_cmd);
- install_element (OSPF_NODE, &no_ospf_passive_interface_addr_cmd);
- install_element (OSPF_NODE, &no_ospf_passive_interface_cmd);
- install_element (OSPF_NODE, &no_ospf_passive_interface_default_cmd);
- /* "ospf abr-type" commands. */
- install_element (OSPF_NODE, &ospf_abr_type_cmd);
- install_element (OSPF_NODE, &no_ospf_abr_type_cmd);
- /* "ospf log-adjacency-changes" commands. */
- install_element (OSPF_NODE, &ospf_log_adjacency_changes_cmd);
- install_element (OSPF_NODE, &ospf_log_adjacency_changes_detail_cmd);
- install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_cmd);
- install_element (OSPF_NODE, &no_ospf_log_adjacency_changes_detail_cmd);
- /* "ospf rfc1583-compatible" commands. */
- install_element (OSPF_NODE, &ospf_rfc1583_flag_cmd);
- install_element (OSPF_NODE, &no_ospf_rfc1583_flag_cmd);
- install_element (OSPF_NODE, &ospf_compatible_rfc1583_cmd);
- install_element (OSPF_NODE, &no_ospf_compatible_rfc1583_cmd);
- /* "network area" commands. */
- install_element (OSPF_NODE, &ospf_network_area_cmd);
- install_element (OSPF_NODE, &no_ospf_network_area_cmd);
- /* "area authentication" commands. */
- install_element (OSPF_NODE, &ospf_area_authentication_message_digest_cmd);
- install_element (OSPF_NODE, &ospf_area_authentication_cmd);
- install_element (OSPF_NODE, &no_ospf_area_authentication_cmd);
- /* "area range" commands. */
- install_element (OSPF_NODE, &ospf_area_range_cmd);
- install_element (OSPF_NODE, &ospf_area_range_advertise_cmd);
- install_element (OSPF_NODE, &ospf_area_range_cost_cmd);
- install_element (OSPF_NODE, &ospf_area_range_advertise_cost_cmd);
- install_element (OSPF_NODE, &ospf_area_range_not_advertise_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_advertise_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_cost_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_advertise_cost_cmd);
- install_element (OSPF_NODE, &ospf_area_range_substitute_cmd);
- install_element (OSPF_NODE, &no_ospf_area_range_substitute_cmd);
- /* "area virtual-link" commands. */
- install_element (OSPF_NODE, &ospf_area_vlink_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_param1_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_param1_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_param2_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_param2_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_param3_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_param3_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_param4_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_param4_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_md5_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_md5_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authkey_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_authkey_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_authkey_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_authkey_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_authkey_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_args_md5_cmd);
- install_element (OSPF_NODE, &ospf_area_vlink_authtype_md5_cmd);
- install_element (OSPF_NODE, &no_ospf_area_vlink_authtype_md5_cmd);
- /* "area stub" commands. */
- install_element (OSPF_NODE, &ospf_area_stub_no_summary_cmd);
- install_element (OSPF_NODE, &ospf_area_stub_cmd);
- install_element (OSPF_NODE, &no_ospf_area_stub_no_summary_cmd);
- install_element (OSPF_NODE, &no_ospf_area_stub_cmd);
- /* "area nssa" commands. */
- install_element (OSPF_NODE, &ospf_area_nssa_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_translate_no_summary_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_translate_cmd);
- install_element (OSPF_NODE, &ospf_area_nssa_no_summary_cmd);
- install_element (OSPF_NODE, &no_ospf_area_nssa_cmd);
- install_element (OSPF_NODE, &no_ospf_area_nssa_no_summary_cmd);
- install_element (OSPF_NODE, &ospf_area_default_cost_cmd);
- install_element (OSPF_NODE, &no_ospf_area_default_cost_cmd);
- install_element (OSPF_NODE, &ospf_area_shortcut_cmd);
- install_element (OSPF_NODE, &no_ospf_area_shortcut_cmd);
- install_element (OSPF_NODE, &ospf_area_export_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_export_list_cmd);
- install_element (OSPF_NODE, &ospf_area_filter_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_filter_list_cmd);
- install_element (OSPF_NODE, &ospf_area_import_list_cmd);
- install_element (OSPF_NODE, &no_ospf_area_import_list_cmd);
-
- /* LSA timer commands */
- install_element (OSPF_NODE, &ospf_timers_min_ls_interval_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_min_ls_interval_cmd);
- install_element (OSPF_NODE, &ospf_timers_min_ls_arrival_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_min_ls_arrival_cmd);
- /* SPF timer commands */
- install_element (OSPF_NODE, &ospf_timers_spf_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_spf_cmd);
- install_element (OSPF_NODE, &ospf_timers_throttle_spf_cmd);
- install_element (OSPF_NODE, &no_ospf_timers_throttle_spf_cmd);
-
- /* refresh timer commands */
- install_element (OSPF_NODE, &ospf_refresh_timer_cmd);
- install_element (OSPF_NODE, &no_ospf_refresh_timer_val_cmd);
- install_element (OSPF_NODE, &no_ospf_refresh_timer_cmd);
-
- /* max-metric commands */
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_admin_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_admin_cmd);
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_startup_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_startup_cmd);
- install_element (OSPF_NODE, &ospf_max_metric_router_lsa_shutdown_cmd);
- install_element (OSPF_NODE, &no_ospf_max_metric_router_lsa_shutdown_cmd);
-
- /* reference bandwidth commands */
- install_element (OSPF_NODE, &ospf_auto_cost_reference_bandwidth_cmd);
- install_element (OSPF_NODE, &no_ospf_auto_cost_reference_bandwidth_cmd);
- /* "neighbor" commands. */
- install_element (OSPF_NODE, &ospf_neighbor_cmd);
- install_element (OSPF_NODE, &ospf_neighbor_priority_poll_interval_cmd);
- install_element (OSPF_NODE, &ospf_neighbor_priority_cmd);
- install_element (OSPF_NODE, &ospf_neighbor_poll_interval_cmd);
- install_element (OSPF_NODE, &ospf_neighbor_poll_interval_priority_cmd);
- install_element (OSPF_NODE, &no_ospf_neighbor_cmd);
- install_element (OSPF_NODE, &no_ospf_neighbor_priority_cmd);
- install_element (OSPF_NODE, &no_ospf_neighbor_poll_interval_cmd);
- /* Init interface related vty commands. */
- ospf_vty_if_init ();
- /* Init zebra related vty commands. */
- ospf_vty_zebra_init ();
- }
|