linux/include/linux/mroute6.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __LINUX_MROUTE6_H
   3#define __LINUX_MROUTE6_H
   4
   5
   6#include <linux/pim.h>
   7#include <linux/skbuff.h>       /* for struct sk_buff_head */
   8#include <net/net_namespace.h>
   9#include <uapi/linux/mroute6.h>
  10
  11#ifdef CONFIG_IPV6_MROUTE
  12static inline int ip6_mroute_opt(int opt)
  13{
  14        return (opt >= MRT6_BASE) && (opt <= MRT6_MAX);
  15}
  16#else
  17static inline int ip6_mroute_opt(int opt)
  18{
  19        return 0;
  20}
  21#endif
  22
  23struct sock;
  24
  25#ifdef CONFIG_IPV6_MROUTE
  26extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, unsigned int);
  27extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
  28extern int ip6_mr_input(struct sk_buff *skb);
  29extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg);
  30extern int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
  31extern int ip6_mr_init(void);
  32extern void ip6_mr_cleanup(void);
  33#else
  34static inline
  35int ip6_mroute_setsockopt(struct sock *sock,
  36                          int optname, char __user *optval, unsigned int optlen)
  37{
  38        return -ENOPROTOOPT;
  39}
  40
  41static inline
  42int ip6_mroute_getsockopt(struct sock *sock,
  43                          int optname, char __user *optval, int __user *optlen)
  44{
  45        return -ENOPROTOOPT;
  46}
  47
  48static inline
  49int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg)
  50{
  51        return -ENOIOCTLCMD;
  52}
  53
  54static inline int ip6_mr_init(void)
  55{
  56        return 0;
  57}
  58
  59static inline void ip6_mr_cleanup(void)
  60{
  61        return;
  62}
  63#endif
  64
  65struct mif_device {
  66        struct net_device       *dev;                   /* Device we are using */
  67        unsigned long   bytes_in,bytes_out;
  68        unsigned long   pkt_in,pkt_out;         /* Statistics                   */
  69        unsigned long   rate_limit;             /* Traffic shaping (NI)         */
  70        unsigned char   threshold;              /* TTL threshold                */
  71        unsigned short  flags;                  /* Control flags                */
  72        int             link;                   /* Physical interface index     */
  73};
  74
  75#define VIFF_STATIC 0x8000
  76
  77struct mfc6_cache {
  78        struct list_head list;
  79        struct in6_addr mf6c_mcastgrp;                  /* Group the entry belongs to   */
  80        struct in6_addr mf6c_origin;                    /* Source of packet             */
  81        mifi_t mf6c_parent;                     /* Source interface             */
  82        int mfc_flags;                          /* Flags on line                */
  83
  84        union {
  85                struct {
  86                        unsigned long expires;
  87                        struct sk_buff_head unresolved; /* Unresolved buffers           */
  88                } unres;
  89                struct {
  90                        unsigned long last_assert;
  91                        int minvif;
  92                        int maxvif;
  93                        unsigned long bytes;
  94                        unsigned long pkt;
  95                        unsigned long wrong_if;
  96                        unsigned long lastuse;
  97                        unsigned char ttls[MAXMIFS];    /* TTL thresholds               */
  98                } res;
  99        } mfc_un;
 100};
 101
 102#define MFC_STATIC              1
 103#define MFC_NOTIFY              2
 104
 105#define MFC6_LINES              64
 106
 107#define MFC6_HASH(a, g) (((__force u32)(a)->s6_addr32[0] ^ \
 108                          (__force u32)(a)->s6_addr32[1] ^ \
 109                          (__force u32)(a)->s6_addr32[2] ^ \
 110                          (__force u32)(a)->s6_addr32[3] ^ \
 111                          (__force u32)(g)->s6_addr32[0] ^ \
 112                          (__force u32)(g)->s6_addr32[1] ^ \
 113                          (__force u32)(g)->s6_addr32[2] ^ \
 114                          (__force u32)(g)->s6_addr32[3]) % MFC6_LINES)
 115
 116#define MFC_ASSERT_THRESH (3*HZ)                /* Maximal freq. of asserts */
 117
 118struct rtmsg;
 119extern int ip6mr_get_route(struct net *net, struct sk_buff *skb,
 120                           struct rtmsg *rtm, u32 portid);
 121
 122#ifdef CONFIG_IPV6_MROUTE
 123extern struct sock *mroute6_socket(struct net *net, struct sk_buff *skb);
 124extern int ip6mr_sk_done(struct sock *sk);
 125#else
 126static inline struct sock *mroute6_socket(struct net *net, struct sk_buff *skb)
 127{
 128        return NULL;
 129}
 130static inline int ip6mr_sk_done(struct sock *sk)
 131{
 132        return 0;
 133}
 134#endif
 135#endif
 136