summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/FreeBSD-4.0/ipv6-patch-4.1
blob: 2e1d7e80673f562e553b4e14b7d48c32f35e6636 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.\"	$FreeBSD$
.\"
*** ip6_input.c.orig	Sat Jul 15 07:14:34 2000
--- ip6_input.c	Thu Oct 19 17:14:37 2000
***************
*** 120,125 ****
--- 120,127 ----
  
  extern struct domain inet6domain;
  extern struct ip6protosw inet6sw[];
+ extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int,
+ 			     struct mbuf **));
  
  u_char ip6_protox[IPPROTO_MAX];
  static int ip6qmaxlen = IFQ_MAXLEN;
***************
*** 289,294 ****
--- 291,305 ----
  		ip6stat.ip6s_badvers++;
  		in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_hdrerr);
  		goto bad;
+ 	}
+ 
+ 	if (fr_checkp) {
+ 		struct	mbuf	*m1 = m;
+ 
+ 		if ((*fr_checkp)(ip6, sizeof(*ip6), m->m_pkthdr.rcvif,
+ 				 0, &m1) || !m1)
+ 			return;
+ 		ip6 = mtod(m = m1, struct ip6_hdr *);
  	}
  
  	ip6stat.ip6s_nxthist[ip6->ip6_nxt]++;

*** ip6_output.c.orig	Sat Jul 15 07:14:35 2000
--- ip6_output.c	Thu Oct 19 17:13:53 2000
***************
*** 106,111 ****
--- 106,113 ----
  #include <netinet6/ip6_fw.h>
  #endif
  
+ extern int (*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **));
+ 
  static MALLOC_DEFINE(M_IPMOPTS, "ip6_moptions", "internet multicast options");
  
  struct ip6_exthdrs {
***************
*** 787,792 ****
--- 789,803 ----
  			ip6->ip6_src.s6_addr16[1] = 0;
  		if (IN6_IS_SCOPE_LINKLOCAL(&ip6->ip6_dst))
  			ip6->ip6_dst.s6_addr16[1] = 0;
+ 	}
+ 
+ 	if (fr_checkp) {
+ 		struct  mbuf    *m1 = m;
+ 
+ 		if ((error = (*fr_checkp)(ip6, sizeof(*ip6), ifp, 1, &m1)) ||
+ 		    !m1)
+ 			goto done;
+ 		ip6 = mtod(m = m1, struct ip6_hdr *);
  	}
  
  #ifdef IPV6FIREWALL
OpenPOWER on IntegriCloud