使用netlink API从linux接口删除属于同一子网的ipv4地址

使用netlink API从linux接口删除属于同一子网的ipv4地址,linux,networking,network-programming,netlink,Linux,Networking,Network Programming,Netlink,我正在使用netlink APIrtnl\u addr\u delete删除Linux界面上配置的ipv4地址。属于同一子网的两个IP配置为一个接口 当我删除第一个配置的IP时,两个IP都被删除,这是意外的。但反之亦然,当我删除第二个配置的IP时,第一个不会被删除,这是预期的 假设两个IP属于不同的子网,则未发现问题。也就是说,如果我先删除,那么只有第一个正在删除 你知道这个rtnl\u addr\u delete是如何运行的吗?或者可以通过任何解决方案来解决这个问题吗?当你从一个子网(主地址)

我正在使用netlink API
rtnl\u addr\u delete
删除Linux界面上配置的ipv4地址。属于同一子网的两个IP配置为一个接口

当我删除第一个配置的IP时,两个IP都被删除,这是意外的。但反之亦然,当我删除第二个配置的IP时,第一个不会被删除,这是预期的

假设两个IP属于不同的子网,则未发现问题。也就是说,如果我先删除,那么只有第一个正在删除


你知道这个
rtnl\u addr\u delete
是如何运行的吗?或者可以通过任何解决方案来解决这个问题吗?

当你从一个子网(主地址)中删除第一个添加的IP地址时,所有子网都将被删除。这是某些发行版中默认的内核行为。要改变这一点,必须在使用的界面上设置sysctl:

$ sysctl -a | grep promote_secondaries
比方说,您想在eth0上更改该值:

$ sudo sysctl -w net.ipv4.conf.eth0.promote_secondaries=1
使用
promote\u secondaries
子网的其余部分将不会被删除,而是其中一个地址将被提升为新的主地址

文件: