![YOSHIFUJI Hideaki / 吉藤英明](/assets/img/avatar_default.png)
IPv6 Rapid Deployment (6rd; draft-ietf-softwire-ipv6-6rd) builds upon mechanisms of 6to4 (RFC3056) to enable a service provider to rapidly deploy IPv6 unicast service to IPv4 sites to which it provides customer premise equipment. Like 6to4, it utilizes stateless IPv6 in IPv4 encapsulation in order to transit IPv4-only network infrastructure. Unlike 6to4, a 6rd service provider uses an IPv6 prefix of its own in place of the fixed 6to4 prefix. With this option enabled, the SIT driver offers 6rd functionality by providing additional ioctl API to configure the IPv6 Prefix for in stead of static 2002::/16 for 6to4. Original patch was done by Alexandre Cassen <acassen@freebox.fr> based on old Internet-Draft. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
68 lines
1.5 KiB
C
68 lines
1.5 KiB
C
#ifndef __NET_IPIP_H
|
|
#define __NET_IPIP_H 1
|
|
|
|
#include <linux/if_tunnel.h>
|
|
#include <net/ip.h>
|
|
|
|
/* Keep error state on tunnel for 30 sec */
|
|
#define IPTUNNEL_ERR_TIMEO (30*HZ)
|
|
|
|
/* 6rd prefix/relay information */
|
|
struct ip_tunnel_6rd_parm
|
|
{
|
|
struct in6_addr prefix;
|
|
__be32 relay_prefix;
|
|
u16 prefixlen;
|
|
u16 relay_prefixlen;
|
|
};
|
|
|
|
struct ip_tunnel
|
|
{
|
|
struct ip_tunnel *next;
|
|
struct net_device *dev;
|
|
|
|
int err_count; /* Number of arrived ICMP errors */
|
|
unsigned long err_time; /* Time when the last ICMP error arrived */
|
|
|
|
/* These four fields used only by GRE */
|
|
__u32 i_seqno; /* The last seen seqno */
|
|
__u32 o_seqno; /* The last output seqno */
|
|
int hlen; /* Precalculated GRE header length */
|
|
int mlink;
|
|
|
|
struct ip_tunnel_parm parms;
|
|
|
|
/* for SIT */
|
|
#ifdef CONFIG_IPV6_SIT_6RD
|
|
struct ip_tunnel_6rd_parm ip6rd;
|
|
#endif
|
|
struct ip_tunnel_prl_entry *prl; /* potential router list */
|
|
unsigned int prl_count; /* # of entries in PRL */
|
|
};
|
|
|
|
struct ip_tunnel_prl_entry
|
|
{
|
|
struct ip_tunnel_prl_entry *next;
|
|
__be32 addr;
|
|
u16 flags;
|
|
};
|
|
|
|
#define IPTUNNEL_XMIT() do { \
|
|
int err; \
|
|
int pkt_len = skb->len - skb_transport_offset(skb); \
|
|
\
|
|
skb->ip_summed = CHECKSUM_NONE; \
|
|
ip_select_ident(iph, &rt->u.dst, NULL); \
|
|
\
|
|
err = ip_local_out(skb); \
|
|
if (likely(net_xmit_eval(err) == 0)) { \
|
|
txq->tx_bytes += pkt_len; \
|
|
txq->tx_packets++; \
|
|
} else { \
|
|
stats->tx_errors++; \
|
|
stats->tx_aborted_errors++; \
|
|
} \
|
|
} while (0)
|
|
|
|
#endif
|