From patchwork Mon Jun 18 09:57:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TcOhdMOpIEVja2w=?= X-Patchwork-Id: 930774 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netfilter-devel-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="j27E8+fV"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 418RQH1fsFz9s1B for ; Mon, 18 Jun 2018 19:59:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965425AbeFRJ7R (ORCPT ); Mon, 18 Jun 2018 05:59:17 -0400 Received: from mail-wr0-f170.google.com ([209.85.128.170]:35961 "EHLO mail-wr0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964903AbeFRJ7P (ORCPT ); Mon, 18 Jun 2018 05:59:15 -0400 Received: by mail-wr0-f170.google.com with SMTP id f16-v6so16151204wrm.3 for ; Mon, 18 Jun 2018 02:59:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=V12aWJQKf9zOk1hTNg4uQP+PT1IThUKpGXqVMeu6Qhg=; b=j27E8+fVTXAtAHuChBIDOLcW8OE1n52aHzZOXLr/ldmccuI2tltgRJ/5MfmdlfLYHf d17Ab60hzJDgoUpIDWi/9Ptbf+zLJ6JJuTR2GWeAsRYQ7OS/4KFRjU91IICEmMTcLU+m XqU8NIGiiY7FEUd0hLXKMsGdwjjipDhaTfJp1Hx2Pysxf70hrxmcm/zrspZEG50qt3QN u2iujckwNhNDsoUv069oIuxiD80Uz97Mp0zufCSRCFzof6k7Ub/R0+bJR0D06MYWJdka KqnGJTwvyuWcchF9FG547lxVdMSu9E/uXfZqSHY9XiiP1cxwIxp2Dey4N0gMpIuf/By6 mK7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=V12aWJQKf9zOk1hTNg4uQP+PT1IThUKpGXqVMeu6Qhg=; b=kSK37YELGIqOmWp0hftPwrvT811c0p4JsglOys7lQOCI/69Eo6Zl0Yn9++19PdMOYO D0RydjqAc6F7fi6tTY7ZpKcDnrXLjtrJ5CqixHi6r+zilJu2IrU8ZaF8PVUh3NQObhwd DRgV8LHsBGTBcYekKkwtsaz1MzSZC3txBDMQom+JjEmpo3wWCi5lVznkAcl6vcHlj4Hf GVucVm3hMHSqWKAoBh9jcLvT9MCIYaa916iqWCTEJATG/hUId7FvPhhOkaqkb3U+CXJ2 eqPX0fIC3wgPEdR+9TxsGTgrTcfinDkN3ldlLQGrlfYvChUpKhbxqQN5hl5pDXloXiKp VUyA== X-Gm-Message-State: APt69E2Bwtq32O+qRrOe8Kvi7VEVf/oYzeeQByWHrtDfJMD7AOPBOhdY rZ/dCSHExhz52kD/rDz8igxMLnr3 X-Google-Smtp-Source: ADUXVKJeJnrpm0CGv1gu/ETruPFuQPpsYyecxWCtFittcDU5bL23HcU0QcTQI+xbbsmsItIfydtAcg== X-Received: by 2002:adf:ac69:: with SMTP id v96-v6mr9435198wrc.5.1529315954108; Mon, 18 Jun 2018 02:59:14 -0700 (PDT) Received: from ecklm-lapos.sch.bme.hu (ecklapos.sch.bme.hu. [152.66.210.16]) by smtp.gmail.com with ESMTPSA id 201-v6sm12757874wmm.18.2018.06.18.02.59.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Jun 2018 02:59:13 -0700 (PDT) From: =?utf-8?b?TcOhdMOpIEVja2w=?= To: netfilter-devel@vger.kernel.org Subject: [PATCH nft] evaluate: Detect address family in inet context Date: Mon, 18 Jun 2018 11:57:10 +0200 Message-Id: <20180618095710.13306-1-ecklm94@gmail.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org Signed-off-by: Máté Eckl --- src/evaluate.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/evaluate.c b/src/evaluate.c index d6aff61..0564b44 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -2431,12 +2431,28 @@ static int evaluate_addr(struct eval_ctx *ctx, struct stmt *stmt, const struct datatype *dtype; unsigned int len; - if (pctx->family == NFPROTO_IPV4) { + switch (pctx->family) { + case NFPROTO_IPV4: dtype = &ipaddr_type; len = 4 * BITS_PER_BYTE; - } else { + break; + case NFPROTO_IPV6: dtype = &ip6addr_type; len = 16 * BITS_PER_BYTE; + break; + case NFPROTO_INET: + if (strchr((*expr)->identifier, ':')) { + dtype = &ip6addr_type; + len = 16 * BITS_PER_BYTE; + } + else { + dtype = &ipaddr_type; + len = 4 * BITS_PER_BYTE; + } + break; + default: + return stmt_binary_error(ctx, *expr, stmt, + "Invalid context family for address evaluation"); } return stmt_evaluate_arg(ctx, stmt, dtype, len, BYTEORDER_BIG_ENDIAN,