1/*-
2 * Copyright (c) 1982, 1986, 1988, 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
--- 16 unchanged lines hidden (view full) ---
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * @(#)uipc_socket2.c 8.1 (Berkeley) 6/10/93
30 */
31
32#include <sys/cdefs.h>
33__FBSDID("$FreeBSD: head/sys/kern/uipc_sockbuf.c 169624 2007-05-16 20:41:08Z rwatson $");
34
35#include "opt_param.h"
36
37#include <sys/param.h>
38#include <sys/aio.h> /* for aio_swake proto */
39#include <sys/kernel.h>
40#include <sys/lock.h>
41#include <sys/mbuf.h>
--- 302 unchanged lines hidden (view full) ---
344
345void
346sbdestroy(struct sockbuf *sb, struct socket *so)
347{
348
349 sbrelease_internal(sb, so);
350}
351
352/*
353 * Routines to add and remove data from an mbuf queue.
354 *
355 * The routines sbappend() or sbappendrecord() are normally called to append
356 * new mbufs to a socket buffer, after checking that adequate space is
357 * available, comparing the function sbspace() with the amount of data to be
358 * added. sbappendrecord() differs from sbappend() in that data supplied is
359 * treated as the beginning of a new record. To place a sender's address,
--- 536 unchanged lines hidden (view full) ---
896sbdrop(struct sockbuf *sb, int len)
897{
898
899 SOCKBUF_LOCK(sb);
900 sbdrop_locked(sb, len);
901 SOCKBUF_UNLOCK(sb);
902}
903
904/*
905 * Maintain a pointer and offset pair into the socket buffer mbuf chain to
906 * avoid traversal of the entire socket buffer for larger offsets.
907 */
908struct mbuf *
909sbsndptr(struct sockbuf *sb, u_int off, u_int len, u_int *moff)
910{
911 struct mbuf *m, *ret;
--- 62 unchanged lines hidden (view full) ---
974 SOCKBUF_UNLOCK(sb);
975}
976
977/*
978 * Create a "control" mbuf containing the specified data with the specified
979 * type for presentation on a socket buffer.
980 */
981struct mbuf *
982sbcreatecontrol(caddr_t p, int size, int type, int level)
983{
984 struct cmsghdr *cp;
985 struct mbuf *m;
986
987 if (CMSG_SPACE((u_int)size) > MCLBYTES)
988 return ((struct mbuf *) NULL);
989 if (CMSG_SPACE((u_int)size) > MLEN)
990 m = m_getcl(M_DONTWAIT, MT_CONTROL, 0);
991 else
992 m = m_get(M_DONTWAIT, MT_CONTROL);
--- 17 unchanged lines hidden (view full) ---
1010 * generate an user-format data structure describing the socket buffer. Note
1011 * that the xsockbuf structure, since it is always embedded in a socket, does
1012 * not include a self pointer nor a length. We make this entry point public
1013 * in case some other mechanism needs it.
1014 */
1015void
1016sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb)
1017{
1018
1019 xsb->sb_cc = sb->sb_cc;
1020 xsb->sb_hiwat = sb->sb_hiwat;
1021 xsb->sb_mbcnt = sb->sb_mbcnt;
1022 xsb->sb_mbmax = sb->sb_mbmax;
1023 xsb->sb_lowat = sb->sb_lowat;
1024 xsb->sb_flags = sb->sb_flags;
1025 xsb->sb_timeo = sb->sb_timeo;
1026}
1027
1028/* This takes the place of kern.maxsockbuf, which moved to kern.ipc. */
1029static int dummy;
1030SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, "");
1031SYSCTL_OID(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLTYPE_ULONG|CTLFLAG_RW,
1032 &sb_max, 0, sysctl_handle_sb_max, "LU", "Maximum socket buffer size");
1033SYSCTL_ULONG(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW,
1034 &sb_efficiency, 0, "");
2 * Copyright (c) 1982, 1986, 1988, 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
--- 16 unchanged lines hidden (view full) ---
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * @(#)uipc_socket2.c 8.1 (Berkeley) 6/10/93
30 */
31
32#include <sys/cdefs.h>
33__FBSDID("$FreeBSD: head/sys/kern/uipc_sockbuf.c 169624 2007-05-16 20:41:08Z rwatson $");
34
35#include "opt_param.h"
36
37#include <sys/param.h>
38#include <sys/aio.h> /* for aio_swake proto */
39#include <sys/kernel.h>
40#include <sys/lock.h>
41#include <sys/mbuf.h>
--- 302 unchanged lines hidden (view full) ---
344
345void
346sbdestroy(struct sockbuf *sb, struct socket *so)
347{
348
349 sbrelease_internal(sb, so);
350}
351
352/*
353 * Routines to add and remove data from an mbuf queue.
354 *
355 * The routines sbappend() or sbappendrecord() are normally called to append
356 * new mbufs to a socket buffer, after checking that adequate space is
357 * available, comparing the function sbspace() with the amount of data to be
358 * added. sbappendrecord() differs from sbappend() in that data supplied is
359 * treated as the beginning of a new record. To place a sender's address,
--- 536 unchanged lines hidden (view full) ---
896sbdrop(struct sockbuf *sb, int len)
897{
898
899 SOCKBUF_LOCK(sb);
900 sbdrop_locked(sb, len);
901 SOCKBUF_UNLOCK(sb);
902}
903
904/*
905 * Maintain a pointer and offset pair into the socket buffer mbuf chain to
906 * avoid traversal of the entire socket buffer for larger offsets.
907 */
908struct mbuf *
909sbsndptr(struct sockbuf *sb, u_int off, u_int len, u_int *moff)
910{
911 struct mbuf *m, *ret;
--- 62 unchanged lines hidden (view full) ---
974 SOCKBUF_UNLOCK(sb);
975}
976
977/*
978 * Create a "control" mbuf containing the specified data with the specified
979 * type for presentation on a socket buffer.
980 */
981struct mbuf *
982sbcreatecontrol(caddr_t p, int size, int type, int level)
983{
984 struct cmsghdr *cp;
985 struct mbuf *m;
986
987 if (CMSG_SPACE((u_int)size) > MCLBYTES)
988 return ((struct mbuf *) NULL);
989 if (CMSG_SPACE((u_int)size) > MLEN)
990 m = m_getcl(M_DONTWAIT, MT_CONTROL, 0);
991 else
992 m = m_get(M_DONTWAIT, MT_CONTROL);
--- 17 unchanged lines hidden (view full) ---
1010 * generate an user-format data structure describing the socket buffer. Note
1011 * that the xsockbuf structure, since it is always embedded in a socket, does
1012 * not include a self pointer nor a length. We make this entry point public
1013 * in case some other mechanism needs it.
1014 */
1015void
1016sbtoxsockbuf(struct sockbuf *sb, struct xsockbuf *xsb)
1017{
1018
1019 xsb->sb_cc = sb->sb_cc;
1020 xsb->sb_hiwat = sb->sb_hiwat;
1021 xsb->sb_mbcnt = sb->sb_mbcnt;
1022 xsb->sb_mbmax = sb->sb_mbmax;
1023 xsb->sb_lowat = sb->sb_lowat;
1024 xsb->sb_flags = sb->sb_flags;
1025 xsb->sb_timeo = sb->sb_timeo;
1026}
1027
1028/* This takes the place of kern.maxsockbuf, which moved to kern.ipc. */
1029static int dummy;
1030SYSCTL_INT(_kern, KERN_DUMMY, dummy, CTLFLAG_RW, &dummy, 0, "");
1031SYSCTL_OID(_kern_ipc, KIPC_MAXSOCKBUF, maxsockbuf, CTLTYPE_ULONG|CTLFLAG_RW,
1032 &sb_max, 0, sysctl_handle_sb_max, "LU", "Maximum socket buffer size");
1033SYSCTL_ULONG(_kern_ipc, KIPC_SOCKBUF_WASTE, sockbuf_waste_factor, CTLFLAG_RW,
1034 &sb_efficiency, 0, "");