darwin-xnu/bsd/netinet/ip_divert.h
<<
>>
Prefs
   1/*-
   2 * Copyright (c) 2003 Sam Leffler, Errno Consulting
   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 *    notice, this list of conditions and the following disclaimer,
  10 *    without modification.
  11 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  12 *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
  13 *    redistribution must be conditioned upon including a substantially
  14 *    similar Disclaimer requirement for further binary redistribution.
  15 * 3. Neither the names of the above-listed copyright holders nor the names
  16 *    of any contributors may be used to endorse or promote products derived
  17 *    from this software without specific prior written permission.
  18 *
  19 * NO WARRANTY
  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 NONINFRINGEMENT, MERCHANTIBILITY
  23 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  24 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
  25 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  28 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  30 * THE POSSIBILITY OF SUCH DAMAGES.
  31 *
  32 * $FreeBSD: src/sys/netinet/ip_divert.h,v 1.3 2004/02/25 19:55:28 mlaier Exp $
  33 */
  34
  35#ifndef _NETINET_IP_DIVERT_H_
  36#define _NETINET_IP_DIVERT_H_
  37
  38#if IPDIVERT
  39/*
  40 * Divert socket definitions.
  41 */
  42
  43/* 32-bit unique unsigned value used to identify a module */
  44
  45struct divert_tag {
  46        u_int32_t       info;           /* port & flags */
  47        u_int16_t       cookie;         /* ipfw rule number */
  48};
  49
  50/*
  51 * Return the divert cookie associated with the mbuf; if any.
  52 */
  53static __inline u_int16_t
  54divert_cookie(struct m_tag *mtag)
  55{
  56        return ((struct divert_tag *)(mtag+1))->cookie;
  57}
  58static __inline u_int16_t
  59divert_find_cookie(struct mbuf *m)
  60{
  61        struct m_tag *mtag = m_tag_locate(m, KERNEL_MODULE_TAG_ID,
  62                                                                          KERNEL_TAG_TYPE_DIVERT, NULL);
  63        return mtag ? divert_cookie(mtag) : 0;
  64}
  65
  66/*
  67 * Return the divert info associated with the mbuf; if any.
  68 */
  69static __inline u_int32_t
  70divert_info(struct m_tag *mtag)
  71{
  72        return ((struct divert_tag *)(mtag+1))->info;
  73}
  74static __inline u_int32_t
  75divert_find_info(struct mbuf *m)
  76{
  77        struct m_tag *mtag = m_tag_locate(m, KERNEL_MODULE_TAG_ID,
  78                                                                          KERNEL_TAG_TYPE_DIVERT, NULL);
  79        return mtag ? divert_info(mtag) : 0;
  80}
  81
  82extern  void div_init(void);
  83extern  void div_input(struct mbuf *, int);
  84lck_mtx_t * 
  85        div_getlock(struct socket *,  int );
  86int     div_unlock(struct socket *, int, int);
  87int     div_lock(struct socket *, int , int );
  88extern  void divert_packet(struct mbuf *m, int incoming, int port, int rule);
  89extern struct pr_usrreqs div_usrreqs;
  90
  91#endif /* IPDIVERT */
  92#endif /* _NETINET_IP_DIVERT_H_ */
  93
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.