From patchwork Sat Dec 7 15:16:30 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ken-ichirou MATSUZAWA X-Patchwork-Id: 298695 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id A2F422C00CE for ; Sun, 8 Dec 2013 02:16:45 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755158Ab3LGPQo (ORCPT ); Sat, 7 Dec 2013 10:16:44 -0500 Received: from mail-pd0-f171.google.com ([209.85.192.171]:42981 "EHLO mail-pd0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754859Ab3LGPQo (ORCPT ); Sat, 7 Dec 2013 10:16:44 -0500 Received: by mail-pd0-f171.google.com with SMTP id z10so2615282pdj.30 for ; Sat, 07 Dec 2013 07:16:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:message-id:from:to:subject:user-agent:mime-version :content-type; bh=UEaKJrOMqnHwQ3DZuWcQnjAHOx2M91KOFWUsDlb7KD8=; b=1CgZfR17jMTREx1l0Eqo+ED+ywcBVeFQ3tD4z2Qqv2YAB5Ivdl85ZovtrKcFu/HP5C iZv24CQV1LUtk2hfquYEgHk9EweVXWPVQhsreSOrpI2SSbn/zW2wRucUMgd6x5V53IEW 9yr23zICfImPyuOzbxboQwGbsSvgiZWwLD24x2sgJfQ0VuWHT8liwuStIk1nLFaSoqI/ ka8RPw/UJ9H2bMza0AtHZV2ZfV0Bt7uCCeAUnhHCCRzOYeMFSWb8hs3HXUNZFPS7/Au8 uSwZctqiqJeAzyGtPIop9Zv9Gn64/BZgnoHcNXEZl4DghBG1LXwrmncKs1bnPvQrw4R0 mXfA== X-Received: by 10.68.160.69 with SMTP id xi5mr1379973pbb.168.1386429403830; Sat, 07 Dec 2013 07:16:43 -0800 (PST) Received: from milth.gmail.com (KD106159154146.ppp-bb.dion.ne.jp. [106.159.154.146]) by mx.google.com with ESMTPSA id vf7sm5167741pbc.5.2013.12.07.07.16.41 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sat, 07 Dec 2013 07:16:43 -0800 (PST) Date: Sun, 08 Dec 2013 00:16:30 +0900 Message-ID: <87iov08ze9.wl%chamaken@gmail.com> From: Ken-ichirou MATSUZAWA To: Pablo Neira Ayuso , netfilter-devel@vger.kernel.org Subject: [libmnl PATCH 8/9] batch: introduce mnl_nlmsg_batch_reset_buffer for mmap User-Agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?ISO-2022-JP-2?B?R29qGyQoRCtXGyhC?=) APEL/10.8 Emacs/23.4 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org Signed-off-by: Ken-ichirou MATSUZAWA --- include/libmnl/libmnl.h | 1 + src/libmnl.map | 1 + src/nlmsg.c | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/libmnl/libmnl.h b/include/libmnl/libmnl.h index 722cb79..603abc5 100644 --- a/include/libmnl/libmnl.h +++ b/include/libmnl/libmnl.h @@ -74,6 +74,7 @@ extern void mnl_nlmsg_batch_reset(struct mnl_nlmsg_batch *b); extern void *mnl_nlmsg_batch_head(struct mnl_nlmsg_batch *b); extern void *mnl_nlmsg_batch_current(struct mnl_nlmsg_batch *b); extern bool mnl_nlmsg_batch_is_empty(struct mnl_nlmsg_batch *b); +extern void mnl_nlmsg_batch_reset_buffer(struct mnl_nlmsg_batch *b, void *buf, size_t limit); /* * Netlink attributes API diff --git a/src/libmnl.map b/src/libmnl.map index d329988..4de63b5 100644 --- a/src/libmnl.map +++ b/src/libmnl.map @@ -85,4 +85,5 @@ LIBMNL_1.2 { mnl_ring_build_frame; mnl_ring_parse_frame2; mnl_ring_parse_frame; + mnl_nlmsg_batch_reset_buffer; } LIBMNL_1.1; diff --git a/src/nlmsg.c b/src/nlmsg.c index fdb7af8..0210067 100644 --- a/src/nlmsg.c +++ b/src/nlmsg.c @@ -569,5 +569,25 @@ bool mnl_nlmsg_batch_is_empty(struct mnl_nlmsg_batch *b) EXPORT_SYMBOL(mnl_nlmsg_batch_is_empty); /** + * mnl_nlmsg_batch_reset_buffer - reset to the new buffer + */ +void mnl_nlmsg_batch_reset_buffer(struct mnl_nlmsg_batch *b, void *buf, size_t limit) +{ + if (b->overflow) { + struct nlmsghdr *nlh = b->cur; + memcpy(buf, b->cur, nlh->nlmsg_len); + b->buflen = nlh->nlmsg_len; + b->cur = buf + b->buflen; + b->overflow = false; + } else { + b->buflen = 0; + b->cur = buf; + } + b->buf = buf; + b->limit = limit; +} +EXPORT_SYMBOL(mnl_nlmsg_batch_reset_buffer); + +/** * @} */