1 /* $NetBSD: pf_mtag.c,v 1.2 2008/06/18 09:06:27 yamt Exp $ */ 2 /* $OpenBSD: pf.c,v 1.504 2005/10/17 08:43:35 henning Exp $ */ 3 4 /* 5 * Copyright (c) 2001 Daniel Hartmeier 6 * Copyright (c) 2002,2003 Henning Brauer 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * - Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * - Redistributions in binary form must reproduce the above 16 * copyright notice, this list of conditions and the following 17 * disclaimer in the documentation and/or other materials provided 18 * with the distribution. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * 33 * Effort sponsored in part by the Defense Advanced Research Projects 34 * Agency (DARPA) and Air Force Research Laboratory, Air Force 35 * Materiel Command, USAF, under agreement number F30602-01-2-0537. 36 * 37 */ 38 39 #include <sys/cdefs.h> 40 __KERNEL_RCSID(0, "$NetBSD: pf_mtag.c,v 1.2 2008/06/18 09:06:27 yamt Exp $"); 41 42 #include <sys/param.h> 43 #include <sys/systm.h> 44 #include <sys/mbuf.h> 45 #include <sys/kernel.h> 46 47 #include <net/pf_mtag.h> 48 49 struct pf_mtag * 50 pf_find_mtag(struct mbuf *m) 51 { 52 struct m_tag *mtag; 53 54 if ((mtag = m_tag_find(m, PACKET_TAG_PF, NULL)) == NULL) 55 return (NULL); 56 57 return ((struct pf_mtag *)(mtag + 1)); 58 } 59 60 struct pf_mtag * 61 pf_get_mtag(struct mbuf *m) 62 { 63 struct m_tag *mtag; 64 65 if ((mtag = m_tag_find(m, PACKET_TAG_PF, NULL)) == NULL) { 66 mtag = m_tag_get(PACKET_TAG_PF, sizeof(struct pf_mtag), 67 M_NOWAIT); 68 if (mtag == NULL) 69 return (NULL); 70 bzero(mtag + 1, sizeof(struct pf_mtag)); 71 m_tag_prepend(m, mtag); 72 } 73 74 return ((struct pf_mtag *)(mtag + 1)); 75 } 76