Каково точное поведение команды: изменение IP-адреса?

12

Я возился с IPv6 и адресом жизни. Я обнаружил, что valid_lftатрибут заставит v6-адрес исчезать автоматически, если используется правильно. Чтобы продлить срок действия адреса, я бы

ip addr change 1:2:3:4::1/112 dev eth0 valid_lft 86000

Использование ip addr changeне отображается ни на одной из man-страниц, к которым у меня есть доступ (Debian, Ubuntu и онлайн ), а также в официальной документации . Я нашел это в статье, ссылающейся на письмо от 2009 года в список рассылки ipv6-ops.

Из того, что я мог определить, играя, я думаю, что всегда можно использовать ip addr changeвместо ip addr add, потому что, если адрес не существует, ipдобавит его, просто если он ip addr addбыл использован.

Это правильно, то есть кто-нибудь может объяснить, что именно ip addr changeделает и чем это отличается ip addr add?

Bananguin
источник

Ответы:

6

Когда вы не уверены в том, что что-то делает, и в документации ничего не сказано, вы попадаете в источники, а именно в строку 1588 :

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

Итак, что это делает? Возвращает результат выполнения ipaddr_modify()функции, определенной в строке 1379 с аргументами RTM_NEWADDRи NLM_F_REPLACE.

Из того, что я мог определить, играя, я думаю, что всегда можно использовать ip addr changeвместо ip addr add, потому что, если адрес не существует, ipдобавит его, просто если он ip addr addбыл использован.

Это правильно, то есть кто-нибудь может объяснить, что именно ip addr changeделает и чем это отличается ip addr add?

Нет, addсоздаст или выполнит заданные аргументы (если они есть), пока changeбудет искать аргумент и заменять его.

Кстати, replaceкажется, компромисс между addи, changeпоскольку он использует смешанную сумку аргументов.

Braiam
источник
И каков эффект этих флагов? Потому что в командной строке они не отображаются. Тем более, что changeработает так, как addбудто адрес для изменения еще не существует. Я не думал, что мне придется копаться в исходном коде ядра (потому что именно там в конечном итоге передаются флаги), чтобы выяснить, что делает один из самых популярных инструментов командной строки для управления сетью. Это не 90-е ... :-) Но все равно спасибо!
Bananguin