From owner-freebsd-bugs@FreeBSD.ORG Tue Aug 1 11:10:11 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB91116A4DE for ; Tue, 1 Aug 2006 11:10:11 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 0E10D43D46 for ; Tue, 1 Aug 2006 11:10:11 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k71BAAZ4095553 for ; Tue, 1 Aug 2006 11:10:10 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k71BAANM095552; Tue, 1 Aug 2006 11:10:10 GMT (envelope-from gnats) Resent-Date: Tue, 1 Aug 2006 11:10:10 GMT Resent-Message-Id: <200608011110.k71BAANM095552@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, CoolDavid(Tseng Guo-Fu) Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9EAA616A4DA for ; Tue, 1 Aug 2006 11:06:18 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4F67243D4C for ; Tue, 1 Aug 2006 11:06:18 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k71B6InI060565 for ; Tue, 1 Aug 2006 11:06:18 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id k71B6IKi060564; Tue, 1 Aug 2006 11:06:18 GMT (envelope-from nobody) Message-Id: <200608011106.k71B6IKi060564@www.freebsd.org> Date: Tue, 1 Aug 2006 11:06:18 GMT From: CoolDavid(Tseng Guo-Fu) To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Cc: Subject: kern/101162: [patch] ng_netflow 802.11Q VLAN Tag support X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Aug 2006 11:10:11 -0000 >Number: 101162 >Category: kern >Synopsis: [patch] ng_netflow 802.11Q VLAN Tag support >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Aug 01 11:10:10 GMT 2006 >Closed-Date: >Last-Modified: >Originator: CoolDavid(Tseng Guo-Fu) >Release: FreeBSD 5.5-STABLE i386 >Organization: Campus Dorm-Net Promotion Association of National Sun Yat-sen University ,Kaohsiung, 80424 , Taiwan >Environment: FreeBSD netflow.cdpa.nsysu.edu.tw 5.5-STABLE FreeBSD 5.5-STABLE #0: Tue Aug 1 12:09:34 UTC 2006 root@netflow.cdpa.nsysu.edu.tw:/usr/src/sys/i386/compile/NETFLOW i386 >Description: Some network device sends Port-Mirror data with 802.11Q VLAN tag. The original version of ng_netflow didn't check the VLAN proto in ethernet header. >How-To-Repeat: Any packet received from NIC encapsulated with VALN tag will be ignored. >Fix: root@netflow[/usr/src/sys/netgraph/netflow]# diff -Naur /root/netflow.org /usr/src/sys/netgraph/netflow diff -Naur /root/netflow.org/ng_netflow.c /usr/src/sys/netgraph/netflow/ng_netflow.c --- /root/netflow.org/ng_netflow.c Tue Aug 1 17:04:39 2006 +++ /usr/src/sys/netgraph/netflow/ng_netflow.c Tue Aug 1 17:57:41 2006 @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -494,6 +495,7 @@ case DLT_EN10MB: /* Ethernet */ { struct ether_header *eh; + struct ether_vlan_header *evh; uint16_t etype; M_CHECK(sizeof(struct ether_header)); @@ -507,6 +509,14 @@ eh = mtod(m, struct ether_header *); ip = (struct ip *)(eh + 1); break; + case ETHERTYPE_VLAN: + M_CHECK(sizeof(struct ether_vlan_header) - sizeof(struct ether_header)); + evh = mtod(m, struct ether_vlan_header *); + if(ntohs(evh->evl_proto) == ETHERTYPE_IP) { + M_CHECK(sizeof(struct ip)); + ip = (struct ip *)(evh + 1); + break; + } default: goto bypass; /* pass this frame */ } @@ -540,9 +550,17 @@ case DLT_EN10MB: { struct ether_header *eh; + struct ether_vlan_header *evh; - eh = mtod(m, struct ether_header *); - ip = (struct ip *)(eh + 1); + //log(LOG_CRIT, "ng_netflow: vlan->ip.\n"); + eh = mtod(m, struct ether_header *); + if(ntohs(eh->ether_type) == ETHERTYPE_IP) { + ip = (struct ip *)(eh + 1); + } + else { //Must be vlan + evh = mtod(m, struct ether_vlan_header *); + ip = (struct ip *)(evh + 1); + } break; } case DLT_RAW: >Release-Note: >Audit-Trail: >Unformatted: