เท่าที่ฉันทราบไม่มีคุณลักษณะใดที่อนุญาตให้สลับตารางเส้นทางสองตารางใน Linux หรือแทนที่กฎการกำหนดเส้นทางที่มีอยู่แบบอะตอมมิก ยังคงเป็นไปได้ที่จะบรรลุสวิตช์อะตอมดังที่แสดงด้านล่าง นักยิมนาสติกทั้งหมดที่มีกฎระดับกลางจะต้องเป็นปรมาณูในทุกขั้นตอนโดยไม่มีข้อแม้ สำหรับเจตนาและวัตถุประสงค์ทั้งหมด the ไปที่
กฎด้านล่างนี้เป็นทางเลือก และ quasi atomicity จะยังคงทำได้หากไม่มีกฎเหล่านี้
อัลกอริทึม:
สถานะก่อนหน้า:
ตารางเส้นทาง 1,000 ถูกเพิ่มแล้วเช่นเดียวกับกฎที่มีการกำหนดค่าตามความชอบ 20,000 ทำการค้นหาในตารางนี้ (ไม่มีตัวเลือกที่นี่เนื่องจากไม่มีข้อมูลนี้จาก OP):
$ ip -4 กฎ
0: จากการค้นหาทั้งหมดในท้องถิ่น
20,000: จากการค้นหาทั้งหมด 1,000
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
การตระเตรียม:
ตารางเส้นทาง 1001 เตรียมไว้ล่วงหน้าด้วยสองสามอย่าง เพิ่มเส้นทาง ip ... ตาราง 1001
คำสั่ง เนื่องจากไม่มีกฎใดกล่าวถึง จึงยังไม่ใช้งาน นั่นคือตารางเส้นทางที่จะแทนที่ตารางเส้นทาง 1,000
เพิ่มกฎการกำหนดเส้นทางใหม่ (ซึ่งอาจมีตัวเลือกเพิ่มเติม) โดยอ้างอิงถึงค่ากำหนดในภายหลัง แต่ข้ามก่อนด้วย ไปที่ กฎ
... ชี้ไปที่กฎปกติที่ค้นหา หลักดังนั้นจึงไม่มีแม้แต่กรณีที่ตารางเส้นทางแบบเก่าจะส่งผลกระทบต่อแพ็กเก็ตบางแพ็กเก็ต และกรณีการกำหนดเส้นทางที่ใหม่กว่าจะส่งผลกระทบต่อแพ็กเก็ตอื่นๆ พร้อมกันก่อนที่สวิตช์จะสิ้นสุดลง สิ่งนี้น่าจะไม่ใช่เรื่องสำคัญและ ไปที่
สามารถข้ามกฎด้านล่างได้หากไม่ต้องการความเป็นปรมาณูที่เข้มงวดเช่นนั้น
กฎ ip เพิ่ม pref 20001 ไปที่ 32766
กฎ ip เพิ่ม pref 20002 ค้นหา 1001
อะตอมเปลี่ยนไปใช้ตารางเส้นทางที่ใหม่กว่าด้วย อื่นๆ ไปที่ กฎที่มีการกำหนดค่าตามความชอบก่อนหน้านี้ซึ่งจะข้ามทั้งกฎสำหรับตารางเส้นทางที่เก่ากว่าและกฎที่ข้ามตารางเส้นทางที่ใหม่กว่า
กฎ ip เพิ่ม pref 19999 ไปที่ 20002
ทำความสะอาด
กฎ ip เดล pref 20,000
กฎ ip เดล pref 20001
กฎ ip เดล pref 19999
ย้อนกลับไปยังสถานะก่อนหน้า: ใช้รหัสตารางเส้นทางและค่ากำหนดกฎการกำหนดเส้นทางก่อนหน้าซ้ำ
ทำซ้ำบนตารางเส้นทาง 1,000 การดำเนินการเดียวกันกับที่ทำก่อนหน้านี้บนตารางเส้นทาง 1001 ในขั้นตอนที่ 2 เริ่มต้นด้วยการล้างข้อมูล
ตารางเส้นทาง ip ล้าง 1,000
เส้นทาง ip เพิ่ม ... ตาราง 1,000
...
รีเซ็ตการตั้งค่าและการอ้างอิงไปยังสถานะก่อนหน้าและล้างข้อมูล
กฎ ip เพิ่ม pref 20,000 ค้นหา 1,000
กฎ ip เดล pref 20002
ตารางล้างเส้นทาง ip 1001
หรือการสลับบทบาทของตาราง 1,000 และ 1,001 ในการวนซ้ำครั้งต่อไปอาจหลีกเลี่ยงการเติมเส้นทางสองครั้ง
ขณะนี้สถานะกลับสู่ขั้นตอนที่ 1
หากเป้าหมายคือการแทนที่ของ หลัก ตารางเส้นทาง ให้พิจารณาว่าเป็นตาราง ID 254 (และเป็นตารางเดียว (ตาม ท้องถิ่น ตารางเส้นทาง) เพื่อรับเส้นทางเคอร์เนลอัตโนมัติ: ใช้ดีกว่าเสมอ noprefixroute
ไปยังที่อยู่และเพิ่มเส้นทางโดย daemon ในกรณีนี้): ไม่มีอะไรเปลี่ยนแปลงมากนักในอัลกอริทึมด้านบน ยกเว้นว่าอาจจะแทนที่ ไปที่ 32766
กับ ไปที่ 32767
หรือการเปลี่ยนแปลงที่คล้ายกัน นอกจากนี้ เส้นทางใหม่ใดๆ ที่เพิ่มในตารางเส้นทาง (แม้ว่าจะไม่ได้อ้างอิง) จำเป็นต้องมีการตรวจสอบความถูกต้องด้วยตัวเองหรือเส้นทางที่มีอยู่แล้วในตารางนี้ หรือกฎที่ใช้งานอยู่ในปัจจุบันและเส้นทางของตารางที่อ้างอิง