On 04/04/2012 07:34 AM, YASUOKA Masahiko wrote:
On Tue, 31 Jan 2012 13:59:17 +0100
"Sebastian Reitenbach"<[email protected]> wrote:
However, I noted with tcpdump, listening on tun0:
# tcpdump -n -i tun0
tcpdump: listening on tun0, link-type LOOP
13:51:15.354776
tcpdump: WARNING: compensating for unaligned libpcap packets
13:51:15.354795 10.66.66.1> 10.66.66.129: icmp: echo reply (DF)
13:51:16.334984
13:51:16.334997 10.66.66.1> 10.66.66.129: icmp: echo reply (DF)
13:51:17.355463
(snip)
The incoming packets look weird, and this is not only true for icmp,
with tcp/udp its the same.
Attached diff will fix the problem.
bpf requires to use different byte order for DLT_LOOP and DLT_NULL on
address family header. pipex works with both pppx(DLT_NULL) and
tun(DLT_LOOP), so it should switch the byte order.
ok? or comment?
Index: sys/net/pipex.c
===================================================================
RCS file: /cvs/src/sys/net/pipex.c,v
retrieving revision 1.26
diff -u -p -r1.26 pipex.c
--- sys/net/pipex.c 31 Jan 2012 12:04:20 -0000 1.26
+++ sys/net/pipex.c 8 Feb 2012 05:23:13 -0000
@@ -1162,8 +1162,13 @@ pipex_ip_input(struct mbuf *m0, struct p
len = m0->m_pkthdr.len;
#if NBPFILTER> 0
- if (ifp->if_bpf)
- bpf_mtap_af(ifp->if_bpf, AF_INET, m0, BPF_DIRECTION_IN);
+ if (ifp->if_bpf) {
+ if (ifp->if_type == IFT_TUNNEL)
+ bpf_mtap_af(ifp->if_bpf, htonl(AF_INET), m0,
+ BPF_DIRECTION_IN);
+ else
+ bpf_mtap_af(ifp->if_bpf, AF_INET, m0, BPF_DIRECTION_IN);
+ }
#endif
s = splnet();
@@ -1239,8 +1244,14 @@ pipex_ip6_input(struct mbuf *m0, struct
len = m0->m_pkthdr.len;
#if NBPFILTER> 0
- if (ifp->if_bpf)
- bpf_mtap_af(ifp->if_bpf, AF_INET, m0, BPF_DIRECTION_IN);
+ if (ifp->if_bpf) {
+ if (ifp->if_type == IFT_TUNNEL)
+ bpf_mtap_af(ifp->if_bpf, htonl(AF_INET6), m0,
+ BPF_DIRECTION_IN);
+ else
+ bpf_mtap_af(ifp->if_bpf, AF_INET6, m0,
+ BPF_DIRECTION_IN);
+ }
#endif
s = splnet();
Breaks nothing for me so far.
//maxim