1 /* $OpenBSD: ip6_divert.h,v 1.10 2020/08/24 16:00:31 gnezdo 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 _IP6_DIVERT_H_ 20 #define _IP6_DIVERT_H_ 21 22 struct div6stat { 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 DIVERT6CTL_RECVSPACE 1 /* receive buffer space */ 34 #define DIVERT6CTL_SENDSPACE 2 /* send buffer space */ 35 #define DIVERT6CTL_STATS 3 /* divert statistics */ 36 #define DIVERT6CTL_MAXID 4 37 38 #define DIVERT6CTL_NAMES { \ 39 { 0, 0 }, \ 40 { "recvspace", CTLTYPE_INT }, \ 41 { "sendspace", CTLTYPE_INT }, \ 42 { "stats", CTLTYPE_STRUCT } \ 43 } 44 45 #ifdef _KERNEL 46 47 #include <sys/percpu.h> 48 49 enum div6stat_counters { 50 div6s_ipackets, 51 div6s_noport, 52 div6s_fullsock, 53 div6s_opackets, 54 div6s_errors, 55 div6s_ncounters, 56 }; 57 58 extern struct cpumem *div6counters; 59 60 static inline void 61 div6stat_inc(enum div6stat_counters c) 62 { 63 counters_inc(div6counters, c); 64 } 65 66 extern struct inpcbtable divb6table; 67 68 void divert6_init(void); 69 int divert6_packet(struct mbuf *, int, u_int16_t); 70 int divert6_sysctl(int *, u_int, void *, size_t *, void *, size_t); 71 int divert6_usrreq(struct socket *, 72 int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *); 73 int divert6_attach(struct socket *, int); 74 int divert6_detach(struct socket *); 75 #endif /* _KERNEL */ 76 77 #endif /* _IP6_DIVERT_H_ */ 78