Puncte:3

Linux: Este posibil să înlocuiți atomic o tabelă de rutare?

drapel in

Este cu ajutorul rutei IP sau a unui mod similar o modalitate de a înlocui atomic o tabelă de rutare? Aș dori să pregătesc un tabel de rutare și apoi să înlocuiesc un vechi tabel de rutare cu cel nou creat atomic.

regula ip?

ACTUALIZAȚI: Aș dori să pregătesc un tabel de rutare și să îl înlocuiesc pe cel care este activ în prezent ca operație atomică. Trebuie să fac asta din propriul meu demon.

drookie avatar
drapel za
Nu este foarte clar ce faci mai exact. Pentru acțiunile din tabelul de rutare automată, există o mulțime de protocoale de rutare dinamică. Pentru gestionarea pachetelor de rețea în mai multe condiții există și reguli ip. Dar nimeni de fapt nu „înlocuiește” tabelele de rutare.
mlom avatar
drapel in
@drookie: Am actualizat întrebarea.
Puncte:1
drapel cl
A.B

Din câte știu, nu există nicio funcție care să permită comutarea a două tabele de rutare în Linux și nici să înlocuiască atomic o regulă de rutare existentă. Este încă posibil să se realizeze un comutator atomic ca cel prezentat mai jos. Toată gimnastica cu reguli intermediare este să fii cu adevărat atomic la orice pas, fără nicio avertizare. Pentru toate intențiile și scopurile, mergi la regulile de mai jos sunt opționale, iar cvasi-atomicitatea ar fi încă obținută fără ele.

Algoritm:

  1. starea anterioară:

    Tabela de rutare 1000 a fost deja adăugată, precum și o regulă cu preferința 20000 care face o căutare pe acest tabel (nici un selector aici, deoarece această informație nu era disponibilă de la OP):

    $ ip -4 regula
    0: din toate căutările locale
    20000: din toate căutările 1000
    32766: din toate căutările principale
    32767: din toate căutările implicite
    
  2. pregatire:

    Tabelul de rutare 1001 este pregătit în avans cu câteva ip route add... tabelul 1001 comenzi. Deoarece nicio regulă nu face referire la el, este încă inactiv. Acesta este tabelul de rutare care va înlocui tabelul de rutare 1000.

  3. adăugați noua regulă de rutare (care ar putea avea selectori suplimentari) făcând referire la o valoare de preferință ulterioară, dar omiteți-o mai întâi cu un mergi la regulă

    ... arătând spre regula obișnuită care caută în sus principal, deci nu există nici măcar un caz în care tabelul vechi de rutare ar afecta unele pachete, iar cazul de rutare mai nou ar afecta simultan alte pachete înainte ca comutarea să se încheie. Acest lucru ar trebui să nu conteze cu adevărat și mergi la regulile de mai jos ar putea fi omise dacă nu este necesară o asemenea atomicitate strictă.

    regulă ip add pref 20001 du-te la 32766
    regulă ip add pref 20002 căutare 1001
    
  4. comutați atomic la tabelul de rutare mai nou cu un alte mergi la regulă cu o preferință anterioară care va sări peste atât regula pentru tabelul de rutare mai vechi, cât și regula care a sărit peste tabelul de rutare mai nou.

    regulă ip add pref 19999 dus la 20002
    
  5. curăță

    regulă ip del pref 20000
    ip regula del pref 20001
    ip rule del pref 19999
    
  6. reveniți la starea anterioară: reutilizați ID-ul tabelului de rutare anterior și valorile preferințelor regulii de rutare

    • refaceți pe tabelul de rutare 1000 aceleași operațiuni efectuate anterior pe tabelul de rutare 1001 la pasul 2., începând prin a-l spăla

      IP route flush table 1000
      ip route add... tabelul 1000
      ...
      
    • resetați preferința și referința la starea anterioară și curățați

      regulă ip add pref 20000 căutare 1000
      ip rule del pref 20002
      IP route flush table 1001
      

    Sau schimbarea rolurilor tabelelor 1000 și 1001 în următoarea iterație ar evita probabil nevoia de a popula rutele de două ori.

    Statul a revenit acum la pasul 1.

Dacă scopul este înlocuirea principal tabel de rutare, luați în considerare doar că este tabelul ID 254 (și că este singurul tabel (de-a lungul local tabel de rutare) pentru a primi rute automate ale nucleului: mai bine folosiți întotdeauna fărăprefixroute la adrese și adăugarea rutelor de către demon în acest caz): nu prea multe de schimbat în algoritmul de mai sus, cu excepția posibilului înlocuire du-te la 32766 cu du-te la 32767 sau o schimbare similară. De asemenea, orice rută nouă adăugată într-un tabel de rutare (chiar dacă nu este referită) necesită validare cu ea însăși sau rutele deja prezente în acest tabel sau regulile active curente și rutele tabelelor de referință.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.