11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __NET_IPIP_H 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __NET_IPIP_H 1 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/if_tunnel.h> 5c439cb2e4b13cf1cb2abcd006b906315a3381323Herbert Xu#include <net/ip.h> 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Keep error state on tunnel for 30 sec */ 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPTUNNEL_ERR_TIMEO (30*HZ) 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 10fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明/* 6rd prefix/relay information */ 11fd2c3ef761fbc5e6c27fa7d40b30cda06bfcd7d8Eric Dumazetstruct ip_tunnel_6rd_parm { 12fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 struct in6_addr prefix; 13fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 __be32 relay_prefix; 14fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 u16 prefixlen; 15fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 u16 relay_prefixlen; 16fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明}; 17fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 18fd2c3ef761fbc5e6c27fa7d40b30cda06bfcd7d8Eric Dumazetstruct ip_tunnel { 196f0bcf152582e7403155627a38e07bf3ef7f3cf5Eric Dumazet struct ip_tunnel __rcu *next; 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *dev; 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int err_count; /* Number of arrived ICMP errors */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long err_time; /* Time when the last ICMP error arrived */ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* These four fields used only by GRE */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 i_seqno; /* The last seen seqno */ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __u32 o_seqno; /* The last output seqno */ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int hlen; /* Precalculated GRE header length */ 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int mlink; 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct ip_tunnel_parm parms; 32300aaeeaab5f447fcf40e911afe96df3de28f0dbYOSHIFUJI Hideaki 33fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 /* for SIT */ 34fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明#ifdef CONFIG_IPV6_SIT_6RD 35fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明 struct ip_tunnel_6rd_parm ip6rd; 36fa857afcf77da669eb6b7031ec07ad14b912c307YOSHIFUJI Hideaki / 吉藤英明#endif 37b33eab08445d86c3d0dec3111ce10df561328705Eric Dumazet struct ip_tunnel_prl_entry __rcu *prl; /* potential router list */ 38300aaeeaab5f447fcf40e911afe96df3de28f0dbYOSHIFUJI Hideaki unsigned int prl_count; /* # of entries in PRL */ 39fadf6bf06069138f8e97c9a963be38348ba2708bTemplin, Fred L}; 40fadf6bf06069138f8e97c9a963be38348ba2708bTemplin, Fred L 41fd2c3ef761fbc5e6c27fa7d40b30cda06bfcd7d8Eric Dumazetstruct ip_tunnel_prl_entry { 42b33eab08445d86c3d0dec3111ce10df561328705Eric Dumazet struct ip_tunnel_prl_entry __rcu *next; 43300aaeeaab5f447fcf40e911afe96df3de28f0dbYOSHIFUJI Hideaki __be32 addr; 44300aaeeaab5f447fcf40e911afe96df3de28f0dbYOSHIFUJI Hideaki u16 flags; 45ef9a9d1183b36fbf3de327f44596533b770c3005Eric Dumazet struct rcu_head rcu_head; 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 48290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet#define __IPTUNNEL_XMIT(stats1, stats2) do { \ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int err; \ 5064194c31a0b6f5d84703b772113aafc400eeaad6Herbert Xu int pkt_len = skb->len - skb_transport_offset(skb); \ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds \ 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds skb->ip_summed = CHECKSUM_NONE; \ 53d8d1f30b95a635dbd610dcc5eb641aca8f4768cfChangli Gao ip_select_ident(iph, &rt->dst, NULL); \ 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds \ 55c439cb2e4b13cf1cb2abcd006b906315a3381323Herbert Xu err = ip_local_out(skb); \ 560bfbedb14a8a96c529341bec88991a92b41fac72Eric Dumazet if (likely(net_xmit_eval(err) == 0)) { \ 57290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet (stats1)->tx_bytes += pkt_len; \ 58290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet (stats1)->tx_packets++; \ 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } else { \ 60290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet (stats2)->tx_errors++; \ 61290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet (stats2)->tx_aborted_errors++; \ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } \ 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} while (0) 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 65290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet#define IPTUNNEL_XMIT() __IPTUNNEL_XMIT(txq, stats) 66290b895e0ba4552dfcfc4bd35759c192345b934aEric Dumazet 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 68