The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netinet/ip_netbios_pxy.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: ip_netbios_pxy.c,v 1.5 2004/03/28 09:00:57 martti Exp $        */
    2 
    3 /*
    4  * Simple netbios-dgm transparent proxy for in-kernel use.
    5  * For use with the NAT code.
    6  * Id: ip_netbios_pxy.c,v 2.8 2003/12/01 02:52:16 darrenr Exp
    7  */
    8 
    9 /*-
   10  * Copyright (c) 2002-2003 Paul J. Ledbetter III
   11  * All rights reserved.
   12  *
   13  * Redistribution and use in source and binary forms, with or without
   14  * modification, are permitted provided that the following conditions
   15  * are met:
   16  * 1. Redistributions of source code must retain the above copyright
   17  *    notice, this list of conditions and the following disclaimer.
   18  * 2. Redistributions in binary form must reproduce the above copyright
   19  *    notice, this list of conditions and the following disclaimer in the
   20  *    documentation and/or other materials provided with the distribution.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  * Id: ip_netbios_pxy.c,v 2.8 2003/12/01 02:52:16 darrenr Exp
   35  */
   36 
   37 __KERNEL_RCSID(1, "$NetBSD: ip_netbios_pxy.c,v 1.5 2004/03/28 09:00:57 martti Exp $");
   38 
   39 #define IPF_NETBIOS_PROXY
   40 
   41 int ippr_netbios_init __P((void));
   42 void ippr_netbios_fini __P((void));
   43 int ippr_netbios_out __P((fr_info_t *, ap_session_t *, nat_t *));
   44 
   45 static  frentry_t       netbiosfr;
   46 
   47 int     netbios_proxy_init = 0;
   48 
   49 /*
   50  * Initialize local structures.
   51  */
   52 int ippr_netbios_init()
   53 {
   54         bzero((char *)&netbiosfr, sizeof(netbiosfr));
   55         netbiosfr.fr_ref = 1;
   56         netbiosfr.fr_flags = FR_INQUE|FR_PASS|FR_QUICK|FR_KEEPSTATE;
   57         MUTEX_INIT(&netbiosfr.fr_lock, "NETBIOS proxy rule lock");
   58         netbios_proxy_init = 1;
   59 
   60         return 0;
   61 }
   62 
   63 
   64 void ippr_netbios_fini()
   65 {
   66         if (netbios_proxy_init == 1) {
   67                 MUTEX_DESTROY(&netbiosfr.fr_lock);
   68                 netbios_proxy_init = 0;
   69         }
   70 }
   71 
   72 
   73 int ippr_netbios_out(fin, aps, nat)
   74 fr_info_t *fin;
   75 ap_session_t *aps;
   76 nat_t *nat;
   77 {
   78         char dgmbuf[6];
   79         int off, dlen;
   80         udphdr_t *udp;
   81         ip_t *ip;
   82         mb_t *m;
   83 
   84         aps = aps;      /* LINT */
   85         nat = nat;      /* LINT */
   86 
   87         ip = fin->fin_ip;
   88         m = *(mb_t **)fin->fin_mp;
   89         off = fin->fin_hlen + sizeof(udphdr_t);
   90         dlen = M_LEN(m);
   91         dlen -= off;
   92 
   93         /*
   94          * no net bios datagram could possibly be shorter than this
   95          */
   96         if (dlen < 11)
   97                 return 0;
   98 
   99         udp = (udphdr_t *)fin->fin_dp;
  100 
  101         /*
  102          * move past the
  103          *      ip header;
  104          *      udp header;
  105          *      4 bytes into the net bios dgm header.
  106          *  According to rfc1002, this should be the exact location of
  107          *  the source address/port
  108          */
  109         off += 4;
  110 
  111         /* Copy NATed source Address/port*/
  112         dgmbuf[0] = (char)((ip->ip_src.s_addr     ) &0xFF);
  113         dgmbuf[1] = (char)((ip->ip_src.s_addr >> 8) &0xFF);
  114         dgmbuf[2] = (char)((ip->ip_src.s_addr >> 16)&0xFF);
  115         dgmbuf[3] = (char)((ip->ip_src.s_addr >> 24)&0xFF);
  116 
  117         dgmbuf[4] = (char)((udp->uh_sport     )&0xFF);
  118         dgmbuf[5] = (char)((udp->uh_sport >> 8)&0xFF);
  119 
  120         /* replace data in packet */
  121         COPYBACK(m, off, sizeof(dgmbuf), dgmbuf);
  122 
  123         return 0;
  124 }

Cache object: 65368b362969f2bd84b507ca268f38ff


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.