Re: [PATCH net-next 1/1] net: Add new protocol attribute to IP addresses
From: Jacques de Laval <hidden>
Date: 2022-02-04 18:08:39
On 2022-02-04 16:16 UTC, David Ahern wrote:
quoted
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index a038feb63f23..caa6b7a5b5ac 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h@@ -148,6 +148,7 @@ struct in_ifaddr { unsigned char ifa_prefixlen; __u32 ifa_flags; char ifa_label[IFNAMSIZ]; + unsigned char ifa_proto;there is a hole after ifa_prefixlen where this can go and not affect struct size.quoted
/* In seconds, relative to tstamp. Expiry is at tstamp + HZ * lft. */ __u32 ifa_valid_lft;diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 78ea3e332688..e53d8f4f4166 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h@@ -69,6 +69,7 @@ struct ifa6_config { u32 preferred_lft; u32 valid_lft; u16 scope; + u8 ifa_proto; }; int addrconf_init(void);diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h index 653e7d0f65cb..f7c270b24167 100644 --- a/include/net/if_inet6.h +++ b/include/net/if_inet6.h@@ -73,6 +73,8 @@ struct inet6_ifaddr { struct rcu_head rcu; struct in6_addr peer_addr; + + __u8 ifa_proto;similarly for this struct; couple of holes that you can put this.
Thank you! I will fix this in v2.
quoted
}; struct ip6_sf_socklist {diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h index dfcf3ce0097f..2aa46b9c9961 100644 --- a/include/uapi/linux/if_addr.h +++ b/include/uapi/linux/if_addr.h@@ -35,6 +35,7 @@ enum { IFA_FLAGS, IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */ IFA_TARGET_NETNSID, + IFA_PROTO, __IFA_MAX, };@@ -69,4 +70,7 @@ struct ifa_cacheinfo { #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) #endif +/* ifa_protocol */ +#define IFAPROT_UNSPEC 0*If* the value is just a passthrough (userspace to kernel and back), no need for this uapi. However, have you considered builtin protocol labels - e.g. for autoconf, LLA, etc. Kernel generated vs RAs vs userspace adding it.
Agreed. For my own (very isolated) use case I only need the passthrough, but I can see that it would make sense to standardize some labels. I was trying to give this some thought but I have to admit I copped out because of my limited knowledge on what labels would be reasonable to reserve. Based on what you mention, do you think the list bellow would make sense? #define IFAPROT_UNSPEC 0 /* unspecified */ #define IFAPROT_KERNEL_LO 1 /* loopback */ #define IFAPROT_KERNEL_RA 2 /* auto assigned by kernel from router announcement */ #define IFAPROT_KERNEL_LL 3 /* link-local set by kernel */ #define IFAPROT_STATIC 4 /* set by admin */ #define IFAPROT_AUTO 5 /* DHCP, BOOTP etc. */ #define IFAPROT_LL 6 /* link-local set by userspace */ Or do you think it needs more granularity?