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/sys/sockbuf.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 /*-
    2  * Copyright (c) 1982, 1986, 1990, 1993
    3  *      The Regents of the University of California.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *      This product includes software developed by the University of
   16  *      California, Berkeley and its contributors.
   17  * 4. Neither the name of the University nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  *
   33  * @(#)socketvar.h      8.3 (Berkeley) 2/19/95
   34  * $FreeBSD: src/sys/sys/socketvar.h,v 1.46.2.10 2003/08/24 08:24:39 hsu Exp $
   35  * $DragonFly: src/sys/sys/sockbuf.h,v 1.1 2007/04/22 01:13:17 dillon Exp $
   36  */
   37 
   38 #ifndef _SYS_SOCKBUF_H_
   39 #define _SYS_SOCKBUF_H_
   40 
   41 #ifndef _SYS_TYPES_H_
   42 #include <sys/types.h>
   43 #endif
   44 
   45 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
   46 
   47 /*
   48  * Generic socket buffer for keeping track of mbuf chains.  These
   49  * are used primarily to manipulate mbuf chains in standalone pieces
   50  * of code.
   51  */
   52 struct sockbuf {
   53         u_long  sb_cc;          /* actual chars in buffer */
   54         u_long  sb_mbcnt;       /* chars of mbufs used */
   55         u_long  sb_cc_prealloc;
   56         u_long  sb_mbcnt_prealloc;
   57         u_long  sb_climit;      /* data limit when used for I/O */
   58         struct  mbuf *sb_mb;    /* the mbuf chain */
   59         struct  mbuf *sb_lastmbuf;      /* last mbuf in sb_mb */
   60         struct  mbuf *sb_lastrecord;    /* last record in sb_mb
   61                                          * valid <=> sb_mb non-NULL */
   62 };
   63 
   64 #define SB_MAX          (256*1024)      /* default for max chars in sockbuf */
   65 
   66 #endif
   67 
   68 #ifdef _KERNEL
   69 
   70 #include <machine/atomic.h>
   71 #ifndef _SYS_MBUF_H_
   72 #include <sys/mbuf.h>
   73 #endif
   74 
   75 /*
   76  * Macros for sockets and socket buffering.
   77  */
   78 
   79 #ifdef SOCKBUF_DEBUG
   80 #define sbcheck(sb)     _sbcheck(sb)
   81 #else
   82 #define sbcheck(sb)
   83 #endif
   84 
   85 /* adjust counters in sb reflecting allocation of m */
   86 #define sballoc(sb, m) { \
   87         (sb)->sb_cc += (m)->m_len; \
   88         (sb)->sb_mbcnt += MSIZE; \
   89         if ((m)->m_flags & M_EXT) \
   90                 (sb)->sb_mbcnt += (m)->m_ext.ext_size; \
   91 }
   92 
   93 /* adjust counters in sb reflecting allocation of m */
   94 #define sbprealloc(sb, m) { \
   95         u_long __mbcnt_sz; \
   96  \
   97         atomic_add_long(&((sb)->sb_cc_prealloc), (m)->m_len); \
   98  \
   99         __mbcnt_sz = MSIZE; \
  100         if ((m)->m_flags & M_EXT) \
  101                 __mbcnt_sz += (m)->m_ext.ext_size; \
  102         atomic_add_long(&((sb)->sb_mbcnt_prealloc), __mbcnt_sz); \
  103 }
  104 
  105 /* adjust counters in sb reflecting freeing of m */
  106 #define sbfree(sb, m) { \
  107         u_long __mbcnt_sz; \
  108  \
  109         (sb)->sb_cc -= (m)->m_len; \
  110         atomic_subtract_long(&((sb)->sb_cc_prealloc), (m)->m_len); \
  111  \
  112         __mbcnt_sz = MSIZE; \
  113         if ((m)->m_flags & M_EXT) \
  114                 __mbcnt_sz += (m)->m_ext.ext_size; \
  115         (sb)->sb_mbcnt -= __mbcnt_sz; \
  116         atomic_subtract_long(&((sb)->sb_mbcnt_prealloc), __mbcnt_sz); \
  117 }
  118 
  119 static __inline void
  120 sbinit(struct sockbuf *sb, u_long climit)
  121 {
  122         sb->sb_cc = 0;
  123         sb->sb_mbcnt = 0;
  124         sb->sb_cc_prealloc = 0;
  125         sb->sb_mbcnt_prealloc = 0;
  126         sb->sb_climit = climit;
  127         sb->sb_mb = NULL;
  128         sb->sb_lastmbuf = NULL;
  129         sb->sb_lastrecord = NULL;
  130 }
  131 
  132 void    sbappend (struct sockbuf *sb, struct mbuf *m);
  133 int     sbappendaddr (struct sockbuf *sb, const struct sockaddr *asa,
  134             struct mbuf *m0, struct mbuf *control);
  135 int     sbappendcontrol (struct sockbuf *sb, struct mbuf *m0,
  136             struct mbuf *control);
  137 void    sbappendrecord (struct sockbuf *sb, struct mbuf *m0);
  138 void    sbappendstream (struct sockbuf *sb, struct mbuf *m);
  139 void    _sbcheck (struct sockbuf *sb);
  140 void    sbcompress (struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
  141 struct mbuf *
  142         sbcreatecontrol (caddr_t p, int size, int type, int level);
  143 void    sbdrop (struct sockbuf *sb, int len);
  144 void    sbdroprecord (struct sockbuf *sb);
  145 struct mbuf *
  146         sbunlinkmbuf (struct sockbuf *, struct mbuf *, struct mbuf **);
  147 void    sbflush (struct sockbuf *sb);
  148 
  149 #endif /* _KERNEL */
  150 
  151 #endif /* !_SYS_SOCKBUF_H_ */

Cache object: 6a78451023870a0150c7af3fcc8f32df


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