On 2015 Jul 02 (Thu) at 15:07:37 +0200 (+0200), Martin Pieuchot wrote:
:On 02/07/15(Thu) 13:57, Sebastien Marie wrote:
:> Hi,
:>
:> On amd64, after a system update via snapshot, I start to see warning
:> messages in console (and to be complete, the running kernel is GENERIC.MP
:> with a patch on acpitz, so shoudn't be related).
:>
:> The message is (complete dmesg below):
:> bge0: trying to send packet on wrong domain. if 0 vs. mbuf 52
:>
:> The network configuration is the following:
:>
:> # cat /etc/hostname.bge0
:> dhcp
:> inet6 autoconf
:> up
:> !/usr/sbin/arp -F -s 192.168.92.2 c8:be:19:e2:2c:ed permanent
:>
:> # cat /etc/hostname.vlan52
:> vlandev bge0 rdomain 52
:> description "Test"
:> inet 192.168.52.45
:>
:> The vlan52 interface is only used for test purpose, and I use rdomain to
:> ensure separation from the rest of the system.
:>
:> /etc/pf.conf contains nothing related to rtable or rdomain.
:> # cat /etc/pf.conf
:> # See pf.conf(5) and /etc/examples/pf.conf
:>
:> set skip on lo
:>
:> # enable statistic collection on egress
:> set loginterface egress
:>
:> block return # block stateless traffic
:> pass # establish keep-state
:>
:> # By default, do not permit remote connections to X11
:> block return in on ! lo0 proto tcp to port 6000:6010
:>
:>
:> The rtable 52 has nothing special (no manual adding).
:>
:> # route -T 52 -n show
:> Routing tables
:>
:> Internet:
:> Destination Gateway Flags Refs Use Mtu Prio
:> Iface
:> 192.168.52/24 192.168.52.45 UC 1 0 - 8
vlan52
:> 192.168.52.1 link#8 UHLc 0 1 - 8
vlan52
:> 192.168.52.45 00:1b:38:33:97:b0 UHLl 0 0 - 1 lo0
:> 192.168.52.255 192.168.52.45 UHb 0 0 - 1
vlan52
:>
:>
:> The message is printed for every packet sent from rdomain 52
:> $ route -T 52 exec ping 192.168.52.1
:> PING 192.168.52.1 (192.168.52.1): 56 data bytes
:> --- 192.168.52.1 ping statistics ---
:> 2 packets transmitted, 0 packets received, 100.0% packet loss
:>
:> $ dmesg | tail -2
:> bge0: trying to send packet on wrong domain. if 0 vs. mbuf 52
:> bge0: trying to send packet on wrong domain. if 0 vs. mbuf 52
:>
:> No other problem than a message in console for every packet.
:>
:> This message have been introduced in sys/net/if.c (line 452) at version
:> 1.344.
:>
:> > if (ifp->if_rdomain != rtable_l2(m->m_pkthdr.ph_rtableid)) {
:> > printf("%s: trying to send packet on wrong domain. "
:> > "if %d vs. mbuf %d\n",
:> > ifp->if_xname, ifp->if_rdomain,
:> > rtable_l2(m->m_pkthdr.ph_rtableid));
:> > }
:>
:> I am also able to reproduce it on other host with true GENERIC.MP (from
:> same snapshot version), with more conventional network configuration (no
:> mix between tagged/untagged vlan):
:> - one physical re0 (just up)
:> - several vlan interface on it
:> - one rdomain on vlan interface
:
:Well I made a mistake, thanks for spotting it. Here's a revert diff:
:
OK for the revert
:Index: net/if.c
:===================================================================
:RCS file: /cvs/src/sys/net/if.c,v
:retrieving revision 1.348
:diff -u -p -r1.348 if.c
:--- net/if.c 2 Jul 2015 09:40:02 -0000 1.348
:+++ net/if.c 2 Jul 2015 13:02:13 -0000
:@@ -447,14 +447,6 @@ if_enqueue(struct ifnet *ifp, struct mbu
: int s, length, error = 0;
: unsigned short mflags;
:
:-#ifdef DIAGNOSTIC
:- if (ifp->if_rdomain != rtable_l2(m->m_pkthdr.ph_rtableid)) {
:- printf("%s: trying to send packet on wrong domain. "
:- "if %d vs. mbuf %d\n", ifp->if_xname, ifp->if_rdomain,
:- rtable_l2(m->m_pkthdr.ph_rtableid));
:- }
:-#endif
:-
: #if NBRIDGE > 0
: if (ifp->if_bridgeport && (m->m_flags & M_PROTO1) == 0)
: return (bridge_output(ifp, m, NULL, NULL));
:Index: net/if_ethersubr.c
:===================================================================
:RCS file: /cvs/src/sys/net/if_ethersubr.c,v
:retrieving revision 1.214
:diff -u -p -r1.214 if_ethersubr.c
:--- net/if_ethersubr.c 2 Jul 2015 09:40:02 -0000 1.214
:+++ net/if_ethersubr.c 2 Jul 2015 13:05:06 -0000
:@@ -176,6 +176,14 @@ ether_output(struct ifnet *ifp, struct m
: struct arpcom *ac = (struct arpcom *)ifp;
: int error = 0;
:
:+#ifdef DIAGNOSTIC
:+ if (ifp->if_rdomain != rtable_l2(m->m_pkthdr.ph_rtableid)) {
:+ printf("%s: trying to send packet on wrong domain. "
:+ "if %d vs. mbuf %d\n", ifp->if_xname,
:+ ifp->if_rdomain, rtable_l2(m->m_pkthdr.ph_rtableid));
:+ }
:+#endif
:+
: esrc = ac->ac_enaddr;
:
: if ((ifp->if_flags & (IFF_UP|IFF_RUNNING)) != (IFF_UP|IFF_RUNNING))
:
--
"I cannot and will not cut my conscience to fit this year's fashions."
-- Lillian Hellman