Home | History | Annotate | Line # | Download | only in dist
      1 /*	$NetBSD: mln_rule.c,v 1.1.1.2 2012/07/22 13:44:25 darrenr Exp $	*/
      2 
      3 /*
      4  * Copyright (C) 2012 by Darren Reed.
      5  *
      6  * See the IPFILTER.LICENCE file for details on licencing.
      7  *
      8  */
      9 
     10 #include <sys/param.h>
     11 #include <sys/systm.h>
     12 #include <sys/conf.h>
     13 #include <sys/proc.h>
     14 #include <sys/ioctl.h>
     15 #include <sys/kernel.h>
     16 #include <sys/mbuf.h>
     17 #include <sys/exec.h>
     18 #include <sys/socket.h>
     19 #include <net/if.h>
     20 #include <netinet/in_systm.h>
     21 #include <netinet/in.h>
     22 #include <netinet/ip.h>
     23 #include <net/route.h>
     24 #include <netinet/ip_var.h>
     25 #include <netinet/tcp.h>
     26 #include <netinet/tcpip.h>
     27 #include <sys/lkm.h>
     28 #include "ip_compat.h"
     29 #include "ip_fil.h"
     30 #include "ip_rules.h"
     31 
     32 
     33 static int ipfruleaction __P((struct lkm_table *, int));
     34 
     35 #ifdef IPFILTER_LKM
     36 # if NetBSD >= 199706
     37 int	ipfrule_lkmentry __P((struct lkm_table *, int, int));
     38 # else
     39 int	xxxinit __P((struct lkm_table *, int, int));
     40 # endif
     41 
     42 
     43 MOD_MISC("IPFilter Rules");
     44 
     45 # if NetBSD >= 199706
     46 int ipfrule_lkmentry(lkmtp, cmd, ver)
     47 # else
     48 int xxxinit(lkmtp, cmd, ver)
     49 # endif
     50 	struct lkm_table *lkmtp;
     51 	int cmd, ver;
     52 {
     53 	DISPATCH(lkmtp, cmd, ver, ipfruleaction, ipfruleaction, ipfruleaction);
     54 }
     55 
     56 static int ipfruleaction(lkmtp, cmd)
     57 	struct lkm_table *lkmtp;
     58 	int cmd;
     59 {
     60 	int err = 0;
     61 
     62 	switch (cmd)
     63 	{
     64 	case LKM_E_LOAD :
     65 		if (lkmexists(lkmtp))
     66 			return EEXIST;
     67 
     68 		err = ipfrule_add();
     69 		if (!err)
     70 			ipf_refcnt++;
     71 		break;
     72 	case LKM_E_UNLOAD :
     73 		err = ipfrule_remove();
     74 		if (!err)
     75 			ipf_refcnt--;
     76 		break;
     77 	case LKM_E_STAT :
     78 		break;
     79 	default:
     80 		err = EIO;
     81 		break;
     82 	}
     83 	return err;
     84 }
     85 #endif /* IPFILTER_LKM */
     86