linux/include/net/ip6_tunnel.h
<<
>>
Prefs
   1#ifndef _NET_IP6_TUNNEL_H
   2#define _NET_IP6_TUNNEL_H
   3
   4#include <linux/ipv6.h>
   5#include <linux/netdevice.h>
   6#include <linux/if_tunnel.h>
   7#include <linux/ip6_tunnel.h>
   8
   9#define IP6TUNNEL_ERR_TIMEO (30*HZ)
  10
  11/* capable of sending packets */
  12#define IP6_TNL_F_CAP_XMIT 0x10000
  13/* capable of receiving packets */
  14#define IP6_TNL_F_CAP_RCV 0x20000
  15/* determine capability on a per-packet basis */
  16#define IP6_TNL_F_CAP_PER_PACKET 0x40000
  17
  18struct __ip6_tnl_parm {
  19        char name[IFNAMSIZ];    /* name of tunnel device */
  20        int link;               /* ifindex of underlying L2 interface */
  21        __u8 proto;             /* tunnel protocol */
  22        __u8 encap_limit;       /* encapsulation limit for tunnel */
  23        __u8 hop_limit;         /* hop limit for tunnel */
  24        __be32 flowinfo;        /* traffic class and flowlabel for tunnel */
  25        __u32 flags;            /* tunnel flags */
  26        struct in6_addr laddr;  /* local tunnel end-point address */
  27        struct in6_addr raddr;  /* remote tunnel end-point address */
  28
  29        __be16                  i_flags;
  30        __be16                  o_flags;
  31        __be32                  i_key;
  32        __be32                  o_key;
  33};
  34
  35/* IPv6 tunnel */
  36struct ip6_tnl {
  37        struct ip6_tnl __rcu *next;     /* next tunnel in list */
  38        struct net_device *dev; /* virtual device associated with tunnel */
  39        struct net *net;        /* netns for packet i/o */
  40        struct __ip6_tnl_parm parms;    /* tunnel configuration parameters */
  41        struct flowi fl;        /* flowi template for xmit */
  42        struct dst_entry *dst_cache;    /* cached dst */
  43        u32 dst_cookie;
  44
  45        int err_count;
  46        unsigned long err_time;
  47
  48        /* These fields used only by GRE */
  49        __u32 i_seqno;  /* The last seen seqno  */
  50        __u32 o_seqno;  /* The last output seqno */
  51        int hlen;       /* Precalculated GRE header length */
  52        int mlink;
  53};
  54
  55/* Tunnel encapsulation limit destination sub-option */
  56
  57struct ipv6_tlv_tnl_enc_lim {
  58        __u8 type;              /* type-code for option         */
  59        __u8 length;            /* option length                */
  60        __u8 encap_limit;       /* tunnel encapsulation limit   */
  61} __packed;
  62
  63struct dst_entry *ip6_tnl_dst_check(struct ip6_tnl *t);
  64void ip6_tnl_dst_reset(struct ip6_tnl *t);
  65void ip6_tnl_dst_store(struct ip6_tnl *t, struct dst_entry *dst);
  66int ip6_tnl_rcv_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
  67                const struct in6_addr *raddr);
  68int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
  69                     const struct in6_addr *raddr);
  70__u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw);
  71__u32 ip6_tnl_get_cap(struct ip6_tnl *t, const struct in6_addr *laddr,
  72                             const struct in6_addr *raddr);
  73struct net *ip6_tnl_get_link_net(const struct net_device *dev);
  74int ip6_tnl_get_iflink(const struct net_device *dev);
  75
  76static inline void ip6tunnel_xmit(struct sock *sk, struct sk_buff *skb,
  77                                  struct net_device *dev)
  78{
  79        struct net_device_stats *stats = &dev->stats;
  80        int pkt_len, err;
  81
  82        pkt_len = skb->len;
  83        err = ip6_local_out_sk(sk, skb);
  84
  85        if (net_xmit_eval(err) == 0) {
  86                struct pcpu_sw_netstats *tstats = this_cpu_ptr(dev->tstats);
  87                u64_stats_update_begin(&tstats->syncp);
  88                tstats->tx_bytes += pkt_len;
  89                tstats->tx_packets++;
  90                u64_stats_update_end(&tstats->syncp);
  91        } else {
  92                stats->tx_errors++;
  93                stats->tx_aborted_errors++;
  94        }
  95}
  96#endif
  97