darwin-xnu/bsd/netinet/ip_var.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
   3 *
   4 * @APPLE_LICENSE_HEADER_START@
   5 * 
   6 * The contents of this file constitute Original Code as defined in and
   7 * are subject to the Apple Public Source License Version 1.1 (the
   8 * "License").  You may not use this file except in compliance with the
   9 * License.  Please obtain a copy of the License at
  10 * http://www.apple.com/publicsource and read it before using this file.
  11 * 
  12 * This Original Code and all software distributed under the License are
  13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17 * License for the specific language governing rights and limitations
  18 * under the License.
  19 * 
  20 * @APPLE_LICENSE_HEADER_END@
  21 */
  22/*
  23 * Copyright (c) 1982, 1986, 1993
  24 *      The Regents of the University of California.  All rights reserved.
  25 *
  26 * Redistribution and use in source and binary forms, with or without
  27 * modification, are permitted provided that the following conditions
  28 * are met:
  29 * 1. Redistributions of source code must retain the above copyright
  30 *    notice, this list of conditions and the following disclaimer.
  31 * 2. Redistributions in binary form must reproduce the above copyright
  32 *    notice, this list of conditions and the following disclaimer in the
  33 *    documentation and/or other materials provided with the distribution.
  34 * 3. All advertising materials mentioning features or use of this software
  35 *    must display the following acknowledgement:
  36 *      This product includes software developed by the University of
  37 *      California, Berkeley and its contributors.
  38 * 4. Neither the name of the University nor the names of its contributors
  39 *    may be used to endorse or promote products derived from this software
  40 *    without specific prior written permission.
  41 *
  42 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  43 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  44 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  45 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  46 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  47 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  48 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  49 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  50 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  51 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  52 * SUCH DAMAGE.
  53 *
  54 *      @(#)ip_var.h    8.2 (Berkeley) 1/9/95
  55 */
  56
  57#ifndef _NETINET_IP_VAR_H_
  58#define _NETINET_IP_VAR_H_
  59#include <sys/appleapiopts.h>
  60
  61/*
  62 * Overlay for ip header used by other protocols (tcp, udp).
  63 */
  64struct ipovly {
  65        u_char  ih_x1[9];               /* (unused) */
  66        u_char  ih_pr;                  /* protocol */
  67        u_short ih_len;                 /* protocol length */
  68        struct  in_addr ih_src;         /* source internet address */
  69        struct  in_addr ih_dst;         /* destination internet address */
  70};
  71
  72#ifdef KERNEL_PRIVATE
  73/*
  74 * Ip reassembly queue structure.  Each fragment
  75 * being reassembled is attached to one of these structures.
  76 * They are timed out after ipq_ttl drops to 0, and may also
  77 * be reclaimed if memory becomes tight.
  78 */
  79struct ipq {
  80        struct  ipq *next,*prev;        /* to other reass headers */
  81        u_char  ipq_ttl;                /* time for reass q to live */
  82        u_char  ipq_p;                  /* protocol of this fragment */
  83        u_short ipq_id;                 /* sequence id for reassembly */
  84        struct mbuf *ipq_frags;         /* to ip headers of fragments */
  85        struct  in_addr ipq_src,ipq_dst;
  86        u_long  ipq_nfrags;
  87        TAILQ_ENTRY(ipq) ipq_list;
  88        u_long  reserved[1];            /* for future use */
  89#if IPDIVERT
  90#ifdef IPDIVERT_44
  91        u_int32_t ipq_div_info;         /* ipfw divert port & flags */
  92#else
  93        u_int16_t ipq_divert;           /* ipfw divert port (Maintain backward compat.) */
  94#endif
  95        u_int16_t ipq_div_cookie;       /* ipfw divert cookie */
  96#endif
  97};
  98
  99/*
 100 * Structure stored in mbuf in inpcb.ip_options
 101 * and passed to ip_output when ip options are in use.
 102 * The actual length of the options (including ipopt_dst)
 103 * is in m_len.
 104 */
 105#endif /* KERNEL_PRIVATE */
 106#define MAX_IPOPTLEN    40
 107#ifdef KERNEL_PRIVATE
 108
 109struct ipoption {
 110        struct  in_addr ipopt_dst;      /* first-hop dst if source routed */
 111        char    ipopt_list[MAX_IPOPTLEN];       /* options proper */
 112};
 113
 114/*
 115 * Structure attached to inpcb.ip_moptions and
 116 * passed to ip_output when IP multicast options are in use.
 117 */
 118struct ip_moptions {
 119        struct  ifnet *imo_multicast_ifp; /* ifp for outgoing multicasts */
 120        u_char  imo_multicast_ttl;      /* TTL for outgoing multicasts */
 121        u_char  imo_multicast_loop;     /* 1 => hear sends if a member */
 122        u_short imo_num_memberships;    /* no. memberships this socket */
 123        struct  in_multi *imo_membership[IP_MAX_MEMBERSHIPS];
 124        u_long  imo_multicast_vif;      /* vif num outgoing multicasts */
 125        struct  in_addr imo_multicast_addr; /* ifindex/addr on MULTICAST_IF */
 126};
 127
 128/* mbuf tag for ip_forwarding info */
 129struct ip_fwd_tag {
 130        struct sockaddr_in *next_hop;   /* next_hop */
 131};
 132
 133#endif /* KERNEL_PRIVATE */
 134
 135struct  ipstat {
 136        u_long  ips_total;              /* total packets received */
 137        u_long  ips_badsum;             /* checksum bad */
 138        u_long  ips_tooshort;           /* packet too short */
 139        u_long  ips_toosmall;           /* not enough data */
 140        u_long  ips_badhlen;            /* ip header length < data size */
 141        u_long  ips_badlen;             /* ip length < ip header length */
 142        u_long  ips_fragments;          /* fragments received */
 143        u_long  ips_fragdropped;        /* frags dropped (dups, out of space) */
 144        u_long  ips_fragtimeout;        /* fragments timed out */
 145        u_long  ips_forward;            /* packets forwarded */
 146        u_long  ips_fastforward;        /* packets fast forwarded */
 147        u_long  ips_cantforward;        /* packets rcvd for unreachable dest */
 148        u_long  ips_redirectsent;       /* packets forwarded on same net */
 149        u_long  ips_noproto;            /* unknown or unsupported protocol */
 150        u_long  ips_delivered;          /* datagrams delivered to upper level*/
 151        u_long  ips_localout;           /* total ip packets generated here */
 152        u_long  ips_odropped;           /* lost packets due to nobufs, etc. */
 153        u_long  ips_reassembled;        /* total packets reassembled ok */
 154        u_long  ips_fragmented;         /* datagrams successfully fragmented */
 155        u_long  ips_ofragments;         /* output fragments created */
 156        u_long  ips_cantfrag;           /* don't fragment flag was set, etc. */
 157        u_long  ips_badoptions;         /* error in option processing */
 158        u_long  ips_noroute;            /* packets discarded due to no route */
 159        u_long  ips_badvers;            /* ip version != 4 */
 160        u_long  ips_rawout;             /* total raw ip packets generated */
 161        u_long  ips_toolong;            /* ip length > max ip packet size */
 162        u_long  ips_notmember;          /* multicasts for unregistered grps */
 163        u_long  ips_nogif;              /* no match gif found */
 164        u_long  ips_badaddr;            /* invalid address on header */
 165};
 166
 167struct ip_linklocal_stat {
 168        u_long iplls_in_total;
 169        u_long iplls_in_badttl;
 170        u_long iplls_out_total;
 171        u_long iplls_out_badttl;
 172};
 173
 174#ifdef KERNEL_PRIVATE
 175/* flags passed to ip_output as last parameter */
 176#define IP_FORWARDING           0x1             /* most of ip header exists */
 177#define IP_RAWOUTPUT            0x2             /* raw ip header exists */
 178#define IP_NOIPSEC                      0x4             /* No IPSec processing */
 179#define IP_ROUTETOIF            SO_DONTROUTE    /* bypass routing tables (0x0010) */
 180#define IP_ALLOWBROADCAST       SO_BROADCAST    /* can send broadcast packets (0x0020) */
 181
 182struct ip;
 183struct inpcb;
 184struct route;
 185struct sockopt;
 186
 187extern struct   ipstat  ipstat;
 188#if !defined(RANDOM_IP_ID) || RANDOM_IP_ID == 0
 189extern u_short  ip_id;                          /* ip packet ctr, for ids */
 190#endif
 191extern int      ip_defttl;                      /* default IP ttl */
 192extern int      ipforwarding;                   /* ip forwarding */
 193extern struct protosw *ip_protox[];
 194extern struct socket *ip_rsvpd; /* reservation protocol daemon */
 195extern struct socket *ip_mrouter; /* multicast routing daemon */
 196extern int      (*legal_vif_num)(int);
 197extern u_long   (*ip_mcast_src)(int);
 198extern int rsvp_on;
 199extern struct   pr_usrreqs rip_usrreqs;
 200
 201int      ip_ctloutput(struct socket *, struct sockopt *sopt);
 202void     ip_drain(void);
 203void     ip_freemoptions(struct ip_moptions *);
 204void     ip_init(void);
 205extern int       (*ip_mforward)(struct ip *, struct ifnet *, struct mbuf *,
 206                          struct ip_moptions *);
 207int      ip_output(struct mbuf *,
 208            struct mbuf *, struct route *, int, struct ip_moptions *);
 209int      ip_output_list(struct mbuf *, int,
 210            struct mbuf *, struct route *, int, struct ip_moptions *);
 211struct in_ifaddr *
 212         ip_rtaddr(struct in_addr, struct route *);
 213void     ip_savecontrol(struct inpcb *, struct mbuf **, struct ip *,
 214                struct mbuf *);
 215void     ip_slowtimo(void);
 216struct mbuf *
 217         ip_srcroute(void);
 218void     ip_stripoptions(struct mbuf *, struct mbuf *);
 219#if RANDOM_IP_ID
 220u_int16_t       
 221         ip_randomid(void);
 222#endif
 223int     rip_ctloutput(struct socket *, struct sockopt *);
 224void    rip_ctlinput(int, struct sockaddr *, void *);
 225void    rip_init(void);
 226void    rip_input(struct mbuf *, int);
 227int     rip_output(struct mbuf *, struct socket *, u_long);
 228int     rip_unlock(struct socket *, int, int);
 229void    ipip_input(struct mbuf *, int);
 230void    rsvp_input(struct mbuf *, int);
 231int     ip_rsvp_init(struct socket *);
 232int     ip_rsvp_done(void);
 233int     ip_rsvp_vif_init(struct socket *, struct sockopt *);
 234int     ip_rsvp_vif_done(struct socket *, struct sockopt *);
 235void    ip_rsvp_force_done(struct socket *);
 236
 237void    in_delayed_cksum(struct mbuf *m);
 238
 239#endif KERNEL_PRIVATE
 240#endif !_NETINET_IP_VAR_H_
 241
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.