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/netinet/ip_mroute.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: ip_mroute.h,v 1.21 2003/06/26 03:35:00 itojun Exp $    */
    2 
    3 /*
    4  * Definitions for IP multicast forwarding.
    5  *
    6  * Written by David Waitzman, BBN Labs, August 1988.
    7  * Modified by Steve Deering, Stanford, February 1989.
    8  * Modified by Ajit Thyagarajan, PARC, August 1993.
    9  * Modified by Ajit Thyagarajan, PARC, August 1994.
   10  *
   11  * MROUTING Revision: 1.2
   12  */
   13 
   14 #ifndef _NETINET_IP_MROUTE_H_
   15 #define _NETINET_IP_MROUTE_H_
   16 
   17 #include <sys/queue.h>
   18 #include <sys/callout.h>
   19 
   20 /*
   21  * Multicast Routing set/getsockopt commands.
   22  */
   23 #define MRT_INIT                100     /* initialize forwarder */
   24 #define MRT_DONE                101     /* shut down forwarder */
   25 #define MRT_ADD_VIF             102     /* create virtual interface */
   26 #define MRT_DEL_VIF             103     /* delete virtual interface */
   27 #define MRT_ADD_MFC             104     /* insert forwarding cache entry */
   28 #define MRT_DEL_MFC             105     /* delete forwarding cache entry */
   29 #define MRT_VERSION             106     /* get kernel version number */
   30 #define MRT_ASSERT              107     /* enable PIM assert processing */
   31 
   32 
   33 /*
   34  * Types and macros for handling bitmaps with one bit per virtual interface.
   35  */
   36 #define MAXVIFS 32
   37 typedef u_int32_t vifbitmap_t;
   38 typedef u_int16_t vifi_t;               /* type of a vif index */
   39 
   40 #define VIFM_SET(n, m)                  ((m) |= (1 << (n)))
   41 #define VIFM_CLR(n, m)                  ((m) &= ~(1 << (n)))
   42 #define VIFM_ISSET(n, m)                ((m) & (1 << (n)))
   43 #define VIFM_SETALL(m)                  ((m) = 0xffffffff)
   44 #define VIFM_CLRALL(m)                  ((m) = 0x00000000)
   45 #define VIFM_COPY(mfrom, mto)           ((mto) = (mfrom))
   46 #define VIFM_SAME(m1, m2)               ((m1) == (m2))
   47 
   48 #define VIFF_TUNNEL     0x1             /* vif represents a tunnel end-point */
   49 #define VIFF_SRCRT      0x2             /* tunnel uses IP src routing */
   50 
   51 /*
   52  * Argument structure for MRT_ADD_VIF.
   53  * (MRT_DEL_VIF takes a single vifi_t argument.)
   54  */
   55 struct vifctl {
   56         vifi_t    vifc_vifi;            /* the index of the vif to be added */
   57         u_int8_t  vifc_flags;           /* VIFF_ flags defined below */
   58         u_int8_t  vifc_threshold;       /* min ttl required to forward on vif */
   59         u_int32_t vifc_rate_limit;      /* max rate */
   60         struct    in_addr vifc_lcl_addr;/* local interface address */
   61         struct    in_addr vifc_rmt_addr;/* remote address (tunnels only) */
   62 };
   63 
   64 /*
   65  * Argument structure for MRT_ADD_MFC and MRT_DEL_MFC.
   66  * (mfcc_tos to be added at a future point)
   67  */
   68 struct mfcctl {
   69         struct   in_addr mfcc_origin;   /* ip origin of mcasts */
   70         struct   in_addr mfcc_mcastgrp; /* multicast group associated */
   71         vifi_t   mfcc_parent;           /* incoming vif */
   72         u_int8_t mfcc_ttls[MAXVIFS];    /* forwarding ttls on vifs */
   73 };
   74 
   75 /*
   76  * Argument structure used by mrouted to get src-grp pkt counts.
   77  */
   78 struct sioc_sg_req {
   79         struct  in_addr src;
   80         struct  in_addr grp;
   81         u_long  pktcnt;
   82         u_long  bytecnt;
   83         u_long  wrong_if;
   84 };
   85 
   86 /*
   87  * Argument structure used by mrouted to get vif pkt counts.
   88  */
   89 struct sioc_vif_req {
   90         vifi_t  vifi;                   /* vif number */
   91         u_long  icount;                 /* input packet count on vif */
   92         u_long  ocount;                 /* output packet count on vif */
   93         u_long  ibytes;                 /* input byte count on vif */
   94         u_long  obytes;                 /* output byte count on vif */
   95 };
   96 
   97 
   98 /*
   99  * The kernel's multicast routing statistics.
  100  */
  101 struct mrtstat {
  102         u_long  mrts_mfc_lookups;       /* # forw. cache hash table hits */
  103         u_long  mrts_mfc_misses;        /* # forw. cache hash table misses */
  104         u_long  mrts_upcalls;           /* # calls to mrouted */
  105         u_long  mrts_no_route;          /* no route for packet's origin */
  106         u_long  mrts_bad_tunnel;        /* malformed tunnel options */
  107         u_long  mrts_cant_tunnel;       /* no room for tunnel options */
  108         u_long  mrts_wrong_if;          /* arrived on wrong interface */
  109         u_long  mrts_upq_ovflw;         /* upcall Q overflow */
  110         u_long  mrts_cache_cleanups;    /* # entries with no upcalls */
  111         u_long  mrts_drop_sel;          /* pkts dropped selectively */
  112         u_long  mrts_q_overflow;        /* pkts dropped - Q overflow */
  113         u_long  mrts_pkt2large;         /* pkts dropped - size > BKT SIZE */
  114         u_long  mrts_upq_sockfull;      /* upcalls dropped - socket full */
  115 };
  116 
  117 
  118 #ifdef _KERNEL
  119 
  120 /*
  121  * The kernel's virtual-interface structure.
  122  */
  123 struct encaptab;
  124 struct vif {
  125         struct    mbuf *tbf_q, **tbf_t; /* packet queue */
  126         struct    timeval tbf_last_pkt_t; /* arr. time of last pkt */
  127         u_int32_t tbf_n_tok;            /* no of tokens in bucket */
  128         u_int32_t tbf_q_len;            /* length of queue at this vif */
  129         u_int32_t tbf_max_q_len;        /* max. queue length */
  130 
  131         u_int8_t  v_flags;              /* VIFF_ flags defined above */
  132         u_int8_t  v_threshold;          /* min ttl required to forward on vif */
  133         u_int32_t v_rate_limit;         /* max rate */
  134         struct    in_addr v_lcl_addr;   /* local interface address */
  135         struct    in_addr v_rmt_addr;   /* remote address (tunnels only) */
  136         struct    ifnet *v_ifp;         /* pointer to interface */
  137         u_long    v_pkt_in;             /* # pkts in on interface */
  138         u_long    v_pkt_out;            /* # pkts out on interface */
  139         u_long    v_bytes_in;           /* # bytes in on interface */
  140         u_long    v_bytes_out;          /* # bytes out on interface */
  141         struct    route v_route;        /* cached route if this is a tunnel */
  142         struct    callout v_repq_ch;    /* for tbf_reprocess_q() */
  143 #ifdef RSVP_ISI
  144         int       v_rsvp_on;            /* # RSVP listening on this vif */
  145         struct    socket *v_rsvpd;      /* # RSVPD daemon */
  146 #endif /* RSVP_ISI */
  147         const struct encaptab *v_encap_cookie;
  148 };
  149 
  150 /*
  151  * The kernel's multicast forwarding cache entry structure.
  152  * (A field for the type of service (mfc_tos) is to be added
  153  * at a future point.)
  154  */
  155 struct mfc {
  156         LIST_ENTRY(mfc) mfc_hash;
  157         struct   in_addr mfc_origin;            /* ip origin of mcasts */
  158         struct   in_addr mfc_mcastgrp;          /* multicast group associated */
  159         vifi_t   mfc_parent;                    /* incoming vif */
  160         u_int8_t mfc_ttls[MAXVIFS];             /* forwarding ttls on vifs */
  161         u_long   mfc_pkt_cnt;                   /* pkt count for src-grp */
  162         u_long   mfc_byte_cnt;                  /* byte count for src-grp */
  163         u_long   mfc_wrong_if;                  /* wrong if for src-grp */
  164         int      mfc_expire;                    /* time to clean entry up */
  165         struct   timeval mfc_last_assert;       /* last time I sent an assert */
  166         struct   rtdetq *mfc_stall;             /* pkts waiting for route */
  167 };
  168 
  169 /*
  170  * Structure used to communicate from kernel to multicast router.
  171  * (Note the convenient similarity to an IP packet.)
  172  */
  173 struct igmpmsg {
  174         u_int32_t unused1;
  175         u_int32_t unused2;
  176         u_int8_t  im_msgtype;           /* what type of message */
  177 #define IGMPMSG_NOCACHE         1
  178 #define IGMPMSG_WRONGVIF        2
  179         u_int8_t  im_mbz;               /* must be zero */
  180         u_int8_t  im_vif;               /* vif rec'd on */
  181         u_int8_t  unused3;
  182         struct    in_addr im_src, im_dst;
  183 } __attribute__((__packed__));
  184 
  185 /*
  186  * Argument structure used for pkt info. while upcall is made.
  187  */
  188 struct rtdetq {
  189         struct  mbuf *m;                /* a copy of the packet */
  190         struct  ifnet *ifp;             /* interface pkt came in on */
  191 #ifdef UPCALL_TIMING
  192         struct  timeval t;              /* timestamp */
  193 #endif /* UPCALL_TIMING */
  194         struct  rtdetq *next;
  195 };
  196 
  197 #define MFCTBLSIZ       256
  198 #define MAX_UPQ         4               /* max. no of pkts in upcall Q */
  199 
  200 /*
  201  * Token bucket filter code
  202  */
  203 #define MAX_BKT_SIZE    10000           /* 10K bytes size */
  204 #define MAXQSIZE        10              /* max. no of pkts in token queue */
  205 
  206 
  207 int ip_mrouter_set __P((struct socket *, int, struct mbuf **));
  208 int ip_mrouter_get __P((struct socket *, int, struct mbuf **));
  209 int mrt_ioctl __P((struct socket *, u_long, caddr_t));
  210 int ip_mrouter_done __P((void));
  211 void ip_mrouter_detach(struct ifnet *);
  212 void reset_vif __P((struct vif *));
  213 #ifdef RSVP_ISI
  214 int ip_mforward __P((struct mbuf *, struct ifnet *, struct ip_moptions *));
  215 int legal_vif_num __P((int));
  216 int ip_rsvp_vif_init __P((struct socket *, struct mbuf *));
  217 int ip_rsvp_vif_done __P((struct socket *, struct mbuf *));
  218 void ip_rsvp_force_done __P((struct socket *));
  219 /*int rsvp_input __P((struct mbuf *, struct ifnet *));*/
  220 void rsvp_input __P((struct mbuf *, int, int));
  221 #else
  222 int ip_mforward __P((struct mbuf *, struct ifnet *));
  223 #endif
  224 
  225 #endif /* _KERNEL */
  226 
  227 #endif /* _NETINET_IP_MROUTE_H_ */

Cache object: e20ceada31a8887db93ffbeb313da111


[ 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.