mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-08 15:33:47 +00:00
Ipvlan should return an error when an address is already in use.
The ipvlan code already knows how to detect when a duplicate address is about to be assigned to an ipvlan device. However, that failure is not propogated outward and leads to a silent failure. Introduce a validation step at ip address creation time and allow device drivers to register to validate the incoming ip addresses. The ipvlan code is the first consumer. If it detects an address in use, we can return an error to the user before beginning to commit the new ifa in the networking code. This can be especially useful if it is necessary to provision many ipvlans in containers. The provisioning software (or operator) can use this to detect situations where an ip address is unexpectedly in use. Signed-off-by: Krister Johansen <kjlx@templeofstupid.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2b3a9afc63
commit
3ad7d2468f
6 changed files with 153 additions and 2 deletions
|
@ -48,11 +48,15 @@ struct prefix_info {
|
|||
struct in6_addr prefix;
|
||||
};
|
||||
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
#include <net/if_inet6.h>
|
||||
#include <net/ipv6.h>
|
||||
|
||||
struct in6_validator_info {
|
||||
struct in6_addr i6vi_addr;
|
||||
struct inet6_dev *i6vi_dev;
|
||||
};
|
||||
|
||||
#define IN6_ADDR_HSIZE_SHIFT 4
|
||||
#define IN6_ADDR_HSIZE (1 << IN6_ADDR_HSIZE_SHIFT)
|
||||
|
||||
|
@ -278,6 +282,10 @@ int register_inet6addr_notifier(struct notifier_block *nb);
|
|||
int unregister_inet6addr_notifier(struct notifier_block *nb);
|
||||
int inet6addr_notifier_call_chain(unsigned long val, void *v);
|
||||
|
||||
int register_inet6addr_validator_notifier(struct notifier_block *nb);
|
||||
int unregister_inet6addr_validator_notifier(struct notifier_block *nb);
|
||||
int inet6addr_validator_notifier_call_chain(unsigned long val, void *v);
|
||||
|
||||
void inet6_netconf_notify_devconf(struct net *net, int event, int type,
|
||||
int ifindex, struct ipv6_devconf *devconf);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue