linux/net/netfilter/nf_conntrack_netbios_ns.c
<<
>>
Prefs
   1/*
   2 *      NetBIOS name service broadcast connection tracking helper
   3 *
   4 *      (c) 2005 Patrick McHardy <kaber@trash.net>
   5 *
   6 *      This program is free software; you can redistribute it and/or
   7 *      modify it under the terms of the GNU General Public License
   8 *      as published by the Free Software Foundation; either version
   9 *      2 of the License, or (at your option) any later version.
  10 */
  11/*
  12 *      This helper tracks locally originating NetBIOS name service
  13 *      requests by issuing permanent expectations (valid until
  14 *      timing out) matching all reply connections from the
  15 *      destination network. The only NetBIOS specific thing is
  16 *      actually the port number.
  17 */
  18#include <linux/kernel.h>
  19#include <linux/module.h>
  20#include <linux/init.h>
  21#include <linux/in.h>
  22
  23#include <net/netfilter/nf_conntrack.h>
  24#include <net/netfilter/nf_conntrack_helper.h>
  25#include <net/netfilter/nf_conntrack_expect.h>
  26
  27#define NMBD_PORT       137
  28
  29MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
  30MODULE_DESCRIPTION("NetBIOS name service broadcast connection tracking helper");
  31MODULE_LICENSE("GPL");
  32MODULE_ALIAS("ip_conntrack_netbios_ns");
  33MODULE_ALIAS_NFCT_HELPER("netbios_ns");
  34
  35static unsigned int timeout __read_mostly = 3;
  36module_param(timeout, uint, S_IRUSR);
  37MODULE_PARM_DESC(timeout, "timeout for master connection/replies in seconds");
  38
  39static struct nf_conntrack_expect_policy exp_policy = {
  40        .max_expected   = 1,
  41};
  42
  43static int netbios_ns_help(struct sk_buff *skb, unsigned int protoff,
  44                   struct nf_conn *ct, enum ip_conntrack_info ctinfo)
  45{
  46        return nf_conntrack_broadcast_help(skb, protoff, ct, ctinfo, timeout);
  47}
  48
  49static struct nf_conntrack_helper helper __read_mostly = {
  50        .name                   = "netbios-ns",
  51        .tuple.src.l3num        = NFPROTO_IPV4,
  52        .tuple.src.u.udp.port   = cpu_to_be16(NMBD_PORT),
  53        .tuple.dst.protonum     = IPPROTO_UDP,
  54        .me                     = THIS_MODULE,
  55        .help                   = netbios_ns_help,
  56        .expect_policy          = &exp_policy,
  57};
  58
  59static int __init nf_conntrack_netbios_ns_init(void)
  60{
  61        exp_policy.timeout = timeout;
  62        return nf_conntrack_helper_register(&helper);
  63}
  64
  65static void __exit nf_conntrack_netbios_ns_fini(void)
  66{
  67        nf_conntrack_helper_unregister(&helper);
  68}
  69
  70module_init(nf_conntrack_netbios_ns_init);
  71module_exit(nf_conntrack_netbios_ns_fini);
  72