aboutsummaryrefslogtreecommitdiff
path: root/sys/net/if_enc.c
diff options
context:
space:
mode:
authorAndrey V. Elsukov <ae@FreeBSD.org>2014-10-07 13:31:04 +0000
committerAndrey V. Elsukov <ae@FreeBSD.org>2014-10-07 13:31:04 +0000
commit9ef268219af0c934c9791033a2965e4a779289be (patch)
tree4a24597ef162933663e4ae438ad0ea0936c1d07e /sys/net/if_enc.c
parent15983afb04c818aa17d1e1b3619237072f800837 (diff)
downloadsrc-9ef268219af0c934c9791033a2965e4a779289be.tar.gz
src-9ef268219af0c934c9791033a2965e4a779289be.zip
Our packet filters use mbuf's rcvif pointer to determine incoming interface.
Change mbuf's rcvif to enc0 and restore it after pfil processing. PR: 110959 Sponsored by: Yandex LLC
Notes
Notes: svn path=/head/; revision=272695
Diffstat (limited to 'sys/net/if_enc.c')
-rw-r--r--sys/net/if_enc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/net/if_enc.c b/sys/net/if_enc.c
index fc78769ba54e..b43b7d2cd84e 100644
--- a/sys/net/if_enc.c
+++ b/sys/net/if_enc.c
@@ -230,6 +230,7 @@ ipsec_filter(struct mbuf **mp, int dir, int flags)
{
int error, i;
struct ip *ip;
+ struct ifnet *rcvif;
KASSERT(encif != NULL, ("%s: encif is null", __func__));
KASSERT(flags & (ENC_IN|ENC_OUT),
@@ -268,6 +269,8 @@ ipsec_filter(struct mbuf **mp, int dir, int flags)
}
error = 0;
+ rcvif = (*mp)->m_pkthdr.rcvif;
+ (*mp)->m_pkthdr.rcvif = encif;
ip = mtod(*mp, struct ip *);
switch (ip->ip_v) {
#ifdef INET
@@ -298,6 +301,7 @@ ipsec_filter(struct mbuf **mp, int dir, int flags)
if (error != 0)
goto bad;
+ (*mp)->m_pkthdr.rcvif = rcvif;
return (error);
bad: