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);
> > }
> >
> >
>