common.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /*-
  2. * SPDX-License-Identifier: BSD-2-Clause
  3. *
  4. * Copyright (c) 2022 Alexander V. Chernikov <melifaro@FreeBSD.org>
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. * 1. Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in the
  13. * documentation and/or other materials provided with the distribution.
  14. *
  15. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  16. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  19. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  20. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  21. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25. * SUCH DAMAGE.
  26. */
  27. /*
  28. * Common defines for all parts of the NETLINK_ROUTE family
  29. */
  30. #ifndef _NETLINK_ROUTE_COMMON_H_
  31. #define _NETLINK_ROUTE_COMMON_H_
  32. /* Defined NETLINK_ROUTE messages */
  33. enum {
  34. NL_RTM_BASE = 16,
  35. NL_RTM_NEWLINK = 16, /* creates new interface */
  36. NL_RTM_DELLINK = 17, /* deletes matching interface */
  37. NL_RTM_GETLINK = 18, /* lists matching interfaces */
  38. NL_RTM_SETLINK = 19, /* not supported */
  39. NL_RTM_NEWADDR = 20, /* not supported */
  40. NL_RTM_DELADDR = 21, /* not supported */
  41. NL_RTM_GETADDR = 22, /* lists matching ifaddrs */
  42. NL_RTM_NEWROUTE = 24, /* adds or changes a route */
  43. NL_RTM_DELROUTE = 25, /* deletes matching route */
  44. NL_RTM_GETROUTE = 26, /* lists matching routes */
  45. NL_RTM_NEWNEIGH = 28, /* creates new arp/ndp entry */
  46. NL_RTM_DELNEIGH = 29, /* deletes matching arp/ndp entry */
  47. NL_RTM_GETNEIGH = 30, /* lists matching arp/ndp entry */
  48. NL_RTM_NEWRULE = 32, /* not supported */
  49. NL_RTM_DELRULE = 33, /* not supported */
  50. NL_RTM_GETRULE = 34, /* not supported */
  51. NL_RTM_NEWQDISC = 36, /* not supported */
  52. NL_RTM_DELQDISC = 37, /* not supported */
  53. NL_RTM_GETQDISC = 38, /* not supported */
  54. NL_RTM_NEWTCLASS = 40, /* not supported */
  55. NL_RTM_DELTCLASS = 41, /* not supported */
  56. NL_RTM_GETTCLASS = 42, /* not supported */
  57. NL_RTM_NEWTFILTER = 44, /* not supported */
  58. NL_RTM_DELTFILTER = 45, /* not supported */
  59. NL_RTM_GETTFILTER = 46, /* not supported */
  60. NL_RTM_NEWACTION = 48, /* not supported */
  61. NL_RTM_DELACTION = 49, /* not supported */
  62. NL_RTM_GETACTION = 50, /* not supported */
  63. NL_RTM_NEWPREFIX = 52, /* not supported */
  64. NL_RTM_GETMULTICAST = 58, /* not supported */
  65. NL_RTM_GETANYCAST = 62, /* not supported */
  66. NL_RTM_NEWNEIGHTBL = 64, /* not supported */
  67. NL_RTM_GETNEIGHTBL = 66, /* not supported */
  68. NL_RTM_SETNEIGHTBL = 67, /* not supported */
  69. NL_RTM_NEWNDUSEROPT = 68, /* not supported */
  70. NL_RTM_NEWADDRLABEL = 72, /* not supported */
  71. NL_RTM_DELADDRLABEL = 73, /* not supported */
  72. NL_RTM_GETADDRLABEL = 74, /* not supported */
  73. NL_RTM_GETDCB = 78, /* not supported */
  74. NL_RTM_SETDCB = 79, /* not supported */
  75. NL_RTM_NEWNETCONF = 80, /* not supported */
  76. NL_RTM_GETNETCONF = 82, /* not supported */
  77. NL_RTM_NEWMDB = 84, /* not supported */
  78. NL_RTM_DELMDB = 85, /* not supported */
  79. NL_RTM_GETMDB = 86, /* not supported */
  80. NL_RTM_NEWNSID = 88, /* not supported */
  81. NL_RTM_DELNSID = 89, /* not supported */
  82. NL_RTM_GETNSID = 90, /* not supported */
  83. NL_RTM_NEWSTATS = 92, /* not supported */
  84. NL_RTM_GETSTATS = 94, /* not supported */
  85. NL_RTM_NEWNEXTHOP = 104, /* creates new user nexhtop */
  86. NL_RTM_DELNEXTHOP = 105, /* deletes matching nexthop */
  87. NL_RTM_GETNEXTHOP = 106, /* lists created user nexthops */
  88. __NL_RTM_MAX,
  89. };
  90. #define NL_RTM_MAX (((__NL_RTM_MAX + 3) & ~3) - 1)
  91. #ifndef _KERNEL
  92. /*
  93. * RTM_* namespace clashes with BSD rtsock namespace.
  94. * Use NL_RTM_ prefix in the kernel and map it to RTM_
  95. * for userland.
  96. */
  97. #define RTM_BASE NL_RTM_BASE
  98. #define RTM_NEWLINK NL_RTM_NEWLINK
  99. #define RTM_DELLINK NL_RTM_DELLINK
  100. #define RTM_GETLINK NL_RTM_GETLINK
  101. #define RTM_SETLINK NL_RTM_SETLINK
  102. #define RTM_NEWADDR NL_RTM_NEWADDR
  103. #define RTM_DELADDR NL_RTM_DELADDR
  104. #define RTM_GETADDR NL_RTM_GETADDR
  105. #define RTM_NEWROUTE NL_RTM_NEWROUTE
  106. #define RTM_DELROUTE NL_RTM_DELROUTE
  107. #define RTM_GETROUTE NL_RTM_GETROUTE
  108. #define RTM_NEWNEIGH NL_RTM_NEWNEIGH
  109. #define RTM_DELNEIGH NL_RTM_DELNEIGH
  110. #define RTM_GETNEIGH NL_RTM_GETNEIGH
  111. #define RTM_NEWRULE NL_RTM_NEWRULE
  112. #define RTM_DELRULE NL_RTM_DELRULE
  113. #define RTM_GETRULE NL_RTM_GETRULE
  114. #define RTM_NEWQDISC NL_RTM_NEWQDISC
  115. #define RTM_DELQDISC NL_RTM_DELQDISC
  116. #define RTM_GETQDISC NL_RTM_GETQDISC
  117. #define RTM_NEWTCLASS NL_RTM_NEWTCLASS
  118. #define RTM_DELTCLASS NL_RTM_DELTCLASS
  119. #define RTM_GETTCLASS NL_RTM_GETTCLASS
  120. #define RTM_NEWTFILTER NL_RTM_NEWTFILTER
  121. #define RTM_DELTFILTER NL_RTM_DELTFILTER
  122. #define RTM_GETTFILTER NL_RTM_GETTFILTER
  123. #define RTM_NEWACTION NL_RTM_NEWACTION
  124. #define RTM_DELACTION NL_RTM_DELACTION
  125. #define RTM_GETACTION NL_RTM_GETACTION
  126. #define RTM_NEWPREFIX NL_RTM_NEWPREFIX
  127. #define RTM_GETMULTICAST NL_RTM_GETMULTICAST
  128. #define RTM_GETANYCAST NL_RTM_GETANYCAST
  129. #define RTM_NEWNEIGHTBL NL_RTM_NEWNEIGHTBL
  130. #define RTM_GETNEIGHTBL NL_RTM_GETNEIGHTBL
  131. #define RTM_SETNEIGHTBL NL_RTM_SETNEIGHTBL
  132. #define RTM_NEWNDUSEROPT NL_RTM_NEWNDUSEROPT
  133. #define RTM_NEWADDRLABEL NL_RTM_NEWADDRLABEL
  134. #define RTM_DELADDRLABEL NL_RTM_DELADDRLABEL
  135. #define RTM_GETADDRLABEL NL_RTM_GETADDRLABEL
  136. #define RTM_GETDCB NL_RTM_GETDCB
  137. #define RTM_SETDCB NL_RTM_SETDCB
  138. #define RTM_NEWNETCONF NL_RTM_NEWNETCONF
  139. #define RTM_GETNETCONF NL_RTM_GETNETCONF
  140. #define RTM_NEWMDB NL_RTM_NEWMDB
  141. #define RTM_DELMDB NL_RTM_DELMDB
  142. #define RTM_GETMDB NL_RTM_GETMDB
  143. #define RTM_NEWNSID NL_RTM_NEWNSID
  144. #define RTM_DELNSID NL_RTM_DELNSID
  145. #define RTM_GETNSID NL_RTM_GETNSID
  146. #define RTM_NEWSTATS NL_RTM_NEWSTATS
  147. #define RTM_GETSTATS NL_RTM_GETSTATS
  148. #define RTM_NEWNEXTHOP NL_RTM_NEWNEXTHOP
  149. #define RTM_DELNEXTHOP NL_RTM_DELNEXTHOP
  150. #define RTM_GETNEXTHOP NL_RTM_GETNEXTHOP
  151. #define __RTM_MAX __NL_RTM_MAX
  152. #define RTM_MAX (roundup2(__RTM_MAX, 4))
  153. /* rtnetlink multicast groups - backwards compatibility for userspace */
  154. #define RTMGRP_LINK 0x01
  155. #define RTMGRP_NOTIFY 0x02
  156. #define RTMGRP_NEIGH 0x04
  157. #define RTMGRP_TC 0x08
  158. #define RTMGRP_IPV4_IFADDR 0x10
  159. #define RTMGRP_IPV4_MROUTE 0x20
  160. #define RTMGRP_IPV4_ROUTE 0x40
  161. #define RTMGRP_IPV4_RULE 0x80
  162. #define RTMGRP_IPV6_IFADDR 0x100
  163. #define RTMGRP_IPV6_MROUTE 0x200
  164. #define RTMGRP_IPV6_ROUTE 0x400
  165. #define RTMGRP_IPV6_IFINFO 0x800
  166. #define RTMGRP_DECnet_IFADDR 0x1000
  167. #define RTMGRP_DECnet_ROUTE 0x4000
  168. #define RTMGRP_IPV6_PREFIX 0x20000
  169. #endif
  170. /* Defined NETLINK_ROUTE multicast groups */
  171. enum rtnetlink_groups {
  172. RTNLGRP_NONE,
  173. #define RTNLGRP_NONE RTNLGRP_NONE
  174. RTNLGRP_LINK,
  175. #define RTNLGRP_LINK RTNLGRP_LINK
  176. RTNLGRP_NOTIFY,
  177. #define RTNLGRP_NOTIFY RTNLGRP_NOTIFY
  178. RTNLGRP_NEIGH,
  179. #define RTNLGRP_NEIGH RTNLGRP_NEIGH
  180. RTNLGRP_TC,
  181. #define RTNLGRP_TC RTNLGRP_TC
  182. RTNLGRP_IPV4_IFADDR,
  183. #define RTNLGRP_IPV4_IFADDR RTNLGRP_IPV4_IFADDR
  184. RTNLGRP_IPV4_MROUTE,
  185. #define RTNLGRP_IPV4_MROUTE RTNLGRP_IPV4_MROUTE
  186. RTNLGRP_IPV4_ROUTE,
  187. #define RTNLGRP_IPV4_ROUTE RTNLGRP_IPV4_ROUTE
  188. RTNLGRP_IPV4_RULE,
  189. #define RTNLGRP_IPV4_RULE RTNLGRP_IPV4_RULE
  190. RTNLGRP_IPV6_IFADDR,
  191. #define RTNLGRP_IPV6_IFADDR RTNLGRP_IPV6_IFADDR
  192. RTNLGRP_IPV6_MROUTE,
  193. #define RTNLGRP_IPV6_MROUTE RTNLGRP_IPV6_MROUTE
  194. RTNLGRP_IPV6_ROUTE,
  195. #define RTNLGRP_IPV6_ROUTE RTNLGRP_IPV6_ROUTE
  196. RTNLGRP_IPV6_IFINFO,
  197. #define RTNLGRP_IPV6_IFINFO RTNLGRP_IPV6_IFINFO
  198. RTNLGRP_DECnet_IFADDR,
  199. #define RTNLGRP_DECnet_IFADDR RTNLGRP_DECnet_IFADDR
  200. RTNLGRP_NOP2,
  201. RTNLGRP_DECnet_ROUTE,
  202. #define RTNLGRP_DECnet_ROUTE RTNLGRP_DECnet_ROUTE
  203. RTNLGRP_DECnet_RULE,
  204. #define RTNLGRP_DECnet_RULE RTNLGRP_DECnet_RULE
  205. RTNLGRP_NOP4,
  206. RTNLGRP_IPV6_PREFIX,
  207. #define RTNLGRP_IPV6_PREFIX RTNLGRP_IPV6_PREFIX
  208. RTNLGRP_IPV6_RULE,
  209. #define RTNLGRP_IPV6_RULE RTNLGRP_IPV6_RULE
  210. RTNLGRP_ND_USEROPT,
  211. #define RTNLGRP_ND_USEROPT RTNLGRP_ND_USEROPT
  212. RTNLGRP_PHONET_IFADDR,
  213. #define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
  214. RTNLGRP_PHONET_ROUTE,
  215. #define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
  216. RTNLGRP_DCB,
  217. #define RTNLGRP_DCB RTNLGRP_DCB
  218. RTNLGRP_IPV4_NETCONF,
  219. #define RTNLGRP_IPV4_NETCONF RTNLGRP_IPV4_NETCONF
  220. RTNLGRP_IPV6_NETCONF,
  221. #define RTNLGRP_IPV6_NETCONF RTNLGRP_IPV6_NETCONF
  222. RTNLGRP_MDB,
  223. #define RTNLGRP_MDB RTNLGRP_MDB
  224. RTNLGRP_MPLS_ROUTE,
  225. #define RTNLGRP_MPLS_ROUTE RTNLGRP_MPLS_ROUTE
  226. RTNLGRP_NSID,
  227. #define RTNLGRP_NSID RTNLGRP_NSID
  228. RTNLGRP_MPLS_NETCONF,
  229. #define RTNLGRP_MPLS_NETCONF RTNLGRP_MPLS_NETCONF
  230. RTNLGRP_IPV4_MROUTE_R,
  231. #define RTNLGRP_IPV4_MROUTE_R RTNLGRP_IPV4_MROUTE_R
  232. RTNLGRP_IPV6_MROUTE_R,
  233. #define RTNLGRP_IPV6_MROUTE_R RTNLGRP_IPV6_MROUTE_R
  234. RTNLGRP_NEXTHOP,
  235. #define RTNLGRP_NEXTHOP RTNLGRP_NEXTHOP
  236. RTNLGRP_BRVLAN,
  237. #define RTNLGRP_BRVLAN RTNLGRP_BRVLAN
  238. __RTNLGRP_MAX
  239. };
  240. #define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
  241. /* Defined NETLINK_ROUTE virtual multicast address families */
  242. #define RTNL_FAMILY_IPMR 128 /* Not supported */
  243. #define RTNL_FAMILY_IP6MR 129 /* Not supported */
  244. #define RTNL_FAMILY_MAX 129
  245. #endif