accf_dns.c (192848) | accf_dns.c (193272) |
---|---|
1/* 2 * Copyright (C) 2007 David Malone <dwmalone@FreeBSD.org> 3 * 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 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/* 2 * Copyright (C) 2007 David Malone <dwmalone@FreeBSD.org> 3 * 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 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/netinet/accf_dns.c 192848 2009-05-26 20:00:30Z jhb $ | 26 * $FreeBSD: head/sys/netinet/accf_dns.c 193272 2009-06-01 21:17:03Z jhb $ |
27 */ 28 29#define ACCEPT_FILTER_MOD 30 31#include <sys/param.h> 32#include <sys/kernel.h> 33#include <sys/mbuf.h> 34#include <sys/module.h> 35#include <sys/signalvar.h> 36#include <sys/sysctl.h> 37#include <sys/socketvar.h> 38 39/* check for full DNS request */ | 27 */ 28 29#define ACCEPT_FILTER_MOD 30 31#include <sys/param.h> 32#include <sys/kernel.h> 33#include <sys/mbuf.h> 34#include <sys/module.h> 35#include <sys/signalvar.h> 36#include <sys/sysctl.h> 37#include <sys/socketvar.h> 38 39/* check for full DNS request */ |
40static void sohasdns(struct socket *so, void *arg, int waitflag); | 40static int sohasdns(struct socket *so, void *arg, int waitflag); |
41 42struct packet { 43 struct mbuf *m; /* Current mbuf. */ 44 struct mbuf *n; /* nextpkt mbuf. */ 45 unsigned long moff; /* Offset of the beginning of m. */ 46 unsigned long offset; /* Which offset we are working at. */ 47 unsigned long len; /* The number of bytes we have to play with. */ 48}; --- 15 unchanged lines hidden (view full) --- 64static moduledata_t accf_dns_mod = { 65 "accf_dns", 66 accept_filt_generic_mod_event, 67 &accf_dns_filter 68}; 69 70DECLARE_MODULE(accf_dns, accf_dns_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); 71 | 41 42struct packet { 43 struct mbuf *m; /* Current mbuf. */ 44 struct mbuf *n; /* nextpkt mbuf. */ 45 unsigned long moff; /* Offset of the beginning of m. */ 46 unsigned long offset; /* Which offset we are working at. */ 47 unsigned long len; /* The number of bytes we have to play with. */ 48}; --- 15 unchanged lines hidden (view full) --- 64static moduledata_t accf_dns_mod = { 65 "accf_dns", 66 accept_filt_generic_mod_event, 67 &accf_dns_filter 68}; 69 70DECLARE_MODULE(accf_dns, accf_dns_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); 71 |
72static void | 72static int |
73sohasdns(struct socket *so, void *arg, int waitflag) 74{ 75 struct sockbuf *sb = &so->so_rcv; 76 77 /* If the socket is full, we're ready. */ 78 if (sb->sb_cc >= sb->sb_hiwat || sb->sb_mbcnt >= sb->sb_mbmax) 79 goto ready; 80 81 /* Check to see if we have a request. */ 82 if (skippacket(sb) == DNS_WAIT) | 73sohasdns(struct socket *so, void *arg, int waitflag) 74{ 75 struct sockbuf *sb = &so->so_rcv; 76 77 /* If the socket is full, we're ready. */ 78 if (sb->sb_cc >= sb->sb_hiwat || sb->sb_mbcnt >= sb->sb_mbmax) 79 goto ready; 80 81 /* Check to see if we have a request. */ 82 if (skippacket(sb) == DNS_WAIT) |
83 return; | 83 return (SU_OK); |
84 85ready: | 84 85ready: |
86 so->so_upcall = NULL; 87 so->so_rcv.sb_flags &= ~SB_UPCALL; 88 soisconnected(so); 89 return; | 86 return (SU_ISCONNECTED); |
90} 91 92#define GET8(p, val) do { \ 93 if (p->offset < p->moff) \ 94 return DNS_RUN; \ 95 while (p->offset >= p->moff + p->m->m_len) { \ 96 p->moff += p->m->m_len; \ 97 p->m = p->m->m_next; \ --- 38 unchanged lines hidden --- | 87} 88 89#define GET8(p, val) do { \ 90 if (p->offset < p->moff) \ 91 return DNS_RUN; \ 92 while (p->offset >= p->moff + p->m->m_len) { \ 93 p->moff += p->m->m_len; \ 94 p->m = p->m->m_next; \ --- 38 unchanged lines hidden --- |