Hi,

To hide pf internals move code from in_ouraddr() to pf_ouraddr().
This will also make it possible to implement the same shortcut for
IPv6.

ok?

bluhm

Index: net/pf.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf.c,v
retrieving revision 1.978
diff -u -p -r1.978 pf.c
--- net/pf.c    21 Jun 2016 16:45:37 -0000      1.978
+++ net/pf.c    18 Jul 2016 08:30:49 -0000
@@ -6761,6 +6761,27 @@ pf_cksum(struct pf_pdesc *pd, struct mbu
        }
 }
 
+int
+pf_ouraddr(struct mbuf *m)
+{
+       struct pf_state_key     *sk;
+
+       if (m->m_pkthdr.pf.flags & PF_TAG_DIVERTED)
+               return (1);
+
+       sk = m->m_pkthdr.pf.statekey;
+       if (sk != NULL) {
+               if (sk->inp != NULL)
+                       return (1);
+
+               /* If we have linked state keys it is certainly forwarded. */
+               if (sk->reverse != NULL)
+                       return (0);
+       }
+
+       return (-1);
+}
+
 /*
  * must be called whenever any addressing information such as
  * address, port, protocol has changed
Index: net/pfvar.h
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/pfvar.h,v
retrieving revision 1.431
diff -u -p -r1.431 pfvar.h
--- net/pfvar.h 29 Mar 2016 10:34:42 -0000      1.431
+++ net/pfvar.h 18 Jul 2016 08:30:49 -0000
@@ -1763,6 +1763,7 @@ int       pf_rtlabel_match(struct pf_addr *, s
            int);
 int    pf_socket_lookup(struct pf_pdesc *);
 struct pf_state_key *pf_alloc_state_key(int);
+int    pf_ouraddr(struct mbuf *);
 void   pf_pkt_addr_changed(struct mbuf *);
 struct inpcb *pf_inp_lookup(struct mbuf *);
 void   pf_inp_link(struct mbuf *, struct inpcb *);
Index: netinet/ip_input.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.277
diff -u -p -r1.277 ip_input.c
--- netinet/ip_input.c  18 Jun 2016 10:36:13 -0000      1.277
+++ netinet/ip_input.c  18 Jul 2016 08:30:49 -0000
@@ -592,20 +592,16 @@ in_ouraddr(struct mbuf *m, struct ifnet 
        struct ip               *ip;
        struct sockaddr_in       sin;
        int                      match = 0;
-#if NPF > 0
-       struct pf_state_key     *key;
 
-       if (m->m_pkthdr.pf.flags & PF_TAG_DIVERTED)
+#if NPF > 0
+       switch (pf_ouraddr(m)) {
+       case 0:
+               return (0);
+       case 1:
                return (1);
-
-       key = m->m_pkthdr.pf.statekey;
-       if (key != NULL) {
-               if (key->inp != NULL)
-                       return (1);
-
-               /* If we have linked state keys it is certainly forwarded. */
-               if (key->reverse != NULL)
-                       return (0);
+       default:
+               /* pf does not know it */
+               break;
        }
 #endif
 

Reply via email to