]> granicus.if.org Git - libnl/commit
route/addr: fix ID comparison for AF_INET and AF_INET6 addresses
authorThomas Haller <thaller@redhat.com>
Tue, 28 Jun 2016 14:56:21 +0000 (16:56 +0200)
committerThomas Haller <thaller@redhat.com>
Wed, 29 Jun 2016 08:26:00 +0000 (10:26 +0200)
commit83e851ca9c842ccb6dae411d3fff9c7e9561269a
tree63d1d2aac50b9fb89c8c175bb812c9cf0f752388
parentca5d662e9d6aa67b1d75be19aea4e4a4585e41b8
route/addr: fix ID comparison for AF_INET and AF_INET6 addresses

For AF_INET/IPv4 addresses, the ID equality comparison must include
the net-part of the peer address:

    unshare -n
    ip link add T type dummy
    ip link set T up
    ip addr add 192.168.5.10/24 dev T
    ip addr add 192.168.5.10 peer 192.168.6.1/24 dev T
    ip addr add 192.168.5.10 peer 192.168.7.1/24 dev T
    ip addr add 192.168.5.10 peer 192.168.7.2/24 dev T
    # RTNETLINK answers: File exists

    ip addr change 192.168.5.10 peer 192.168.7.2/24 dev T
    ip addr show | grep 192.168.7.
    # inet 192.168.5.10 peer 192.168.7.1/24 scope global T

For AF_INET6/IPv6 addresses, the prefix length of the address
is not part of the ID:

    unshare -n
    ip link add T type dummy
    ip link set T up
    ip addr add 192.168.7.10/24 dev T
    ip addr add 192.168.7.10/23 dev T
    ip addr add 1:2:3:4:5::1/64 dev T
    ip addr add 1:2:3:4:5::1/63 dev T
    # RTNETLINK answers: File exists

    ip addr change 1:2:3:4:5::1/63 dev T
    ip addr show | grep 1:2:3:4:5::1
    # inet6 1:2:3:4:5::1/64 scope global

*sigh*

http://lists.infradead.org/pipermail/libnl/2016-June/002158.html

Signed-off-by: Thomas Haller <thaller@redhat.com>
include/netlink-private/types.h
lib/object.c
lib/route/addr.c