neighbour.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. #ifndef __LINUX_NEIGHBOUR_H
  3. #define __LINUX_NEIGHBOUR_H
  4. #include <linux/types.h>
  5. #include <linux/netlink.h>
  6. struct ndmsg {
  7. __u8 ndm_family;
  8. __u8 ndm_pad1;
  9. __u16 ndm_pad2;
  10. __s32 ndm_ifindex;
  11. __u16 ndm_state;
  12. __u8 ndm_flags;
  13. __u8 ndm_type;
  14. };
  15. enum {
  16. NDA_UNSPEC,
  17. NDA_DST,
  18. NDA_LLADDR,
  19. NDA_CACHEINFO,
  20. NDA_PROBES,
  21. NDA_VLAN,
  22. NDA_PORT,
  23. NDA_VNI,
  24. NDA_IFINDEX,
  25. NDA_MASTER,
  26. NDA_LINK_NETNSID,
  27. NDA_SRC_VNI,
  28. __NDA_MAX
  29. };
  30. #define NDA_MAX (__NDA_MAX - 1)
  31. /*
  32. * Neighbor Cache Entry Flags
  33. */
  34. #define NTF_USE 0x01
  35. #define NTF_SELF 0x02
  36. #define NTF_MASTER 0x04
  37. #define NTF_PROXY 0x08 /* == ATF_PUBL */
  38. #define NTF_EXT_LEARNED 0x10
  39. #define NTF_OFFLOADED 0x20
  40. #define NTF_ROUTER 0x80
  41. /*
  42. * Neighbor Cache Entry States.
  43. */
  44. #define NUD_INCOMPLETE 0x01
  45. #define NUD_REACHABLE 0x02
  46. #define NUD_STALE 0x04
  47. #define NUD_DELAY 0x08
  48. #define NUD_PROBE 0x10
  49. #define NUD_FAILED 0x20
  50. /* Dummy states */
  51. #define NUD_NOARP 0x40
  52. #define NUD_PERMANENT 0x80
  53. #define NUD_NONE 0x00
  54. /* NUD_NOARP & NUD_PERMANENT are pseudostates, they never change
  55. and make no address resolution or NUD.
  56. NUD_PERMANENT also cannot be deleted by garbage collectors.
  57. */
  58. struct nda_cacheinfo {
  59. __u32 ndm_confirmed;
  60. __u32 ndm_used;
  61. __u32 ndm_updated;
  62. __u32 ndm_refcnt;
  63. };
  64. /*****************************************************************
  65. * Neighbour tables specific messages.
  66. *
  67. * To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
  68. * NLM_F_DUMP flag set. Every neighbour table configuration is
  69. * spread over multiple messages to avoid running into message
  70. * size limits on systems with many interfaces. The first message
  71. * in the sequence transports all not device specific data such as
  72. * statistics, configuration, and the default parameter set.
  73. * This message is followed by 0..n messages carrying device
  74. * specific parameter sets.
  75. * Although the ordering should be sufficient, NDTA_NAME can be
  76. * used to identify sequences. The initial message can be identified
  77. * by checking for NDTA_CONFIG. The device specific messages do
  78. * not contain this TLV but have NDTPA_IFINDEX set to the
  79. * corresponding interface index.
  80. *
  81. * To change neighbour table attributes, send RTM_SETNEIGHTBL
  82. * with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
  83. * NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
  84. * otherwise. Device specific parameter sets can be changed by
  85. * setting NDTPA_IFINDEX to the interface index of the corresponding
  86. * device.
  87. ****/
  88. struct ndt_stats {
  89. __u64 ndts_allocs;
  90. __u64 ndts_destroys;
  91. __u64 ndts_hash_grows;
  92. __u64 ndts_res_failed;
  93. __u64 ndts_lookups;
  94. __u64 ndts_hits;
  95. __u64 ndts_rcv_probes_mcast;
  96. __u64 ndts_rcv_probes_ucast;
  97. __u64 ndts_periodic_gc_runs;
  98. __u64 ndts_forced_gc_runs;
  99. __u64 ndts_table_fulls;
  100. };
  101. enum {
  102. NDTPA_UNSPEC,
  103. NDTPA_IFINDEX, /* u32, unchangeable */
  104. NDTPA_REFCNT, /* u32, read-only */
  105. NDTPA_REACHABLE_TIME, /* u64, read-only, msecs */
  106. NDTPA_BASE_REACHABLE_TIME, /* u64, msecs */
  107. NDTPA_RETRANS_TIME, /* u64, msecs */
  108. NDTPA_GC_STALETIME, /* u64, msecs */
  109. NDTPA_DELAY_PROBE_TIME, /* u64, msecs */
  110. NDTPA_QUEUE_LEN, /* u32 */
  111. NDTPA_APP_PROBES, /* u32 */
  112. NDTPA_UCAST_PROBES, /* u32 */
  113. NDTPA_MCAST_PROBES, /* u32 */
  114. NDTPA_ANYCAST_DELAY, /* u64, msecs */
  115. NDTPA_PROXY_DELAY, /* u64, msecs */
  116. NDTPA_PROXY_QLEN, /* u32 */
  117. NDTPA_LOCKTIME, /* u64, msecs */
  118. NDTPA_QUEUE_LENBYTES, /* u32 */
  119. NDTPA_MCAST_REPROBES, /* u32 */
  120. NDTPA_PAD,
  121. __NDTPA_MAX
  122. };
  123. #define NDTPA_MAX (__NDTPA_MAX - 1)
  124. struct ndtmsg {
  125. __u8 ndtm_family;
  126. __u8 ndtm_pad1;
  127. __u16 ndtm_pad2;
  128. };
  129. struct ndt_config {
  130. __u16 ndtc_key_len;
  131. __u16 ndtc_entry_size;
  132. __u32 ndtc_entries;
  133. __u32 ndtc_last_flush; /* delta to now in msecs */
  134. __u32 ndtc_last_rand; /* delta to now in msecs */
  135. __u32 ndtc_hash_rnd;
  136. __u32 ndtc_hash_mask;
  137. __u32 ndtc_hash_chain_gc;
  138. __u32 ndtc_proxy_qlen;
  139. };
  140. enum {
  141. NDTA_UNSPEC,
  142. NDTA_NAME, /* char *, unchangeable */
  143. NDTA_THRESH1, /* u32 */
  144. NDTA_THRESH2, /* u32 */
  145. NDTA_THRESH3, /* u32 */
  146. NDTA_CONFIG, /* struct ndt_config, read-only */
  147. NDTA_PARMS, /* nested TLV NDTPA_* */
  148. NDTA_STATS, /* struct ndt_stats, read-only */
  149. NDTA_GC_INTERVAL, /* u64, msecs */
  150. NDTA_PAD,
  151. __NDTA_MAX
  152. };
  153. #define NDTA_MAX (__NDTA_MAX - 1)
  154. #endif