On 2016/02/28 13:01, Martin Pieuchot wrote: > On 08/02/16(Mon) 01:55, Alexandr Nedvedicky wrote: > > Hello, > > > > I don't expect to see O.K. to patch below. > > > > The patch is the part of the change, which has been backed out last weekend. > > Too many things were wrong so I'm trying to untangle the code a bit. > > > > Patch below is for brave hearts, who don't mind to see KASSERT() to fire: > > Any progress with this diff? Now would be the good time to get it in.
I'm running it on a pppoe router (v4/v6 plus ipsec), it hasn't exploded yet. I'm in favour of putting it in to see what happens, it's a good time in the cycle. > > Index: net/if_etherip.c > > =================================================================== > > RCS file: /cvs/src/sys/net/if_etherip.c,v > > retrieving revision 1.5 > > diff -u -p -r1.5 if_etherip.c > > --- net/if_etherip.c 25 Jan 2016 05:12:34 -0000 1.5 > > +++ net/if_etherip.c 7 Feb 2016 23:38:09 -0000 > > @@ -499,6 +499,10 @@ ip_etherip_input(struct mbuf *m, ...) > > } > > m->m_flags &= ~(M_BCAST|M_MCAST); > > > > +#if NPF > 0 > > + pf_pkt_addr_changed(m); > > +#endif > > + > > ml_enqueue(&ml, m); > > if_input(ifp, &ml); > > } > > @@ -641,6 +645,10 @@ ip6_etherip_input(struct mbuf **mp, int > > } > > > > m->m_flags &= ~(M_BCAST|M_MCAST); > > + > > +#if NPF > 0 > > + pf_pkt_addr_changed(m); > > +#endif > > > > ml_enqueue(&ml, m); > > if_input(ifp, &ml); > > Index: net/pf.c > > =================================================================== > > RCS file: /cvs/src/sys/net/pf.c,v > > retrieving revision 1.965 > > diff -u -p -r1.965 pf.c > > --- net/pf.c 31 Jan 2016 00:18:07 -0000 1.965 > > +++ net/pf.c 7 Feb 2016 23:38:16 -0000 > > @@ -6534,6 +6534,12 @@ done: > > if (action == PF_PASS && qid) > > pd.m->m_pkthdr.pf.qid = qid; > > if (pd.dir == PF_IN && s && s->key[PF_SK_STACK]) { > > + /* > > + * ASSERT() below fires whenever caller forgets to call > > + * pf_pkt_addr_changed(). This might happen when we deal with > > + * IP tunnels. > > + */ > > + KASSERT(pd.m->m_pkthdr.pf.statekey == NULL); > > pd.m->m_pkthdr.pf.statekey = s->key[PF_SK_STACK]; > > } > > if (pd.dir == PF_OUT && > > Index: net/pipex.c > > =================================================================== > > RCS file: /cvs/src/sys/net/pipex.c,v > > retrieving revision 1.84 > > diff -u -p -r1.84 pipex.c > > --- net/pipex.c 3 Nov 2015 21:33:56 -0000 1.84 > > +++ net/pipex.c 7 Feb 2016 23:38:18 -0000 > > @@ -1139,6 +1139,10 @@ pipex_ip_input(struct mbuf *m0, struct p > > goto drop; > > } > > > > +#if NPF > 0 > > + pf_pkt_addr_changed(m0); > > +#endif > > + > > len = m0->m_pkthdr.len; > > > > #if NBPFILTER > 0 > > Index: netinet/ip_gre.c > > =================================================================== > > RCS file: /cvs/src/sys/netinet/ip_gre.c,v > > retrieving revision 1.58 > > diff -u -p -r1.58 ip_gre.c > > --- netinet/ip_gre.c 2 Dec 2015 08:47:00 -0000 1.58 > > +++ netinet/ip_gre.c 7 Feb 2016 23:38:20 -0000 > > @@ -337,6 +337,10 @@ gre_mobile_input(struct mbuf *m, ...) > > bpf_mtap_af(sc->sc_if.if_bpf, AF_INET, m, BPF_DIRECTION_IN); > > #endif > > > > +#if NPF > 0 > > + pf_pkt_addr_changed(m); > > +#endif > > + > > niq_enqueue(&ipintrq, m); > > } > > > > >