From patchwork Mon May 2 10:05:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikunj A Dadhania X-Patchwork-Id: 617462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3qz12q3q0rz9sdm for ; Mon, 2 May 2016 20:37:23 +1000 (AEST) Received: from ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3qz12q2lcjzDqDW for ; Mon, 2 May 2016 20:37:23 +1000 (AEST) X-Original-To: slof@lists.ozlabs.org Delivered-To: slof@lists.ozlabs.org Received: from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145]) (using TLSv1.2 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3qz12m2vVZzDqCj for ; Mon, 2 May 2016 20:37:20 +1000 (AEST) Received: from localhost by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 2 May 2016 20:06:56 +1000 Received: from d23dlp03.au.ibm.com (202.81.31.214) by e23smtp03.au.ibm.com (202.81.31.209) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 2 May 2016 20:06:55 +1000 X-IBM-Helo: d23dlp03.au.ibm.com X-IBM-MailFrom: nikunj@linux.vnet.ibm.com X-IBM-RcptTo: slof@lists.ozlabs.org Received: from d23relay07.au.ibm.com (d23relay07.au.ibm.com [9.190.26.37]) by d23dlp03.au.ibm.com (Postfix) with ESMTP id 7889D3578052 for ; Mon, 2 May 2016 20:06:54 +1000 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay07.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u42A6klS000510 for ; Mon, 2 May 2016 20:06:54 +1000 Received: from d23av03.au.ibm.com (localhost [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u42A6Mn0000430 for ; Mon, 2 May 2016 20:06:22 +1000 Received: from abhimanyu.in.ibm.com (abhimanyu.in.ibm.com [9.124.35.92]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id u42A6Jd4032535; Mon, 2 May 2016 20:06:21 +1000 From: Nikunj A Dadhania To: slof@lists.ozlabs.org Date: Mon, 2 May 2016 15:35:48 +0530 Message-Id: <1462183549-5408-2-git-send-email-nikunj@linux.vnet.ibm.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1462183549-5408-1-git-send-email-nikunj@linux.vnet.ibm.com> References: <1462183549-5408-1-git-send-email-nikunj@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16050210-0009-0000-0000-00000707E1DD Subject: [SLOF] [PATCH v2 2/3] ping: add netmask in the ping argument X-BeenThere: slof@lists.ozlabs.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Patches for https://github.com/aik/SLOF" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: slof-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "SLOF" The current ping command does not take netmask as argument, updated the ping command to take "client-ip/nn" format ip address. Signed-off-by: Nikunj A Dadhania --- clients/net-snk/app/netapps/args.c | 44 ++++++++++++++++++++++++++++++++++---- clients/net-snk/app/netapps/args.h | 1 + clients/net-snk/app/netapps/ping.c | 16 ++++++++++++-- slof/fs/loaders.fs | 4 ++-- 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/clients/net-snk/app/netapps/args.c b/clients/net-snk/app/netapps/args.c index 52215e6..ed25c7c 100644 --- a/clients/net-snk/app/netapps/args.c +++ b/clients/net-snk/app/netapps/args.c @@ -98,20 +98,22 @@ argncpy(const char *arg_str, unsigned int index, char *buffer, } /** - * Converts "255.255.255.255" -> char[4] = { 0xff, 0xff, 0xff, 0xff } + * Converts "255.255.255.255/nn" -> char[4] = { 0xff, 0xff, 0xff, 0xff } + * *netmask = subnet_netmask(nn) * * @param str string to be converted * @param ip in case of SUCCESS - 32-bit long IP - in case of FAULT - zero + * in case of FAULT - zero + * @param netmask return netmask if there is a valid /nn encoding in IP * @return TRUE - IP converted successfully; * FALSE - error condition occurs (e.g. bad format) */ int -strtoip(const char *str, char ip[4]) +strtoip_netmask(const char *str, char ip[4], unsigned int *netmask) { char octet[10]; int res; - unsigned int i = 0, len; + unsigned int i = 0, len, has_nn = 0; while (*str != 0) { if (i > 3 || !isdigit(*str)) @@ -123,6 +125,14 @@ strtoip(const char *str, char ip[4]) strncpy(octet, str, len); octet[len] = 0; str += len; + } else if (strstr(str, "\\") != NULL) { + len = (short) (strstr(str, "\\") - str); + if (len >= 10) + return 0; + strncpy(octet, str, len); + octet[len] = 0; + str += len; + has_nn = 1; } else { strncpy(octet, str, 9); octet[9] = 0; @@ -135,9 +145,35 @@ strtoip(const char *str, char ip[4]) i++; if (*str == '.') str++; + if(has_nn) { + str++; + strncpy(octet, str, 9); + octet[9] = 0; + res = strtol(octet, NULL, 10); + str += strlen(octet); + if (res > 31 || res < 1) + return 0; + if (netmask) + *netmask = (0xFFFFFFFFUL << (32 - res)) & 0xFFFFFFFFUL; + } } if (i != 4) return 0; return -1; } + +/** + * Converts "255.255.255.255" -> char[4] = { 0xff, 0xff, 0xff, 0xff } + * + * @param str string to be converted + * @param ip in case of SUCCESS - 32-bit long IP + in case of FAULT - zero + * @return TRUE - IP converted successfully; + * FALSE - error condition occurs (e.g. bad format) + */ +int +strtoip(const char *str, char ip[4]) +{ + return strtoip_netmask(str, ip, NULL); +} diff --git a/clients/net-snk/app/netapps/args.h b/clients/net-snk/app/netapps/args.h index b80982a..1ede9a8 100644 --- a/clients/net-snk/app/netapps/args.h +++ b/clients/net-snk/app/netapps/args.h @@ -18,5 +18,6 @@ unsigned int get_args_count(const char *); unsigned int get_arg_length(const char *); char *argncpy(const char *, unsigned int, char *, unsigned int); int strtoip(const char *, char[4]); +int strtoip_netmask(const char *, char[4], unsigned int *netmask); #endif /* _ARGS_H */ diff --git a/clients/net-snk/app/netapps/ping.c b/clients/net-snk/app/netapps/ping.c index 4facf06..3e4d440 100644 --- a/clients/net-snk/app/netapps/ping.c +++ b/clients/net-snk/app/netapps/ping.c @@ -35,13 +35,15 @@ struct ping_args { unsigned int integer; } gateway_ip; unsigned int timeout; + /* Netmask 192.168.1.10/24 format */ + unsigned int netmask; }; static void usage(void) { printf - ("\nping device-path:[device-args,]server-ip,[client-ip],[gateway-ip][,timeout]\n"); + ("\nping device-path:[device-args,]server-ip,[client-ip[\\nn]],[gateway-ip][,timeout]\n"); } @@ -82,7 +84,7 @@ parse_args(const char *args, struct ping_args *ping_args) } argncpy(args, 0, buf, 64); - if (!strtoip(buf, ping_args->client_ip.string)) { + if (!strtoip_netmask(buf, ping_args->client_ip.string, &ping_args->netmask)) { /* this should have been the client (our) IP address */ return -1; } else { @@ -112,6 +114,7 @@ ping(int argc, char *argv[]) int fd_device; struct ping_args ping_args; uint8_t own_mac[6]; + uint32_t netmask; memset(&ping_args, 0, sizeof(struct ping_args)); @@ -163,6 +166,9 @@ ping(int argc, char *argv[]) } else { memcpy(&fn_ip.own_ip, &ping_args.client_ip.integer, 4); + if (ping_args.netmask) + set_ipv4_netmask(ping_args.netmask); + arp_failed = 1; printf(" Own IP address: "); } @@ -174,6 +180,12 @@ ping(int argc, char *argv[]) ((fn_ip.own_ip >> 24) & 0xFF), ((fn_ip.own_ip >> 16) & 0xFF), ((fn_ip.own_ip >> 8) & 0xFF), (fn_ip.own_ip & 0xFF)); + if ((netmask = get_ipv4_netmask())) { + printf(" Netmask : "); + printf("%d.%d.%d.%d\n", ((netmask >> 24) & 0xFF), ((netmask >> 16) & 0xFF), + ((netmask >> 8) & 0xFF), (netmask & 0xFF)); + } + memcpy(&fn_ip.server_ip, &ping_args.server_ip.integer, 4); printf(" Ping to %d.%d.%d.%d ", ((fn_ip.server_ip >> 24) & 0xFF), ((fn_ip.server_ip >> 16) & 0xFF), diff --git a/slof/fs/loaders.fs b/slof/fs/loaders.fs index 1478c70..8ae502d 100644 --- a/slof/fs/loaders.fs +++ b/slof/fs/loaders.fs @@ -70,7 +70,7 @@ CREATE load-list 2 cells allot load-list 2 cells erase THEN ; -: ping ( "{device-path:[device-args,]server-ip,[client-ip],[gateway-ip][,timeout]}" -- ) +: ping ( "{device-path:[device-args,]server-ip,[client-ip[\nn]],[gateway-ip][,timeout]}" -- ) my-self >r current-node @ >r \ Save my-self (parse-line) open-dev dup IF dup to my-self dup ihandle>phandle set-node @@ -83,7 +83,7 @@ CREATE load-list 2 cells allot load-list 2 cells erase swap close-dev ELSE cr - ." Usage: ping device-path:[device-args,]server-ip,[client-ip],[gateway-ip][,timeout]" + ." Usage: ping device-path:[device-args,]server-ip,[client-ip[\nn]],[gateway-ip][,timeout]" cr drop THEN r> set-node r> to my-self \ Restore my-self