📄 draft-ietf-pim-sm-bsr-03.ps
字号:
(routers surrounded by an admin-scope boundary)72 355.8 Q 5.5(.T)-.715 G(he boundary speci\214es a range of multicast)-5.5 E(addresses that will not be forw)72 368.8 Q(arded into or out of the scoped re)-.11 E 2.75(gion. This)-.165 F(complicates BSR)2.75 E(because we do not w)72 381.8 Q(ant a PIM router within the scoped re)-.11 E(gion to use an RP outside the scoped)-.165 E(re)72 394.8 Q(gion \(or vice-v)-.165 E 2.75(ersa\). Thus)-.165 F(we need to modify the basic mechanism to ensure that this doesn')2.75 E(t)-.198 E(happen - this is done by electing a BSR for e)72 407.8 Q-.165(ve)-.275 G(ry admin-scope re).165 E(gion within a PIM domain, and)-.165 E(also a global BSR for the whole PIM domain.)72 420.8 Q(C-RPs typically re)5.5 E(gister multiple times; once to)-.165 E(the BSR of e)72 433.8 Q -.165(ve)-.275 G(ry admin scope zone the C-RP is in.).165 E -.165(Fo)5.5 G 2.75(rt).165G(he remainder of this o)-2.75 E -.165(ve)-.165 G(rvie).165 E 2.75(ww)-.275 G 2.75(ew)-2.75 G(ill)-2.75 E(ignore admin-scope re)72 446.8 Q(gions, and concentrate on the global BSR and its role.)-.165 E -.44(Wi)5.5 G(thin each scope).44 E(zone, the BSR for that zone acts in a similar manner to ho)72 459.8 Q2.75(wt)-.275 G(he global BSR acts for the whole)-2.75 E(domain.)72472.8 Q(There are four basic phases to the BSR mechanism \(although in \practice all phases may by)72 489.4 Q(occurring simultaneously\):)72502.4 Q/F1 11/Times-Bold@0 SF(1.)72 519 Q F0(BSR election.)16.75 E(Each Candidate-BSR originates bootstrap messages \(BSMs\).)5.5 E(Ev)5.5E(ery BSM)-.165 E(contains a BSR priority \214eld.)97 532 Q(Routers within the domain \215ood the BSMs throughout the)5.5 E 2.75(domain. A)97 545 R(C-BSR that hears about a higher)2.75 E(-priority C-BSR than itself then suppresses its)-.22 E(sending of further BSMs for some period of time.)97 558 Q(The single remaining C-BSR becomes)5.5 E(the elected BSR, and its BSMs\ inform all the other routers in the domain that it is the)97 571 Q(elected BSR.)97 584 Q F1(2.)72 600.6 Q F0(C-RP adv)16.75 E 2.75(ertisement. Each)-.165 F(Candidate-RP within a domain sends periodic Candidate-RP-)2.75 E(Adv)97613.6 Q(ertisement \(C-RP-Adv\) messages to the elected BSR.)-.165 E(In this w)5.5 E(ay)-.11 E 2.75(,t)-.715 G(he BSR learns about)-2.75 E(possible RPs that are currently up and reachable.)97 626.6 Q F1(3.)72643.2 Q F0(C-RP-Set F)16.75 E 2.75(ormation. The)-.165 F(BSR selects a subset of the C-RPs that it has heard C-RP-Adv)2.75 E(messages from to form the RP-Set.)97 656.2 Q(In general it should do this in such a w)5.5 E(ay that the RP-)-.11 E(Set is neither too lar)97 669.2 Q(ge to inform all the routers in the \domain about, nor too small so that)-.198 E(load is o)97 682.2 Q -.165(ve)-.165 G(rly concentrated on some RPs.).165 E(It should also attempt to produce an RP-Set that)5.5 E(does not change frequently)97 695.2 Q(.)-.715 E F1(4.)72 711.8 Q F0(RP-Set Flooding.)16.75 E(In future bootstrap messages, the BSR includes the RP-Set information.)5.5 E(As bootstrap messages are \215ooded rapidly through the domain, t\his ensures that the RP-Set)97 724.8 Q(Fenner/Handle)72 769 Q(y/K)-.165E 188.515(ermode/Thaler Section)-.275 F 2.75(1.1. [P)2.75 F(age 4])-.165E EP%%Page: 5 5%%BeginPageSetupBP%%EndPageSetup/F0 11/Times-Roman@0 SF(INTERNET)72 49 Q 72.802(-DRAFT Expires:)-1.012 F(August 2003)2.75 E(February 2003)103.569 E(rapidly reaches all the routers in the domain.)97 85 Q(BSMs are originated periodically to ensure)5.5 E(consistenc)97 98 Q2.75(ya)-.165 G(fter f)-2.75 E(ailure restoration.)-.11 E(In the follo)72 114.6 Q(wing sections we discuss more details about BSR for global s\cope and for admin)-.275 E(scoping, before specifying the protocol starting in section 2.)72 127.6Q/F1 11/Times-Bold@0 SF(1.2.)72 153.6 Q/F2 13/Times-Bold@0 SF(Ov)5.5 E(er)-.13 E(view of Bootstrap and RP Disco)-.13 E -.13(ve)-.13 G(ry f).13E(or Global Scope)-.325 E F0 2.75(As)72 170.2 S(mall set of routers fro\m a domain are con\214gured as candidate bootstrap routers \(C-BSRs\) a\nd,)-2.75 E(through a simple election mechanism, a single BSR is select\ed for that domain. A set of routers)72 183.2 Q(within a domain are als\o con\214gured as candidate RPs \(C-RPs\); typically these will be the \same)72 196.2 Q(routers that are con\214gured as C-BSRs.)72 209.2 Q(Candidate RPs periodically unicast Candidate-RP-)5.5 E(Adv)72 222.2 Q(ertisement messages \(C-RP-Advs\) to the BSR of that domain, adv)-.165E(ertising their willingness to)-.165 E(be an RP)72 235.2 Q 2.75(.AC)-1.221 G(-RP-Adv message includes the address of the adv)-2.75 E(ertising C-RP)-.165 E 2.75(,a)-1.221 G 2.75(sw)-2.75 G(ell as an)-2.75E(optional list of group addresses and a mask length \214elds, indicati\ng the group pre\214x\(es\) for which)72 248.2 Q(the candidac)72 261.2 Q2.75(yi)-.165 G 2.75(sa)-2.75 G(dv)-2.75 E(ertised. The BSR then includ\es a set of these Candidate-RPs \(the RP-Set\),)-.165 E(along with their corresponding group pre\214x)72 274.2 Q(es, in Bootstrap messages it periodically originates.)-.165 E(Bootstrap messages are distrib)72 287.2 Q(uted hop-by-hop throughout the domain.)-.22 E(All the PIM routers in the domain recei)72 313.2 Q .33 -.165(ve a)-.275H(nd store Bootstrap messages originated by the BSR.).165 E(When a DR recei)72 326.2 Q -.165(ve)-.275 G 2.75(sa).165 G 2.75(ni)-2.75 G(ndication of local membership \(typically from IGMP [4] or MLD \[1]\) or)-2.75 E 2.75(ad)72 339.2 S(ata pack)-2.75 E(et from a directly\ connected host, for a group for which it has no forw)-.11 E(arding state, the)-.11 E(DR uses a hash function to map the group addr\ess to one of the C-RPs from the RP-Set whose)72 352.2 Q(group-pre\214x\ includes the group \(see [3]\). The DR then sends a Join message to)72365.2 Q -.11(wa)-.275 G(rds that RP if).11 E(the local host joined the group, or it Re)72 378.2 Q(gister)-.165 E(-encapsulates and unicasts the data pack)-.22 E(et to the RP)-.11 E(if the local host sent a pack)72 391.2 Q(et to the group.)-.11 E 2.75(AB)72 417.2 S(ootstrap message indicates li)-2.75 E -.165(ve)-.275 G(ness of the RPs included therein.).165 E(If an RP is included in the)5.5 E(message, then it is tagged as `up' at the routers; RPs not includ\ed in the message are remo)72 430.2 Q -.165(ve)-.165 G(d).165 E(from the list of RPs o)72 443.2 Q -.165(ve)-.165 G 2.75(rw).165 G(hich\ the hash algorithm acts. Each router continues to use the contents)-2.75 E(of the most recently recei)72 456.2 Q -.165(ve)-.275 G 2.75(dB).165 G(ootstrap message from the BSR until it accepts a ne)-2.75 E 2.75(wB)-.275 G(ootstrap)-2.75 E(message.)72 469.2 Q(If a PIM domain become\s partitioned, each area separated from the old BSR will elect its o)72495.2 Q(wn)-.275 E(BSR, which will distrib)72 508.2 Q(ute an RP-Set containing RPs that are reachable within that partition.)-.22 E(When the partition heals, another election will occur automatica\lly and only one of the BSRs will)72 521.2 Q(continue to send out Bootstrap messages. As is e)72 534.2 Q(xpected at the time of a partition or healing,)-.165 E(some disruption in pack)72 547.2 Q(et deli)-.11 E -.165(ve)-.275 G(ry may occur).165 E 2.75(.T)-.605 G(his time will be on the order of the re)-2.75 E(gion')-.165 E(s)-.605 E(round-trip time and the bootstrap router timeout v)72 560.2 Q(alue.)-.275 E F1(1.3.)72 599.2 Q F2(Administrati)5.5 E -.13(ve)-.13 G(ly Scoped Multicast and BSR).13 E F0(Administrati)72 615.8 Q -.165(ve)-.275 G(ly Scoped IP Multicast, as de\214ned in RFC 2365, permits a netw).165 E(ork pro)-.11 E(vider to)-.165 E(con\214gure scope boundaries at multicast routers.)72 628.8 Q(Such a scope boundary consists of a range of)5.5 E(multicast addresses \(e)72 641.8 Q(xpressed as an address and mask\) that the router will not forw)-.165 E(ard across the)-.11 E(boundary)72 654.8 Q 5.5(.F)-.715 G(or correct op\eration, such a scope zone border must be complete and con)-5.665 E-.165(vex)-.44 G 5.5(.B).165 G 2.75(yt)-5.5 G(his)-2.75 E(we mean that \there must be no path from inside the scoped zone to outside it that do\es not pass)72 667.8 Q(through a con\214gured scope border router)72680.8 Q 2.75(,a)-.44 G(nd that the multicast capable path between an)-2.75 E(y)-.165 E(arbitrary pair of multicast routers in the scope zone\ must remain in the zone.)72 693.8 Q -.165(Fo)72 719.8 S 2.75(rP).165 G(IM-SM using BSR to function correctly with admin scoping, there must b\e a BSR and at)-2.75 E(Fenner/Handle)72 769 Q(y/K)-.165 E 188.515(ermode/Thaler Section)-.275 F 2.75(1.3. [P)2.75 F(age 5])-.165 E EP%%Page: 6 6%%BeginPageSetupBP%%EndPageSetup/F0 11/Times-Roman@0 SF(INTERNET)72 49 Q 72.802(-DRAFT Expires:)-1.012 F(August 2003)2.75 E(February 2003)103.569 E(least one C-RP within e)7285 Q -.165(ve)-.275 G(ry admin scope re).165 E 2.75(gion. Admin)-.165 F(scope zone boundaries must be)2.75 E(con\214gured at the Zone Border Routers \(ZBRs\), as the)72 98 Q 2.75(yn)-.165 G(eed to \214lter PIM Join messages that)-2.75 E(might inadv)72 111 Q(ertently cross the border due to error conditions.)-.165 E(In addition, at least one C-BSR)5.5 E(within the admin scope zone must\ be con\214gured to be a C-BSR for the admin scope zone')72 124 Q(s)-.605 E(address range.)72 137 Q 2.75(As)72 163 S(eparate BSR election will then tak)-2.75 E 2.75(ep)-.11 G(lace \(using bootstrap messages\) for e)-2.75 E -.165(ve)-.275 G(ry admin scope).165 E(range \(plus one for the global range\).)72 176 Q(Admin scope ranges are identi\214ed in the bootstrap message)5.5 E(because the group range is mark)72 189 Q(ed \(using the "Admin Scope" bit, pre)-.11 E(viously a "Reserv)-.275 E(ed" bit\) to)-.165 E(indicate that this is an administrati)72 202 Q .33-.165(ve s)-.275 H(cope range, and not just a range that a particular set of RPs).165 E(are con\214gured to handle.)72 215 Q(Such admin scoped bootstrap message pack)72 241 Q(ets are \215ooded in the normal w)-.11 E(ay)-.11 E 2.75(,b)-.715 G(ut will not be)-2.97 E(forw)72 254 Q(arded by another ZBR across the b\oundary for that scope zone \(see Section 3.3 for the)-.11 E(speci\214cs of this\).)72 267 Q 1.76 -.88(We d)72 293 T 2.75(on).88 G(ot require that C-RPs within the scope zone be con\214gured to kno)-2.75 E 2.75(wa)-.275 G(bout the scope zone,)-2.75 E(as the)72 306 Q2.75(yc)-.165 G(an learn of its e)-2.75 E(xistence from bootstrap messages.)-.165 E(Ho)5.5 E(we)-.275 E -.165(ve)-.275 G .88 -.44(r, w).165 H 2.75(er).44 G(ecommend that router)-2.75 E-.165(ve)72 319 S(ndors implement con\214guration options that allo).165E 2.75(waC)-.275 G(-RP to be con\214gured to be a C-RP for)-2.75 E(global scope only)72 332 Q 2.75(,f)-.715 G(or one of more admin scopes only)-2.75 E 2.75(,o)-.715 G 2.75(rf)-2.75G(or all scopes, both global and admin)-2.75 E 2.75(scoped. W)72 345 R2.75(ea)-.88 G(lso recommend that the def)-2.75 E(ault be that a C-RP is a C-RP for all scopes, both global)-.11 E(and admin scoped.)72 358 Q(Unless con\214gured otherwise, C-RPs disco)72 384 Q -.165(ve)-.165 G 2.75(rt).165 G(he e)-2.75 E(xistence of the admin scope zone and its group)-.165 E(range from recei)72 397 Q(ving a bootstrap message from the scope zone')-.275 E 2.75(se)-.605 G(lected BSR containing the)-2.75 E(scope zone')72 410 Q 2.75(sg)-.605 G(roup-range, mark)-2.75 E(ed using the "Admin Scope" bit.)-.11 E 2.75(AC)5.5 G(-RP stores each elected)-2.75 E(BSR')72 423 Q 2.75(sa)-.605 G(ddress and the admin scope range contained in its bootstrap message.)-2.75 E(It separately)5.5 E(unicasts Candidate-RP-Adv)72 436 Q(ertisement messages to the appropriate BSR for e)-.165 E -.165(ve)-.275G(ry admin scope).165 E(range within which it is willing to serv)72 449Q 2.75(ea)-.165 G 2.75(sa)-2.75 G 2.75(nR)-2.75 G -1.221(P.)-2.75 G(All\ PIM routers within a PIM bootstrap domain where admin scope ranges are\ in use must be)72 475 Q(capable of recei)72 488 Q(ving bootstrap messa\ges and storing the winning BSR and RPset for all admin)-.275 E(scope zones that apply)72 501 Q 5.5(.T)-.715 G(hus PIM routers that only implement RFC 2362 \(which only allo)-5.5 E(ws one)-.275 E(BSR per domain\) cannot be used in PIM domains where ad\min scope zones are con\214gured.)72 514 Q/F1 11/Times-Bold@0 SF(2.)72553 Q/F2 14/Times-Bold@0 SF(BSR State and T)5.5 E(imers)-.252 E F0 2.75(AP)72 569.6 S(IM-SM router implementing BSR holds the follo)-2.75 E(wing state in addition to the state needed for)-.275 E(PIM-SM operation:)72 582.6 Q/F3 11/Times-Italic@0 SF(At all r)97 599.2Q(outer)-.495 E(s:)-.11 E F1(List of Acti)122 615.8 Q .22 -.11(ve S)-.11H(cope Zones).11 E F0(Per Scope Zone:)122 632.4 Q F1(Bootstrap State:)147 649 Q F0 7.15<8342>172 665.6 S(ootstrap Router')-7.15 E 2.75(sI)-.605 G 2.75(PA)-2.75 G(ddress)-2.75 E 7.15<8342>172 682.2 S(SR Priority)-7.15 E 7.15<8342>172 698.8 S(ootstrap T)-7.15 E(imer \(BST\))-.385 E(Fenner/Handle)72 769 Q(y/K)-.165 E 196.765(ermode/Thaler Section)-.275 F 2.75(2. [P)2.75 F(age 6])-.165 E EP%%Page: 7 7%%BeginPageSetupBP%%EndPageSetup/F0 11/Times-Roman@0 SF(INTERNET)72 49 Q 72.802(-DRAFT Expires:)-1.012 F(August 2003)2.75 E(February 2003)103.569 E 7.15<834c>172 85 S(ist of Scope Group-Ranges for this BSR)-7.15 E/F1 11/Times-Bold@0 SF(RP Set)122 101.6 Q/F2 11/Times-Italic@0 SF(At a Candidate BSR:)97 118.2Q F0(Per Scope Zone:)122 134.8 Q 7.15<834d>147 151.4 S 2.75(ys)-7.15 G(tate: One of ")-2.75 E F1(Candidate-BSR)A F0(", ")A F1 -.22(Pe)C(nding-BSR).22 E F0(", ")A F1(Elected-BSR)A F0(")A F2(At a r)97 168 Q(outer that is not a Candidate BSR:)-.495 E F0(Per Scope Zone:)122 184.6Q(My state: One of ")147 201.2 Q F1(Accept Any)A F0(", ")A F1(Accept Pr)A(eferr)-.198 E(ed)-.198 E F0(")A F1(Scope-Zone Expiry T)147 217.8 Q(imer: SZT\(Z\))-.198 E F0(Bootstrap state is described in section 3, a\nd the RP Set is described in section 3.4.)72 234.4 Q(The follo)72 260.4Q(wing timers are also required:)-.275 E(At the Bootstrap Router only:)97 277 Q(Per Scope Zone \(Z\):)122 293.6 Q(Per Candidate RP \(C\):)147310.2 Q F1(C-RP Expiry T)172 326.8 Q(imer: CET\(C,Z\))-.198 E F0(At the C-RPs only:)97 343.4 Q F1(C-RP Adv)122 360 Q(ertisement T)-.11 E(imer: CRPT)-.198 E(3.)72 399 Q/F3 14/Times-Bold@0 SF(Bootstrap Router Election and RP-Set Distrib)5.5 E(ution)-.28 E F0-.165(Fo)72 415.6 S 2.75(rs).165 G(implicity)-2.75 E 2.75(,b)-.715 G(oo\tstrap messages \(BSMs\) are used in both the BSR election and the RP-S\et)-2.75 E(distrib)72 428.6 Q(ution mechanisms.)-.22 E(The state-machin\e for bootstrap messages depends on whether or not a router has been co\n\214gured)72 445.2 Q(to be a Candidate-BSR for a particular scope zone.)72 458.2 Q(The per)5.5 E(-scope-zone state-machine for a C-)-.22 E(BSR is gi)72 471.2 Q-.165(ve)-.275 G 2.75(nb).165 G(elo)-2.75 E 1.43 -.715(w, f)-.275 H(ollo).715 E(wed by the state-machine for a router that is not con\214g\ured to be a C-)-.275 E(BSR.)72 484.2 Q(Fenner/Handle)72 769 Q(y/K)-.165E 196.765(ermode/Thaler Section)-.275 F 2.75(3. [P)2.75 F(age 7])-.165 EEP%%Page: 8 8%%BeginPageSetupBP%%EndPageSetup/F0 11/Times-Roman@0 SF(INTERNET)72 49 Q 72.802(-DRAFT Expires:)-1.012 F(August 2003)2.75 E(February 2003)103.569 E/F1 11/Times-Bold@0 SF -.22(Pe)72 85 S -.407(r-).22 G(Scope-Zone Candidate-BSR State Machine).407 E48 307 396 480 -231.825 281 108 339.425 PBEGIN%%BeginDocument: c-bsr.ps%%Creator: idraw%%DocumentFonts: Helvetica%%Pages: 1%%BoundingBox: 48 307 528 588%%EndComments%%BeginIdrawPrologue/arrowhead {0 begintransform originalCTM itransform/taily exch def/tailx exch deftransform originalCTM itransform/tipy exch def/tipx exch def/dy tipy taily sub def/dx tipx tailx sub def/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse defgsaveoriginalCTM setmatrixtipx tipy translateangle rotatenewpatharrowHeight neg arrowWidth 2 div moveto0 0 linetoarrowHeight neg arrowWidth 2 div neg linetopatternNone not {originalCTM setmatrix/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mularrowWidth div def/padtail brushWidth 2 div deftipx tipy translateangle rotatepadtip 0 translatearrowHeight padtip add padtail add arrowHeight div dup scalearrowheadpathifill} ifbrushNone not {originalCTM setmatrixtipx tipy translateangle rotatearrowheadpathistroke} ifgrestoreend} dup 0 9 dict put def/arrowheadpath {newpatharrowHeight neg arrowWidth 2 div moveto0 0 linetoarrowHeight neg arrowWidth 2 div neg lineto} def/leftarrow {0 beginy exch get /taily exch defx exch get /tailx exch defy exch get /tipy exch defx exch get /tipx exch defbrushLeftArrow { tipx tipy tailx taily arrowhead } ifend} dup 0 4 dict put def/rightarrow {0 beginy exch get /tipy exch defx exch get /tipx exch defy exch get /taily exch defx exch get /tailx exch defbrushRightArrow { tipx tipy tailx taily arrowhead } ifend} dup 0 4 dict put def%%EndIdrawPrologue/arrowHeight 8 def/arrowWidth 4 def/IdrawDict 51 dict defIdrawDict begin/reencodeISO {dup dup findfont dup length dict begin{ 1 index /FID ne { def }{ pop pop } ifelse } forall/Encoding ISOLatin1Encoding defcurrentdict end definefont} def/ISOLatin1Encoding [/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] def/Helvetica reencodeISO def/none null def/numGraphicParameters 17 def/stringLimit 65535 def/Begin {savenumGraphicParameters dict begin} def/End {endrestore} def/SetB {dup type /nulltype eq {popfalse /brushRightArrow ideffalse /brushLeftArrow ideftrue /brushNone idef} {/brushDashOffset idef/brushDashArray idef0 ne /brushRightArrow idef0 ne /brushLeftArrow idef/brushWidth ideffalse /brushNone idef} ifelse} def/SetCFg {/fgblue idef/fggreen idef/fgred idef} def/SetCBg {/bgblue idef/bggreen idef/bgred idef} def/SetF {/printSize idef/printFont idef} def/SetP {dup type /nulltype eq {pop true /patternNone idef} {dup -1 eq {/patternGrayLevel idef/patternString idef} {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -