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_var.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_var.h,v 1.134 2022/04/10 09:50:46 andvar Exp $      */
    2 
    3 /*
    4  * Copyright (c) 1982, 1986, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. Neither the name of the University nor the names of its contributors
   16  *    may be used to endorse or promote products derived from this software
   17  *    without specific prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29  * SUCH DAMAGE.
   30  *
   31  *      @(#)ip_var.h    8.2 (Berkeley) 1/9/95
   32  */
   33 
   34 #ifndef _NETINET_IP_VAR_H_
   35 #define _NETINET_IP_VAR_H_
   36 
   37 #include <sys/queue.h>
   38 #include <net/route.h>
   39 
   40 /*
   41  * Overlay for ip header used by other protocols (tcp, udp).
   42  */
   43 struct ipovly {
   44         u_int8_t  ih_x1[9];             /* (unused) */
   45         u_int8_t  ih_pr;                /* protocol */
   46         u_int16_t ih_len;               /* protocol length */
   47         struct    in_addr ih_src;       /* source internet address */
   48         struct    in_addr ih_dst;       /* destination internet address */
   49 };
   50 #ifdef __CTASSERT
   51 __CTASSERT(sizeof(struct ipovly) == 20);
   52 #endif
   53 
   54 /*
   55  * IP Flow structure
   56  */
   57 struct ipflow {
   58         TAILQ_ENTRY(ipflow) ipf_list;   /* next in active list */
   59         TAILQ_ENTRY(ipflow) ipf_hash;   /* next ipflow in bucket */
   60         size_t ipf_hashidx;             /* own hash index of ipflowtable[] */
   61         struct in_addr ipf_dst;         /* destination address */
   62         struct in_addr ipf_src;         /* source address */
   63         uint8_t ipf_tos;                /* type-of-service */
   64         struct route ipf_ro;            /* associated route entry */
   65         u_long ipf_uses;                /* number of uses in this period */
   66         u_long ipf_last_uses;           /* number of uses in last period */
   67         u_long ipf_dropped;             /* ENOBUFS returned by if_output */
   68         u_long ipf_errors;              /* other errors returned by if_output */
   69         u_int ipf_timer;                /* lifetime timer */
   70 };
   71 
   72 /*
   73  * TCP sequence queue structure.
   74  */
   75 TAILQ_HEAD(ipqehead, ipqent);
   76 struct ipqent {
   77         TAILQ_ENTRY(ipqent) ipqe_q;
   78         struct mbuf *ipqe_m;
   79         TAILQ_ENTRY(ipqent) ipqe_timeq;
   80         u_int32_t ipqe_seq;
   81         u_int32_t ipqe_len;
   82         u_int32_t ipqe_flags;
   83 };
   84 
   85 /*
   86  * Structure stored in mbuf in inpcb.ip_options
   87  * and passed to ip_output when ip options are in use.
   88  * The actual length of the options (including ipopt_dst)
   89  * is in m_len.
   90  */
   91 #define MAX_IPOPTLEN    40
   92 
   93 struct ipoption {
   94         struct  in_addr ipopt_dst;      /* first-hop dst if source routed */
   95         int8_t  ipopt_list[MAX_IPOPTLEN];       /* options proper */
   96 };
   97 
   98 /*
   99  * Structure attached to inpcb.ip_moptions and
  100  * passed to ip_output when IP multicast options are in use.
  101  */
  102 struct ip_moptions {
  103         if_index_t imo_multicast_if_index; /* I/F for outgoing multicasts */
  104         struct in_addr imo_multicast_addr; /* ifindex/addr on MULTICAST_IF */
  105         u_int8_t  imo_multicast_ttl;    /* TTL for outgoing multicasts */
  106         u_int8_t  imo_multicast_loop;   /* 1 => hear sends if a member */
  107         u_int16_t imo_num_memberships;  /* no. memberships this socket */
  108         struct    in_multi *imo_membership[IP_MAX_MEMBERSHIPS];
  109 };
  110 
  111 struct ip_pktopts {
  112         struct sockaddr_in ippo_laddr;  /* source address */
  113         struct ip_moptions *ippo_imo;   /* inp->inp_moptions or &ippo_imobuf */
  114         struct ip_moptions ippo_imobuf; /* use when IP_PKTINFO */
  115 };
  116 
  117 /*
  118  * IP statistics.
  119  * Each counter is an unsigned 64-bit value.
  120  */
  121 #define IP_STAT_TOTAL           0       /* total packets received */
  122 #define IP_STAT_BADSUM          1       /* checksum bad */
  123 #define IP_STAT_TOOSHORT        2       /* packet too short */
  124 #define IP_STAT_TOOSMALL        3       /* not enough data */
  125 #define IP_STAT_BADHLEN         4       /* ip header length < data size */
  126 #define IP_STAT_BADLEN          5       /* ip length < ip header length */
  127 #define IP_STAT_FRAGMENTS       6       /* fragments received */
  128 #define IP_STAT_FRAGDROPPED     7       /* frags dropped (dups, out of space) */
  129 #define IP_STAT_FRAGTIMEOUT     8       /* fragments timed out */
  130 #define IP_STAT_FORWARD         9       /* packets forwarded */
  131 #define IP_STAT_FASTFORWARD     10      /* packets fast forwarded */
  132 #define IP_STAT_CANTFORWARD     11      /* packets rcvd for unreachable dest */
  133 #define IP_STAT_REDIRECTSENT    12      /* packets forwareded on same net */
  134 #define IP_STAT_NOPROTO         13      /* unknown or unsupported protocol */
  135 #define IP_STAT_DELIVERED       14      /* datagrams delivered to upper level */
  136 #define IP_STAT_LOCALOUT        15      /* total ip packets generated here */
  137 #define IP_STAT_ODROPPED        16      /* lost packets due to nobufs, etc. */
  138 #define IP_STAT_REASSEMBLED     17      /* total packets reassembled ok */
  139 #define IP_STAT_FRAGMENTED      18      /* datagrams successfully fragmented */
  140 #define IP_STAT_OFRAGMENTS      19      /* output fragments created */
  141 #define IP_STAT_CANTFRAG        20      /* don't fragment flag was set, etc. */
  142 #define IP_STAT_BADOPTIONS      21      /* error in option processing */
  143 #define IP_STAT_NOROUTE         22      /* packets discarded due to no route */
  144 #define IP_STAT_BADVERS         23      /* ip version != 4 */
  145 #define IP_STAT_RAWOUT          24      /* total raw ip packets generated */
  146 #define IP_STAT_BADFRAGS        25      /* malformed fragments (bad length) */
  147 #define IP_STAT_RCVMEMDROP      26      /* frags dropped for lack of memory */
  148 #define IP_STAT_TOOLONG         27      /* ip length > max ip packet size */
  149 #define IP_STAT_NOGIF           28      /* no match gif found */
  150 #define IP_STAT_BADADDR         29      /* invalid address on header */
  151 #define IP_STAT_NOL2TP          30      /* no match l2tp found */
  152 #define IP_STAT_NOIPSEC         31      /* no match ipsec(4) found */
  153 #define IP_STAT_PFILDROP_IN     32      /* dropped by pfil (PFIL_IN) */
  154 #define IP_STAT_PFILDROP_OUT    33      /* dropped by pfil (PFIL_OUT) */
  155 #define IP_STAT_IPSECDROP_IN    34      /* dropped by IPsec SP check */
  156 #define IP_STAT_IPSECDROP_OUT   35      /* dropped by IPsec SP check */
  157 #define IP_STAT_IFDROP          36      /* dropped due to interface state */
  158 #define IP_STAT_TIMXCEED        37      /* time to live exceeded */
  159 #define IP_STAT_IFNOADDR        38      /* interface has no IP address */
  160 #define IP_STAT_RTREJECT        39      /* rejected by route */
  161 #define IP_STAT_BCASTDENIED     40      /* broadcast prohibited */
  162 
  163 #define IP_NSTATS               41
  164 
  165 #ifdef _KERNEL
  166 
  167 #ifdef _KERNEL_OPT
  168 #include "opt_gateway.h"
  169 #include "opt_mbuftrace.h"
  170 #endif
  171 
  172 /*
  173  * The following flags can be passed to ip_output() as last parameter
  174  */
  175 #define IP_FORWARDING           0x0001          /* most of ip header exists */
  176 #define IP_RAWOUTPUT            0x0002          /* raw ip header exists */
  177 #define IP_RETURNMTU            0x0004          /* pass back mtu on EMSGSIZE */
  178 #define IP_NOIPNEWID            0x0008          /* don't fill in ip_id */
  179 __CTASSERT(SO_DONTROUTE ==      0x0010);
  180 __CTASSERT(SO_BROADCAST ==      0x0020);
  181 #define IP_ROUTETOIF            SO_DONTROUTE    /* bypass routing tables */
  182 #define IP_ALLOWBROADCAST       SO_BROADCAST    /* can send broadcast packets */
  183 
  184 #define IP_IGMP_MCAST           0x0040          /* IGMP for mcast join/leave */
  185 #define IP_MTUDISC              0x0400          /* Path MTU Discovery; set DF */
  186 #define IP_ROUTETOIFINDEX       0x0800  /* force route imo_multicast_if_index */
  187 
  188 extern struct domain inetdomain;
  189 extern const struct pr_usrreqs rip_usrreqs;
  190 
  191 extern int   ip_defttl;                 /* default IP ttl */
  192 extern int   ipforwarding;              /* ip forwarding */
  193 extern int   ip_mtudisc;                /* mtu discovery */
  194 extern int   ip_mtudisc_timeout;        /* seconds to timeout mtu discovery */
  195 extern int   anonportmin;               /* minimum ephemeral port */
  196 extern int   anonportmax;               /* maximum ephemeral port */
  197 extern int   lowportmin;                /* minimum reserved port */
  198 extern int   lowportmax;                /* maximum reserved port */
  199 extern int   ip_do_loopback_cksum;      /* do IP checksum on loopback? */
  200 extern struct rttimer_queue *ip_mtudisc_timeout_q;
  201 #ifdef MBUFTRACE
  202 extern struct mowner ip_rx_mowner;
  203 extern struct mowner ip_tx_mowner;
  204 #endif
  205 struct   inpcb;
  206 struct   sockopt;
  207 
  208 void    ip_init(void);
  209 void    in_init(void);
  210 
  211 int      ip_ctloutput(int, struct socket *, struct sockopt *);
  212 int      ip_setpktopts(struct mbuf *, struct ip_pktopts *, int *,
  213             struct inpcb *, kauth_cred_t);
  214 void     ip_drain(void);
  215 void     ip_drainstub(void);
  216 void     ip_freemoptions(struct ip_moptions *);
  217 int      ip_optcopy(struct ip *, struct ip *);
  218 u_int    ip_optlen(struct inpcb *);
  219 int      ip_output(struct mbuf *, struct mbuf *, struct route *, int,
  220             struct ip_moptions *, struct inpcb *);
  221 int      ip_fragment(struct mbuf *, struct ifnet *, u_long);
  222 
  223 void     ip_reass_init(void);
  224 int      ip_reass_packet(struct mbuf **);
  225 void     ip_reass_slowtimo(void);
  226 void     ip_reass_drain(void);
  227 
  228 void     ip_savecontrol(struct inpcb *, struct mbuf **, struct ip *,
  229            struct mbuf *);
  230 void     ip_slowtimo(void);
  231 void     ip_fasttimo(void);
  232 struct mbuf *
  233          ip_srcroute(struct mbuf *);
  234 int      ip_sysctl(int *, u_int, void *, size_t *, void *, size_t);
  235 void     ip_statinc(u_int);
  236 void *   rip_ctlinput(int, const struct sockaddr *, void *);
  237 int      rip_ctloutput(int, struct socket *, struct sockopt *);
  238 void     rip_init(void);
  239 void     rip_input(struct mbuf *, int, int);
  240 int      rip_output(struct mbuf *, struct inpcb *, struct mbuf *, struct lwp *);
  241 int      rip_usrreq(struct socket *,
  242             int, struct mbuf *, struct mbuf *, struct mbuf *, struct lwp *);
  243 
  244 int     ip_setmoptions(struct ip_moptions **, const struct sockopt *sopt);
  245 int     ip_getmoptions(struct ip_moptions *, struct sockopt *sopt);
  246 
  247 int     ip_if_output(struct ifnet * const, struct mbuf * const,
  248             const struct sockaddr * const, const struct rtentry *);
  249 
  250 /* IP Flow interface. */
  251 void    ipflow_init(void);
  252 void    ipflow_poolinit(void);
  253 void    ipflow_create(struct route *, struct mbuf *);
  254 void    ipflow_slowtimo(void);
  255 int     ipflow_invalidate_all(int);
  256 
  257 #endif  /* _KERNEL */
  258 
  259 #endif /* !_NETINET_IP_VAR_H_ */

Cache object: e391514745e9835d902d9b8d733eb142


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