1 /* $OpenBSD: ip_divert.h,v 1.6 2014/07/10 03:17:59 lteo Exp $ */ 2 3 /* 4 * Copyright (c) 2009 Michele Marchetto <michele@openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _IP_DIVERT_H_ 20 #define _IP_DIVERT_H_ 21 22 struct divstat { 23 u_long divs_ipackets; /* total input packets */ 24 u_long divs_noport; /* no socket on port */ 25 u_long divs_fullsock; /* not delivered, input socket full */ 26 u_long divs_opackets; /* total output packets */ 27 u_long divs_errors; /* generic errors */ 28 }; 29 30 /* 31 * Names for divert sysctl objects 32 */ 33 #define DIVERTCTL_RECVSPACE 1 /* receive buffer space */ 34 #define DIVERTCTL_SENDSPACE 2 /* send buffer space */ 35 #define DIVERTCTL_STATS 3 /* divert statistics */ 36 #define DIVERTCTL_MAXID 4 37 38 #define DIVERTCTL_NAMES { \ 39 { 0, 0 }, \ 40 { "recvspace", CTLTYPE_INT }, \ 41 { "sendspace", CTLTYPE_INT }, \ 42 { "stats", CTLTYPE_STRUCT } \ 43 } 44 45 #define DIVERTCTL_VARS { \ 46 NULL, \ 47 &divert_recvspace, \ 48 &divert_sendspace, \ 49 NULL \ 50 } 51 52 #ifdef _KERNEL 53 extern struct inpcbtable divbtable; 54 extern struct divstat divstat; 55 56 void divert_init(void); 57 void divert_input(struct mbuf *, ...); 58 int divert_packet(struct mbuf *, int, u_int16_t); 59 int divert_sysctl(int *, u_int, void *, size_t *, void *, size_t); 60 int divert_usrreq(struct socket *, 61 int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *); 62 63 #endif /* _KERNEL */ 64 #endif /* _IP_DIVERT_H_ */ 65