1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4dc78e53SAndroid Build Coastguard Worker #ifndef __LINUX_IF_ADDR_H 3*4dc78e53SAndroid Build Coastguard Worker #define __LINUX_IF_ADDR_H 4*4dc78e53SAndroid Build Coastguard Worker 5*4dc78e53SAndroid Build Coastguard Worker #include <linux/types.h> 6*4dc78e53SAndroid Build Coastguard Worker #include <linux/netlink.h> 7*4dc78e53SAndroid Build Coastguard Worker 8*4dc78e53SAndroid Build Coastguard Worker struct ifaddrmsg { 9*4dc78e53SAndroid Build Coastguard Worker __u8 ifa_family; 10*4dc78e53SAndroid Build Coastguard Worker __u8 ifa_prefixlen; /* The prefix length */ 11*4dc78e53SAndroid Build Coastguard Worker __u8 ifa_flags; /* Flags */ 12*4dc78e53SAndroid Build Coastguard Worker __u8 ifa_scope; /* Address scope */ 13*4dc78e53SAndroid Build Coastguard Worker __u32 ifa_index; /* Link index */ 14*4dc78e53SAndroid Build Coastguard Worker }; 15*4dc78e53SAndroid Build Coastguard Worker 16*4dc78e53SAndroid Build Coastguard Worker /* 17*4dc78e53SAndroid Build Coastguard Worker * Important comment: 18*4dc78e53SAndroid Build Coastguard Worker * IFA_ADDRESS is prefix address, rather than local interface address. 19*4dc78e53SAndroid Build Coastguard Worker * It makes no difference for normally configured broadcast interfaces, 20*4dc78e53SAndroid Build Coastguard Worker * but for point-to-point IFA_ADDRESS is DESTINATION address, 21*4dc78e53SAndroid Build Coastguard Worker * local address is supplied in IFA_LOCAL attribute. 22*4dc78e53SAndroid Build Coastguard Worker * 23*4dc78e53SAndroid Build Coastguard Worker * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags. 24*4dc78e53SAndroid Build Coastguard Worker * If present, the value from struct ifaddrmsg will be ignored. 25*4dc78e53SAndroid Build Coastguard Worker */ 26*4dc78e53SAndroid Build Coastguard Worker enum { 27*4dc78e53SAndroid Build Coastguard Worker IFA_UNSPEC, 28*4dc78e53SAndroid Build Coastguard Worker IFA_ADDRESS, 29*4dc78e53SAndroid Build Coastguard Worker IFA_LOCAL, 30*4dc78e53SAndroid Build Coastguard Worker IFA_LABEL, 31*4dc78e53SAndroid Build Coastguard Worker IFA_BROADCAST, 32*4dc78e53SAndroid Build Coastguard Worker IFA_ANYCAST, 33*4dc78e53SAndroid Build Coastguard Worker IFA_CACHEINFO, 34*4dc78e53SAndroid Build Coastguard Worker IFA_MULTICAST, 35*4dc78e53SAndroid Build Coastguard Worker IFA_FLAGS, 36*4dc78e53SAndroid Build Coastguard Worker IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */ 37*4dc78e53SAndroid Build Coastguard Worker IFA_TARGET_NETNSID, 38*4dc78e53SAndroid Build Coastguard Worker IFA_PROTO, /* u8, address protocol */ 39*4dc78e53SAndroid Build Coastguard Worker __IFA_MAX, 40*4dc78e53SAndroid Build Coastguard Worker }; 41*4dc78e53SAndroid Build Coastguard Worker 42*4dc78e53SAndroid Build Coastguard Worker #define IFA_MAX (__IFA_MAX - 1) 43*4dc78e53SAndroid Build Coastguard Worker 44*4dc78e53SAndroid Build Coastguard Worker /* ifa_flags */ 45*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_SECONDARY 0x01 46*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_TEMPORARY IFA_F_SECONDARY 47*4dc78e53SAndroid Build Coastguard Worker 48*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_NODAD 0x02 49*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_OPTIMISTIC 0x04 50*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_DADFAILED 0x08 51*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_HOMEADDRESS 0x10 52*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_DEPRECATED 0x20 53*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_TENTATIVE 0x40 54*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_PERMANENT 0x80 55*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_MANAGETEMPADDR 0x100 56*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_NOPREFIXROUTE 0x200 57*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_MCAUTOJOIN 0x400 58*4dc78e53SAndroid Build Coastguard Worker #define IFA_F_STABLE_PRIVACY 0x800 59*4dc78e53SAndroid Build Coastguard Worker 60*4dc78e53SAndroid Build Coastguard Worker struct ifa_cacheinfo { 61*4dc78e53SAndroid Build Coastguard Worker __u32 ifa_prefered; 62*4dc78e53SAndroid Build Coastguard Worker __u32 ifa_valid; 63*4dc78e53SAndroid Build Coastguard Worker __u32 cstamp; /* created timestamp, hundredths of seconds */ 64*4dc78e53SAndroid Build Coastguard Worker __u32 tstamp; /* updated timestamp, hundredths of seconds */ 65*4dc78e53SAndroid Build Coastguard Worker }; 66*4dc78e53SAndroid Build Coastguard Worker 67*4dc78e53SAndroid Build Coastguard Worker /* backwards compatibility for userspace */ 68*4dc78e53SAndroid Build Coastguard Worker #define IFA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg)))) 69*4dc78e53SAndroid Build Coastguard Worker #define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg)) 70*4dc78e53SAndroid Build Coastguard Worker 71*4dc78e53SAndroid Build Coastguard Worker /* ifa_proto */ 72*4dc78e53SAndroid Build Coastguard Worker #define IFAPROT_UNSPEC 0 73*4dc78e53SAndroid Build Coastguard Worker #define IFAPROT_KERNEL_LO 1 /* loopback */ 74*4dc78e53SAndroid Build Coastguard Worker #define IFAPROT_KERNEL_RA 2 /* set by kernel from router announcement */ 75*4dc78e53SAndroid Build Coastguard Worker #define IFAPROT_KERNEL_LL 3 /* link-local set by kernel */ 76*4dc78e53SAndroid Build Coastguard Worker 77*4dc78e53SAndroid Build Coastguard Worker #endif 78