comprensione dei comandi "ip addr change" e "ip addr replace"


10

Al momento ho i seguenti indirizzi IPv4 associati all'interfaccia eth0 :

T60:~ # ip -V
ip utility, iproute2-ss110629
T60:~ # ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:15:58:2a:84:3e brd ff:ff:ff:ff:ff:ff
    inet 10.11.12.2/24 scope global eth0
    inet 10.11.12.3/24 scope global secondary eth0
    inet 10.11.12.4/24 scope global secondary eth0
    inet6 fe80::215:58ff:fe2a:843e/64 scope link 
       valid_lft forever preferred_lft forever
T60:~ # 

Vorrei sostituire o modificare l'indirizzo del 10.11.12.3/24 in 10.11.12.6/24. Come fare questo? Se eseguo ip addr change 10.11.12.6/24 dev eth0o il ip addr replace 10.11.12.6/24 dev eth010.11.12.6 viene appena aggiunto a eth0. Inoltre, in caso di modifica / sostituzione, la sintassi non dovrebbe essere change/replace from 10.11.12.3/24 to 10.11.12.6/24? So che posso usare il ip addr delcomando, ma come ottenerlo con ip addr changeo ip addr replace?

Risposte:


19

(Mi rendo conto che è una vecchia questione, ma Google mi ha portato qui perché stavo cercando di capire esattamente che cosa changee replacefaccio e come sono diversi).

Credo che entrambi replacee changevengano utilizzati per modificare un indirizzo esistente. Ritenere:

ip addr add 192.168.1.10/32 dev dummy0

Questo mi fa:

32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.10/32 scope global dummy0
       valid_lft forever preferred_lft forever
    inet6 fe80::58ec:58ff:fe4f:d135/64 scope link 
       valid_lft forever preferred_lft forever

Se eseguo nuovamente lo stesso comando, viene visualizzato un errore:

# ip addr add 192.168.111.10/32 dev dummy0 
RTNETLINK answers: File exists

Se voglio modificare i flag su quell'indirizzo, posso usare changeo replace. Qui, uso ip addr changeper modificare le impostazioni preferred_lfte valid_lftsu quell'indirizzo:

# ip addr change 192.168.111.10/32 dev dummy0  preferred_lft 300 valid_lft 300
# ip addr show dummy0
32: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 5a:ec:58:4f:d1:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.10/32 scope global dynamic dummy0
       valid_lft 298sec preferred_lft 298sec
    inet6 fe80::58ec:58ff:fe4f:d135/64 scope link 
       valid_lft forever preferred_lft forever

Il comportamento di ip addr replaceè identico. In effetti, se guardi il codice, si traducono in azioni quasi identiche:

    if (matches(*argv, "change") == 0 ||
            strcmp(*argv, "chg") == 0)
            return ipaddr_modify(RTM_NEWADDR, NLM_F_REPLACE, argc-1, argv+1);
    if (matches(*argv, "replace") == 0)
            return ipaddr_modify(RTM_NEWADDR, NLM_F_CREATE|NLM_F_REPLACE, argc-1, argv+1);

Sembra che l'intenzione qui sia quella di changemodificare solo un indirizzo esistente, mentre replacemodificherà un indirizzo esistente o ne creerà uno nuovo se l'indirizzo specificato non esiste. In pratica, sembra che entrambi changee replaceaggiungeranno l'indirizzo se non esiste già.

Se vuoi effettivamente aggiungere un nuovo indirizzo e rimuoverne uno vecchio, dovrai farlo in due passaggi, usando ip addr delseguito da ip addr add(o viceversa, ovviamente).


Grazie per questa risposta Ha salvato il mio ambiente di produzione un sacco di downtime (se solo lo avessi trovato prima, avrei potuto avere NO P0s :()
Samveen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.