mroute.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __LINUX_MROUTE_H
  3. #define __LINUX_MROUTE_H
  4. #include <linux/in.h>
  5. #include <linux/pim.h>
  6. #include <net/fib_rules.h>
  7. #include <net/fib_notifier.h>
  8. #include <uapi/linux/mroute.h>
  9. #include <linux/mroute_base.h>
  10. #include <linux/sockptr.h>
  11. #ifdef CONFIG_IP_MROUTE
  12. static inline int ip_mroute_opt(int opt)
  13. {
  14. return opt >= MRT_BASE && opt <= MRT_MAX;
  15. }
  16. int ip_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int);
  17. int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
  18. int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg);
  19. int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
  20. int ip_mr_init(void);
  21. bool ipmr_rule_default(const struct fib_rule *rule);
  22. #else
  23. static inline int ip_mroute_setsockopt(struct sock *sock, int optname,
  24. sockptr_t optval, unsigned int optlen)
  25. {
  26. return -ENOPROTOOPT;
  27. }
  28. static inline int ip_mroute_getsockopt(struct sock *sock, int optname,
  29. char __user *optval, int __user *optlen)
  30. {
  31. return -ENOPROTOOPT;
  32. }
  33. static inline int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
  34. {
  35. return -ENOIOCTLCMD;
  36. }
  37. static inline int ip_mr_init(void)
  38. {
  39. return 0;
  40. }
  41. static inline int ip_mroute_opt(int opt)
  42. {
  43. return 0;
  44. }
  45. static inline bool ipmr_rule_default(const struct fib_rule *rule)
  46. {
  47. return true;
  48. }
  49. #endif
  50. #define VIFF_STATIC 0x8000
  51. struct mfc_cache_cmp_arg {
  52. __be32 mfc_mcastgrp;
  53. __be32 mfc_origin;
  54. };
  55. /**
  56. * struct mfc_cache - multicast routing entries
  57. * @_c: Common multicast routing information; has to be first [for casting]
  58. * @mfc_mcastgrp: destination multicast group address
  59. * @mfc_origin: source address
  60. * @cmparg: used for rhashtable comparisons
  61. */
  62. struct mfc_cache {
  63. struct mr_mfc _c;
  64. union {
  65. struct {
  66. __be32 mfc_mcastgrp;
  67. __be32 mfc_origin;
  68. };
  69. struct mfc_cache_cmp_arg cmparg;
  70. };
  71. };
  72. struct rtmsg;
  73. int ipmr_get_route(struct net *net, struct sk_buff *skb,
  74. __be32 saddr, __be32 daddr,
  75. struct rtmsg *rtm, u32 portid);
  76. #endif