From patchwork Mon Oct 1 09:46:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Gmeiner X-Patchwork-Id: 977086 X-Patchwork-Delegate: joe.hershberger@gmail.com 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=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; 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="tWn0oYfj"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42Ny9d5Py8z9s4V for ; Mon, 1 Oct 2018 19:47:01 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 6D333C21EE3; Mon, 1 Oct 2018 09:46:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 86358C21E1D; Mon, 1 Oct 2018 09:46:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id D12DCC21DF9; Mon, 1 Oct 2018 09:46:52 +0000 (UTC) Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by lists.denx.de (Postfix) with ESMTPS id 703FAC21BE5 for ; Mon, 1 Oct 2018 09:46:52 +0000 (UTC) Received: by mail-wr1-f46.google.com with SMTP id s14-v6so13144968wrw.6 for ; Mon, 01 Oct 2018 02:46:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=hclH6BRCGdC+eqOoy4Rudc9dzRKAxTvRdkHKZ/hnGbc=; b=tWn0oYfjJd7QL9DgfNoBe6Ip43mSRvG/sYKzrOahXthwzy/7MJk0C0jP0YwvgKxBit AI95ADzio30+9/AnxVCaNmzg+rIx/cnvjjEGSFbcudtXARDBsl2KUYCqDYxg/5M2sWci Cw3Fo60kIAaYA10P+grzCMskj4v0zoU5KwSb6sZl3clUhVwTf3zqVKYEeasfCLpdYfGn qkRdIdGiJmaAHRMfHjYaM0n6e6IqxwX9vZuI6+odtJEYwGTqUOFZkGFl6tWaSXu9PU+l /ZnDZle7gwPUF3kb1mtagWUPnd3IEG6zu1Apjs237fLyGnH9F9ForR6uKD9OSCMBCDZ3 42bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=hclH6BRCGdC+eqOoy4Rudc9dzRKAxTvRdkHKZ/hnGbc=; b=c+8s8po5fg1hf/XXIkpYTcREGAo/KHTbU7be3cXiE880gHbiAS0yA7hLo4frOCgzg8 sLjwfiNQ8a+YnOgeAS2D7wLVy7dRiaGyTj9HG4XOx3Ny//GWeQrRQLJ4c4E3JC084djq 7+HGPxI7x+KXLzanUK4BUz65d+5VeqTBWUdGhIY6sMUCvHoH34LZCddgiJLH3wGGjJEy gzFvxupd3yB6Hx0nviNLyuBMRWzxOOYsHyf9+DBe3y1VMHDaf7OGGerGfDbwmTBm5cKi 1adBDGwjCU73u+4CKvJ2yFNGnv3dih9oeJjiVIJYKwr+SEvK7lM+eemA5OfStgH8SCtn 38YA== X-Gm-Message-State: ABuFfohQtBXB40xG/eUKRhnTGtEQejGSk5XfWiqud5O3SnrsJ3vkgTxv r4JwuYg+5V8klTv4R3Ihw86MRYQI X-Google-Smtp-Source: ACcGV63Qt+7alFUfm6JC+8hhi8PPQtTRWCwIK8klWeiCeq0uUhIl6QmTZbrEY3LCTbxdROuhe3948Q== X-Received: by 2002:a05:6000:114e:: with SMTP id d14mr6269017wrx.301.1538387211705; Mon, 01 Oct 2018 02:46:51 -0700 (PDT) Received: from chgm-pc-linux.bachmann.at ([185.67.228.2]) by smtp.gmail.com with ESMTPSA id t66-v6sm9587945wmt.5.2018.10.01.02.46.50 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Oct 2018 02:46:50 -0700 (PDT) From: Christian Gmeiner To: u-boot@lists.denx.de Date: Mon, 1 Oct 2018 11:46:43 +0200 Message-Id: <20181001094646.11539-1-christian.gmeiner@gmail.com> X-Mailer: git-send-email 2.17.1 Cc: joe.hershberger@ni.com, Thomas RIENOESSL Subject: [U-Boot] [PATCH 1/4] nfs: convert supported_nfs_versions bitfield to an enum X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Thomas RIENOESSL Prep. work to support nfs v1. Signed-off-by: Thomas RIENOESSL --- net/nfs.c | 79 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/net/nfs.c b/net/nfs.c index d6a7f8e827..81c08de626 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -74,10 +74,13 @@ static char *nfs_filename; static char *nfs_path; static char nfs_path_buff[2048]; -#define NFSV2_FLAG 1 -#define NFSV3_FLAG 1 << 1 -static char supported_nfs_versions = NFSV2_FLAG | NFSV3_FLAG; +enum nfs_version { + NFS_UNKOWN = 0, + NFS_V2 = 2, + NFS_V3 = 3, +}; +static enum nfs_version choosen_nfs_version = NFS_V3; static inline int store_block(uchar *src, unsigned offset, unsigned len) { ulong newsize = offset + len; @@ -185,10 +188,19 @@ static void rpc_req(int rpc_prog, int rpc_proc, uint32_t *data, int datalen) rpc_pkt.u.call.prog = htonl(rpc_prog); switch (rpc_prog) { case PROG_NFS: - if (supported_nfs_versions & NFSV2_FLAG) - rpc_pkt.u.call.vers = htonl(2); /* NFS v2 */ - else /* NFSV3_FLAG */ - rpc_pkt.u.call.vers = htonl(3); /* NFS v3 */ + switch (choosen_nfs_version) { + case NFS_V2: + rpc_pkt.u.call.vers = htonl(2); + break; + + case NFS_V3: + rpc_pkt.u.call.vers = htonl(3); + break; + + case NFS_UNKOWN: + /* nothing to do */ + break; + } break; case PROG_PORTMAP: case PROG_MOUNT: @@ -296,7 +308,7 @@ static void nfs_readlink_req(void) p = &(data[0]); p = rpc_add_credentials(p); - if (supported_nfs_versions & NFSV2_FLAG) { + if (choosen_nfs_version == NFS_V2) { memcpy(p, filefh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); } else { /* NFSV3_FLAG */ @@ -325,7 +337,7 @@ static void nfs_lookup_req(char *fname) p = &(data[0]); p = rpc_add_credentials(p); - if (supported_nfs_versions & NFSV2_FLAG) { + if (choosen_nfs_version == NFS_V2) { memcpy(p, dirfh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); *p++ = htonl(fnamelen); @@ -365,7 +377,7 @@ static void nfs_read_req(int offset, int readlen) p = &(data[0]); p = rpc_add_credentials(p); - if (supported_nfs_versions & NFSV2_FLAG) { + if (choosen_nfs_version == NFS_V2) { memcpy(p, filefh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); *p++ = htonl(offset); @@ -395,13 +407,13 @@ static void nfs_send(void) switch (nfs_state) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: - if (supported_nfs_versions & NFSV2_FLAG) + if (choosen_nfs_version == NFS_V2) rpc_lookup_req(PROG_MOUNT, 1); else /* NFSV3_FLAG */ rpc_lookup_req(PROG_MOUNT, 3); break; case STATE_PRCLOOKUP_PROG_NFS_REQ: - if (supported_nfs_versions & NFSV2_FLAG) + if (choosen_nfs_version == NFS_V2) rpc_lookup_req(PROG_NFS, 2); else /* NFSV3_FLAG */ rpc_lookup_req(PROG_NFS, 3); @@ -528,31 +540,30 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) switch (ntohl(rpc_pkt.u.reply.astatus)) { case NFS_RPC_SUCCESS: /* Not an error */ break; - case NFS_RPC_PROG_MISMATCH: + case NFS_RPC_PROG_MISMATCH: { /* Remote can't support NFS version */ - switch (ntohl(rpc_pkt.u.reply.data[0])) { - /* Minimal supported NFS version */ - case 3: - debug("*** Warning: NFS version not supported: Requested: V%d, accepted: min V%d - max V%d\n", - (supported_nfs_versions & NFSV2_FLAG) ? - 2 : 3, - ntohl(rpc_pkt.u.reply.data[0]), - ntohl(rpc_pkt.u.reply.data[1])); - debug("Will retry with NFSv3\n"); - /* Clear NFSV2_FLAG from supported versions */ - supported_nfs_versions &= ~NFSV2_FLAG; - return -NFS_RPC_PROG_MISMATCH; - case 4: - default: + const int min = ntohl(rpc_pkt.u.reply.data[0]); + const int max = ntohl(rpc_pkt.u.reply.data[1]); + + if (max < NFS_V2 || max > NFS_V3 || min > NFS_V3) { puts("*** ERROR: NFS version not supported"); debug(": Requested: V%d, accepted: min V%d - max V%d\n", - (supported_nfs_versions & NFSV2_FLAG) ? - 2 : 3, + choosen_nfs_version, ntohl(rpc_pkt.u.reply.data[0]), ntohl(rpc_pkt.u.reply.data[1])); puts("\n"); + choosen_nfs_version = NFS_UNKOWN; + break; } - break; + + debug("*** Warning: NFS version not supported: Requested: V%d, accepted: min V%d - max V%d\n", + choosen_nfs_version, + ntohl(rpc_pkt.u.reply.data[0]), + ntohl(rpc_pkt.u.reply.data[1])); + debug("Will retry with NFSv%d\n", min); + choosen_nfs_version = min; + return -NFS_RPC_PROG_MISMATCH; + } case NFS_RPC_PROG_UNAVAIL: case NFS_RPC_PROC_UNAVAIL: case NFS_RPC_GARBAGE_ARGS: @@ -565,7 +576,7 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) return -1; } - if (supported_nfs_versions & NFSV2_FLAG) { + if (choosen_nfs_version == NFS_V2) { memcpy(filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE); } else { /* NFSV3_FLAG */ filefh3_length = ntohl(rpc_pkt.u.reply.data[1]); @@ -626,7 +637,7 @@ static int nfs_readlink_reply(uchar *pkt, unsigned len) rpc_pkt.u.reply.data[0]) return -1; - if (!(supported_nfs_versions & NFSV2_FLAG)) { /* NFSV3_FLAG */ + if (choosen_nfs_version == NFS_V3) { nfsv3_data_offset = nfs3_get_attributes_offset(rpc_pkt.u.reply.data); } @@ -684,7 +695,7 @@ static int nfs_read_reply(uchar *pkt, unsigned len) if (!(nfs_offset % ((NFS_READ_SIZE / 2) * 10))) putc('#'); - if (supported_nfs_versions & NFSV2_FLAG) { + if (choosen_nfs_version == NFS_V2) { rlen = ntohl(rpc_pkt.u.reply.data[18]); data_ptr = (uchar *)&(rpc_pkt.u.reply.data[19]); } else { /* NFSV3_FLAG */ @@ -787,7 +798,7 @@ static void nfs_handler(uchar *pkt, unsigned dest, struct in_addr sip, nfs_state = STATE_UMOUNT_REQ; nfs_send(); } else if (reply == -NFS_RPC_PROG_MISMATCH && - supported_nfs_versions != 0) { + choosen_nfs_version != NFS_UNKOWN) { /* umount */ nfs_state = STATE_UMOUNT_REQ; nfs_send(); From patchwork Mon Oct 1 09:46:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Gmeiner X-Patchwork-Id: 977087 X-Patchwork-Delegate: joe.hershberger@gmail.com 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=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; 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="Lb6hMQUC"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42NyBL2cp0z9s1x for ; Mon, 1 Oct 2018 19:47:38 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id EBC2FC21F64; Mon, 1 Oct 2018 09:47:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1CD26C21F07; Mon, 1 Oct 2018 09:46:56 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 5DCBEC21DF9; Mon, 1 Oct 2018 09:46:54 +0000 (UTC) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by lists.denx.de (Postfix) with ESMTPS id 0F19DC21BE5 for ; Mon, 1 Oct 2018 09:46:54 +0000 (UTC) Received: by mail-wr1-f68.google.com with SMTP id z4-v6so11760028wrb.1 for ; Mon, 01 Oct 2018 02:46:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=eEb0Efr+OUDSshhyiM9pHJfqnd8w5Bt73x18X8JqZz0=; b=Lb6hMQUCYMZXqcAGm3gMeC8/gPmpK5pHfmqHfLd356MGIFXJr/6qOgMgnsAtLlVUQH AqsDjAKorfRU1gISgT8Ndi4+F7yNPin9+e3cTgMQsRbSMyAH8Ia7ttKC0E3rcxqkVmwY 0XE6TgjpUKxjyyhTbVhsrnGMzivKvENu/2rfrLfI6AJHyew3ZkdddRej8RWOt8Bo5cJZ VAt6wdzTMj1mTqIY7Y8ZX4VP3Gw2Mvrc1Zua/rk8SseBikl6T0anEkIdfkq6vp7oP4K0 Oo+4MvQJ7ONBEJHPLdwGAyupqomBvy65WdOfxBvoXgLncE52NRRyl62stY6RHA8+Y2YP wS/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=eEb0Efr+OUDSshhyiM9pHJfqnd8w5Bt73x18X8JqZz0=; b=OJCXspwF0OJDNByxWY3N2/BULwploy6a1pFGOurJtaMM9Ze+VlYdOswiNo9UfvdW5e JPSKVFRzTW75U+NK95we4qzWnrtk0RmCNwczTIsWfLj9wQaJGGwAn2evDnKZuqYbR0tb it0tyscY9KQlEpQf0Xww/KJ0DxjfE/RgCLX/LCG/yzDB83/9KAH80+iWwxoVHG6EkH9N BMvEJmWmYNQ0gWfmpsQNdVcHXsgmVB+vcniMu7Ep3wQJxwm2c+GppRBjssh46/sFWXuP x/ofUgpBHAe4ZLYFNr5F2hDJRJRdkf9Wluw7Eo3uxl9+7wYVocszbsnd5uul6XlSvGAv eYKw== X-Gm-Message-State: ABuFfogowMEByGRjvAezZSIJiY0Hui1VwLB7UYBK5l82BWaJ/d0AAuG0 LFDbOrlecxtiZbYQV2wzRnjuDQ/y X-Google-Smtp-Source: ACcGV60P143vondmSk+1okLTDMjZimKFBwYUSaFS5b+67wzrDjVa8HhM3BeD0r2xrnmZN9eYlS0PWg== X-Received: by 2002:adf:e48e:: with SMTP id i14-v6mr6503588wrm.145.1538387213386; Mon, 01 Oct 2018 02:46:53 -0700 (PDT) Received: from chgm-pc-linux.bachmann.at ([185.67.228.2]) by smtp.gmail.com with ESMTPSA id t66-v6sm9587945wmt.5.2018.10.01.02.46.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Oct 2018 02:46:51 -0700 (PDT) From: Christian Gmeiner To: u-boot@lists.denx.de Date: Mon, 1 Oct 2018 11:46:44 +0200 Message-Id: <20181001094646.11539-2-christian.gmeiner@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181001094646.11539-1-christian.gmeiner@gmail.com> References: <20181001094646.11539-1-christian.gmeiner@gmail.com> Cc: joe.hershberger@ni.com, Thomas RIENOESSL Subject: [U-Boot] [PATCH 2/4] nfs: factor out generic reply error handling X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Thomas RIENOESSL Signed-off-by: Thomas RIENOESSL --- net/nfs.c | 93 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/net/nfs.c b/net/nfs.c index 81c08de626..d3de9b8c38 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -440,6 +440,54 @@ static void nfs_send(void) Handlers for the reply from server **************************************************************************/ +static int rpc_handle_error(struct rpc_t *rpc_pkt) +{ + if (rpc_pkt->u.reply.rstatus || + rpc_pkt->u.reply.verifier || + rpc_pkt->u.reply.astatus || + rpc_pkt->u.reply.data[0]) { + switch (ntohl(rpc_pkt->u.reply.astatus)) { + case NFS_RPC_SUCCESS: /* Not an error */ + break; + case NFS_RPC_PROG_MISMATCH: { + /* Remote can't support NFS version */ + const int min = ntohl(rpc_pkt->u.reply.data[0]); + const int max = ntohl(rpc_pkt->u.reply.data[1]); + + if (max < NFS_V2 || max > NFS_V3 || min > NFS_V3) { + puts("*** ERROR: NFS version not supported"); + debug(": Requested: V%d, accepted: min V%d - max V%d\n", + choosen_nfs_version, + ntohl(rpc_pkt->u.reply.data[0]), + ntohl(rpc_pkt->u.reply.data[1])); + puts("\n"); + choosen_nfs_version = NFS_UNKOWN; + break; + } + + debug("*** Warning: NFS version not supported: Requested: V%d, accepted: min V%d - max V%d\n", + choosen_nfs_version, + ntohl(rpc_pkt->u.reply.data[0]), + ntohl(rpc_pkt->u.reply.data[1])); + debug("Will retry with NFSv%d\n", min); + choosen_nfs_version = min; + return -NFS_RPC_PROG_MISMATCH; + } + case NFS_RPC_PROG_UNAVAIL: + case NFS_RPC_PROC_UNAVAIL: + case NFS_RPC_GARBAGE_ARGS: + case NFS_RPC_SYSTEM_ERR: + default: /* Unknown error on 'accept state' flag */ + debug("*** ERROR: accept state error (%d)\n", + ntohl(rpc_pkt->u.reply.astatus)); + break; + } + return -1; + } + + return 0; +} + static int rpc_lookup_reply(int prog, uchar *pkt, unsigned len) { struct rpc_t rpc_pkt; @@ -533,48 +581,9 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) else if (ntohl(rpc_pkt.u.reply.id) < rpc_id) return -NFS_RPC_DROP; - if (rpc_pkt.u.reply.rstatus || - rpc_pkt.u.reply.verifier || - rpc_pkt.u.reply.astatus || - rpc_pkt.u.reply.data[0]) { - switch (ntohl(rpc_pkt.u.reply.astatus)) { - case NFS_RPC_SUCCESS: /* Not an error */ - break; - case NFS_RPC_PROG_MISMATCH: { - /* Remote can't support NFS version */ - const int min = ntohl(rpc_pkt.u.reply.data[0]); - const int max = ntohl(rpc_pkt.u.reply.data[1]); - - if (max < NFS_V2 || max > NFS_V3 || min > NFS_V3) { - puts("*** ERROR: NFS version not supported"); - debug(": Requested: V%d, accepted: min V%d - max V%d\n", - choosen_nfs_version, - ntohl(rpc_pkt.u.reply.data[0]), - ntohl(rpc_pkt.u.reply.data[1])); - puts("\n"); - choosen_nfs_version = NFS_UNKOWN; - break; - } - - debug("*** Warning: NFS version not supported: Requested: V%d, accepted: min V%d - max V%d\n", - choosen_nfs_version, - ntohl(rpc_pkt.u.reply.data[0]), - ntohl(rpc_pkt.u.reply.data[1])); - debug("Will retry with NFSv%d\n", min); - choosen_nfs_version = min; - return -NFS_RPC_PROG_MISMATCH; - } - case NFS_RPC_PROG_UNAVAIL: - case NFS_RPC_PROC_UNAVAIL: - case NFS_RPC_GARBAGE_ARGS: - case NFS_RPC_SYSTEM_ERR: - default: /* Unknown error on 'accept state' flag */ - debug("*** ERROR: accept state error (%d)\n", - ntohl(rpc_pkt.u.reply.astatus)); - break; - } - return -1; - } + int ret = rpc_handle_error(&rpc_pkt); + if (ret) + return ret; if (choosen_nfs_version == NFS_V2) { memcpy(filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE); From patchwork Mon Oct 1 09:46:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Gmeiner X-Patchwork-Id: 977088 X-Patchwork-Delegate: joe.hershberger@gmail.com 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=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; 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="Db+ys9uJ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42NyC727c9z9s1x for ; Mon, 1 Oct 2018 19:48:19 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 0AEAAC21DF9; Mon, 1 Oct 2018 09:47:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id DD74EC21F48; Mon, 1 Oct 2018 09:47:05 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 17BC7C21F18; Mon, 1 Oct 2018 09:46:59 +0000 (UTC) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by lists.denx.de (Postfix) with ESMTPS id 70A65C21EB4 for ; Mon, 1 Oct 2018 09:46:55 +0000 (UTC) Received: by mail-wr1-f67.google.com with SMTP id b11-v6so13123504wru.9 for ; Mon, 01 Oct 2018 02:46:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ao3Ea8eOUrrYKlPTio/tBV6Y5PVMWJ65WHNk2TH2g5E=; b=Db+ys9uJZrjyMrXb+/4ccNaJGvwu0bhVN9pSyfORyRfKdXt8rqTmILYfO/gewP+hQj IlVkX1nGOMzxebTAtF2pJ5oqBCHtui9mSX89E2MOGDbtW0xuvZN0Qa/bFfjVW8wxSXVr tyt2f4S/v5oa7gtesFizBVT/U+vW89rN2aXTFDICTJHVnZMGxR73Xgj6Bhd4I1SFFVc2 07nXN/HPJ26YegfdlTHQ3DeEJGL4itmVMco8Kop6FSs1m4PNJQy2O1GZ/eI1gAePCBDL 85XgS8jZY8zimWP/U4OEZWOlb9JF4h6nggJl61WTeTT1xcjtGJeoDY4kcOteeMzwKoKH kSaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ao3Ea8eOUrrYKlPTio/tBV6Y5PVMWJ65WHNk2TH2g5E=; b=pC4QVDGUOnv0+C55d9P34azwpoOTzBCGwlCr4NyB/z7hLLvvOgIyLB94Wg2lLdVNZ6 no0HFI+ZlTZb99pdSmGteNMETRqC5VN/4xJ4ytwT5Ejtx/V8FP95LVYdxlWFHPF0Djuh uBfGVueSDYPsDfV4hXw+nuev2xmf1P44QpQt8I6MEXTFRQuF1hR1H23NsCTsTm7cB+gC wbpgFxjpjIOxJo1Zn4lZF5nvfi+sZaTPL2FOGJO/SRFplCUjeG8HgBS8OFPGwA8xJrn6 OI2fk2bv7oV8NzXVE0xBSIh4XkoUxRpiwM7MeFlKinJLp3YgX9789ImreC4ejR548cvi olnw== X-Gm-Message-State: ABuFfojbPPF8BuzV6L5eFRe0WbYqPd6l4uYPFwtQISFQDl1jyt7ekZuY B8IXhWi759ATxNuQDr5q9On+TfbC X-Google-Smtp-Source: ACcGV61cmOXpRC4m4ERApDPV/yMVu3PO0bvNHrHe/rgG5LGzPhz80RCAJ0X/IzEtv8fHXMpqJQPLKQ== X-Received: by 2002:a5d:4589:: with SMTP id p9-v6mr6620496wrq.122.1538387214777; Mon, 01 Oct 2018 02:46:54 -0700 (PDT) Received: from chgm-pc-linux.bachmann.at ([185.67.228.2]) by smtp.gmail.com with ESMTPSA id t66-v6sm9587945wmt.5.2018.10.01.02.46.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Oct 2018 02:46:53 -0700 (PDT) From: Christian Gmeiner To: u-boot@lists.denx.de Date: Mon, 1 Oct 2018 11:46:45 +0200 Message-Id: <20181001094646.11539-3-christian.gmeiner@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181001094646.11539-1-christian.gmeiner@gmail.com> References: <20181001094646.11539-1-christian.gmeiner@gmail.com> Cc: joe.hershberger@ni.com, Thomas RIENOESSL Subject: [U-Boot] [PATCH 3/4] nfs: handle rpc errors for mount calls X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Thomas RIENOESSL Signed-off-by: Thomas RIENOESSL --- net/nfs.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/net/nfs.c b/net/nfs.c index d3de9b8c38..bd6588fe42 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -531,11 +531,9 @@ static int nfs_mount_reply(uchar *pkt, unsigned len) else if (ntohl(rpc_pkt.u.reply.id) < rpc_id) return -NFS_RPC_DROP; - if (rpc_pkt.u.reply.rstatus || - rpc_pkt.u.reply.verifier || - rpc_pkt.u.reply.astatus || - rpc_pkt.u.reply.data[0]) - return -1; + int ret = rpc_handle_error(&rpc_pkt); + if (ret) + return ret; fs_mounted = 1; /* NFSv2 and NFSv3 use same structure */ @@ -779,6 +777,10 @@ static void nfs_handler(uchar *pkt, unsigned dest, struct in_addr sip, /* just to be sure... */ nfs_state = STATE_UMOUNT_REQ; nfs_send(); + } else if (reply == -NFS_RPC_PROG_MISMATCH && + choosen_nfs_version != NFS_UNKOWN) { + nfs_state = STATE_MOUNT_REQ; + nfs_send(); } else { nfs_state = STATE_LOOKUP_REQ; nfs_send(); From patchwork Mon Oct 1 09:46:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Gmeiner X-Patchwork-Id: 977089 X-Patchwork-Delegate: joe.hershberger@gmail.com 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=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; 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="tp+DQVTw"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 42NyCq4hhJz9s1x for ; Mon, 1 Oct 2018 19:48:55 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 34031C21F53; Mon, 1 Oct 2018 09:47:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id C1C1FC21EE3; Mon, 1 Oct 2018 09:47:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 2D5C5C21F51; Mon, 1 Oct 2018 09:47:01 +0000 (UTC) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by lists.denx.de (Postfix) with ESMTPS id CA50CC21F3D for ; Mon, 1 Oct 2018 09:46:56 +0000 (UTC) Received: by mail-wr1-f67.google.com with SMTP id u12-v6so13122231wrr.4 for ; Mon, 01 Oct 2018 02:46:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ENYPMnlmwSqG+RT4Jx1e/WeTyejwMAbuqd0ulhLHrsI=; b=tp+DQVTwHzzL0vghGpK2tpEqlNcfqxWyw+g3nzWlN2TEL0+1UtP0qhTb72L0qsVrll NZWAq1+0sDKmZSACf/pjwnyEUkVv5tWv9qOrM+qBXlSv59iQXdWcv5Fi3Bc0YeUKuD3F ElwSCS8upr4NpObv7ROYeEgV9AOVNgAFXcNpnnJr//H2DYTGUW0j6YaSRjk6tWld5BQU 223s/v4TJt7rFtUy3GD/NCXvxnU553pOmgFKU9nlAkUw6RUBClanhZj2omX6BpA9mjLL oEGQ5ZUvfujA9xyI9zp7JOvDOopk0uGhG48PpAODTkB4kGdg72Pyqn1EnQvZUfa5Qg/Y 0sUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ENYPMnlmwSqG+RT4Jx1e/WeTyejwMAbuqd0ulhLHrsI=; b=NIwopGD4SbsGzgqFK45yaCIvGY1XLAFGbfrjc9lwh7wAeOhbpAt0cWFYoHWdmMTLf7 IuhJqA+m6k/E0WI6HmsBmRIH+z60uR6Y4CchA2+0oJfszcspqD+C/ZIpp9+FyklYbPkQ DmlpcIPDSk+k/a3OA/7c55hbWCKEXmYSqABIi/I3nDtbmny56JioxkL3qk9rEbXSZDaB I5CqEgtxBAmFzd4ukjAqXp1AplAJ82xpa1xPXyojI+MBvWtVF8fMvIeyTxqkXDiJz1JJ zZUxf3hWtZAZUjNYfKNDD4/0f53bV/WJsNAcw9SmzDr+VhZu6QuwYziuboByXvm1+fxx Uwnw== X-Gm-Message-State: ABuFfogYT1mDP05lmhXkIKxxh0Qt1gXNdOP/YaqDt8TPZ+BtdEMNtPXG LerRo2g3IAj9kM5Cg7AFKS9+fLNb X-Google-Smtp-Source: ACcGV61UYfwx8Wuus9oyNWbSZaKqyJbwxFmH6JNPUJkf8aqNN7qqZG85qWAuCTvCOZS+UfMHrquOJA== X-Received: by 2002:a5d:614c:: with SMTP id y12-v6mr5053694wrt.141.1538387216109; Mon, 01 Oct 2018 02:46:56 -0700 (PDT) Received: from chgm-pc-linux.bachmann.at ([185.67.228.2]) by smtp.gmail.com with ESMTPSA id t66-v6sm9587945wmt.5.2018.10.01.02.46.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Oct 2018 02:46:55 -0700 (PDT) From: Christian Gmeiner To: u-boot@lists.denx.de Date: Mon, 1 Oct 2018 11:46:46 +0200 Message-Id: <20181001094646.11539-4-christian.gmeiner@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181001094646.11539-1-christian.gmeiner@gmail.com> References: <20181001094646.11539-1-christian.gmeiner@gmail.com> Cc: joe.hershberger@ni.com, Thomas RIENOESSL Subject: [U-Boot] [PATCH 4/4] net: add NFSv1 support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Thomas RIENOESSL NFSv1 support added by Christian Gmeiner, Thomas Rienoessl, September 27, 2018. As of now, NFSv3 is the default choice. if the server does not support NFSv3, we fall back to versions 2 or 1. Signed-off-by: Thomas RIENOESSL --- net/nfs.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/net/nfs.c b/net/nfs.c index bd6588fe42..fd1b5e0715 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -26,6 +26,10 @@ * NFSv2 is still used by default. But if server does not support NFSv2, then * NFSv3 is used, if available on NFS server. */ +/* NOTE 5: NFSv1 support added by Christian Gmeiner, Thomas Rienoessl, + * September 27, 2018. As of now, NFSv3 is the default choice. If the server + * does not support NFSv3, we fall back to versions 2 or 1. */ + #include #include #include @@ -76,6 +80,7 @@ static char nfs_path_buff[2048]; enum nfs_version { NFS_UNKOWN = 0, + NFS_V1 = 1, NFS_V2 = 2, NFS_V3 = 3, }; @@ -189,6 +194,7 @@ static void rpc_req(int rpc_prog, int rpc_proc, uint32_t *data, int datalen) switch (rpc_prog) { case PROG_NFS: switch (choosen_nfs_version) { + case NFS_V1: case NFS_V2: rpc_pkt.u.call.vers = htonl(2); break; @@ -202,8 +208,26 @@ static void rpc_req(int rpc_prog, int rpc_proc, uint32_t *data, int datalen) break; } break; - case PROG_PORTMAP: case PROG_MOUNT: + switch (choosen_nfs_version) { + case NFS_V1: + rpc_pkt.u.call.vers = htonl(1); + break; + + case NFS_V2: + rpc_pkt.u.call.vers = htonl(2); + break; + + case NFS_V3: + rpc_pkt.u.call.vers = htonl(3); + break; + + case NFS_UNKOWN: + /* nothing to do */ + break; + } + break; + case PROG_PORTMAP: default: rpc_pkt.u.call.vers = htonl(2); /* portmapper is version 2 */ } @@ -308,7 +332,7 @@ static void nfs_readlink_req(void) p = &(data[0]); p = rpc_add_credentials(p); - if (choosen_nfs_version == NFS_V2) { + if (choosen_nfs_version != NFS_V3) { memcpy(p, filefh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); } else { /* NFSV3_FLAG */ @@ -337,7 +361,7 @@ static void nfs_lookup_req(char *fname) p = &(data[0]); p = rpc_add_credentials(p); - if (choosen_nfs_version == NFS_V2) { + if (choosen_nfs_version != NFS_V3) { memcpy(p, dirfh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); *p++ = htonl(fnamelen); @@ -377,7 +401,7 @@ static void nfs_read_req(int offset, int readlen) p = &(data[0]); p = rpc_add_credentials(p); - if (choosen_nfs_version == NFS_V2) { + if (choosen_nfs_version != NFS_V3) { memcpy(p, filefh, NFS_FHSIZE); p += (NFS_FHSIZE / 4); *p++ = htonl(offset); @@ -407,13 +431,13 @@ static void nfs_send(void) switch (nfs_state) { case STATE_PRCLOOKUP_PROG_MOUNT_REQ: - if (choosen_nfs_version == NFS_V2) + if (choosen_nfs_version != NFS_V3) rpc_lookup_req(PROG_MOUNT, 1); else /* NFSV3_FLAG */ rpc_lookup_req(PROG_MOUNT, 3); break; case STATE_PRCLOOKUP_PROG_NFS_REQ: - if (choosen_nfs_version == NFS_V2) + if (choosen_nfs_version != NFS_V3) rpc_lookup_req(PROG_NFS, 2); else /* NFSV3_FLAG */ rpc_lookup_req(PROG_NFS, 3); @@ -454,7 +478,7 @@ static int rpc_handle_error(struct rpc_t *rpc_pkt) const int min = ntohl(rpc_pkt->u.reply.data[0]); const int max = ntohl(rpc_pkt->u.reply.data[1]); - if (max < NFS_V2 || max > NFS_V3 || min > NFS_V3) { + if (max < NFS_V1 || max > NFS_V3 || min > NFS_V3) { puts("*** ERROR: NFS version not supported"); debug(": Requested: V%d, accepted: min V%d - max V%d\n", choosen_nfs_version, @@ -583,7 +607,7 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) if (ret) return ret; - if (choosen_nfs_version == NFS_V2) { + if (choosen_nfs_version != NFS_V3) { memcpy(filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE); } else { /* NFSV3_FLAG */ filefh3_length = ntohl(rpc_pkt.u.reply.data[1]); @@ -702,7 +726,7 @@ static int nfs_read_reply(uchar *pkt, unsigned len) if (!(nfs_offset % ((NFS_READ_SIZE / 2) * 10))) putc('#'); - if (choosen_nfs_version == NFS_V2) { + if (choosen_nfs_version != NFS_V3) { rlen = ntohl(rpc_pkt.u.reply.data[18]); data_ptr = (uchar *)&(rpc_pkt.u.reply.data[19]); } else { /* NFSV3_FLAG */