GRE over IPv6
Subsystems (3)
PATCH RESEND v2 1/1 GRE over IPv6
GRE over IPv6 implementation.
Signed-off-by Dmitry Kozlov <[email protected]>
---
Sorry, previous patch was malformed by mail program.
include/linux/if_arp.h | 1 + include/linux/if_tunnel.h | 3 + include/linux/ip6_tunnel.h | 17 + include/net/ip6_tunnel.h | 41 +- include/net/ipv6.h | 1 + net/ipv6/Kconfig | 16 + net/ipv6/Makefile | 1 + net/ipv6/ip6_gre.c | 1791 ++++++++++++++++++++++++++++++++++++++++++++ net/ipv6/ip6_tunnel.c | 89 ++- 9 files changed, 1934 insertions(+), 26 deletions(-)
include/linux/if_arp.h +1 -0
@@ -92,6 +92,7 @@#define ARPHRD_PHONET 820/* PhoNet media type */ #define ARPHRD_PHONET_PIPE 821/* PhoNet pipe header */ #define ARPHRD_CAIF 822/* CAIF media type */ +#define ARPHRD_IP6GRE 823/* GRE over IPv6 */ #define ARPHRD_VOID 0xFFFF/* Void type, nothing is known */ #define ARPHRD_NONE 0xFFFE/* zero header length */
include/linux/if_tunnel.h +3 -0
@@ -75,6 +75,9 @@ enum {IFLA_GRE_TTL ,IFLA_GRE_TOS ,IFLA_GRE_PMTUDISC , +IFLA_GRE_ENCAP_LIMIT , +IFLA_GRE_FLOWINFO , +IFLA_GRE_FLAGS , __IFLA_GRE_MAX, };
include/linux/ip6_tunnel.h +17 -0
@@ -31,4 +31,21 @@ struct ip6_tnl_parm { struct in6_addr raddr; /* remote tunnel end-point address */ }; +struct ip6_tnl_parm2 { +char name[IFNAMSIZ ];/* name of tunnel device */ +int link;/* ifindex of underlying L2 interface */ +__u8 proto;/* tunnel protocol */ +__u8 encap_limit;/* encapsulation limit for tunnel */ +__u8 hop_limit;/* hop limit for tunnel */ +__be32 flowinfo;/* traffic class and flowlabel for tunnel */ +__u32 flags;/* tunnel flags */ +struct in6_addr laddr;/* local tunnel end-point address */ +struct in6_addr raddr;/* remote tunnel end-point address */ + +__be16 i_flags; +__be16 o_flags; +__be32 i_key; +__be32 o_key; +}; +#endif
include/net/ip6_tunnel.h +39 -2
64 lines not on this page · raw message
include/net/ipv6.h +1 -0
@@ -34,6 +34,7 @@#define NEXTHDR_IPV6 41/* IPv6 in IPv6 */ #define NEXTHDR_ROUTING 43/* Routing header. */ #define NEXTHDR_FRAGMENT 44/* Fragmentation/reassembly header. */ +#define NEXTHDR_GRE 47/* GRE header. */ #define NEXTHDR_ESP 50/* Encapsulating security payload. */ #define NEXTHDR_AUTH 51/* Authentication header. */ #define NEXTHDR_ICMP 58/* ICMP for IPv6. */
net/ipv6/Kconfig +16 -0
@@ -201,6 +201,22 @@ config IPV6_TUNNEL If unsure, say N. +config IPV6_GRE + tristate "IPv6: GRE tunnel" + select IPV6_TUNNEL + ---help--- + Tunneling means encapsulating data of one protocol type within + another protocol and sending it over a channel that understands the + encapsulating protocol. This particular tunneling driver implements + GRE (Generic Routing Encapsulation) and at this time allows + encapsulating of IPv4 or IPv6 over existing IPv6 infrastructure. + This driver is useful if the other endpoint is a Cisco router: Cisco + likes GRE much better than the other Linux tunneling driver ("IP + tunneling" above). In addition, GRE allows multicast redistribution + through the tunnel. + + Saying M here will produce a module called ip6_gre. If unsure, say N. + config IPV6_MULTIPLE_TABLES bool "IPv6: Multiple Routing Tables" depends on EXPERIMENTAL
net/ipv6/Makefile +1 -0
@@ -36,6 +36,7 @@ obj-$(CONFIG_NETFILTER) += netfilter/ obj-$(CONFIG_IPV6_SIT) += sit.o obj-$(CONFIG_IPV6_TUNNEL) += ip6_tunnel.o +obj-$(CONFIG_IPV6_GRE) += ip6_gre.o obj-y += addrconf_core.o exthdrs_core.o
net/ipv6/ip6_gre.c new file +1791 -0
1,791 lines not on this page · raw message
net/ipv6/ip6_tunnel.c +65 -24
250 lines not on this page · raw message