ip route get reconhece endereço como anycast

2
# ip route get 1.2.3.4
anycast 1.2.3.4 dev eth0  src 5.6.7.8

e a questão é como ele sabe que o endereço é um anycast? (o que aparentemente é verdade).

ATUALIZADO:

Apresentar como rota anycast:

root@hv2 ~ # ip route get 1.2.3.4
anycast 1.2.3.4 dev eth0  src 5.6.7.8 
    cache 

mas não visível na lista:

root@hv2 ~ # ip route list|grep 1.2.3.4|wc -l
0

mas é possível excluí-lo e voltar ao normal (não há mais anycast ):

root@hv2 ~ # ip route del anycast 1.2.3.4 dev eth0
root@hv2 ~ # ip route get 1.2.3.4
1.2.3.4 via 5.6.7.8 dev eth0  src 9.10.11.12 
    cache 
    
por pawel7318 09.07.2014 / 17:21

2 respostas

4

Se você olhar para o iproute2 gitweb , você verá que está mostrando o status do RTN_ANYCAST bit definido na estrutura de roteamento do kernel. Se você fizer referência cruzada com a fonte do kernel (rtnetlink.h) você verá o seguinte comentário:

    RTN_ANYCAST,            /* Accept locally as broadcast,
                               but send as unicast */

Se você marcar a página de manual, verá que o status anycast de um endereço é determinado pela configuração (em particular, adicionando a palavra-chave anycast quando você especifica o endereço a ser adicionado). De acordo com man 8 ip :

   IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ]
           [ label STRING ] [ scope SCOPE-ID ]

   ...
           anycast   -   _not  implemented_  the  destinations are anycast
           addresses assigned to this host.  They are mainly equivalent to
           local with one difference: such addresses are invalid when used
           as the source address of any packet.

Na primeira parte do manual, é dito que quando você especifica o endereço, você pode instruir a pilha que é um endereço anycast. Sem verificar o código-fonte do kernel, imagino que quando você adiciona um endereço anycast, o bit anycast é propagado para uma entrada de tabela de roteamento correspondente que seria criada quando o endereço fosse adicionado.

Não tenho certeza se a parte "não implementada" está totalmente correta, porque parece que o iproute2 está passando os sinalizadores anycast para as chamadas do sistema. Então parece que se anycast é suportado pelo kernel, deve funcionar. Mas eu não testei, então eu não sei sobre isso.

    
por 11.07.2014 / 23:20
1

Na página man do ip-route , na seção "ip route":

Note that this operation is not equivalent to ip route show. show shows existing routes. get resolves them and creates new clones if necessary. Essentially, get is equivalent to sending a packet along this path

Você pode mostrar rotas anycast com o comando ip route show type anycast .

    
por 17.07.2014 / 20:34