fdc6dbf176
We have projects that need to sense ip address changes in time, and set ip address or clear ip address through netlink so the relevant implementation is added. The usage and command structure are consistent with linux Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
116 lines
3.8 KiB
C
116 lines
3.8 KiB
C
/****************************************************************************
|
|
* 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 */
|