Date: Tue, 26 Apr 2005 05:10:18 GMT From: Andrew Alston <aalston@its.uct.ac.za> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/80340: [patch] [if_gre] V6 support through GRE tunnels Message-ID: <200504260510.j3Q5AIm9098006@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/80340; it has been noted by GNATS. From: Andrew Alston <aalston@its.uct.ac.za> To: bug-followup@FreeBSD.org, aalston@its.uct.ac.za Cc: Subject: Re: kern/80340: [patch] [if_gre] V6 support through GRE tunnels Date: Tue, 26 Apr 2005 07:05:08 +0200 Hey, sorry about this! Dunno what happened there, I've incldued the patch inline below: --- Patch follows --- diff -ruN sys/net.bak/if_gre.c sys/net/if_gre.c --- sys/net.bak/if_gre.c Mon Apr 25 21:29:50 2005 +++ sys/net/if_gre.c Mon Apr 25 21:30:24 2005 @@ -39,7 +39,6 @@ /* * Encapsulate L3 protocols into IP - * See RFC 1701 and 1702 for more details. * If_gre is compatible with Cisco GRE tunnels, so you can * have a NetBSD box as the other end of a tunnel interface of a Cisco * router. See gre(4) for more details. @@ -230,6 +229,8 @@ struct gre_softc *sc = ifp->if_softc; struct greip *gh; struct ip *ip; + u_short ip_id = 0; + u_int8_t ip_tos = 0; u_int16_t etype = 0; struct mobile_h mob_h; @@ -338,6 +339,8 @@ switch (dst->sa_family) { case AF_INET: ip = mtod(m, struct ip *); + ip_tos = ip->ip_tos; + ip_id = ip->ip_id; etype = ETHERTYPE_IP; break; #ifdef NETATALK @@ -345,6 +348,12 @@ etype = ETHERTYPE_ATALK; break; #endif +#ifdef INET6 + case AF_INET6: + ip_id = ip_newid(); + etype = ETHERTYPE_IPV6; + break; +#endif default: _IF_DROP(&ifp->if_snd); m_freem(m); @@ -379,8 +388,8 @@ ((struct ip*)gh)->ip_v = IPPROTO_IPV4; ((struct ip*)gh)->ip_hl = (sizeof(struct ip)) >> 2; ((struct ip*)gh)->ip_ttl = GRE_TTL; - ((struct ip*)gh)->ip_tos = ip->ip_tos; - ((struct ip*)gh)->ip_id = ip->ip_id; + ((struct ip*)gh)->ip_tos = ip_tos; + ((struct ip*)gh)->ip_id = ip_id; gh->gi_len = m->m_pkthdr.len; } @@ -457,6 +466,9 @@ switch (ifr->ifr_addr.sa_family) { #ifdef INET case AF_INET: + break; +#endif +#ifdef INET6 case AF_INET6: break; #endif default: diff -ruN sys/netinet.bak/ip_gre.c sys/netinet/ip_gre.c --- sys/netinet.bak/ip_gre.c Mon Apr 25 21:29:54 2005 +++ sys/netinet/ip_gre.c Mon Apr 25 21:30:35 2005 @@ -45,6 +45,7 @@ #include "opt_inet.h" #include "opt_atalk.h" +#include "opt_inet6.h" #include <sys/param.h> #include <sys/systm.h> @@ -81,6 +82,10 @@ #include <netatalk/at_extern.h> #endif +#ifdef INET6 +#include <netinet/ip6.h> +#endif + /* Needs IP headers. */ #include <net/if_gre.h> @@ -189,8 +194,11 @@ isr = NETISR_ATALK1; break; #endif +#ifdef INET6 case ETHERTYPE_IPV6: - /* FALLTHROUGH */ + isr = NETISR_IPV6; + break; +#endif default: /* others not yet supported */ return (0); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504260510.j3Q5AIm9098006>