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