The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/if_gre.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: if_gre.h,v 1.13 2003/11/10 08:51:52 wiz Exp $ */
    2 
    3 /*
    4  * Copyright (c) 1998 The NetBSD Foundation, Inc.
    5  * All rights reserved
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Heiko W.Rupp <hwr@pilhuhn.de>
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *        This product includes software developed by the NetBSD
   21  *        Foundation, Inc. and its contributors.
   22  * 4. Neither the name of The NetBSD Foundation nor the names of its
   23  *    contributors may be used to endorse or promote products derived
   24  *    from this software without specific prior written permission.
   25  *    
   26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   36  * POSSIBILITY OF SUCH DAMAGE.
   37  */
   38 
   39 #ifndef _NET_IF_GRE_H
   40 #define _NET_IF_GRE_H
   41 
   42 #include <sys/queue.h>
   43 
   44 struct gre_softc {
   45         struct ifnet sc_if;
   46         LIST_ENTRY(gre_softc) sc_list;
   47         int gre_unit;
   48         int gre_flags;
   49         struct in_addr g_src;   /* source address of gre packets */
   50         struct in_addr g_dst;   /* destination address of gre packets */
   51         struct route route;     /* routing entry that determines, where a
   52                                    encapsulated packet should go */
   53         u_char g_proto;         /* protocol of encapsulator */
   54 };      
   55 
   56 
   57 struct gre_h {
   58         u_int16_t flags;        /* GRE flags */
   59         u_int16_t ptype;        /* protocol type of payload typically 
   60                                    Ether protocol type*/
   61 /* 
   62  *  from here on: fields are optional, presence indicated by flags 
   63  *
   64         u_int_16 checksum       checksum (one-complements of GRE header
   65                                 and payload
   66                                 Present if (ck_pres | rt_pres == 1).
   67                                 Valid if (ck_pres == 1).
   68         u_int_16 offset         offset from start of routing filed to
   69                                 first octet of active SRE (see below).
   70                                 Present if (ck_pres | rt_pres == 1).
   71                                 Valid if (rt_pres == 1).
   72         u_int_32 key            inserted by encapsulator e.g. for
   73                                 authentication
   74                                 Present if (key_pres ==1 ).
   75         u_int_32 seq_num        Sequence number to allow for packet order
   76                                 Present if (seq_pres ==1 ).
   77         struct gre_sre[] routing Routing fileds (see below)
   78                                 Present if (rt_pres == 1)
   79  */
   80 } __attribute__((__packed__));
   81 
   82 struct greip {
   83         struct ip gi_i;
   84         struct gre_h  gi_g;
   85 } __attribute__((__packed__));
   86 
   87 #define gi_pr           gi_i.ip_p
   88 #define gi_len          gi_i.ip_len
   89 #define gi_src          gi_i.ip_src
   90 #define gi_dst          gi_i.ip_dst
   91 #define gi_ptype        gi_g.ptype
   92 #define gi_flags        gi_g.flags
   93 
   94 #define GRE_CP          0x8000  /* Checksum Present */
   95 #define GRE_RP          0x4000  /* Routing Present */
   96 #define GRE_KP          0x2000  /* Key Present */
   97 #define GRE_SP          0x1000  /* Sequence Present */
   98 #define GRE_SS          0x0800  /* Strict Source Route */
   99 
  100 /*
  101  * gre_sre defines a Source route Entry. These are needed if packets
  102  * should be routed over more than one tunnel hop by hop
  103  */
  104 struct gre_sre {
  105         u_int16_t sre_family;   /* address family */
  106         u_char  sre_offset;     /* offset to first octet of active entry */
  107         u_char  sre_length;     /* number of octets in the SRE. 
  108                                    sre_lengthl==0 -> last entry. */
  109         u_char  *sre_rtinfo;    /* the routing information */
  110 };
  111 
  112 struct greioctl {
  113         int unit;
  114         struct in_addr addr;
  115 };
  116 
  117 /* for mobile encaps */
  118 
  119 struct mobile_h {
  120         u_int16_t proto;                /* protocol and S-bit */
  121         u_int16_t hcrc;                 /* header checksum */
  122         u_int32_t odst;                 /* original destination address */
  123         u_int32_t osrc;                 /* original source addr, if S-bit set */
  124 } __attribute__((__packed__));
  125 
  126 struct mobip_h {
  127         struct ip       mi;
  128         struct mobile_h mh;
  129 } __attribute__((__packed__));
  130 
  131 
  132 #define MOB_H_SIZ_S             (sizeof(struct mobile_h) - sizeof(u_int32_t))
  133 #define MOB_H_SIZ_L             (sizeof(struct mobile_h))
  134 #define MOB_H_SBIT      0x0080
  135 
  136 #define GRE_TTL 30
  137 extern int ip_gre_ttl;
  138 
  139 /* 
  140  * ioctls needed to manipulate the interface 
  141  */
  142 
  143 #define GRESADDRS       _IOW('i', 101, struct ifreq)
  144 #define GRESADDRD       _IOW('i', 102, struct ifreq)   
  145 #define GREGADDRS       _IOWR('i', 103, struct ifreq)
  146 #define GREGADDRD       _IOWR('i', 104, struct ifreq)
  147 #define GRESPROTO       _IOW('i' , 105, struct ifreq)
  148 #define GREGPROTO       _IOWR('i', 106, struct ifreq)
  149 
  150 #ifdef _KERNEL
  151 LIST_HEAD(gre_softc_head, gre_softc);
  152 extern struct gre_softc_head gre_softc_list;
  153 
  154 int     gre_ioctl __P((struct ifnet *, u_long, caddr_t));
  155 int     gre_output __P((struct ifnet *, struct mbuf *, struct sockaddr *,
  156             struct rtentry *));
  157 u_int16_t gre_in_cksum(u_short *, u_int);
  158 #endif /* _KERNEL */
  159 
  160 #endif

Cache object: 6b9fe155e85c464be685410e0c1d2938


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.