Annotation of XNU/bsd/net/kext_net.h, revision 1.1.1.1

1.1       root        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: /* Copyright (C) 1999 Apple Computer, Inc.  */
                     23: /*
                     24:  * Support for network filter kernel extensions
                     25:  * Justin C. Walker, 990319
                     26:  */
                     27: #ifndef NET_KEXT_NET_H
                     28: #define NET_KEXT_NET_H
                     29: 
                     30: #include <sys/queue.h>
                     31: #include <sys/socketvar.h>
                     32: 
                     33: struct mbuf;
                     34: struct socket;
                     35: struct uio;
                     36: struct sockbuf;
                     37: struct sockaddr;
                     38: struct kextcb;
                     39: struct protosw;
                     40: struct sockif;
                     41: struct sockutil;
                     42: struct sockopt;
                     43: 
                     44: /*
                     45:  * This structure gives access to the functionality of the filter.
                     46:  * The kextcb provides the link from the socket structure.
                     47:  */
                     48: struct NFDescriptor
                     49: {      TAILQ_ENTRY(NFDescriptor) nf_next;      /* protosw chain */
                     50:        TAILQ_ENTRY(NFDescriptor) nf_list;      /* descriptor list */
                     51:        unsigned int nf_handle;                 /* Identifier */
                     52:        int nf_flags;
                     53:        /* Dispatch for PF_FILTER control */
                     54:        int (*nf_connect)();                    /* Make contact */
                     55:        void (*nf_disconnect)();                /* Break contact */
                     56:        int (*nf_read)();                       /* Get data from filter */
                     57:        int (*nf_write)();                      /* Send data to filter */
                     58:        int (*nf_get)();                        /* Get filter config */
                     59:        int (*nf_set)();                        /* Set filter config */
                     60:        /*
                     61:         * Socket function dispatch vectors - copied to kextcb
                     62:         *  during socreate()
                     63:         */
                     64:        struct  sockif *nf_soif;                /* Socket functions */
                     65:        struct  sockutil *nf_soutil;            /* Sockbuf utility functions */
                     66: };
                     67: 
                     68: #define NFD_GLOBAL     0x01
                     69: #define NFD_PROG       0x02
                     70: #define NFD_VISIBLE    0x80000000
                     71: 
                     72: #define NFF_BEFORE             0x01
                     73: #define NFF_AFTER              0x02
                     74: 
                     75: #ifdef KERNEL
                     76: /* How to register: filter, insert location, target protosw, flags */
                     77: extern int register_sockfilter(struct NFDescriptor *,
                     78:                               struct NFDescriptor *,
                     79:                               struct protosw *, int);
                     80: /* How to unregister: filter, original protosw, flags */
                     81: extern int unregister_sockfilter(struct NFDescriptor *, struct protosw *, int);
                     82: 
                     83: TAILQ_HEAD(nf_list, NFDescriptor);
                     84: 
                     85: extern struct nf_list nf_list;
                     86: #endif
                     87: 
                     88: #define NKE_OK 0
                     89: #define NKE_REMOVE -1
                     90: 
                     91: /*
                     92:  * Interface structure for inserting an installed socket NKE into an
                     93:  *  existing socket.
                     94:  * 'handle' is the NKE to be inserted, 'where' is an insertion point,
                     95:  *  and flags dictate the position of the to-be-inserted NKE relative to
                     96:  *  the 'where' NKE.  If the latter is NULL, the flags indicate "first"
                     97:  *  or "last"
                     98:  */
                     99: struct so_nke
                    100: {      unsigned int nke_handle;
                    101:        unsigned int nke_where;
                    102:        int nke_flags; /* NFF_BEFORE, NFF_AFTER: net/kext_net.h */
                    103: };
                    104: 
                    105: /*
                    106:  * sockif:
                    107:  * Contains socket interface:
                    108:  *  dispatch vector abstracting the interface between protocols and
                    109:  *  the socket layer.
                    110:  * TODO: add sf_sosense()
                    111:  */
                    112: struct sockif
                    113: {      int (*sf_soabort)(struct socket *, struct kextcb *);
                    114:        int (*sf_soaccept)(struct socket *, struct sockaddr **,
                    115:                           struct kextcb *);
                    116:        int (*sf_sobind)(struct socket *, struct sockaddr *, struct kextcb *);
                    117:        int (*sf_soclose)(struct socket *, struct kextcb *);
                    118:        int (*sf_soconnect)(struct socket *, struct sockaddr *,
                    119:                            struct kextcb *);
                    120:        int (*sf_soconnect2)(struct socket *, struct socket *,
                    121:                             struct kextcb *);
                    122:        int (*sf_socontrol)(struct socket *, struct sockopt *,
                    123:                            struct kextcb *);
                    124:        int (*sf_socreate)(struct socket *, struct protosw *, struct kextcb *);
                    125:        int (*sf_sodisconnect)(struct socket *, struct kextcb *);
                    126:        int (*sf_sofree)(struct socket *, struct kextcb *);
                    127:        int (*sf_sogetopt)(struct socket *, int, int, struct mbuf **,
                    128:                           struct kextcb *);
                    129:        int (*sf_sohasoutofband)(struct socket *, struct kextcb *);
                    130:        int (*sf_solisten)(struct socket *, struct kextcb *);
                    131:        int (*sf_soreceive)(struct socket *, struct sockaddr **, struct uio **,
                    132:                            struct mbuf **, struct mbuf **, int *,
                    133:                            struct kextcb *);
                    134:        int (*sf_sorflush)(struct socket *, struct kextcb *);
                    135:        int (*sf_sosend)(struct socket *, struct sockaddr **, struct uio **,
                    136:                         struct mbuf **, struct mbuf **, int *,
                    137:                         struct kextcb *);
                    138:        int (*sf_sosetopt)(struct socket *, int, int, struct mbuf *,
                    139:                           struct kextcb *);
                    140:        int (*sf_soshutdown)(struct socket *, int, struct kextcb *);
                    141:        /* Calls sorwakeup() */
                    142:        int (*sf_socantrcvmore)(struct socket *, struct kextcb *);
                    143:        /* Calls sowwakeup() */
                    144:        int (*sf_socantsendmore)(struct socket *, struct kextcb *);
                    145:        /* Calls soqinsque(), sorwakeup(), sowwakeup() */
                    146:        int (*sf_soisconnected)(struct socket *, struct kextcb *);
                    147:        int (*sf_soisconnecting)(struct socket *, struct kextcb *);
                    148:        /* Calls sowwakeup(), sorwakeup() */
                    149:        int (*sf_soisdisconnected)(struct socket *, struct kextcb *);
                    150:        /* Calls sowwakeup(), sorwakeup() */
                    151:        int (*sf_soisdisconnecting)(struct socket *, struct kextcb *);
                    152:        /* Calls soreserve(), soqinsque(), soqremque(), sorwakeup() */
                    153:        struct socket *(*sf_sonewconn1)(struct socket *, int, struct kextcb *);
                    154:        int (*sf_soqinsque)(struct socket *, struct socket *, int,
                    155:                             struct kextcb *);
                    156:        int (*sf_soqremque)(struct socket *, int, struct kextcb *);
                    157:        int (*sf_soreserve)(struct socket *, u_long, u_long, struct kextcb *);
                    158:        int (*sf_sowakeup)(struct socket *, struct sockbuf *,
                    159:                            struct kextcb *);
                    160: };
                    161: 
                    162: 
                    163: /*
                    164:  * sockutil:
                    165:  * Contains the utility functions for socket layer access
                    166:  */
                    167: struct sockutil
                    168: {      /* Sleeps if locked */
                    169:        int (*su_sb_lock)(struct sockbuf *, struct kextcb *);
                    170:        /* Conditionally calls sbappendrecord, Calls sbcompress */
                    171:        int (*su_sbappend)(struct sockbuf *, struct mbuf *, struct kextcb *);
                    172:        /* Calls sbspace(), sballoc() */
                    173:        int (*su_sbappendaddr)(struct sockbuf *, struct sockaddr *,
                    174:                               struct mbuf *, struct mbuf *, struct kextcb *);
                    175:        /* Calls sbspace(), sballoc() */
                    176:        int (*su_sbappendcontrol)(struct sockbuf *, struct mbuf *,
                    177:                                  struct mbuf *, struct kextcb *);
                    178:        /* Calls sballoc(), sbcompress() */
                    179:        int (*su_sbappendrecord)(struct sockbuf *, struct mbuf *,
                    180:                                  struct kextcb *);
                    181:        /* Calls sballoc() */
                    182:        int (*su_sbcompress)(struct sockbuf *, struct mbuf *, struct mbuf *,
                    183:                              struct kextcb *);
                    184:        /* Calls sbfree() */
                    185:        int (*su_sbdrop)(struct sockbuf *, int, struct kextcb *);
                    186:        /* Calls sbfree() */
                    187:        int (*su_sbdroprecord)(struct sockbuf *, struct kextcb *);
                    188:        /* Calls sbdrop() */
                    189:        int (*su_sbflush)(struct sockbuf *, struct kextcb *);
                    190:        /* Calls sballoc(), sbcompress() */
                    191:        int (*su_sbinsertoob)(struct sockbuf *, struct mbuf *,
                    192:                               struct kextcb *);
                    193:        /* Calls sbflush() */
                    194:        int (*su_sbrelease)(struct sockbuf *, struct kextcb *);
                    195:        int (*su_sbreserve)(struct sockbuf *, u_long, struct kextcb *);
                    196:        /* Calls tsleep() */
                    197:        int (*su_sbwait)(struct sockbuf *, struct kextcb *);
                    198: };
                    199: 
                    200: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.