/****************************************************************************
 * include/netpacket/if_addr.h
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.  The
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 ****************************************************************************/

#ifndef __INCLUDE_NETPACKET_IF_ADDR_H
#define __INCLUDE_NETPACKET_IF_ADDR_H

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <sys/types.h>
#include <netpacket/netlink.h>

/****************************************************************************
 * Pre-processor Definitions
 ****************************************************************************/

#define IFA_MAX (__IFA_MAX - 1)

/* ifa_flags */

#define IFA_F_SECONDARY       0x01
#define IFA_F_TEMPORARY       IFA_F_SECONDARY

#define IFA_F_NODAD           0x02
#define IFA_F_OPTIMISTIC      0x04
#define IFA_F_DADFAILED       0x08
#define IFA_F_HOMEADDRESS     0x10
#define IFA_F_DEPRECATED      0x20
#define IFA_F_TENTATIVE       0x40
#define IFA_F_PERMANENT       0x80
#define IFA_F_MANAGETEMPADDR 0x100
#define IFA_F_NOPREFIXROUTE  0x200
#define IFA_F_MCAUTOJOIN     0x400
#define IFA_F_STABLE_PRIVACY 0x800

/* backwards compatibility for userspace */

#define IFA_RTA(r)  ((FAR struct rtattr *)(((FAR char *)(r)) + \
                      NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct ifaddrmsg))

/****************************************************************************
 * Public Type Definitions
 ****************************************************************************/

/* RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
 *
 * Add, remove or receive information about an IP address associated with
 * an interface.  These messages contain an ifaddrmsg structure, optionally
 * followed by rtattr routing attributes.
 */

struct ifaddrmsg
{
  uint8_t  ifa_family;    /* Address type:  AF_INET or AF_INET6 */
  uint8_t  ifa_prefixlen; /* Prefix length of address */
  uint8_t  ifa_flags;     /* Address flags.  See IFA_F_* definitions */
  uint8_t  ifa_scope;     /* Address scope */
  int32_t  ifa_index;     /* Unique interface index */
};

/* Important comment:
 * IFA_ADDRESS is prefix address, rather than local interface address.
 * It makes no difference for normally configured broadcast interfaces,
 * but for point-to-point IFA_ADDRESS is DESTINATION address,
 * local address is supplied in IFA_LOCAL attribute.
 *
 * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags.
 * If present, the value from struct ifaddrmsg will be ignored.
 *
 * IFA_RT_PRIORITY is a u32 attribute, priority/metric for prefix route
 */

enum
{
  IFA_UNSPEC,
  IFA_ADDRESS,
  IFA_LOCAL,
  IFA_LABEL,
  IFA_BROADCAST,
  IFA_ANYCAST,
  IFA_CACHEINFO,
  IFA_MULTICAST,
  IFA_FLAGS,
  IFA_RT_PRIORITY,
  __IFA_MAX,
};

struct ifa_cacheinfo
{
  uint32_t ifa_prefered;
  uint32_t ifa_valid;
  uint32_t cstamp; /* created timestamp, hundredths of seconds */
  uint32_t tstamp; /* updated timestamp, hundredths of seconds */
};

#endif /* __INCLUDE_NETPACKET_IF_ADDR_H */
