From owner-dev-commits-src-main@freebsd.org Wed Feb 10 18:14:00 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8228354EBEF; Wed, 10 Feb 2021 18:14:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4DbSZJ3Dhcz4ryL; Wed, 10 Feb 2021 18:14:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 61CD62269D; Wed, 10 Feb 2021 18:14:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 11AIE0T1056063; Wed, 10 Feb 2021 18:14:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 11AIE009056062; Wed, 10 Feb 2021 18:14:00 GMT (envelope-from git) Date: Wed, 10 Feb 2021 18:14:00 GMT Message-Id: <202102101814.11AIE009056062@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Lutz Donnerhacke Subject: git: 3c958f5fdfc0 - main - netgraph/ng_bridge: Add counters for the first link, too MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: donner X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3c958f5fdfc01b7579ea0fbfc3f15f8a85bebee9 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Feb 2021 18:14:00 -0000 The branch main has been updated by donner: URL: https://cgit.FreeBSD.org/src/commit/?id=3c958f5fdfc01b7579ea0fbfc3f15f8a85bebee9 commit 3c958f5fdfc01b7579ea0fbfc3f15f8a85bebee9 Author: Lutz Donnerhacke AuthorDate: 2021-02-10 10:47:38 +0000 Commit: Lutz Donnerhacke CommitDate: 2021-02-10 18:05:37 +0000 netgraph/ng_bridge: Add counters for the first link, too For broadcast, multicast and unknown unicast, the replication loop sends a copy of the packet to each link, beside the first one. This special path is handled later, but the counters are not updated. Factor out the common send and count actions as a function. Reviewed by: kp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D28537 --- sys/netgraph/ng_bridge.c | 59 +++++++++++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/sys/netgraph/ng_bridge.c b/sys/netgraph/ng_bridge.c index 29ab2c715aa7..7b03b1a2599b 100644 --- a/sys/netgraph/ng_bridge.c +++ b/sys/netgraph/ng_bridge.c @@ -626,6 +626,41 @@ struct ng_bridge_send_ctx { int manycast, error; }; +/* + * Update stats and send out + */ +static inline int +ng_bridge_send_data(link_cp dst, int manycast, struct mbuf *m, item_p item) { + int error = 0; + size_t len = m->m_pkthdr.len; + + if(item != NULL) + NG_FWD_NEW_DATA(error, item, dst->hook, m); + else + NG_SEND_DATA_ONLY(error, dst->hook, m); + + if (error == 0) { + counter_u64_add(dst->stats.xmitPackets, 1); + counter_u64_add(dst->stats.xmitOctets, len); + switch (manycast) { + default: /* unknown unicast */ + break; + case 1: /* multicast */ + counter_u64_add(dst->stats.xmitMulticasts, 1); + break; + case 2: /* broadcast */ + counter_u64_add(dst->stats.xmitBroadcasts, 1); + break; + } + } + + return (error); +} + +/* + * Loop body for sending to multiple destinations + * return 0 to stop looping + */ static int ng_bridge_send_ctx(hook_p dst, void *arg) { @@ -664,22 +699,8 @@ ng_bridge_send_ctx(hook_p dst, void *arg) return (0); /* abort loop */ } - /* Update stats */ - counter_u64_add(destLink->stats.xmitPackets, 1); - counter_u64_add(destLink->stats.xmitOctets, m2->m_pkthdr.len); - switch (ctx->manycast) { - default: /* unknown unicast */ - break; - case 1: /* multicast */ - counter_u64_add(destLink->stats.xmitMulticasts, 1); - break; - case 2: /* broadcast */ - counter_u64_add(destLink->stats.xmitBroadcasts, 1); - break; - } - /* Send packet */ - NG_SEND_DATA_ONLY(error, destLink->hook, m2); + error = ng_bridge_send_data(destLink, ctx->manycast, m2, NULL); if(error) ctx->error = error; return (1); @@ -820,10 +841,7 @@ ng_bridge_rcvdata(hook_p hook, item_p item) } /* Deliver packet out the destination link */ - counter_u64_add(destLink->stats.xmitPackets, 1); - counter_u64_add(destLink->stats.xmitOctets, ctx.m->m_pkthdr.len); - NG_FWD_NEW_DATA(ctx.error, item, destLink->hook, ctx.m); - return (ctx.error); + return (ng_bridge_send_data(destLink, ctx.manycast, ctx.m, item)); } /* Destination host is not known */ @@ -844,8 +862,7 @@ ng_bridge_rcvdata(hook_p hook, item_p item) * If we've sent all the others, send the original * on the first link we found. */ - NG_FWD_NEW_DATA(ctx.error, item, ctx.foundFirst->hook, ctx.m); - return (ctx.error); + return (ng_bridge_send_data(ctx.foundFirst, ctx.manycast, ctx.m, item)); } /*