linux-headers (unknown)

(root)/
include/
linux/
neighbour.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  #ifndef __LINUX_NEIGHBOUR_H
       3  #define __LINUX_NEIGHBOUR_H
       4  
       5  #include <linux/types.h>
       6  #include <linux/netlink.h>
       7  
       8  struct ndmsg {
       9  	__u8		ndm_family;
      10  	__u8		ndm_pad1;
      11  	__u16		ndm_pad2;
      12  	__s32		ndm_ifindex;
      13  	__u16		ndm_state;
      14  	__u8		ndm_flags;
      15  	__u8		ndm_type;
      16  };
      17  
      18  enum {
      19  	NDA_UNSPEC,
      20  	NDA_DST,
      21  	NDA_LLADDR,
      22  	NDA_CACHEINFO,
      23  	NDA_PROBES,
      24  	NDA_VLAN,
      25  	NDA_PORT,
      26  	NDA_VNI,
      27  	NDA_IFINDEX,
      28  	NDA_MASTER,
      29  	NDA_LINK_NETNSID,
      30  	NDA_SRC_VNI,
      31  	NDA_PROTOCOL,  /* Originator of entry */
      32  	NDA_NH_ID,
      33  	NDA_FDB_EXT_ATTRS,
      34  	NDA_FLAGS_EXT,
      35  	NDA_NDM_STATE_MASK,
      36  	NDA_NDM_FLAGS_MASK,
      37  	__NDA_MAX
      38  };
      39  
      40  #define NDA_MAX (__NDA_MAX - 1)
      41  
      42  /*
      43   *	Neighbor Cache Entry Flags
      44   */
      45  
      46  #define NTF_USE		(1 << 0)
      47  #define NTF_SELF	(1 << 1)
      48  #define NTF_MASTER	(1 << 2)
      49  #define NTF_PROXY	(1 << 3)	/* == ATF_PUBL */
      50  #define NTF_EXT_LEARNED	(1 << 4)
      51  #define NTF_OFFLOADED   (1 << 5)
      52  #define NTF_STICKY	(1 << 6)
      53  #define NTF_ROUTER	(1 << 7)
      54  /* Extended flags under NDA_FLAGS_EXT: */
      55  #define NTF_EXT_MANAGED		(1 << 0)
      56  #define NTF_EXT_LOCKED		(1 << 1)
      57  
      58  /*
      59   *	Neighbor Cache Entry States.
      60   */
      61  
      62  #define NUD_INCOMPLETE	0x01
      63  #define NUD_REACHABLE	0x02
      64  #define NUD_STALE	0x04
      65  #define NUD_DELAY	0x08
      66  #define NUD_PROBE	0x10
      67  #define NUD_FAILED	0x20
      68  
      69  /* Dummy states */
      70  #define NUD_NOARP	0x40
      71  #define NUD_PERMANENT	0x80
      72  #define NUD_NONE	0x00
      73  
      74  /* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change and make no
      75   * address resolution or NUD.
      76   *
      77   * NUD_PERMANENT also cannot be deleted by garbage collectors. This holds true
      78   * for dynamic entries with NTF_EXT_LEARNED flag as well. However, upon carrier
      79   * down event, NUD_PERMANENT entries are not flushed whereas NTF_EXT_LEARNED
      80   * flagged entries explicitly are (which is also consistent with the routing
      81   * subsystem).
      82   *
      83   * When NTF_EXT_LEARNED is set for a bridge fdb entry the different cache entry
      84   * states don't make sense and thus are ignored. Such entries don't age and
      85   * can roam.
      86   *
      87   * NTF_EXT_MANAGED flagged neigbor entries are managed by the kernel on behalf
      88   * of a user space control plane, and automatically refreshed so that (if
      89   * possible) they remain in NUD_REACHABLE state.
      90   *
      91   * NTF_EXT_LOCKED flagged bridge FDB entries are entries generated by the
      92   * bridge in response to a host trying to communicate via a locked bridge port
      93   * with MAB enabled. Their purpose is to notify user space that a host requires
      94   * authentication.
      95   */
      96  
      97  struct nda_cacheinfo {
      98  	__u32		ndm_confirmed;
      99  	__u32		ndm_used;
     100  	__u32		ndm_updated;
     101  	__u32		ndm_refcnt;
     102  };
     103  
     104  /*****************************************************************
     105   *		Neighbour tables specific messages.
     106   *
     107   * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
     108   * NLM_F_DUMP flag set. Every neighbour table configuration is
     109   * spread over multiple messages to avoid running into message
     110   * size limits on systems with many interfaces. The first message
     111   * in the sequence transports all not device specific data such as
     112   * statistics, configuration, and the default parameter set.
     113   * This message is followed by 0..n messages carrying device
     114   * specific parameter sets.
     115   * Although the ordering should be sufficient, NDTA_NAME can be
     116   * used to identify sequences. The initial message can be identified
     117   * by checking for NDTA_CONFIG. The device specific messages do
     118   * not contain this TLV but have NDTPA_IFINDEX set to the
     119   * corresponding interface index.
     120   *
     121   * To change neighbour table attributes, send RTM_SETNEIGHTBL
     122   * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
     123   * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
     124   * otherwise. Device specific parameter sets can be changed by
     125   * setting NDTPA_IFINDEX to the interface index of the corresponding
     126   * device.
     127   ****/
     128  
     129  struct ndt_stats {
     130  	__u64		ndts_allocs;
     131  	__u64		ndts_destroys;
     132  	__u64		ndts_hash_grows;
     133  	__u64		ndts_res_failed;
     134  	__u64		ndts_lookups;
     135  	__u64		ndts_hits;
     136  	__u64		ndts_rcv_probes_mcast;
     137  	__u64		ndts_rcv_probes_ucast;
     138  	__u64		ndts_periodic_gc_runs;
     139  	__u64		ndts_forced_gc_runs;
     140  	__u64		ndts_table_fulls;
     141  };
     142  
     143  enum {
     144  	NDTPA_UNSPEC,
     145  	NDTPA_IFINDEX,			/* u32, unchangeable */
     146  	NDTPA_REFCNT,			/* u32, read-only */
     147  	NDTPA_REACHABLE_TIME,		/* u64, read-only, msecs */
     148  	NDTPA_BASE_REACHABLE_TIME,	/* u64, msecs */
     149  	NDTPA_RETRANS_TIME,		/* u64, msecs */
     150  	NDTPA_GC_STALETIME,		/* u64, msecs */
     151  	NDTPA_DELAY_PROBE_TIME,		/* u64, msecs */
     152  	NDTPA_QUEUE_LEN,		/* u32 */
     153  	NDTPA_APP_PROBES,		/* u32 */
     154  	NDTPA_UCAST_PROBES,		/* u32 */
     155  	NDTPA_MCAST_PROBES,		/* u32 */
     156  	NDTPA_ANYCAST_DELAY,		/* u64, msecs */
     157  	NDTPA_PROXY_DELAY,		/* u64, msecs */
     158  	NDTPA_PROXY_QLEN,		/* u32 */
     159  	NDTPA_LOCKTIME,			/* u64, msecs */
     160  	NDTPA_QUEUE_LENBYTES,		/* u32 */
     161  	NDTPA_MCAST_REPROBES,		/* u32 */
     162  	NDTPA_PAD,
     163  	NDTPA_INTERVAL_PROBE_TIME_MS,	/* u64, msecs */
     164  	__NDTPA_MAX
     165  };
     166  #define NDTPA_MAX (__NDTPA_MAX - 1)
     167  
     168  struct ndtmsg {
     169  	__u8		ndtm_family;
     170  	__u8		ndtm_pad1;
     171  	__u16		ndtm_pad2;
     172  };
     173  
     174  struct ndt_config {
     175  	__u16		ndtc_key_len;
     176  	__u16		ndtc_entry_size;
     177  	__u32		ndtc_entries;
     178  	__u32		ndtc_last_flush;	/* delta to now in msecs */
     179  	__u32		ndtc_last_rand;		/* delta to now in msecs */
     180  	__u32		ndtc_hash_rnd;
     181  	__u32		ndtc_hash_mask;
     182  	__u32		ndtc_hash_chain_gc;
     183  	__u32		ndtc_proxy_qlen;
     184  };
     185  
     186  enum {
     187  	NDTA_UNSPEC,
     188  	NDTA_NAME,			/* char *, unchangeable */
     189  	NDTA_THRESH1,			/* u32 */
     190  	NDTA_THRESH2,			/* u32 */
     191  	NDTA_THRESH3,			/* u32 */
     192  	NDTA_CONFIG,			/* struct ndt_config, read-only */
     193  	NDTA_PARMS,			/* nested TLV NDTPA_* */
     194  	NDTA_STATS,			/* struct ndt_stats, read-only */
     195  	NDTA_GC_INTERVAL,		/* u64, msecs */
     196  	NDTA_PAD,
     197  	__NDTA_MAX
     198  };
     199  #define NDTA_MAX (__NDTA_MAX - 1)
     200  
     201   /* FDB activity notification bits used in NFEA_ACTIVITY_NOTIFY:
     202    * - FDB_NOTIFY_BIT - notify on activity/expire for any entry
     203    * - FDB_NOTIFY_INACTIVE_BIT - mark as inactive to avoid multiple notifications
     204    */
     205  enum {
     206  	FDB_NOTIFY_BIT		= (1 << 0),
     207  	FDB_NOTIFY_INACTIVE_BIT	= (1 << 1)
     208  };
     209  
     210  /* embedded into NDA_FDB_EXT_ATTRS:
     211   * [NDA_FDB_EXT_ATTRS] = {
     212   *     [NFEA_ACTIVITY_NOTIFY]
     213   *     ...
     214   * }
     215   */
     216  enum {
     217  	NFEA_UNSPEC,
     218  	NFEA_ACTIVITY_NOTIFY,
     219  	NFEA_DONT_REFRESH,
     220  	__NFEA_MAX
     221  };
     222  #define NFEA_MAX (__NFEA_MAX - 1)
     223  
     224  #endif