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