fil.c (172776) | fil.c (173181) |
---|---|
1/* $FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 172776 2007-10-18 21:52:14Z darrenr $ */ | 1/* $FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 173181 2007-10-30 15:23:27Z darrenr $ */ |
2 3/* 4 * Copyright (C) 1993-2003 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8#if defined(KERNEL) || defined(_KERNEL) 9# undef KERNEL --- 140 unchanged lines hidden (view full) --- 150#endif 151#include "netinet/ipl.h" 152/* END OF INCLUDES */ 153 154#include <machine/in_cksum.h> 155 156#if !defined(lint) 157static const char sccsid[] = "@(#)fil.c 1.36 6/5/96 (C) 1993-2000 Darren Reed"; | 2 3/* 4 * Copyright (C) 1993-2003 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 */ 8#if defined(KERNEL) || defined(_KERNEL) 9# undef KERNEL --- 140 unchanged lines hidden (view full) --- 150#endif 151#include "netinet/ipl.h" 152/* END OF INCLUDES */ 153 154#include <machine/in_cksum.h> 155 156#if !defined(lint) 157static const char sccsid[] = "@(#)fil.c 1.36 6/5/96 (C) 1993-2000 Darren Reed"; |
158static const char rcsid[] = "@(#)$FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 172776 2007-10-18 21:52:14Z darrenr $"; | 158static const char rcsid[] = "@(#)$FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 173181 2007-10-30 15:23:27Z darrenr $"; |
159/* static const char rcsid[] = "@(#)$Id: fil.c,v 2.243.2.125 2007/10/10 09:27:20 darrenr Exp $"; */ 160#endif 161 162#ifndef _KERNEL 163# include "ipf.h" 164# include "ipt.h" 165# include "bpf-ipf.h" 166extern int opts; --- 2342 unchanged lines hidden (view full) --- 2509 */ 2510 if (((ip6_t *)ip)->ip6_plen == 0) { 2511 pass = FR_BLOCK|FR_NOMATCH; 2512 goto finished; 2513 } 2514 } else 2515#endif 2516 { | 159/* static const char rcsid[] = "@(#)$Id: fil.c,v 2.243.2.125 2007/10/10 09:27:20 darrenr Exp $"; */ 160#endif 161 162#ifndef _KERNEL 163# include "ipf.h" 164# include "ipt.h" 165# include "bpf-ipf.h" 166extern int opts; --- 2342 unchanged lines hidden (view full) --- 2509 */ 2510 if (((ip6_t *)ip)->ip6_plen == 0) { 2511 pass = FR_BLOCK|FR_NOMATCH; 2512 goto finished; 2513 } 2514 } else 2515#endif 2516 { |
2517#if (defined(OpenBSD) && OpenBSD >= 200311) && defined(_KERNEL) | 2517#if (defined(OpenBSD) && (OpenBSD >= 200311)) && defined(_KERNEL) |
2518 ip->ip_len = ntohs(ip->ip_len); 2519 ip->ip_off = ntohs(ip->ip_off); 2520#endif 2521 } 2522 2523 if (fr_makefrip(hlen, ip, fin) == -1) { 2524 pass = FR_BLOCK|FR_NOMATCH; 2525 goto finished; --- 246 unchanged lines hidden (view full) --- 2772 } 2773#endif 2774 } 2775 2776 SPL_X(s); 2777 RWLOCK_EXIT(&ipf_global); 2778 2779#ifdef _KERNEL | 2518 ip->ip_len = ntohs(ip->ip_len); 2519 ip->ip_off = ntohs(ip->ip_off); 2520#endif 2521 } 2522 2523 if (fr_makefrip(hlen, ip, fin) == -1) { 2524 pass = FR_BLOCK|FR_NOMATCH; 2525 goto finished; --- 246 unchanged lines hidden (view full) --- 2772 } 2773#endif 2774 } 2775 2776 SPL_X(s); 2777 RWLOCK_EXIT(&ipf_global); 2778 2779#ifdef _KERNEL |
2780# if defined(OpenBSD) && OpenBSD >= 200311 | 2780# if (defined(OpenBSD) && (OpenBSD >= 200311)) |
2781 if (FR_ISPASS(pass) && (v == 4)) { 2782 ip = fin->fin_ip; 2783 ip->ip_len = ntohs(ip->ip_len); 2784 ip->ip_off = ntohs(ip->ip_off); 2785 } 2786# endif 2787 return (FR_ISPASS(pass)) ? 0 : fin->fin_error; 2788#else /* _KERNEL */ --- 4230 unchanged lines hidden (view full) --- 7019 error = EPERM; 7020 else { 7021 error = BCOPYIN(data, &tmp, sizeof(tmp)); 7022 if (error != 0) { 7023 error = EFAULT; 7024 break; 7025 } 7026 | 2781 if (FR_ISPASS(pass) && (v == 4)) { 2782 ip = fin->fin_ip; 2783 ip->ip_len = ntohs(ip->ip_len); 2784 ip->ip_off = ntohs(ip->ip_off); 2785 } 2786# endif 2787 return (FR_ISPASS(pass)) ? 0 : fin->fin_error; 2788#else /* _KERNEL */ --- 4230 unchanged lines hidden (view full) --- 7019 error = EPERM; 7020 else { 7021 error = BCOPYIN(data, &tmp, sizeof(tmp)); 7022 if (error != 0) { 7023 error = EFAULT; 7024 break; 7025 } 7026 |
7027 RWLOCK_EXIT(&ipf_global); | |
7028 WRITE_ENTER(&ipf_global); 7029 if (tmp) { 7030 if (fr_running > 0) 7031 error = 0; 7032 else 7033 error = ipfattach(); 7034 if (error == 0) 7035 fr_running = 1; 7036 else 7037 (void) ipfdetach(); 7038 } else { 7039 error = ipfdetach(); 7040 if (error == 0) 7041 fr_running = -1; 7042 } | 7027 WRITE_ENTER(&ipf_global); 7028 if (tmp) { 7029 if (fr_running > 0) 7030 error = 0; 7031 else 7032 error = ipfattach(); 7033 if (error == 0) 7034 fr_running = 1; 7035 else 7036 (void) ipfdetach(); 7037 } else { 7038 error = ipfdetach(); 7039 if (error == 0) 7040 fr_running = -1; 7041 } |
7042 RWLOCK_EXIT(&ipf_global); |
|
7043 } 7044 break; 7045 7046 case SIOCIPFSET : 7047 if (!(mode & FWRITE)) { 7048 error = EPERM; 7049 break; 7050 } --- 125 unchanged lines hidden (view full) --- 7176 } 7177 break; 7178#endif /* IPFILTER_LOG */ 7179 7180 case SIOCFRSYN : 7181 if (!(mode & FWRITE)) 7182 error = EPERM; 7183 else { | 7043 } 7044 break; 7045 7046 case SIOCIPFSET : 7047 if (!(mode & FWRITE)) { 7048 error = EPERM; 7049 break; 7050 } --- 125 unchanged lines hidden (view full) --- 7176 } 7177 break; 7178#endif /* IPFILTER_LOG */ 7179 7180 case SIOCFRSYN : 7181 if (!(mode & FWRITE)) 7182 error = EPERM; 7183 else { |
7184 RWLOCK_EXIT(&ipf_global); | |
7185 WRITE_ENTER(&ipf_global); 7186#ifdef MENTAT 7187 error = ipfsync(); 7188#else 7189 frsync(NULL); 7190 error = 0; 7191#endif | 7184 WRITE_ENTER(&ipf_global); 7185#ifdef MENTAT 7186 error = ipfsync(); 7187#else 7188 frsync(NULL); 7189 error = 0; 7190#endif |
7191 RWLOCK_EXIT(&ipf_global); |
|
7192 7193 } 7194 break; 7195 7196 case SIOCGFRST : 7197 error = fr_outobj((void *)data, fr_fragstats(), 7198 IPFOBJ_FRAGSTAT); 7199 break; --- 159 unchanged lines hidden --- | 7192 7193 } 7194 break; 7195 7196 case SIOCGFRST : 7197 error = fr_outobj((void *)data, fr_fragstats(), 7198 IPFOBJ_FRAGSTAT); 7199 break; --- 159 unchanged lines hidden --- |