1/* $NetBSD: ip_gre.c,v 1.21 2002/08/14 00:23:30 itojun Exp $ */ |
2/* $FreeBSD: head/sys/netinet/ip_gre.c 103032 2002-09-06 18:16:03Z sobomax $ */ |
3 4/* 5 * Copyright (c) 1998 The NetBSD Foundation, Inc. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to The NetBSD Foundation 9 * by Heiko W.Rupp <hwr@pilhuhn.de> 10 * --- 28 unchanged lines hidden (view full) --- 39 40/* 41 * deencapsulate tunneled packets and send them on 42 * output half is in net/if_gre.[ch] 43 * This currently handles IPPROTO_GRE, IPPROTO_MOBILE 44 */ 45 46#include <sys/cdefs.h> |
47__RCSID("@(#) $FreeBSD: head/sys/netinet/ip_gre.c 103032 2002-09-06 18:16:03Z sobomax $"); |
48 49#include "opt_inet.h" 50#include "opt_ns.h" 51#include "opt_atalk.h" 52#include "bpf.h" 53 54#include <sys/param.h> 55#include <sys/systm.h> --- 39 unchanged lines hidden (view full) --- 95#include <net/if_gre.h> 96 97#include <machine/stdarg.h> 98 99#if 1 100void gre_inet_ntoa(struct in_addr in); /* XXX */ 101#endif 102 |
103static struct gre_softc *gre_lookup __P((struct mbuf *, u_int8_t)); |
104 |
105static int gre_input2 __P((struct mbuf *, int, u_char)); |
106 107/* 108 * De-encapsulate a packet and feed it back through ip input (this 109 * routine is called whenever IP gets a packet with proto type 110 * IPPROTO_GRE and a local destination address). 111 * This really is simple 112 */ 113void --- 27 unchanged lines hidden (view full) --- 141 * decapsulate. 142 * Does the real work and is called from gre_input() (above) 143 * returns 0 if packet is not yet processed 144 * and 1 if it needs no further processing 145 * proto is the protocol number of the "calling" foo_input() 146 * routine. 147 */ 148 |
149static int |
150gre_input2(struct mbuf *m ,int hlen, u_char proto) 151{ 152 struct greip *gip = mtod(m, struct greip *); 153 int s; 154 struct ifqueue *ifq; 155 struct gre_softc *sc; 156 u_short flags; 157 --- 176 unchanged lines hidden (view full) --- 334 IF_ENQUEUE(ifq,m); 335 } 336 splx(s); 337} 338 339/* 340 * Find the gre interface associated with our src/dst/proto set. 341 */ |
342static struct gre_softc * |
343gre_lookup(m, proto) 344 struct mbuf *m; 345 u_int8_t proto; 346{ 347 struct ip *ip = mtod(m, struct ip *); 348 struct gre_softc *sc; 349 350 for (sc = LIST_FIRST(&gre_softc_list); sc != NULL; 351 sc = LIST_NEXT(sc, sc_list)) { 352 if ((sc->g_dst.s_addr == ip->ip_src.s_addr) && 353 (sc->g_src.s_addr == ip->ip_dst.s_addr) && 354 (sc->g_proto == proto) && 355 ((sc->sc_if.if_flags & IFF_UP) != 0)) 356 return (sc); 357 } 358 359 return (NULL); 360} |